{"version":3,"file":"main.79caed11.js","mappings":"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AAS,KAAM,aAAc,aAAa3J,QAAQ9G,EAAKyQ,OAAO,GAEzE,CAEQ,aAAAypD,CAAcl6D,GACpB,MAAM9L,EAAI8L,EAAKqL,MAAM,GACrB,OAAI,MAAOnX,GAAmCA,EAAEgB,OAAS,EAChDhB,EAAEgQ,UAAU,EAAG,GAAG6C,cAAgB7S,EAAEgQ,UAAU,GAE9ChQ,CAEX,CAEQ,UAAAymE,CAAWv/D,GACjB,MACE,CAAC,KAAM,UAAW,gBAAiB,gBAAiB,eAAgB,gBAAgB0L,QAClF1L,EAAQmiB,QAAQxW,cAAgB,KAAO3L,EAAQrG,MAAQ,MACpD,CAET,CAEQ,eAAAwlE,CAAgBn/D,GACtB,OAAIvD,KAAK8iE,WAAWv/D,GAAiBA,EAAQw/D,WAAax/D,EAAQ6E,MAC3D7E,EAAQtI,IAAMsI,EAAQ4E,MAAQ5E,EAAQmiB,OAC/C,CAEA,cAAck7C,GACZ,MAAMC,EAAa9H,GAA8C,IAAI+I,GAAa/I,GAElF,OADA8H,EAAUC,QAAU,CAAC,cACdD,CACT,EC5EK,MASMmC,GAAY,CACvB,UACA,SACA,iBACA,UACA,WACA,aACA,WACA,cACA,WACA,uBACA,iCACA,UACA,UACA,OACA,SACA,QACA,WACA,UACA,OACA,SACA,WACA,YACA,QACA,mBACA,WACA,gBACA,WACA,YACA,cACA,WACA,UACA,WACA,SACA,gBACA,aACA,aACA,WACA,eACA,iBACA,2BACA,OACA,WACA,SACA,QACA,eACA,cACA,eACA,iBACA,eACA,YACA,QACA,OACA,UACA,iBACA,WACA,aACA,gBACA,YACA,UACA,UACA,mBACA,WACA,gBACA,eACA,cACA,UACA,uBACA,SACA,eACA,iBACA,wBACA,sBACA,WACA,YACA,SACA,WACA,UACA,oBACA,UACA,WACA,aACA,UACA,UACA,YACA,UACA,SACA,UACA,aACA,SACA,SACA,YACA,eACA,UACA,kBACA,SACA,aACA,UACA,WACA,WACA,UACA,YACA,OACA,UACA,WACA,UACA,oBACA,SACA,aACA,WACA,YACA,aACA,mBACA,gBACA,gBACA,YACA,UACA,yBACA,iBACA,eAC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","sources":["webpack://rsf-app/./app2/src/selectors/activatedPriceList.selectors.ts","webpack://rsf-app/./app2/src/selectors/room.selectors.ts","webpack://rsf-app/./lib/kendoui/js/kendo.userevents.min.js","webpack://rsf-app/./app2/src/selectors/estimateTemplate.selectors.ts","webpack://rsf-app/./app2/src/reducers/image.reducer.ts","webpack://rsf-app/./app2/src/reducers/deck.actions.ts","webpack://rsf-app/./lib/kendoui/js/kendo.mobile.actionsheet.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.core.min.js","webpack://rsf-app/./app2/src/isSlideEnabled.ts","webpack://rsf-app/./app2/src/helpers/File.ts","webpack://rsf-app/./app2/GlobalConfig.ts","webpack://rsf-app/./lib/angulartics/RsfAnalytics.ts","webpack://rsf-app/./app2/src/reducers/auth.reducer.ts","webpack://rsf-app/./app2/src/reducers/integrations/hover.reducer.ts","webpack://rsf-app/./app2/src/reducers/integrations/quickMeasure.reducer.ts","webpack://rsf-app/./app2/src/reducers/integrations/eagleview.reducer.ts","webpack://rsf-app/./app2/src/reducers/integrations/paysimple.reducer.ts","webpack://rsf-app/./app2/src/records/CardConnectAuthorization.ts","webpack://rsf-app/./app2/src/reducers/integrations/cardconnect.reducer.ts","webpack://rsf-app/./app2/src/reducers/integrations/roofscope.reducer.ts","webpack://rsf-app/./app2/src/reducers/integrations.reducer.ts","webpack://rsf-app/./app2/src/reducers/analytics.reducer.ts","webpack://rsf-app/./app2/src/reducers/leads.reducer.ts","webpack://rsf-app/./app2/src/helpers/Color.ts","webpack://rsf-app/./app2/src/records/JobBasic.ts","webpack://rsf-app/./app2/src/reducers/auth.selectors.ts","webpack://rsf-app/./app2/src/components/Common/CustomLink.tsx","webpack://rsf-app/./app2/src/records/EventMetadata.ts","webpack://rsf-app/./app2/src/records/Event.ts","webpack://rsf-app/./app2/src/reducers/event.reducer.ts","webpack://rsf-app/./app2/src/records/DiscountRecord.ts","webpack://rsf-app/./app2/src/reducers/discount.reducer.ts","webpack://rsf-app/./app2/src/reducers/org/paymentTermTemplate.reducer.ts","webpack://rsf-app/./app2/src/reducers/org/tool.reducer.ts","webpack://rsf-app/./app2/src/reducers/payment.reducer.ts","webpack://rsf-app/./app2/src/records/Task.ts","webpack://rsf-app/./app2/src/reducers/task.reducer.ts","webpack://rsf-app/./app2/src/records/JobAttribute.ts","webpack://rsf-app/./app2/src/selectors/jobAttribute.selectors.ts","webpack://rsf-app/./app2/src/reducers/jobAttribute.reducer.ts","webpack://rsf-app/./app2/src/reducers/presentation.reducer.ts","webpack://rsf-app/./app2/src/selectors/report.selectors.ts","webpack://rsf-app/./app2/src/reducers/report.reducer.ts","webpack://rsf-app/./app2/src/records/FlashAlert.ts","webpack://rsf-app/./app2/src/records/SendInvite.ts","webpack://rsf-app/./app2/src/reducers/components/common.reducer.ts","webpack://rsf-app/./app2/src/reducers/components/integrationsView.reducer.ts","webpack://rsf-app/./app2/src/reducers/components/estimator.reducer.ts","webpack://rsf-app/./app2/src/reducers/components/index.ts","webpack://rsf-app/./app2/src/reducers/presentationTemplate.reducer.ts","webpack://rsf-app/./app2/src/records/ScreenShare.ts","webpack://rsf-app/./app2/src/reducers/screenShare.reducer.ts","webpack://rsf-app/./app2/src/reducers/estimateComparison.reducer.ts","webpack://rsf-app/./app2/src/records/FeneTechManufacturer.ts","webpack://rsf-app/./app2/src/records/Token.ts","webpack://rsf-app/./app2/src/reducers/token.reducer.ts","webpack://rsf-app/./app2/src/records/Validation.ts","webpack://rsf-app/./app2/src/reducers/validation.reducer.ts","webpack://rsf-app/./app2/src/records/PriceList.ts","webpack://rsf-app/./app2/src/reducers/product.reducer.ts","webpack://rsf-app/./app2/src/records/ProductOptionGroup.ts","webpack://rsf-app/./app2/src/records/ProductOption.ts","webpack://rsf-app/./app2/src/reducers/productOption.reducer.ts","webpack://rsf-app/./app2/src/reducers/productOptionGroup.reducer.ts","webpack://rsf-app/./app2/src/reducers/priceList.reducer.ts","webpack://rsf-app/./app2/src/records/ActivatedPriceList.ts","webpack://rsf-app/./app2/src/reducers/activatedPriceList.reducer.ts","webpack://rsf-app/./app2/src/records/RoofFace.ts","webpack://rsf-app/./app2/src/reducers/roofFace.reducer.ts","webpack://rsf-app/./app2/src/records/WallFacade.ts","webpack://rsf-app/./app2/src/reducers/wallFacade.reducer.ts","webpack://rsf-app/./app2/src/records/Opening.ts","webpack://rsf-app/./app2/src/records/Window.ts","webpack://rsf-app/./app2/src/reducers/window.reducer.ts","webpack://rsf-app/./app2/src/records/Door.ts","webpack://rsf-app/./app2/src/reducers/door.reducer.ts","webpack://rsf-app/./app2/src/records/Room.ts","webpack://rsf-app/./app2/src/reducers/room.reducer.ts","webpack://rsf-app/./app2/src/records/Elevation.ts","webpack://rsf-app/./app2/src/reducers/elevation.reducer.ts","webpack://rsf-app/./app2/src/records/Deck.ts","webpack://rsf-app/./app2/src/reducers/deck.reducer.ts","webpack://rsf-app/./app2/src/records/Pool.ts","webpack://rsf-app/./app2/src/reducers/pool.reducer.ts","webpack://rsf-app/./app2/src/reducers/measurement.reducer.ts","webpack://rsf-app/./app2/src/records/Location.ts","webpack://rsf-app/./app2/src/reducers/router.reducer.ts","webpack://rsf-app/./app2/src/records/Folder.ts","webpack://rsf-app/./app2/src/reducers/folder.reducer.ts","webpack://rsf-app/./app2/src/reducers/measurements/segment.reducer.ts","webpack://rsf-app/./app2/src/reducers/measurements/fence.reducer.ts","webpack://rsf-app/./app2/src/reducers/measurements/fencing.reducer.ts","webpack://rsf-app/./app2/src/records/LineItemOrder.ts","webpack://rsf-app/./app2/src/records/CustomProduct.ts","webpack://rsf-app/./app2/src/records/EstimateTemplateGroup.ts","webpack://rsf-app/./app2/src/records/EstimateTemplate.ts","webpack://rsf-app/./app2/src/reducers/estimateTemplate.reducer.ts","webpack://rsf-app/./app2/src/records/Note.ts","webpack://rsf-app/./app2/src/selectors/note.selectors.ts","webpack://rsf-app/./app2/src/reducers/note.reducer.ts","webpack://rsf-app/./app2/src/records/integrations/CrmUser.ts","webpack://rsf-app/./app2/src/reducers/crmUser.reducer.ts","webpack://rsf-app/./app2/src/records/EventResult.ts","webpack://rsf-app/./app2/src/reducers/eventResult.reducer.ts","webpack://rsf-app/./app2/src/records/EventResultReason.ts","webpack://rsf-app/./app2/src/reducers/eventResultReason.reducer.ts","webpack://rsf-app/./app2/src/records/FinanceApplication.ts","webpack://rsf-app/./app2/src/reducers/financeApplication.reducer.ts","webpack://rsf-app/./app2/src/records/Sku.ts","webpack://rsf-app/./app2/src/reducers/sku.reducer.ts","webpack://rsf-app/./app2/src/records/PaymentRequest.ts","webpack://rsf-app/./app2/src/selectors/payment.selectors.ts","webpack://rsf-app/./app2/src/reducers/paymentRequest.reducer.ts","webpack://rsf-app/./app2/src/reducers/signedDocument.reducer.ts","webpack://rsf-app/./app2/src/records/Webhook.ts","webpack://rsf-app/./app2/src/records/WebhookEvent.ts","webpack://rsf-app/./app2/src/reducers/webhook.reducer.ts","webpack://rsf-app/./app2/src/reducers/rsfForm.reducer.ts","webpack://rsf-app/./app2/src/reducers/customForm.reducer.ts","webpack://rsf-app/./app2/src/reducers/pricePresentation.reducer.ts","webpack://rsf-app/./app2/src/records/OneLookLocation.ts","webpack://rsf-app/./app2/src/reducers/oneLook.reducer.ts","webpack://rsf-app/./app2/src/reducers/appMessage.reducer.ts","webpack://rsf-app/./app2/src/reducers/index.ts","webpack://rsf-app/./app2/src/store.ts","webpack://rsf-app/./app2/src/reducers/utilities/combine.reducers.ts","webpack://rsf-app/./app2/src/Ioc.ts","webpack://rsf-app/./app2/src/helpers/Subscribe.ts","webpack://rsf-app/./app2/src/helpers/Acl.ts","webpack://rsf-app/./app/src/Header/HeaderCtrl.ts","webpack://rsf-app/./app/src/Common/SessionService.ts","webpack://rsf-app/./app2/src/services/LiveChat.service.ts","webpack://rsf-app/./app/src/Common/PermissionsDirective.ts","webpack://rsf-app/./app/src/Common/ConfirmationDialogDirective.ts","webpack://rsf-app/./app/src/Common/DecimalPlacesDirective.ts","webpack://rsf-app/./app/src/Common/JobAnalyticsDirective.ts","webpack://rsf-app/./app/src/Common/StatesConstant.ts","webpack://rsf-app/./app/src/Jobs/JobShowCtrl.ts","webpack://rsf-app/./app/src/Models/UserPreference.ts","webpack://rsf-app/./app/src/Common/FlashService.ts","webpack://rsf-app/./app2/src/services/color.service.ts","webpack://rsf-app/./app/src/Jobs/JobListCtrl.ts","webpack://rsf-app/./app2/src/api/statistics.service.ts","webpack://rsf-app/./app2/src/services/embedded.service.ts","webpack://rsf-app/./app/src/Jobs/JobFetcherService.ts","webpack://rsf-app/./app/src/Jobs/tabs/BaseTabCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/ToolTabCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/EstimateTabCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/BaseEstimateTabCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/EstimatesTabCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/MeasurementTabCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/HistoryTabCtrl.ts","webpack://rsf-app/./app2/src/helpers/InputValidator.ts","webpack://rsf-app/./app2/src/selectors/auth.selectors.ts","webpack://rsf-app/./app/src/Jobs/tabs/InfoTabCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/InspectionTabCtrl.ts","webpack://rsf-app/./app/src/Models/SignatureSettings.ts","webpack://rsf-app/./app/src/Models/OrgPreference.ts","webpack://rsf-app/./app2/src/helpers/Time.ts","webpack://rsf-app/./app/src/Models/Org.ts","webpack://rsf-app/./app/src/Visualization/Chameleon/ChameleonService.ts","webpack://rsf-app/./app/src/Visualization/Chameleon/ChameleonV2Service.ts","webpack://rsf-app/./app/src/Jobs/tabs/DesignToolTabCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/AreaCalculatorCtrl.ts","webpack://rsf-app/./app/src/Models/Opening.ts","webpack://rsf-app/./app/src/Models/Room.ts","webpack://rsf-app/./app/src/Jobs/tabs/MeasurementEditorCtrl.ts","webpack://rsf-app/./app/src/Jobs/MeasurementEditorComponent.ts","webpack://rsf-app/./app/src/Jobs/uploader/UploaderCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/ImportMeasurementsCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/VisualizationModalCtrl.ts","webpack://rsf-app/./app/src/Jobs/tabs/EmailModal.ts","webpack://rsf-app/./app/src/Jobs/Components/PinDropComponent.ts","webpack://rsf-app/./app/src/Jobs/ScreenShareService.ts","webpack://rsf-app/./app/src/Models/EstimateLineItemOption.ts","webpack://rsf-app/./app/src/Commands/Estimator/AddEstimateLineItemOptionCmd.ts","webpack://rsf-app/./app2/src/selectors/productOptionGroup.selectors.ts","webpack://rsf-app/./app2/src/selectors/productOption.selectors.ts","webpack://rsf-app/./app/src/ProductOptionSelector/ProductOptionSelectorComponent.ts","webpack://rsf-app/./app/src/Jobs/Components/ImageUploadComponent.ts","webpack://rsf-app/./app/src/RsfMap/RapidAreaComponent.ts","webpack://rsf-app/./app/src/RsfMap/SatelliteMeasureComponent.ts","webpack://rsf-app/./app/src/Models/Deck.ts","webpack://rsf-app/./app/src/RsfMap/DeckWizardComponent.ts","webpack://rsf-app/./app/src/Models/Pool.ts","webpack://rsf-app/./app/src/RsfMap/PoolToolComponent.ts","webpack://rsf-app/./app2/src/components/ErrorBoundary/UnhandledException.tsx","webpack://rsf-app/./app2/src/components/ErrorBoundary/index.tsx","webpack://rsf-app/./app2/src/connect.tsx","webpack://rsf-app/./app2/src/components/SpinnerComponent.tsx","webpack://rsf-app/./app2/src/components/Common/ConfirmDialog.tsx","webpack://rsf-app/./app2/src/components/Discount/components/EstimateDisplay.tsx","webpack://rsf-app/./app2/src/components/Common/DecimalInputComponent.tsx","webpack://rsf-app/./app2/src/components/Discount/components/EstimateEditor.tsx","webpack://rsf-app/./app2/src/components/Discount/components/PresentAltDisplay.tsx","webpack://rsf-app/./app2/src/components/Discount/Chooser.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/DiscountChooserWrapper.tsx","webpack://rsf-app/./app2/src/components/PricePresentation/components/EstimatePresentationView.tsx","webpack://rsf-app/./app/src/Common/ToolInfoService.ts","webpack://rsf-app/./app2/src/components/PricePresentation/PresentationContainer.tsx","webpack://rsf-app/./app2/src/components/Pdf/PdfDisplay.tsx","webpack://rsf-app/./app2/src/components/PdfPage/PdfPageContainer.tsx","webpack://rsf-app/./app2/src/components/Common/CanComponent.tsx","webpack://rsf-app/./app2/src/components/RsfForms/RsfQueryableDropdown.tsx","webpack://rsf-app/./app2/src/components/JobList/JobQueryForm.tsx","webpack://rsf-app/./app2/src/components/JobList/FilterButton.tsx","webpack://rsf-app/./app2/src/components/JobList/Sidebar/Statistics.tsx","webpack://rsf-app/./app2/src/components/Common/DateTime.tsx","webpack://rsf-app/./app2/src/components/JobList/Sidebar/Appointments.tsx","webpack://rsf-app/./app2/src/components/JobList/Sidebar/SystemNotes.tsx","webpack://rsf-app/./app2/src/components/JobList/Sidebar/index.tsx","webpack://rsf-app/./app2/src/components/Document/DownloadDocumentButton.tsx","webpack://rsf-app/./app2/src/hooks/usePreviousPath/index.tsx","webpack://rsf-app/./app2/src/hooks/useFullScreenToggle/useFullScreenToggle.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/IngagePricePresentation/PricePresentationModal.selectors.ts","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/IngagePricePresentation/PricePresentationModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/OneLook/FinanceApplicationButton.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/IngagePricePresentation/PricePresentationButton.tsx","webpack://rsf-app/./app2/src/components/Common/PaginationControl.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/ReportList.tsx","webpack://rsf-app/./app/src/Models/EstimateLineItem.ts","webpack://rsf-app/./app/src/Models/Discount.ts","webpack://rsf-app/./app/src/Models/EstimateGroup.ts","webpack://rsf-app/./app2/src/selectors/validation.selectors.ts","webpack://rsf-app/./app/src/Estimator/ValidationService.ts","webpack://rsf-app/./app/src/Models/Estimate.ts","webpack://rsf-app/./app2/src/components/JobTabs/InspectionTab/RadioCircle/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InspectionTab/CheckCircle/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InspectionTab/RadioVertical/index.tsx","webpack://rsf-app/./app/src/Commands/Estimator/AddEstimateLineItemCmd.ts","webpack://rsf-app/./app2/src/components/JobTabs/InspectionTab/Inspection.service.ts","webpack://rsf-app/./app2/src/components/Common/ImagePickerModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InspectionTab/InspectionItem/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InspectionTab/InspectionGroup/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InspectionTab/InspectionSelectorModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InspectionTab/Inspection.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InspectionTab/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/SlideComponent.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/PresentationBuilder.service.ts","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationTemplate/presentationTemplateSelector.ts","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationTemplate/NoTemplatesComponent.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationTemplate/ListPicker.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationTemplate/ManagementItem.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationTemplate/Management.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/InspectionSlide.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/InspectionSlides.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/DynamicPresentationComponent.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/InspectionComponent.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/PresentationComponent.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/PresentationOverview.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/presentationSelector.ts","webpack://rsf-app/./app2/src/components/Common/ReactRouterDirtyWatcher.tsx","webpack://rsf-app/./app2/src/components/Common/DirtyWatcher.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/PresentationBuilderContainer.tsx","webpack://rsf-app/./app2/src/components/FinanceTab/index.tsx","webpack://rsf-app/./app2/src/services/string.service.ts","webpack://rsf-app/./app2/src/components/JobMetadata/UniqueFormInput.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/FormInput.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/Salesforce/Lead.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/Salesforce/Opportunity.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/Salesforce/Custom.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/Salesforce/index.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/Improveit360/Classic.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/Improveit360/Lightning.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/Improveit360/index.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/TokenCheck.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/Marketsharp.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/LeadPerfection.tsx","webpack://rsf-app/./app2/src/components/JobMetadata/index.tsx","webpack://rsf-app/./app2/src/components/JobResultingSection/Header.tsx","webpack://rsf-app/./app2/src/components/JobResultingSection/Content/ReadOnlyForm.tsx","webpack://rsf-app/./app2/src/components/JobResultingSection/Content/index.tsx","webpack://rsf-app/./app2/src/components/JobResultingSection/index.tsx","webpack://rsf-app/./app/src/Estimator/ProductColorDropdown.ts","webpack://rsf-app/./app2/src/helpers/BrowserDetection.ts","webpack://rsf-app/./app/src/Calendar/CalendarCtrl.ts","webpack://rsf-app/./app/src/Calendar/AppointmentCreator.ts","webpack://rsf-app/./app/src/Calendar/EventService.ts","webpack://rsf-app/./app/src/Models/Task.ts","webpack://rsf-app/./app/src/Calendar/InviteModal.ts","webpack://rsf-app/./app/src/Calendar/ResultModal.ts","webpack://rsf-app/./app/src/Calendar/CalendarProviderUnit.ts","webpack://rsf-app/./app2/src/components/Common/EventsCalendar/Context.tsx","webpack://rsf-app/./app2/src/helpers/FinalFormValidator.ts","webpack://rsf-app/./app2/src/components/Common/ButtonFooter.tsx","webpack://rsf-app/./app2/src/components/Common/EventsCalendar/EditAppointmentModal.tsx","webpack://rsf-app/./app2/src/components/Common/EventsCalendar/index.tsx","webpack://rsf-app/./app2/src/components/Common/EventsCalendar/UserFilter.tsx","webpack://rsf-app/./app2/src/components/SchedulerTab/JobsToAssignDropdown.tsx","webpack://rsf-app/./app2/src/components/SchedulerTab/index.tsx","webpack://rsf-app/./app/src/Estimator/EstimatorService.ts","webpack://rsf-app/./app/src/Commands/Estimator/EditLineItemCmd.ts","webpack://rsf-app/./app/src/Commands/Estimator/AddProviaOrderCmd.ts","webpack://rsf-app/./app/src/Commands/Estimator/AddFeneTechOrderCmd.ts","webpack://rsf-app/./app/src/Commands/Estimator/AddProductFromXmlCmd.ts","webpack://rsf-app/./app/src/Commands/Estimator/AddEstimateFromOccImportCmd.ts","webpack://rsf-app/./app/src/Commands/Estimator/EditSalesTaxCmd.ts","webpack://rsf-app/./app/src/Commands/Estimator/AddProductFromXlsxCmd.ts","webpack://rsf-app/./app/src/Estimator/EstimateEditorComponent.ts","webpack://rsf-app/./app/src/Estimator/ProviaApi.ts","webpack://rsf-app/./app/src/Estimator/ProductSelectorCtrl.ts","webpack://rsf-app/./app/src/Estimator/LoanCalculator.ts","webpack://rsf-app/./app/src/Estimator/Discounts/DiscountEditor.ts","webpack://rsf-app/./app/src/Estimator/Discounts/GroupDiscountEditor.ts","webpack://rsf-app/./app/src/Common/SortableOptions.ts","webpack://rsf-app/./app/src/Estimator/TemplateEditorCtrl.ts","webpack://rsf-app/./app/src/Estimator/EstimateLineItemComponent.ts","webpack://rsf-app/./app/src/Commands/Estimator/ReorderLineItems.ts","webpack://rsf-app/./app/src/Commands/Estimator/RemoveEstimateLineItemCmd.ts","webpack://rsf-app/./app/src/Commands/Estimator/EditLineItemGroupCmd.ts","webpack://rsf-app/./app/src/Estimator/EstimateGroupComponent.ts","webpack://rsf-app/./app/src/Estimator/OpeningsWizard.ts","webpack://rsf-app/./app/src/Estimator/SalesTaxEditor.ts","webpack://rsf-app/./app/src/Common/AbstractWizardController.ts","webpack://rsf-app/./app/src/Models/WallFacade.ts","webpack://rsf-app/./app/src/Estimator/WindowAnnotatingComponent.ts","webpack://rsf-app/./app2/src/components/Common/SearchBox.tsx","webpack://rsf-app/./app2/src/hooks/usePrevious.ts","webpack://rsf-app/./app2/src/lib/fene_tech/api.ts","webpack://rsf-app/./app2/src/components/LineItemEditor/components/FeneTechModal/index.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/components/ProductSelector.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/components/LineItemInput.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/components/MeasurementCards/BaseMeasurementCard.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/components/MeasurementCards/UsageButtons.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/components/MeasurementCards/FencingMeasurementCard.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/components/MeasurementsTab.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/components/FilesTab.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/components/ProductOptionsTab.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/components/LineItemEditorTabs.tsx","webpack://rsf-app/./app2/src/components/LineItemEditor/LineItemEditor.tsx","webpack://rsf-app/./app2/src/components/PaymentTerm/ItemEditor.tsx","webpack://rsf-app/./app2/src/components/PaymentTerm/Chooser.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/InlineEditor.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/LineItem.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/PaymentOptions/PaymentOptionsList/ApplicationButtons.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/PaymentOptions/PaymentOptionsList/FinanceOptionDisplay.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/PaymentOptions/PaymentOptionsList/index.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/PaymentOptions/index.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/PaymentChooserWrapper.tsx","webpack://rsf-app/./app2/src/components/FinanceOption/Range.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/index.tsx","webpack://rsf-app/./app2/src/records/RecordsForEstimate.ts","webpack://rsf-app/./app2/src/selectors/estimateAccessor.selectors.ts","webpack://rsf-app/./app2/src/selectors/recordsForEstimate.selectors.ts","webpack://rsf-app/./app2/src/selectors/estimateComparison.selectors.ts","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/Comparator/index.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/DrawerContainer/index.tsx","webpack://rsf-app/./app2/src/components/PriceDrawer/index.tsx","webpack://rsf-app/./app2/src/components/Estimate/MarkupEditor.tsx","webpack://rsf-app/./app2/src/components/RsfForms/RsfFinalForm.tsx","webpack://rsf-app/./app2/src/components/RsfForms/BootstrapInputAdapter.tsx","webpack://rsf-app/./app2/src/components/Folders/Folder.tsx","webpack://rsf-app/./app2/src/components/Folders/MiniFolder.tsx","webpack://rsf-app/./app2/src/components/Common/Sortable.tsx","webpack://rsf-app/./app2/src/components/Common/GridContainer.tsx","webpack://rsf-app/./app2/src/components/Common/BreadCrumbs.tsx","webpack://rsf-app/./app2/src/components/Folders/BreadCrumbWrapper/index.tsx","webpack://rsf-app/./app2/src/components/Folders/index.tsx","webpack://rsf-app/./app2/src/components/Pagination/Standard.tsx","webpack://rsf-app/./app2/src/components/Common/IncludeCheckBox.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EstimateTemplateModal/EstimateTemplates/EstimateTemplate.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EstimateTemplateModal/EstimateTemplates/index.tsx","webpack://rsf-app/./app2/src/components/Folders/MoveFilesDropdown/DropdownItem.tsx","webpack://rsf-app/./app2/src/components/Folders/MoveFilesDropdown/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EstimateTemplateModal/SelectRooms.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EstimateTemplateModal/index.tsx","webpack://rsf-app/./app2/src/components/Homevest/FinanceOptionsButton.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/CommissionActions/Formula.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/CommissionActions/MarginWithOverhead.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/CommissionActions/DownloadCommissionButton.tsx","webpack://rsf-app/./app2/src/selectors/estimateCommission.selectors.ts","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/CommissionActions/Calculations.tsx","webpack://rsf-app/./app2/src/components/Clipboard/CopyToClipboardButton.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/CommissionActions/CommissionCalculatorModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/CommissionActions/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Interiors/RoomMeasurementTable.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/RoomSummary/VisualizeRoom.tsx","webpack://rsf-app/./app2/src/components/Common/RoomMeasurementInfo.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Interiors/Room.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/RoomSummary/IndividualRoom.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/RoomSummary/GroupedRooms.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/RoomSummary/index.tsx","webpack://rsf-app/./app/src/ScreenShare/ScreenShareShowCtrl.ts","webpack://rsf-app/./app/src/ScreenShare/ScreenShareJoinCtrl.ts","webpack://rsf-app/./app/src/ScreenShare/ScreenShareIndexCtrl.ts","webpack://rsf-app/./app/src/ScreenShare/ScreenShareHostCtrl.ts","webpack://rsf-app/./app2/src/components/VideoProvider/useSelectedParticipant/useSelectedParticipant.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useVideoContext/useVideoContext.ts","webpack://rsf-app/./app2/src/components/Twilio/hooks/useLocalVideoToggle/useLocalVideoToggle.tsx","webpack://rsf-app/./app2/src/components/VideoProvider/AttachVisibilityHandler/AttachVisibilityHandler.tsx","webpack://rsf-app/./app2/src/components/VideoProvider/types.ts","webpack://rsf-app/./app2/src/components/VideoProvider/FlashAlertContext.tsx","webpack://rsf-app/./app2/src/components/VideoProvider/useLocalTracks/useLocalTracks.ts","webpack://rsf-app/./app2/src/components/VideoProvider/useRoom/useRoom.tsx","webpack://rsf-app/./app2/src/hooks/useLocalStorage/index.tsx","webpack://rsf-app/./app2/src/components/VideoProvider/VideoProvider.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useActiveSink/useActiveSink.tsx","webpack://rsf-app/./app2/src/components/VideoProvider/useHandleRoomDisconnectionErrors/useHandleRoomDisconnectionErrors.ts","webpack://rsf-app/./app2/src/components/VideoProvider/useHandleTrackPublicationFailed/useHandleTrackPublicationFailed.ts","webpack://rsf-app/./app2/src/components/VideoProvider/useHandleOnDisconnect/useHandleOnDisconnect.ts","webpack://rsf-app/./app2/src/components/Twilio/hooks/useRoomState/useRoomState.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/VideoTrack.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/ToggleVideoButton.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useIsTrackEnabled/useIsTrackEnabled.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/ToggleAudioButton.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useLocalAudioToggle/useLocalAudioToggle.tsx","webpack://rsf-app/./app2/src/components/ScreenShare/Toolbar.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/ToggleFullScreenButton.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/Header.tsx","webpack://rsf-app/./app2/src/components/DeviceSelector/hooks/deviceHooks.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/AudioLevelIndicator.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/LocalAudioLevelIndicator.tsx","webpack://rsf-app/./app2/src/components/DeviceSelector/components/AudioInputList.tsx","webpack://rsf-app/./app2/src/components/DeviceSelector/components/VideoInputList.tsx","webpack://rsf-app/./app2/src/components/DeviceSelector/components/AudioOutputList.tsx","webpack://rsf-app/./app2/src/components/DeviceSelector/components/AdvancedSettings.tsx","webpack://rsf-app/./app2/src/components/DeviceSelector/DeviceSelector.tsx","webpack://rsf-app/./app2/src/hooks/useHeight/useHeight.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/LocalVideoPreview.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/usePublications/usePublications.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useTrack/useTrack.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useIsTrackSwitchedOff/useIsTrackSwitchedOff.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/BandwidthWarning.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/NetworkQualityLevel.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/ParticipantConnectionIndicator.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useParticipantIsReconnecting/useParticipantIsReconnecting.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/ParticipantInfo.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useParticipantNetworkQualityLevel/useParticipantNetworkQualityLevel.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/AudioTrack.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/Publication.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/ParticipantTracks.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/Participant.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useParticipants/useParticipants.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/ParticipantStrip.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useScreenShareParticipant/useScreenShareParticipant.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/ToggleScreenShareButton.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/EndCallButton.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/FlipCameraButton.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/Controls.tsx","webpack://rsf-app/./app2/src/hooks/useIsUserActive/useIsUserActive.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/MainParticipantInfo.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/MainParticipant.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useMainSpeaker/useMainSpeaker.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useDominantSpeaker/useDominantSpeaker.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/Room.tsx","webpack://rsf-app/./app2/src/components/Twilio/hooks/useScreenShareToggle/useScreenShareToggle.tsx","webpack://rsf-app/./app2/src/components/Twilio/components/Main.tsx","webpack://rsf-app/./app2/src/components/Common/BrowserSupportModal.tsx","webpack://rsf-app/./app2/src/components/Twilio/TwilioApp.tsx","webpack://rsf-app/./app2/src/components/Twilio/Host.tsx","webpack://rsf-app/./app2/src/components/Twilio/Attendee.tsx","webpack://rsf-app/./app/src/Profile/ProfileCtrl.ts","webpack://rsf-app/./app/src/Profile/AcceptTosCtrl.ts","webpack://rsf-app/./app/src/Profile/AlertCtrl.ts","webpack://rsf-app/./app/src/Profile/ErrorCtrl.ts","webpack://rsf-app/./app2/src/components/ErrorPages/Permissions/index.tsx","webpack://rsf-app/./app2/src/components/Task/List.tsx","webpack://rsf-app/./app2/src/components/Profile/Notifications.tsx","webpack://rsf-app/./app2/src/components/Common/ClearWorkersButton.tsx","webpack://rsf-app/./app/src/Common/AuthHttpInterceptor.ts","webpack://rsf-app/./app/src/Common/FakeFormAction.ts","webpack://rsf-app/./app/src/Signature/SignatureRedirectCtrl.ts","webpack://rsf-app/./app/src/Signature/SignatureSignCtrl.ts","webpack://rsf-app/./app/src/Signature/SignatureSignedCtrl.ts","webpack://rsf-app/./app/src/Signature/SignatureSetupComponent.ts","webpack://rsf-app/./app/src/Signature/SignatureNotificationComponent.ts","webpack://rsf-app/./app/src/Common/SpinnerComponent.ts","webpack://rsf-app/./app/src/Common/EmbedSrcDirective.ts","webpack://rsf-app/./app/src/Common/ConfirmDialogService.ts","webpack://rsf-app/./app/src/Models/User.ts","webpack://rsf-app/./app/src/Models/Address.ts","webpack://rsf-app/./app/src/Models/Door.ts","webpack://rsf-app/./app/src/Models/Window.ts","webpack://rsf-app/./app/src/Models/RoofFace.ts","webpack://rsf-app/./app/src/Models/Measurement.ts","webpack://rsf-app/./app/src/Models/Job.ts","webpack://rsf-app/./app/src/Models/PriceList.ts","webpack://rsf-app/./app/src/Models/ActivatedPriceList.ts","webpack://rsf-app/./app/src/Models/Product.ts","webpack://rsf-app/./app/src/Models/PaymentTerm.ts","webpack://rsf-app/./app/src/Models/EstimateTemplate.ts","webpack://rsf-app/./app/src/Models/MeasurementLink.ts","webpack://rsf-app/./app/src/Models/Doc.ts","webpack://rsf-app/./app/src/Models/Image.ts","webpack://rsf-app/./app/src/Models/Presentation.ts","webpack://rsf-app/./app/src/Models/Note.ts","webpack://rsf-app/./app/src/Models/Event.ts","webpack://rsf-app/./app/src/Models/Result.ts","webpack://rsf-app/./app/src/Models/ResultReason.ts","webpack://rsf-app/./app/src/Models/ScreenShare.ts","webpack://rsf-app/./app/src/Models/SignedDocument.ts","webpack://rsf-app/./app/src/Models/SignedDocumentRecipient.ts","webpack://rsf-app/./app/src/Models/ProductOptionGroup.ts","webpack://rsf-app/./app/src/Models/ProductOption.ts","webpack://rsf-app/./app/src/Models/Visualization.ts","webpack://rsf-app/./app/src/Models/Calendar.ts","webpack://rsf-app/./app/src/Models/Report.ts","webpack://rsf-app/./app/src/Models/Pattern.ts","webpack://rsf-app/./app/src/Models/PhoneNumber.ts","webpack://rsf-app/./app/src/Models/Token.ts","webpack://rsf-app/./app/src/Models/SfUser.ts","webpack://rsf-app/./app/src/Models/I360User.ts","webpack://rsf-app/./app/src/Models/MsUser.ts","webpack://rsf-app/./app/src/Models/JnUser.ts","webpack://rsf-app/./app/src/Models/SrUser.ts","webpack://rsf-app/./app/src/Models/LpUser.ts","webpack://rsf-app/./app/src/Models/EmailEvent.ts","webpack://rsf-app/./app/src/Models/Email.ts","webpack://rsf-app/./app/src/Models/Annotation.ts","webpack://rsf-app/./app/src/Models/Elevation.ts","webpack://rsf-app/./app/src/Login/LogoutCtrl.ts","webpack://rsf-app/./app2/src/components/Authentication/Authentication.service.ts","webpack://rsf-app/./app2/src/components/Authentication/OidcView.tsx","webpack://rsf-app/./app2/src/components/Authentication/OidcLogin.tsx","webpack://rsf-app/./app2/src/components/Authentication/OidcCallback.tsx","webpack://rsf-app/./app2/src/components/Authentication/OktaView.tsx","webpack://rsf-app/./app2/src/components/Authentication/OktaLogin.tsx","webpack://rsf-app/./app2/src/components/Authentication/OktaLogoutLandingPage.tsx","webpack://rsf-app/./app2/src/components/Authentication/OktaCallback.tsx","webpack://rsf-app/./app/src/Login/TermsAndConditionsCtrl.ts","webpack://rsf-app/./app2/src/components/Authentication/LeadsRedirectComponent.tsx","webpack://rsf-app/./app2/src/components/Common/OrgAccessListItem.tsx","webpack://rsf-app/./app2/src/components/Common/OrgAccessList.tsx","webpack://rsf-app/./app2/src/components/OrgAccessChooser/index.tsx","webpack://rsf-app/./app/src/Visualization/VisualizationCardComponent.ts","webpack://rsf-app/./app2/src/services/conversion.service.ts","webpack://rsf-app/./app/src/Common/UnitConversionService.ts","webpack://rsf-app/./app/src/Common/PrettyNameService.ts","webpack://rsf-app/./app/src/Patterns/HandlebarsHelperService.ts","webpack://rsf-app/./app/src/Common/Tours/EstimatorTourService.ts","webpack://rsf-app/./app/src/Common/Tours/JobInfoTourService.ts","webpack://rsf-app/./app/src/Common/Tours/JobShowTourService.ts","webpack://rsf-app/./app/src/Common/DirtyWatcher.ts","webpack://rsf-app/./app/src/Common/EventingFactory.ts","webpack://rsf-app/./app/src/Common/FileQueueFactory.ts","webpack://rsf-app/./app/src/Common/MeasurementImporterFactory.ts","webpack://rsf-app/./app/src/Common/Repository.ts","webpack://rsf-app/./app/src/Common/SetFocus.ts","webpack://rsf-app/./app/src/Common/RsfTab.ts","webpack://rsf-app/./app/src/Common/ScrollIf.ts","webpack://rsf-app/./app2/src/components/PaymentsModal/MakePaymentButton.tsx","webpack://rsf-app/./app2/src/components/Payments/PaySimple/PaySimpleListView.tsx","webpack://rsf-app/./app2/src/components/Payments/CardConnect/CardConnectListView.tsx","webpack://rsf-app/./app2/src/components/Payments/PaymentList.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/FinanceApplicationList.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/PaymentRequestList.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/CustomForms/FormRow.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/CustomForms/SubmitFinanceApplicationButton.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/CustomForms/FormsList.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/CustomForms/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/index.tsx","webpack://rsf-app/./app/src/Billing/BillingRoutes.ts","webpack://rsf-app/./app/src/JobMenu/JobMenuValues.ts","webpack://rsf-app/./app/src/JobMenu/JobMenuManagerComponent.ts","webpack://rsf-app/./app/src/JobMenu/JobMenuOrderService.ts","webpack://rsf-app/./app/src/Reports/EagleviewOrderingModalComponent.ts","webpack://rsf-app/./app/src/Reports/EagleviewLoginModalComponent.ts","webpack://rsf-app/./app/src/Reports/ReportListCtrl.ts","webpack://rsf-app/./app2/src/components/Analytics/EventStat.tsx","webpack://rsf-app/./app2/src/components/Analytics/UserStat.tsx","webpack://rsf-app/./app2/src/components/Analytics/ModelCache.ts","webpack://rsf-app/./app2/src/components/Analytics/DashboardComponent.tsx","webpack://rsf-app/./app2/src/components/Leads/LeadsComponent.tsx","webpack://rsf-app/./app2/src/components/Integrations/JobListContainer.tsx","webpack://rsf-app/./app2/src/components/Integrations/Eagleview/EagleviewReportImportComponent.tsx","webpack://rsf-app/./app2/src/components/Pagination/NgCountless.tsx","webpack://rsf-app/./app2/src/components/Integrations/Hover/ImportJob.tsx","webpack://rsf-app/./app2/src/components/Address/AddressShow.tsx","webpack://rsf-app/./app2/src/services/geocode.service.ts","webpack://rsf-app/./app2/src/components/Common/GoogleMap.tsx","webpack://rsf-app/./app2/src/components/Integrations/QuickMeasure/QuickMeasureOrder.tsx","webpack://rsf-app/./app2/src/components/Integrations/RoofScope/RoofScopeReportModal.tsx","webpack://rsf-app/./app2/src/components/Integrations/Plnar/PlnarReportModal.tsx","webpack://rsf-app/./app/src/Drawing/DrawingComponent.ts","webpack://rsf-app/./app/src/Common/Components/ToolDisplayComponent.ts","webpack://rsf-app/./app/src/Common/Components/RefreshButtonComponent.ts","webpack://rsf-app/./app/src/Common/TosHttpInterceptor.ts","webpack://rsf-app/./app/src/GoogleMapsAutocomplete/GmapsAutocompleteComponent.ts","webpack://rsf-app/./app/src/LeafletMap/LeafletMapComponent.ts","webpack://rsf-app/./app/src/RsfMap/RsfMapComponent.ts","webpack://rsf-app/./app/src/Common/OrgActivationHttpInterceptor.ts","webpack://rsf-app/./app/src/SignedDocuments/SignedDocListCtrl.ts","webpack://rsf-app/./app/src/Common/ForbiddenHttpInterceptor.ts","webpack://rsf-app/./app2/src/components/Pdf/pdf.service.ts","webpack://rsf-app/./app2/src/components/Pdf/SavePdfModal.tsx","webpack://rsf-app/./app2/src/components/Pdf/SaveToDocumentsModal.tsx","webpack://rsf-app/./app2/src/components/Pdf/SaveablePdfDisplay.tsx","webpack://rsf-app/./app2/src/helpers/FlashAlertDispatcher.ts","webpack://rsf-app/./app2/src/components/Common/FlashAlert.tsx","webpack://rsf-app/./app2/src/components/RsfForms/RsfFormGroup.tsx","webpack://rsf-app/./app2/src/components/ScreenShare/TroubleshootingModal.tsx","webpack://rsf-app/./app2/src/components/Common/InviteModal.tsx","webpack://rsf-app/./app2/src/components/ScreenShare/components/WebCamModal.tsx","webpack://rsf-app/./app2/src/components/ScreenShare/ScreenShare.tsx","webpack://rsf-app/./app2/src/components/Common/Notifier.tsx","webpack://rsf-app/./app2/src/components/Common/ReactSelectWrapper.tsx","webpack://rsf-app/./app2/src/components/JobList/ImportCsv.tsx","webpack://rsf-app/./app2/src/components/Common/UserHeaderInfo.tsx","webpack://rsf-app/./app2/src/components/AppMessages/AppMessageItem.tsx","webpack://rsf-app/./app2/src/components/AppMessages/AppMessagesList.tsx","webpack://rsf-app/./app2/src/components/Common/MessageBell/Bell.tsx","webpack://rsf-app/./app2/src/components/Common/MessageBell/index.tsx","webpack://rsf-app/./app2/src/helpers/Router.ts","webpack://rsf-app/./app2/src/components/JobTabs/ImageTab/Images/ImageList/Image.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ImageTab/Images/ImageList/ImageEditorModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ImageTab/Images/ImageList/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ImageTab/Images/ImageCarousel/Image.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ImageTab/Images/ImageCarousel/ImageThumb.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ImageTab/Images/ImageCarousel/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ImageTab/Images/index.tsx","webpack://rsf-app/./app2/src/components/Common/RefreshButton.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ImageTab/index.tsx","webpack://rsf-app/./app2/src/components/Document/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/DocumentTab/Documents/TableHeader.tsx","webpack://rsf-app/./app2/src/components/JobTabs/DocumentTab/Documents/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/DocumentTab/ResourceDocuments/DocumentsTable.tsx","webpack://rsf-app/./app2/src/components/JobTabs/DocumentTab/ResourceDocuments/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/DocumentTab/ViewPdfDoc.tsx","webpack://rsf-app/./app2/src/components/JobTabs/DocumentTab/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Presentations/Presentation.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Presentations/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/ShowPresentation/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/JobTabTitle.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Existing/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/Customer/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/PresentationTab/PresentationRouting/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/NoteTab/Note.tsx","webpack://rsf-app/./app2/src/components/JobTabs/NoteTab/index.tsx","webpack://rsf-app/./app2/src/components/Homevest/Context.tsx","webpack://rsf-app/./app2/src/components/Homevest/HomevestModal.tsx","webpack://rsf-app/./app2/src/components/Homevest/Create.tsx","webpack://rsf-app/./app2/src/components/Homevest/EmbeddedView/MessageView.tsx","webpack://rsf-app/./app2/src/components/Homevest/EmbeddedView/index.tsx","webpack://rsf-app/./app2/src/components/Homevest/Apply.tsx","webpack://rsf-app/./app2/src/components/Homevest/LoanApply.tsx","webpack://rsf-app/./app2/src/components/Homevest/Offers/index.tsx","webpack://rsf-app/./app2/src/components/Homevest/Homevest.selectors.ts","webpack://rsf-app/./app2/src/components/Homevest/index.tsx","webpack://rsf-app/./app2/src/components/PaymentsModal/PaymentRequest.tsx","webpack://rsf-app/./app2/src/components/PaymentsModal/Root.tsx","webpack://rsf-app/./app2/src/components/Payments/PaySimple/PaySimple.service.tsx","webpack://rsf-app/./app2/src/components/Payments/PaySimple/loadPaySimple.ts","webpack://rsf-app/./app2/src/components/Payments/PaySimple/PaySimpleForm.tsx","webpack://rsf-app/./app2/src/components/Payments/CardConnect/CardConnectForm.tsx","webpack://rsf-app/./app2/src/components/Payments/AccountInfo.model.ts","webpack://rsf-app/./app2/src/components/Payments/PaySimple/PaySimplePaymentView.tsx","webpack://rsf-app/./app2/src/components/Payments/CardConnect/CardConnectPaymentView.tsx","webpack://rsf-app/./app2/src/components/Payments/OccPay/OccPayPaymentView.tsx","webpack://rsf-app/./app2/src/components/Payments/PaymentView.tsx","webpack://rsf-app/./app2/src/components/Payments/MakePayment.tsx","webpack://rsf-app/./app2/src/components/Payments/OccPay/OccPaySaveMethodView.tsx","webpack://rsf-app/./app2/src/components/PaymentsModal/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/AppointmentsTab/SendInviteModal.tsx","webpack://rsf-app/./app2/src/selectors/eventResult.selectors.ts","webpack://rsf-app/./app2/src/selectors/eventResultReason.selectors.ts","webpack://rsf-app/./app2/src/components/JobTabs/AppointmentsTab/ResultAppointmentModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/AppointmentsTab/EventCalendarModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/AppointmentsTab/EventRow.tsx","webpack://rsf-app/./app2/src/components/JobTabs/AppointmentsTab/I360SalesOpportunity.tsx","webpack://rsf-app/./app2/src/components/JobTabs/AppointmentsTab/I360ResultAppointmentModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/AppointmentsTab/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/SignaturesTab/ShowPdf.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/Context.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/DocumentsChooser/Document.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/DocumentsChooser/SelectedDocuments.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/DocumentsChooser/RequestName.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/DocumentsChooser/index.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/SignatureRequestModal.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/ReviewSignatureRequest.tsx","webpack://rsf-app/./app2/src/components/Common/SignedDocumentForm.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/SignatureConfiguration.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/index.tsx","webpack://rsf-app/./app2/src/components/SignatureRequest/SignatureRequestButton.tsx","webpack://rsf-app/./app2/src/components/Document/VoidDocumentButton.tsx","webpack://rsf-app/./app2/src/components/Document/SigningHistoryButton.tsx","webpack://rsf-app/./app2/src/components/SignedDocument/SignedDocumentsTable.tsx","webpack://rsf-app/./app2/src/components/JobTabs/SignaturesTab/SignaturesDocumentsTable.tsx","webpack://rsf-app/./app2/src/components/JobTabs/SignaturesTab/EstimateDocuments/EstimateDocumentsRow.tsx","webpack://rsf-app/./app2/src/components/JobTabs/SignaturesTab/EstimateDocuments/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/SignaturesTab/SignableDocuments.tsx","webpack://rsf-app/./app2/src/components/JobTabs/SignaturesTab/SigningRecipientsModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/SignaturesTab/DocumentTabs.tsx","webpack://rsf-app/./app2/src/components/JobTabs/SignaturesTab/index.tsx","webpack://rsf-app/./app2/src/lib/MappingTool.ts","webpack://rsf-app/./app2/src/lib/FencingTool.ts","webpack://rsf-app/./app2/src/components/Drawing/Fencing/SegmentMeasurements.tsx","webpack://rsf-app/./app2/src/components/Drawing/Fencing/SegmentPosts.tsx","webpack://rsf-app/./app2/src/components/Drawing/Fencing/FenceSummary.tsx","webpack://rsf-app/./app2/src/components/Drawing/Fencing/FencingSummary.tsx","webpack://rsf-app/./app2/src/components/Drawing/Fencing/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/AddMeasurementModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/ButtonBar.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/InteriorExteriorButton.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/MeasurementTable.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/RoofFaces.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Roofing.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Siding.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Sunroom.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Walls.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/OpeningRow.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Openings.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Windows.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Doors.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Decks.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Pools.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/Fencing.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Exteriors/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Interiors/InteriorTabs.tsx","webpack://rsf-app/./app2/src/hooks/useIsOversized/useIsOversized.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/Interiors/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/MeasurementTab/index.tsx","webpack://rsf-app/./app2/src/components/Estimate/EstimateOverviewTable.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ProposalsTab/SelectProposal.tsx","webpack://rsf-app/./app2/src/components/Estimate/IntegrationButton.tsx","webpack://rsf-app/./app2/src/components/Estimate/IntegrationButtonGroup.tsx","webpack://rsf-app/./app2/src/components/Common/EmailMessageModal.tsx","webpack://rsf-app/./app2/src/components/Document/EmailDocumentModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ProposalsTab/ViewProposal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ProposalsTab/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ContractsTab/SelectEstimate.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ContractsTab/EstimateContracts/SignatureSetupModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ContractsTab/EstimateContracts/CreateContract.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ContractsTab/EstimateContracts/SelectContract.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ContractsTab/EstimateContracts/ViewContract.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ContractsTab/EstimateContracts/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ContractsTab/index.tsx","webpack://rsf-app/./app2/src/selectors/tool.selectors.ts","webpack://rsf-app/./app2/src/helpers/Address.ts","webpack://rsf-app/./app2/src/components/JobTabs/ToolsTab/tool.service.ts","webpack://rsf-app/./app2/src/components/JobTabs/ToolsTab/ToolCard.tsx","webpack://rsf-app/./app2/src/components/JobTabs/ToolsTab/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EmailOrderCsvModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/ManualTriggerModal.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/Common.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/AddressForm.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/LicenseImage.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/ApplicantForm.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/SignatureRequest/ReviewSignatureRequest.tsx","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/SignatureRequest/SignatureRequest.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Toggle.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Header.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Discounts/DiscountRow.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Discounts/EditDiscount.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Discounts/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/DownPaymentInput.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/SplatIcon.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/PaymentTermCard.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideNavigation.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideSetup.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/EstimateTab/OneLook/FinanceApplicationModal.tsx","webpack://rsf-app/./app2/src/components/JobResultModal/ResultForm.tsx","webpack://rsf-app/./app2/src/components/JobResultModal/ResultToggle.tsx","webpack://rsf-app/./app2/src/components/JobResultModal/index.tsx","webpack://rsf-app/./app2/src/components/JobTabs/index.tsx","webpack://rsf-app/./app2/src/components/Common/Connector.tsx","webpack://rsf-app/./app2/src/services/serviceWorker.service.ts","webpack://rsf-app/./app2/src/components/Common/PageTitleUpdater.tsx","webpack://rsf-app/./app/src/OccAppRedirect.ts","webpack://rsf-app/./app/src/Orgs/OrgFetcherService.ts","webpack://rsf-app/./app/src/App.ts","webpack://rsf-app/./app/src/Models/ModelRoutes.ts","webpack://rsf-app/./app/src/Login/LoginRoutes.ts","webpack://rsf-app/./app/src/Jobs/JobRoutes.ts","webpack://rsf-app/./app/src/JobMenu/JobMenuRoutes.ts","webpack://rsf-app/./app/src/Estimator/EstimatorRoutes.ts","webpack://rsf-app/./app/src/Calendar/CalendarRoutes.ts","webpack://rsf-app/./app/src/ScreenShare/ScreenShareRoutes.ts","webpack://rsf-app/./app/src/Profile/ProfileRoutes.ts","webpack://rsf-app/./app/src/Signature/SignatureRoutes.ts","webpack://rsf-app/./app/src/PaymentInfo/PaymentInfoRoutes.ts","webpack://rsf-app/./app/src/Visualization/VisualizationRoutes.ts","webpack://rsf-app/./app/src/Reports/ReportRoutes.ts","webpack://rsf-app/./app/src/SignedDocuments/SignedDocRoutes.ts","webpack://rsf-app/./app/src/Routing/RsfSrefDirective.ts","webpack://rsf-app/./app/src/Common/HumanizeFilter.ts","webpack://rsf-app/./app/src/Common/StartFromFilter.ts","webpack://rsf-app/./app2/src/components/Document/NgDocumentLink.tsx","webpack://rsf-app/./app2/src/services/jwtToken.service.ts","webpack://rsf-app/./app2/src/api/integrations/eagleview.service.ts","webpack://rsf-app/./app2/src/reducers/integrations/eagleview.actions.ts","webpack://rsf-app/./app2/src/reducers/pagination.actions.ts","webpack://rsf-app/./app2/src/records/EstimateOverview.ts","webpack://rsf-app/./app2/src/reducers/room.actions.ts","webpack://rsf-app/./app2/src/reducers/integrations/hover.actions.ts","webpack://rsf-app/./app2/src/reducers/rsfForm.actions.ts","webpack://rsf-app/./app2/src/records/Tool.ts","webpack://rsf-app/./lib/kendoui/js/kendo.pdf.min.js","webpack://rsf-app/./app2/src/selectors/task.selectors.ts","webpack://rsf-app/./app2/src/reducers/analytics.actions.ts","webpack://rsf-app/./app2/src/selectors/appMessage.selectors.ts","webpack://rsf-app/./app2/src/selectors/oneLook.selectors.ts","webpack://rsf-app/./app2/src/reducers/image.actions.ts","webpack://rsf-app/./app2/src/reducers/auth.actions.ts","webpack://rsf-app/./app2/src/selectors/customForm.selectors.ts","webpack://rsf-app/./app2/src/reducers/access.reducer.ts","webpack://rsf-app/./app2/src/api/customForm.service.ts","webpack://rsf-app/./app2/src/reducers/customForm.actions.ts","webpack://rsf-app/./app2/src/records/measurements/Fencing.ts","webpack://rsf-app/./app2/src/records/DynamicPresentationLink.ts","webpack://rsf-app/./lib/kendoui/js/kendo.validator.min.js","webpack://rsf-app/./app2/src/records/LocationState.ts","webpack://rsf-app/./app2/src/selectors/door.selectors.ts","webpack://rsf-app/./app2/src/api/financeOption.service.ts","webpack://rsf-app/./app2/src/records/PaymentTerm.ts","webpack://rsf-app/./app2/src/reducers/roofFace.actions.ts","webpack://rsf-app/./app2/src/records/RoomEstimation.ts","webpack://rsf-app/./app2/src/selectors/pagination.selectors.ts","webpack://rsf-app/./lib/kendoui/js/kendo.datepicker.min.js","webpack://rsf-app/./app2/src/records/OpeningEstimation.ts","webpack://rsf-app/./app2/src/selectors/user.selectors.ts","webpack://rsf-app/./app2/src/helpers/Validator.ts","webpack://rsf-app/./app2/src/helpers/Analytics.ts","webpack://rsf-app/./app2/src/api/eventResult.service.ts","webpack://rsf-app/./app2/src/reducers/eventResult.actions.ts","webpack://rsf-app/./app2/src/api/presentationTemplate.service.ts","webpack://rsf-app/./app2/src/reducers/presentationTemplate.actions.ts","webpack://rsf-app/./app2/src/records/PaymentAuthorizationRecord.ts","webpack://rsf-app/./lib/kendoui/js/kendo.mobile.view.min.js","webpack://rsf-app/./app2/src/api/discount.service.ts","webpack://rsf-app/./app2/src/reducers/discount.actions.ts","webpack://rsf-app/./app2/src/api/note.service.ts","webpack://rsf-app/./app2/src/reducers/note.actions.ts","webpack://rsf-app/./app2/src/selectors/discount.selectors.ts","webpack://rsf-app/./app2/src/selectors/components/common.selectors.ts","webpack://rsf-app/./app2/src/api/presentation.service.ts","webpack://rsf-app/./app2/src/reducers/presentation.actions.ts","webpack://rsf-app/./lib/cycle.js","webpack://rsf-app/./lib/kendoui/js/kendo.scheduler.view.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.calendar.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.data.odata.min.js","webpack://rsf-app/./app2/src/records/GeoJson.ts","webpack://rsf-app/./app2/src/records/Measurement.ts","webpack://rsf-app/./app2/src/reducers/user.actions.ts","webpack://rsf-app/./app2/src/reducers/integrations/quickMeasure.actions.ts","webpack://rsf-app/./lib/kendoui/js/kendo.fx.min.js","webpack://rsf-app/./app2/src/api/integrations/cardconnect.service.ts","webpack://rsf-app/./app2/src/reducers/integrations/cardconnect.actions.ts","webpack://rsf-app/./app2/src/reducers/leads.actions.ts","webpack://rsf-app/./lib/kendoui/js/kendo.scheduler.min.js","webpack://rsf-app/./app2/src/records/Recipient.ts","webpack://rsf-app/./app2/src/records/EstimateComparisonLink.ts","webpack://rsf-app/./app/src/Common/FlashLevels.ts","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/CustomAddressRecord.ts","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/ApplicantRecord.ts","webpack://rsf-app/./app2/src/components/JobTabs/InfoTab/CustomForm/CustomFormRecord.ts","webpack://rsf-app/./app2/src/api/event.service.ts","webpack://rsf-app/./app2/src/reducers/event.actions.ts","webpack://rsf-app/./app2/src/records/measurements/Fence.ts","webpack://rsf-app/./app2/src/records/Iframe.ts","webpack://rsf-app/./app2/src/records/LandingEstimate.ts","webpack://rsf-app/./app2/src/records/CalculatedFinancing.ts","webpack://rsf-app/./app2/src/records/EstimateCommissionDetails.ts","webpack://rsf-app/./app2/src/records/EstimateCommissionVariables.ts","webpack://rsf-app/./app2/src/records/EstimateCommissionOutputObjects.ts","webpack://rsf-app/./app2/src/records/EstimateCommissionOutput.ts","webpack://rsf-app/./app2/src/records/EstimateCommissionUser.ts","webpack://rsf-app/./app2/src/records/EstimateCommission.ts","webpack://rsf-app/./app2/src/reducers/estimate.reducer.ts","webpack://rsf-app/./app2/src/reducers/paymentRequest.selectors.ts","webpack://rsf-app/./app2/src/api/crmUser.service.ts","webpack://rsf-app/./app2/src/reducers/crmUser.actions.ts","webpack://rsf-app/./app2/src/api/token.service.ts","webpack://rsf-app/./app2/src/api/estimateTemplate.service.ts","webpack://rsf-app/./app2/src/reducers/estimateTemplate.actions.ts","webpack://rsf-app/./app2/src/reducers/org/financeOption.reducer.ts","webpack://rsf-app/./app2/src/reducers/org.reducer.ts","webpack://rsf-app/./app2/src/selectors/job.selectors.ts","webpack://rsf-app/./app2/src/components/JobList/JobQueryState.tsx","webpack://rsf-app/./app2/src/components/JobList/JobQuery.ts","webpack://rsf-app/./app2/src/records/FinanceOptionValidation.ts","webpack://rsf-app/./app2/src/records/FinanceOption.ts","webpack://rsf-app/./lib/kendoui/js/kendo.color.min.js","webpack://rsf-app/./app2/src/records/EstimateGroup.ts","webpack://rsf-app/./app2/src/reducers/estimateGroup.reducer.ts","webpack://rsf-app/./lib/kendoui/js/kendo.scheduler.monthview.min.js","webpack://rsf-app/./app2/src/selectors/financeOption.selectors.ts","webpack://rsf-app/./app2/src/api/document.service.ts","webpack://rsf-app/./app2/src/reducers/estimate.actions.ts","webpack://rsf-app/./app2/src/helpers/TaskSync.ts","webpack://rsf-app/./app2/src/helpers/NewRelic.ts","webpack://rsf-app/./app2/src/api/remoteStorage.service.ts","webpack://rsf-app/./lib/kendoui/js/kendo.mobile.scroller.min.js","webpack://rsf-app/./app2/src/api/webhook.service.ts","webpack://rsf-app/./app2/src/reducers/webhook.actions.ts","webpack://rsf-app/./app2/src/reducers/pagination.reducer.ts","webpack://rsf-app/./app2/src/api/user.service.ts","webpack://rsf-app/./app2/src/records/Statistics.ts","webpack://rsf-app/./app2/src/reducers/job.reducer.ts","webpack://rsf-app/./app2/src/api/estimate.service.ts","webpack://rsf-app/./app2/src/selectors/financeApplication.selectors.ts","webpack://rsf-app/./lib/kendoui/js/kendo.notification.min.js","webpack://rsf-app/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://rsf-app/./app2/src/selectors/calculatedFinancing.selectors.ts","webpack://rsf-app/./lib/kendoui/js/kendo.binder.min.js","webpack://rsf-app/./app2/src/reducers/integrations/roofscope.actions.ts","webpack://rsf-app/./app2/src/reducers/document.actions.ts","webpack://rsf-app/./app2/src/reducers/org/financeOption.actions.ts","webpack://rsf-app/./app2/src/selectors/estimateFinanceOption.selectors.ts","webpack://rsf-app/./app2/src/reducers/estimateFinanceOption.reducer.ts","webpack://rsf-app/./app2/src/helpers/Number.ts","webpack://rsf-app/./app2/src/selectors/elevation.selectors.ts","webpack://rsf-app/./app2/src/reducers/screenShare.actions.ts","webpack://rsf-app/./app2/src/records/PresentationTemplate.ts","webpack://rsf-app/./app2/src/api/signedDocument.service.ts","webpack://rsf-app/./lib/kendoui/js/kendo.window.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.mobile.loader.min.js","webpack://rsf-app/./app2/src/api/activatedPriceList.service.ts","webpack://rsf-app/./app2/src/reducers/activatedPriceList.actions.ts","webpack://rsf-app/./app2/src/reducers/pricePresentation.actions.ts","webpack://rsf-app/./app2/src/selectors/paySimple.selectors.ts","webpack://rsf-app/./app2/src/records/PaymentRecord.ts","webpack://rsf-app/./app2/src/selectors/openingEstimation.selectors.ts","webpack://rsf-app/./app2/src/reducers/product.actions.ts","webpack://rsf-app/./app2/src/reducers/components/estimator.actions.ts","webpack://rsf-app/./app2/src/reducers/estimateLineItem.reducer.ts","webpack://rsf-app/./app2/src/reducers/wallFacade.actions.ts","webpack://rsf-app/./app2/src/selectors/measurements/fence.selectors.ts","webpack://rsf-app/./app2/src/selectors/folder.selectors.ts","webpack://rsf-app/./app2/src/reducers/estimateGroup.actions.ts","webpack://rsf-app/./app2/src/reducers/estimateLineItemOption.actions.ts","webpack://rsf-app/./app2/src/services/deferred.ts","webpack://rsf-app/./app2/src/selectors/pool.selectors.ts","webpack://rsf-app/./app2/src/selectors/measurement.selectors.ts","webpack://rsf-app/./lib/kendoui/js/kendo.drawing.min.js","webpack://rsf-app/./app2/src/api/jobAttribute.service.ts","webpack://rsf-app/./app2/src/reducers/jobAttribute.actions.ts","webpack://rsf-app/./app2/src/reducers/router.actions.ts","webpack://rsf-app/./app2/src/selectors/access.selectors.ts","webpack://rsf-app/./app2/src/records/Defaults.ts","webpack://rsf-app/./app2/src/records/Estimate.ts","webpack://rsf-app/./app2/src/selectors/product.selectors.ts","webpack://rsf-app/./app2/src/selectors/priceList.selectors.ts","webpack://rsf-app/./app2/src/api/screenShare.service.ts","webpack://rsf-app/./app2/src/records/Slide.ts","webpack://rsf-app/./app2/src/records/Presentation.ts","webpack://rsf-app/./app2/src/reducers/components/common.actions.ts","webpack://rsf-app/./lib/kendoui/js/kendo.scheduler.dayview.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.timepicker.min.js","webpack://rsf-app/./app2/src/reducers/estimateLineItem.actions.ts","webpack://rsf-app/./app2/src/api/org.service.ts","webpack://rsf-app/./app2/src/api/financeApplication.service.ts","webpack://rsf-app/./app2/src/reducers/financeApplication.actions.ts","webpack://rsf-app/./app2/src/selectors/token.selectors.ts","webpack://rsf-app/./lib/kendoui/js/kendo.data.min.js","webpack://rsf-app/./app2/src/reducers/measurements/segment.actions.ts","webpack://rsf-app/./app2/src/api/measurement.service.ts","webpack://rsf-app/./app2/src/reducers/measurement.actions.ts","webpack://rsf-app/./app2/src/api/image.service.ts","webpack://rsf-app/./app2/src/selectors/router.selectors.ts","webpack://rsf-app/./app2/src/reducers/email.actions.ts","webpack://rsf-app/./app2/src/api/email.service.ts","webpack://rsf-app/./app2/src/api/tool.service.ts","webpack://rsf-app/./app2/src/reducers/org/tool.actions.ts","webpack://rsf-app/./lib/kendoui/js/kendo.mobile.pane.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.numerictextbox.min.js","webpack://rsf-app/./app2/src/helpers/Format.ts","webpack://rsf-app/./app2/src/reducers/pool.actions.ts","webpack://rsf-app/./lib/kendoui/js/kendo.scheduler.timelineview.min.js","webpack://rsf-app/./app2/src/api/appMessage.service.ts","webpack://rsf-app/./app2/src/reducers/document.reducer.ts","webpack://rsf-app/./app2/src/reducers/token.actions.ts","webpack://rsf-app/./lib/kendoui/js/kendo.draganddrop.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.mobile.shim.min.js","webpack://rsf-app/./app2/src/reducers/door.actions.ts","webpack://rsf-app/./app2/src/reducers/job.actions.ts","webpack://rsf-app/./app2/src/api/task.service.ts","webpack://rsf-app/./app2/src/reducers/integrations/paysimple.actions.ts","webpack://rsf-app/./app2/src/helpers/Record.ts","webpack://rsf-app/./app2/src/reducers/priceList.actions.ts","webpack://rsf-app/./lib/kendoui/js/kendo.data.xml.min.js","webpack://rsf-app/./app2/src/records/MetaPagination.ts","webpack://rsf-app/./app2/src/records/Page.ts","webpack://rsf-app/./app2/src/reducers/components/integrationsView.actions.ts","webpack://rsf-app/./app2/src/reducers/productOption.actions.ts","webpack://rsf-app/./app2/src/reducers/openingEstimation.reducer.ts","webpack://rsf-app/./app2/src/reducers/ lazy ^\\.\\/.*\\.actions\\.ts$ namespace object","webpack://rsf-app/./app2/src/records/File.ts","webpack://rsf-app/./app2/src/selectors/estimate.selectors.ts","webpack://rsf-app/./app2/src/records/Preference.ts","webpack://rsf-app/./app2/src/records/Settings.ts","webpack://rsf-app/./app2/src/records/OrgMetadata.ts","webpack://rsf-app/./app2/src/records/OrgRecord.ts","webpack://rsf-app/./app2/src/reducers/productOptionGroup.actions.ts","webpack://rsf-app/./app2/src/api/report.service.ts","webpack://rsf-app/./app2/src/reducers/report.actions.ts","webpack://rsf-app/./app2/src/selectors/userCommon.selectors.ts","webpack://rsf-app/./app2/src/api/measurements/fencing.service.ts","webpack://rsf-app/./app2/src/reducers/measurements/fencing.actions.ts","webpack://rsf-app/./app2/src/selectors/window.selectors.ts","webpack://rsf-app/./app2/src/helpers/ImmutableData.ts","webpack://rsf-app/./app2/src/reducers/payment.actions.ts","webpack://rsf-app/./app2/src/reducers/task.actions.ts","webpack://rsf-app/./app/src/templates.js","webpack://rsf-app/./app2/src/reducers/UtilsTypes.ts","webpack://rsf-app/./lib/kendoui/js/kendo.scheduler.agendaview.min.js","webpack://rsf-app/./app2/src/records/EstimateDiscount.ts","webpack://rsf-app/./lib/kendoui/js/kendo.scheduler.recurrence.min.js","webpack://rsf-app/./app2/src/selectors/deck.selectors.ts","webpack://rsf-app/./app2/src/reducers/openingEstimation.actions.ts","webpack://rsf-app/./app2/src/reducers/estimateFinanceOption.actions.ts","webpack://rsf-app/./app2/src/reducers/org.actions.ts","webpack://rsf-app/./app2/src/helpers/DocumentOrder.ts","webpack://rsf-app/./configs/states/us-ca.ts","webpack://rsf-app/./app2/src/records/measurements/Segment.ts","webpack://rsf-app/./app2/src/reducers/appMessage.actions.ts","webpack://rsf-app/./app2/src/records/index.ts","webpack://rsf-app/./app2/src/records/PhoneNumber.ts","webpack://rsf-app/./app2/src/records/EstimateLineItemOption.ts","webpack://rsf-app/./app2/src/records/Address.ts","webpack://rsf-app/./app2/src/helpers/Utility.ts","webpack://rsf-app/./app2/src/reducers/elevation.actions.ts","webpack://rsf-app/./app2/src/api/elevation.service.ts","webpack://rsf-app/./app/src/preload.ts","webpack://rsf-app/./lib/kendoui/js/kendo.mobile.popover.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.listview.min.js","webpack://rsf-app/./app2/src/records/EstimateFinanceOption.ts","webpack://rsf-app/./app2/src/selectors/presentation.selectors.ts","webpack://rsf-app/./app2/src/helpers/Fetcher.ts","webpack://rsf-app/./app2/src/selectors/measurementCommon.selectors.ts","webpack://rsf-app/./app2/src/selectors/image.selectors.ts","webpack://rsf-app/./app2/src/reducers/access.actions.ts","webpack://rsf-app/./app2/src/api/access.service.ts","webpack://rsf-app/./app2/src/reducers/estimateLineItemOption.reducer.ts","webpack://rsf-app/./lib/kendoui/js/kendo.view.min.js","webpack://rsf-app/./app2/src/reducers/Reducer.ts","webpack://rsf-app/./app2/src/helpers/Auth.service.ts","webpack://rsf-app/./app2/src/selectors/measurements/fencing.selectors.ts","webpack://rsf-app/./app2/src/reducers/eventResultReason.actions.ts","webpack://rsf-app/./app2/src/api/eventResultReason.service.ts","webpack://rsf-app/./app2/src/selectors/paymentTermTemplate.selectors.ts","webpack://rsf-app/./app2/src/api/validation.service.ts","webpack://rsf-app/./app2/src/reducers/validation.actions.ts","webpack://rsf-app/./app2/src/reducers/measurements/fence.actions.ts","webpack://rsf-app/./lib/kendoui/js/kendo.popup.min.js","webpack://rsf-app/./app2/src/selectors/measurements/segment.selectors.ts","webpack://rsf-app/./app2/src/reducers/oneLook.async.actions.ts","webpack://rsf-app/./app2/src/api/oneLook.service.ts","webpack://rsf-app/./app2/src/selectors/roofFace.selectors.ts","webpack://rsf-app/./app2/src/records/JobAssignment.ts","webpack://rsf-app/./lib/kendoui/js/kendo.datetimepicker.min.js","webpack://rsf-app/./app2/src/records/EstimateSignedDocument.ts","webpack://rsf-app/./app2/src/reducers/signedDocument.actions.ts","webpack://rsf-app/./app2/src/api/paymentTermTemplate.service.ts","webpack://rsf-app/./app2/src/reducers/org/paymentTermTemplate.actions.ts","webpack://rsf-app/./app2/src/api/paymentRequest.service.ts","webpack://rsf-app/./app2/src/reducers/paymentRequest.actions.ts","webpack://rsf-app/./app/src/RSFGlobals.js","webpack://rsf-app/./lib/kendoui/js/kendo.tabstrip.min.js","webpack://rsf-app/./app2/src/selectors/estimateLineItemOption.selectors.ts","webpack://rsf-app/./app2/src/api/estimateComparison.service.ts","webpack://rsf-app/./app2/src/reducers/estimateComparison.actions.ts","webpack://rsf-app/./app2/src/records/AppMessage.ts","webpack://rsf-app/./app2/src/api/Api.ts","webpack://rsf-app/./app2/src/records/Document.ts","webpack://rsf-app/./app2/src/selectors/wallFacade.selectors.ts","webpack://rsf-app/./app2/src/api/job.service.ts","webpack://rsf-app/./app2/src/selectors/estimateGroup.selectors.ts","webpack://rsf-app/./app2/src/selectors/sku.selectors.ts","webpack://rsf-app/./app2/src/api/sku.service.ts","webpack://rsf-app/./app2/src/reducers/sku.actions.ts","webpack://rsf-app/./app2/src/selectors/document.selectors.ts","webpack://rsf-app/./app2/src/selectors/estimateLineItem.selectors.ts","webpack://rsf-app/./app2/src/records/ProductToOptionGroupLink.ts","webpack://rsf-app/./app2/src/records/Product.ts","webpack://rsf-app/./app2/src/api/folder.service.ts","webpack://rsf-app/./app2/src/reducers/folder.actions.ts","webpack://rsf-app/./app2/src/reducers/oneLook.actions.ts","webpack://rsf-app/./app2/src/storeRegistry.ts","webpack://rsf-app/./app2/src/records/Job.ts","webpack://rsf-app/./app2/src/selectors/signedDocument.selectors.ts","webpack://rsf-app/./lib/kendoui/js/kendo.angular.min.js","webpack://rsf-app/./app2/src/records/PaymentTermTemplate.ts","webpack://rsf-app/./app2/src/records/EstimateLineItem.ts","webpack://rsf-app/./lib/kendoui/js/kendo.selectable.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.editable.min.js","webpack://rsf-app/./lib/kendoui/js/kendo.dropdownlist.min.js","webpack://rsf-app/./app2/src/selectors/cardconnect.selectors.ts","webpack://rsf-app/./app2/src/records/UserRecord.ts","webpack://rsf-app/./lib/kendoui/js/kendo.list.min.js","webpack://rsf-app/./app2/src/selectors/event.selectors.ts","webpack://rsf-app/./app2/src/records/SignedDocument.ts","webpack://rsf-app/./app/src/Common/Constants.ts","webpack://rsf-app/./lib/kendoui/js/kendo.multiselect.min.js","webpack://rsf-app/./app2/src/records/Image.ts","webpack://rsf-app/./app2/src/reducers/Utils.ts","webpack://rsf-app/./lib/kendoui/js/kendo.menu.min.js","webpack://rsf-app/./app2/src/reducers/user.reducer.ts","webpack://rsf-app/./app2/src/records/EstimateComparison.ts","webpack://rsf-app/./app2/src/records/Report.ts","webpack://rsf-app/./app2/src/reducers/window.actions.ts","webpack://rsf-app/./app2/src/selectors/org.selectors.ts","webpack://rsf-app/./app2/src/selectors/pricePresentation.selectors.ts","webpack://rsf-app/webpack/bootstrap","webpack://rsf-app/webpack/runtime/chunk loaded","webpack://rsf-app/webpack/runtime/create fake namespace object","webpack://rsf-app/webpack/runtime/load script","webpack://rsf-app/webpack/runtime/amd define","webpack://rsf-app/webpack/runtime/amd options","webpack://rsf-app/webpack/runtime/compat get default export","webpack://rsf-app/webpack/runtime/define property getters","webpack://rsf-app/webpack/runtime/ensure chunk","webpack://rsf-app/webpack/runtime/get javascript chunk filename","webpack://rsf-app/webpack/runtime/global","webpack://rsf-app/webpack/runtime/hasOwnProperty shorthand","webpack://rsf-app/webpack/runtime/make namespace object","webpack://rsf-app/webpack/runtime/node module decorator","webpack://rsf-app/webpack/runtime/publicPath","webpack://rsf-app/webpack/runtime/jsonp chunk loading","webpack://rsf-app/webpack/startup"],"sourcesContent":["import { RootState } from \"app2/src/reducers\";\nimport { Map } from \"immutable\";\n\nexport const activatedPriceList = (state: RootState, props: any) =>\n  state.getIn([\"activatedPriceLists\", \"byId\", props.activatedPriceListId], Map());\n","import { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { RoomRecord } from \"app2/src/records/Room\";\nimport { currentLastSavedMeasurement, currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { recordChanged } from \"app2/src/helpers/Record\";\nimport { MeasurementRecord } from \"../records/Measurement\";\n\nexport const rootKey = \"rooms\";\n\n/**\n * Returns a Room record\n *\n * @param {RootState} state\n * @param {{ roomId: number }} options\n * @returns {RoomRecord}\n */\nexport const room = (state: RootState, props: any) => state.getIn([rootKey, \"byId\", props.roomId.toString()]);\n\n/**\n * Returns a last loaded from API Room record\n *\n * @param {RootState} state\n * @param {{ roomId: number }} options\n * @returns {RoomRecord}\n */\nexport const lastSavedRoom = (state: RootState, props: any) =>\n  state.getIn([rootKey, \"lastSavedById\", props.roomId.toString()]);\n\n/**\n * Returns a list of Room records\n *\n * @param {RootState} state\n * @param {{ roomIds: number }} options\n * @returns {List<RoomRecord>}\n */\nexport const rooms = createSelector([(state, props) => ({ state, props })], (stateProps: any): List<RoomRecord> => {\n  const { state, props } = stateProps;\n  const { roomIds } = props;\n  return roomIds.map((id: number) => room(state, { roomId: id }));\n});\n\n/**\n * Returns a list of last loaded from API Room records\n *\n * @param {RootState} state\n * @param {{ roomIds: number }} options\n * @returns {List<RoomRecord>}\n */\nexport const lastSavedRooms = createSelector(\n  [(state, props) => ({ state, props })],\n  (stateProps: any): List<RoomRecord> => {\n    const { state, props } = stateProps;\n    const { roomIds } = props;\n    return roomIds.map((id: number) => lastSavedRoom(state, { roomId: id }));\n  },\n);\n\n/**\n * Looks for room changes\n *\n * @params {RootState} state RootState\n * @params {{}} options NONE\n * @returns {MeasurementRecord} measurement\n */\nexport const roomsChanged = (state: RootState, props: any): boolean => {\n  const measurement = currentMeasurement(state, props);\n  const lastSavedMeasurement = currentLastSavedMeasurement(state, props);\n  return recordChanged(\n    rooms(state, { roomIds: measurement?.get(\"room_ids\") || List() }),\n    lastSavedRooms(state, { roomIds: lastSavedMeasurement?.get(\"room_ids\") || List() }),\n  );\n};\n\n/**\n * Gets the current measurement's rooms\n *\n * @params {RootState} state The RootState\n * @params {{}} options NONE\n * @returns {List<EstimateSignedDocumentRecord>} List\n */\nexport const currentMeasurementRooms = createSelector(\n  [currentMeasurement, (state) => ({ state })],\n  (measurement: MeasurementRecord, { state }): List<RoomRecord> => {\n    return measurement?.room_ids.map((id) => room(state, { roomId: id }));\n  },\n);\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.userevents.min\",[\"kendo.core.min\"],e)}(function(){return function(e,t){function n(e,t){var n=e.x.location,i=e.y.location,o=t.x.location,r=t.y.location,s=n-o,a=i-r;return{center:{x:(n+o)/2,y:(i+r)/2},distance:Math.sqrt(s*s+a*a)}}function i(e){var t,n,i,o=[],r=e.originalEvent,a=e.currentTarget,c=0;if(e.api)o.push({id:2,event:e,target:e.target,currentTarget:e.target,location:e,type:\"api\"});else if(e.type.match(/touch/))for(n=r?r.changedTouches:[],t=n.length;t>c;c++)i=n[c],o.push({location:i,event:e,target:i.target,currentTarget:a,id:i.identifier,type:\"touch\"});else o.push(s.pointers||s.msPointers?{location:r,event:e,target:e.target,currentTarget:a,id:r.pointerId,type:\"pointer\"}:{id:1,event:e,target:e.target,currentTarget:a,location:e,type:\"mouse\"});return o}function o(e){for(var t=r.eventMap.up.split(\" \"),n=0,i=t.length;i>n;n++)e(t[n])}var r=window.kendo,s=r.support,a=r.Class,c=r.Observable,u=e.now,h=e.extend,l=s.mobileOS,p=l&&l.android,d=800,f=s.browser.msie?5:0,v=\"press\",g=\"hold\",m=\"select\",_=\"start\",T=\"move\",y=\"end\",x=\"cancel\",M=\"tap\",w=\"release\",E=\"gesturestart\",k=\"gesturechange\",D=\"gestureend\",C=\"gesturetap\",b={api:0,touch:0,mouse:9,pointer:9},A=!s.touch||s.mouseAndTouchPresent,I=a.extend({init:function(e,t){var n=this;n.axis=e,n._updateLocationData(t),n.startLocation=n.location,n.velocity=n.delta=0,n.timeStamp=u()},move:function(e){var t=this,n=e[\"page\"+t.axis],i=u(),o=i-t.timeStamp||1;!n&&p||(t.delta=n-t.location,t._updateLocationData(e),t.initialDelta=n-t.startLocation,t.velocity=t.delta/o,t.timeStamp=i)},_updateLocationData:function(e){var t=this,n=t.axis;t.location=e[\"page\"+n],t.client=e[\"client\"+n],t.screen=e[\"screen\"+n]}}),S=a.extend({init:function(e,t,n){h(this,{x:new I(\"X\",n.location),y:new I(\"Y\",n.location),type:n.type,useClickAsTap:e.useClickAsTap,threshold:e.threshold||b[n.type],userEvents:e,target:t,currentTarget:n.currentTarget,initialTouch:n.target,id:n.id,pressEvent:n,_moved:!1,_finished:!1})},press:function(){this._holdTimeout=setTimeout(e.proxy(this,\"_hold\"),this.userEvents.minHold),this._trigger(v,this.pressEvent)},_hold:function(){this._trigger(g,this.pressEvent)},move:function(e){var t=this;if(!t._finished){if(t.x.move(e.location),t.y.move(e.location),!t._moved){if(t._withinIgnoreThreshold())return;if(P.current&&P.current!==t.userEvents)return t.dispose();t._start(e)}t._finished||t._trigger(T,e)}},end:function(e){this.endTime=u(),this._finished||(this._finished=!0,this._trigger(w,e),this._moved?this._trigger(y,e):this.useClickAsTap||this._trigger(M,e),clearTimeout(this._holdTimeout),this.dispose())},dispose:function(){var t=this.userEvents,n=t.touches;this._finished=!0,this.pressEvent=null,clearTimeout(this._holdTimeout),n.splice(e.inArray(this,n),1)},skip:function(){this.dispose()},cancel:function(){this.dispose()},isMoved:function(){return this._moved},_start:function(e){clearTimeout(this._holdTimeout),this.startTime=u(),this._moved=!0,this._trigger(_,e)},_trigger:function(e,t){var n=this,i=t.event,o={touch:n,x:n.x,y:n.y,target:n.target,event:i};n.userEvents.notify(e,o)&&i.preventDefault()},_withinIgnoreThreshold:function(){var e=this.x.initialDelta,t=this.y.initialDelta;return Math.sqrt(e*e+t*t)<=this.threshold}}),P=c.extend({init:function(t,n){var i,a,u,l=this,p=r.guid();n=n||{},i=l.filter=n.filter,l.threshold=n.threshold||f,l.minHold=n.minHold||d,l.touches=[],l._maxTouches=n.multiTouch?2:1,l.allowSelection=n.allowSelection,l.captureUpIfMoved=n.captureUpIfMoved,l.useClickAsTap=!n.fastTap&&!s.delayedClick(),l.eventNS=p,t=e(t).handler(l),c.fn.init.call(l),h(l,{element:t,surface:e(n.global&&A?t[0].ownerDocument.documentElement:n.surface||t),stopPropagation:n.stopPropagation,pressed:!1}),l.surface.handler(l).on(r.applyEventMap(\"move\",p),\"_move\").on(r.applyEventMap(\"up cancel\",p),\"_end\"),t.on(r.applyEventMap(\"down\",p),i,\"_start\"),l.useClickAsTap&&t.on(r.applyEventMap(\"click\",p),i,\"_click\"),(s.pointers||s.msPointers)&&(11>s.browser.version?t.css(\"-ms-touch-action\",\"pinch-zoom double-tap-zoom\"):t.css(\"touch-action\",n.touchAction||\"none\")),n.preventDragEvent&&t.on(r.applyEventMap(\"dragstart\",p),r.preventDefault),t.on(r.applyEventMap(\"mousedown\",p),i,{root:t},\"_select\"),l.captureUpIfMoved&&s.eventCapture&&(a=l.surface[0],u=e.proxy(l.preventIfMoving,l),o(function(e){a.addEventListener(e,u,!0)})),l.bind([v,g,M,_,T,y,w,x,E,k,D,C,m],n)},preventIfMoving:function(e){this._isMoved()&&e.preventDefault()},destroy:function(){var e,t=this;t._destroyed||(t._destroyed=!0,t.captureUpIfMoved&&s.eventCapture&&(e=t.surface[0],o(function(n){e.removeEventListener(n,t.preventIfMoving)})),t.element.kendoDestroy(t.eventNS),t.surface.kendoDestroy(t.eventNS),t.element.removeData(\"handler\"),t.surface.removeData(\"handler\"),t._disposeAll(),t.unbind(),delete t.surface,delete t.element,delete t.currentTarget)},capture:function(){P.current=this},cancel:function(){this._disposeAll(),this.trigger(x)},notify:function(e,t){var i=this,o=i.touches;if(this._isMultiTouch()){switch(e){case T:e=k;break;case y:e=D;break;case M:e=C}h(t,{touches:o},n(o[0],o[1]))}return this.trigger(e,h(t,{type:e}))},press:function(e,t,n){this._apiCall(\"_start\",e,t,n)},move:function(e,t){this._apiCall(\"_move\",e,t)},end:function(e,t){this._apiCall(\"_end\",e,t)},_isMultiTouch:function(){return this.touches.length>1},_maxTouchesReached:function(){return this.touches.length>=this._maxTouches},_disposeAll:function(){for(var e=this.touches;e.length>0;)e.pop().dispose()},_isMoved:function(){return e.grep(this.touches,function(e){return e.isMoved()}).length},_select:function(e){this.allowSelection&&!this.trigger(m,{event:e})||e.preventDefault()},_start:function(t){var n,o,r=this,s=0,a=r.filter,c=i(t),u=c.length,h=t.which;if(!(h&&h>1||r._maxTouchesReached()))for(P.current=null,r.currentTarget=t.currentTarget,r.stopPropagation&&t.stopPropagation();u>s&&!r._maxTouchesReached();s++)o=c[s],n=a?e(o.currentTarget):r.element,n.length&&(o=new S(r,n,o),r.touches.push(o),o.press(),r._isMultiTouch()&&r.notify(\"gesturestart\",{}))},_move:function(e){this._eachTouch(\"move\",e)},_end:function(e){this._eachTouch(\"end\",e)},_click:function(t){var n={touch:{initialTouch:t.target,target:e(t.currentTarget),endTime:u(),x:{location:t.pageX,client:t.clientX},y:{location:t.pageY,client:t.clientY}},x:t.pageX,y:t.pageY,target:e(t.currentTarget),event:t,type:\"tap\"};this.trigger(\"tap\",n)&&t.preventDefault()},_eachTouch:function(e,t){var n,o,r,s,a=this,c={},u=i(t),h=a.touches;for(n=0;h.length>n;n++)o=h[n],c[o.id]=o;for(n=0;u.length>n;n++)r=u[n],s=c[r.id],s&&s[e](r)},_apiCall:function(t,n,i,o){this[t]({api:!0,pageX:n,pageY:i,clientX:n,clientY:i,target:e(o||this.element)[0],stopPropagation:e.noop,preventDefault:e.noop})}});P.defaultThreshold=function(e){f=e},P.minHold=function(e){d=e},r.getTouches=i,r.touchDelta=n,r.UserEvents=P}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.userevents.min.js.map\n","import { createSelector } from \"reselect\";\nimport { List } from \"immutable\";\nimport { RootState } from \"app2/src/reducers\";\nimport { ids } from \"app2/src/selectors/pagination.selectors\";\nimport { EstimateTemplateRecord } from \"app2/src/records/EstimateTemplate\";\nimport { recordChanged } from \"app2/src/helpers/Record\";\n\nexport const estimateTemplatesById = (state: RootState) => state.getIn([\"estimateTemplates\", \"byId\"]);\nexport const estimateTemplate = (state: RootState, props: any): EstimateTemplateRecord =>\n  state.getIn([\"estimateTemplates\", \"byId\", props.estimateTemplateId]);\nexport const lastSavedEstimateTemplate = (state: RootState, props: any) =>\n  state.getIn([\"estimateTemplates\", \"lastSavedById\", props.estimateTemplateId]);\n\nexport const estimateTemplatesSelectedIds = createSelector(\n  [\n    estimateTemplatesById,\n    (state: RootState, props: any) => ({\n      state,\n      props,\n    }),\n  ],\n  (estimateTemplatesById, stateProps: any): List<number> => {\n    const { state } = stateProps;\n    const estimateTemplateIds = ids(state, { modelName: \"estimateTemplate\" });\n    if (!estimateTemplateIds || estimateTemplateIds.size === 0) {\n      return List();\n    }\n\n    const estimateTemplates = estimateTemplateIds.map((estimateTemplateId: number) =>\n      estimateTemplatesById.get(estimateTemplateId),\n    );\n\n    return estimateTemplates\n      .filter((estimateTemplate: EstimateTemplateRecord) => {\n        return estimateTemplate.selected === true;\n      })\n      .map((estimateTemplate: EstimateTemplateRecord) => estimateTemplate.id);\n  },\n);\n\nexport const estimateTemplateChanged = createSelector(\n  [estimateTemplate, lastSavedEstimateTemplate],\n  (estimateTemplate: EstimateTemplateRecord, lastSavedEstimateTemplate: EstimateTemplateRecord) => {\n    return recordChanged(estimateTemplate, lastSavedEstimateTemplate);\n  },\n);\n\nexport const estimateTemplatesSelected = createSelector(\n  [estimateTemplatesSelectedIds],\n  (estimateTemplatesSelectedIds): boolean => {\n    return estimateTemplatesSelectedIds.size > 0;\n  },\n);\n","import * as imageActions from \"./image.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { ImageRecord, fromJSON } from \"../records/Image\";\nimport { RootState, RootActions } from \".\";\nimport { reducer as paginationReducer } from \"app2/src/reducers/pagination.reducer\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { fetch, loaded, receive, reset } from \"app2/src/reducers/Reducer\";\nimport { setDisplay } from \"app2/src/records/Image\";\nimport { Nullable } from \"app2/src/records\";\n\nexport const ImageStateRecord = Record({\n  byId: Map<number, ImageRecord>(),\n  lastSavedById: Map<number, ImageRecord>(),\n  unsavedId: -1,\n  currentImageId: null as Nullable<number>,\n  showInfo: false,\n});\n\nexport const initialState = ImageStateRecord();\n\nexport type ImageState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"images\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let image: ImageRecord;\n  switch (action.type) {\n    // VIEW\n    case imageActions.SET_CURRENT_IMAGE_ID:\n      return state.setIn([model, \"currentImageId\"], action.payload.id);\n\n    case imageActions.SET_SHOW_INFO:\n      return state.setIn([model, \"showInfo\"], action.payload.showInfo);\n\n    // SINGLE\n    case imageActions.FETCH_IMAGE:\n      return fetch(state, model, fromJSON({ id: action.payload.id }));\n\n    case imageActions.RECEIVE_IMAGE:\n      image = fromJSON({ ...action.payload.image });\n      return receive(state, model, image);\n\n    case imageActions.RESET_IMAGE:\n      return reset(state, model, action.payload.id);\n\n    case imageActions.SET_IMAGE_LOADED:\n      return loaded(state, model, action.payload.id);\n\n    case imageActions.DESTROY_IMAGE:\n      state = paginationReducer(state, paginationActions.Actions.removeId(action.payload.id, \"image\"));\n\n      return state;\n\n    case imageActions.EDIT_IMAGE:\n      return state.setIn([model, \"byId\", action.payload.id, action.payload.name], action.payload.value);\n\n    case imageActions.EDIT_BOOLEAN:\n      state = state.setIn([\"images\", \"byId\", action.payload.id, action.payload.name], action.payload.value);\n\n      const record = state.getIn([\"images\", \"byId\", action.payload.id]);\n      return state.setIn([\"images\", \"byId\", action.payload.id, \"display\"], setDisplay(record));\n\n    // MULTIPLE\n    case imageActions.FETCH_IMAGES:\n      const { ids } = action.payload;\n      ids.forEach((id) => {\n        state = reducer(state, imageActions.Actions.fetchImage(id));\n      });\n      return state;\n\n    case imageActions.RECEIVE_IMAGES:\n      action.payload.images.forEach((image) => {\n        state = reducer(state, imageActions.Actions.receiveImage(image));\n      });\n      return state;\n\n    case imageActions.SET_IMAGES_LOADED:\n      action.payload.ids.forEach((id) => {\n        state = reducer(state, imageActions.Actions.setImageLoaded(id));\n      });\n\n      return state;\n\n    case imageActions.BATCH_EDIT_BOOLEAN:\n      action.payload.imageIds.forEach((id) => {\n        state = reducer(state, imageActions.Actions.editBoolean(id, action.payload.name, action.payload.value));\n      });\n      return state;\n\n    case imageActions.BATCH_EDIT_FOLDER_ID:\n      action.payload.imageIds.forEach((id) => {\n        state = state.setIn([\"images\", \"byId\", id, \"folder_id\"], action.payload.folderId);\n      });\n      return state;\n\n    case imageActions.BATCH_REMOVE_IDS:\n      action.payload.imageIds.forEach((id) => {\n        state = paginationReducer(state, paginationActions.Actions.removeId(id, \"image\"));\n      });\n\n      return state;\n\n    // ESTIMATE\n    case imageActions.DUPLICATE_LINE_ITEM_IMAGES:\n      const lineItem = state.getIn([\"estimateLineItems\", \"byId\", action.payload.lineItemId]);\n\n      let imgIds = List();\n      let unsavedId = state.getIn([model, \"unsavedId\"]);\n      action.payload.imageIds.map((imageId: number) => {\n        let image = state.getIn([model, \"byId\", imageId]);\n        image = image.set(\"id\", unsavedId);\n        imgIds = imgIds.push(unsavedId);\n        state = state.setIn([model, \"byId\", image.id], image);\n        unsavedId -= 1;\n      });\n\n      return state\n        .setIn([\"estimateLineItems\", \"byId\", lineItem.id, \"image_ids\"], imgIds)\n        .setIn([model, \"unsavedId\"], unsavedId);\n\n    default:\n      return state;\n  }\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IDeckData } from \"../records/Deck\";\n\nexport const RECEIVE_DECK = \"@decks/RECEIVE_DECK\";\nexport const EDIT_DECK = \"@decks/EDIT_DECK\";\n\nexport const Actions = {\n  receiveDeck: (deck: Partial<IDeckData>) => createAction(RECEIVE_DECK, { deck }),\n  editDeck: (deck: Partial<IDeckData>) => createAction(EDIT_DECK, { deck }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.mobile.actionsheet.min\",[\"kendo.mobile.popover.min\",\"kendo.mobile.shim.min\"],e)}(function(){return function(e,t){var n=window.kendo,i=n.support,o=n.mobile.ui,s=o.Shim,a=o.Popup,c=o.Widget,r=\"open\",l=\"close\",h=\"command\",p=\"li>a\",d=\"actionsheetContext\",u='<div class=\"km-actionsheet-wrapper\" />',m=n.template('<li class=\"km-actionsheet-cancel\"><a href=\"\\\\#\">#:cancel#</a></li>'),f=c.extend({init:function(t,r){var l,h,d,f=this,g=i.mobileOS;c.fn.init.call(f,t,r),r=f.options,d=r.type,t=f.element,h=\"auto\"===d?g&&g.tablet:\"tablet\"===d,l=h?a:s,r.cancelTemplate&&(m=n.template(r.cancelTemplate)),t.addClass(\"km-actionsheet\").append(m({cancel:f.options.cancel})).wrap(u).on(\"up\",p,\"_click\").on(\"click\",p,n.preventDefault),f.view().bind(\"destroy\",function(){f.destroy()}),f.wrapper=t.parent().addClass(d?\" km-actionsheet-\"+d:\"\"),f.shim=new l(f.wrapper,e.extend({modal:g.ios&&7>g.majorVersion,className:\"km-actionsheet-root\"},f.options.popup)),f._closeProxy=e.proxy(f,\"_close\"),f._shimHideProxy=e.proxy(f,\"_shimHide\"),f.shim.bind(\"hide\",f._shimHideProxy),h&&n.onResize(f._closeProxy),n.notify(f,o)},events:[r,l,h],options:{name:\"ActionSheet\",cancel:\"Cancel\",type:\"auto\",popup:{height:\"auto\"}},open:function(t,n){var i=this;i.target=e(t),i.context=n,i.shim.show(t)},close:function(){this.context=this.target=null,this.shim.hide()},openFor:function(e){var t=this,n=e.data(d);t.open(e,n),t.trigger(r,{target:e,context:n})},destroy:function(){c.fn.destroy.call(this),n.unbindResize(this._closeProxy),this.shim.destroy()},_click:function(t){var i,o,s,a;t.isDefaultPrevented()||(i=e(t.currentTarget),o=i.data(\"action\"),o&&(s={target:this.target,context:this.context},a=this.options.$angular,a?this.element.injector().get(\"$parse\")(o)(a[0])(s):n.getter(o)(window)(s)),this.trigger(h,{target:this.target,context:this.context,currentTarget:i}),t.preventDefault(),this._close())},_shimHide:function(e){this.trigger(l)?e.preventDefault():this.context=this.target=null},_close:function(e){this.trigger(l)?e.preventDefault():this.close()}});o.plugin(f)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.mobile.actionsheet.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.core.min\",[\"jquery\"],e)}(function(){return function(e,t,n){function r(){}function o(e,t){if(t)return\"'\"+e.split(\"'\").join(\"\\\\'\").split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\")+\"'\";var n=e.charAt(0),r=e.substring(1);return\"=\"===n?\"+(\"+r+\")+\":\":\"===n?\"+$kendoHtmlEncode(\"+r+\")+\":\";\"+e+\";$kendoOutput+=\"}function i(e,t,n){return e+=\"\",t=t||2,n=t-e.length,n?W[t].substring(0,n)+e:e}function a(e){var t=e.css(ye.support.transitions.css+\"box-shadow\")||e.css(\"box-shadow\"),n=t?t.match(De)||[0,0,0,0,0]:[0,0,0,0,0],r=Te.max(+n[3],+(n[4]||0));return{left:-n[1]+r,right:+n[1]+r,bottom:+n[2]+r}}function s(t,n){var r,o,i,s,u,l,c,d,f=ke.browser,m=\"rtl\"==t.css(\"direction\");return t.parent().hasClass(\"k-animation-container\")?(c=t.parent(\".k-animation-container\"),d=c[0].style,c.is(\":hidden\")&&c.show(),r=Oe.test(d.width)||Oe.test(d.height),r||c.css({width:t.outerWidth(),height:t.outerHeight(),boxSizing:\"content-box\",mozBoxSizing:\"content-box\",webkitBoxSizing:\"content-box\"})):(o=a(t),i=t[0].style.width,s=t[0].style.height,u=Oe.test(i),l=Oe.test(s),f.opera&&(o.left=o.right=o.bottom=5),r=u||l,!u&&(!n||n&&i)&&(i=t.outerWidth()),!l&&(!n||n&&s)&&(s=t.outerHeight()),t.wrap(e(\"<div/>\").addClass(\"k-animation-container\").css({width:i,height:s,marginLeft:o.left*(m?1:-1),paddingLeft:o.left,paddingRight:o.right,paddingBottom:o.bottom})),r&&t.css({width:\"100%\",height:\"100%\",boxSizing:\"border-box\",mozBoxSizing:\"border-box\",webkitBoxSizing:\"border-box\"})),f.msie&&Te.floor(f.version)<=7&&(t.css({zoom:1}),t.children(\".k-menu\").width(t.width())),t.parent()}function u(e){var t=1,n=arguments.length;for(t=1;n>t;t++)l(e,arguments[t]);return e}function l(e,t){var n,r,o,i,a,s=ye.data.ObservableArray,u=ye.data.LazyObservableArray,c=ye.data.DataSource,d=ye.data.HierarchicalDataSource;for(n in t)r=t[n],o=typeof r,i=o===_e&&null!==r?r.constructor:null,i&&i!==Array&&i!==s&&i!==u&&i!==c&&i!==d?r instanceof Date?e[n]=new Date(r.getTime()):A(r.clone)?e[n]=r.clone():(a=e[n],e[n]=typeof a===_e?a||{}:{},l(e[n],r)):o!==Fe&&(e[n]=r);return e}function c(e,t,r){for(var o in t)if(t.hasOwnProperty(o)&&t[o].test(e))return o;return r!==n?r:e}function d(e){return e.replace(/([a-z][A-Z])/g,function(e){return e.charAt(0)+\"-\"+e.charAt(1).toLowerCase()})}function f(e){return e.replace(/\\-(\\w)/g,function(e,t){return t.toUpperCase()})}function m(t,n){var r,o={};return document.defaultView&&document.defaultView.getComputedStyle?(r=document.defaultView.getComputedStyle(t,\"\"),n&&e.each(n,function(e,t){o[t]=r.getPropertyValue(t)})):(r=t.currentStyle,n&&e.each(n,function(e,t){o[t]=r[f(t)]})),ye.size(o)||(o=r),o}function p(e){if(e&&e.className&&\"string\"==typeof e.className&&e.className.indexOf(\"k-auto-scrollable\")>-1)return!0;var t=m(e,[\"overflow\"]).overflow;return\"auto\"==t||\"scroll\"==t}function h(t,r){var o,i=ke.browser.webkit,a=ke.browser.mozilla,s=t instanceof e?t[0]:t;if(t)return o=ke.isRtl(t),r===n?o&&i?s.scrollWidth-s.clientWidth-s.scrollLeft:Math.abs(s.scrollLeft):(s.scrollLeft=o&&i?s.scrollWidth-s.clientWidth-r:o&&a?-r:r,n)}function g(e){var t,n=0;for(t in e)e.hasOwnProperty(t)&&\"toJSON\"!=t&&n++;return n}function y(e,n,r){var o,i;return n||(n=\"offset\"),o=e[n](),ke.mobileOS.android&&(o.top-=t.scrollY,o.left-=t.scrollX),ke.browser.msie&&(ke.pointers||ke.msPointers)&&!r&&(i=ke.isRtl(e)?1:-1,o.top-=t.pageYOffset+i*document.documentElement.scrollTop,o.left-=t.pageXOffset+i*document.documentElement.scrollLeft),o}function v(e){var t={};return be(\"string\"==typeof e?e.split(\" \"):e,function(e){t[e]=this}),t}function b(e){return new ye.effects.Element(e)}function w(e,t,n,r){return typeof e===He&&(A(t)&&(r=t,t=400,n=!1),A(n)&&(r=n,n=!1),typeof t===Pe&&(n=t,t=400),e={effects:e,duration:t,reverse:n,complete:r}),ve({effects:{},duration:400,reverse:!1,init:Se,teardown:Se,hide:!1},e,{completeCallback:e.complete,complete:Se})}function M(t,n,r,o,i){for(var a,s=0,u=t.length;u>s;s++)a=e(t[s]),a.queue(function(){B.promise(a,w(n,r,o,i))});return t}function S(e,t,n,r){return t&&(t=t.split(\" \"),be(t,function(t,n){e.toggleClass(n,r)})),e}function T(e){return(\"\"+e).replace(Y,\"&amp;\").replace(J,\"&lt;\").replace(G,\"&gt;\").replace(q,\"&quot;\").replace(V,\"&#39;\")}function x(e,t){var r;return 0===t.indexOf(\"data\")&&(t=t.substring(4),t=t.charAt(0).toLowerCase()+t.substring(1)),t=t.replace(oe,\"-$1\"),r=e.getAttribute(\"data-\"+ye.ns+t),null===r?r=n:\"null\"===r?r=null:\"true\"===r?r=!0:\"false\"===r?r=!1:Ce.test(r)?r=parseFloat(r):ne.test(r)&&!re.test(r)&&(r=Function(\"return (\"+r+\")\")()),r}function k(t,r){var o,i,a={};for(o in r)i=x(t,o),i!==n&&(te.test(o)&&(i=ye.template(e(\"#\"+i).html())),a[o]=i);return a}function O(t,n){return e.contains(t,n)?-1:1}function z(){var t=e(this);return e.inArray(t.attr(\"data-\"+ye.ns+\"role\"),[\"slider\",\"rangeslider\"])>-1||t.is(\":visible\")}function D(e,t){var n=e.nodeName.toLowerCase();return(/input|select|textarea|button|object/.test(n)?!e.disabled:\"a\"===n?e.href||t:t)&&C(e)}function C(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return\"hidden\"===e.css(this,\"visibility\")}).length}function E(e,t){return new E.fn.init(e,t)}var H,A,_,N,P,F,R,U,I,$,L,W,j,B,Y,J,q,V,G,K,Q,Z,X,ee,te,ne,re,oe,ie,ae,se,ue,le,ce,de,fe,me,pe,he,ge,ye=t.kendo=t.kendo||{cultures:{}},ve=e.extend,be=e.each,we=e.isArray,Me=e.proxy,Se=e.noop,Te=Math,xe=t.JSON||{},ke={},Oe=/%/,ze=/\\{(\\d+)(:[^\\}]+)?\\}/g,De=/(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i,Ce=/^(\\+|-?)\\d+(\\.?)\\d*$/,Ee=\"function\",He=\"string\",Ae=\"number\",_e=\"object\",Ne=\"null\",Pe=\"boolean\",Fe=\"undefined\",Re={},Ue={},Ie=[].slice;ye.version=\"2016.3.914\".replace(/^\\s+|\\s+$/g,\"\"),r.extend=function(e){var t,n,r=function(){},o=this,i=e&&e.init?e.init:function(){o.apply(this,arguments)};r.prototype=o.prototype,n=i.fn=i.prototype=new r;for(t in e)n[t]=null!=e[t]&&e[t].constructor===Object?ve(!0,{},r.prototype[t],e[t]):e[t];return n.constructor=i,i.extend=o.extend,i},r.prototype._initOptions=function(e){this.options=u({},this.options,e)},A=ye.isFunction=function(e){return\"function\"==typeof e},_=function(){this._defaultPrevented=!0},N=function(){return this._defaultPrevented===!0},P=r.extend({init:function(){this._events={}},bind:function(e,t,r){var o,i,a,s,u,l=this,c=typeof e===He?[e]:e,d=typeof t===Ee;if(t===n){for(o in e)l.bind(o,e[o]);return l}for(o=0,i=c.length;i>o;o++)e=c[o],s=d?t:t[e],s&&(r&&(a=s,s=function(){l.unbind(e,s),a.apply(l,arguments)},s.original=a),u=l._events[e]=l._events[e]||[],u.push(s));return l},one:function(e,t){return this.bind(e,t,!0)},first:function(e,t){var n,r,o,i,a=this,s=typeof e===He?[e]:e,u=typeof t===Ee;for(n=0,r=s.length;r>n;n++)e=s[n],o=u?t:t[e],o&&(i=a._events[e]=a._events[e]||[],i.unshift(o));return a},trigger:function(e,t){var n,r,o=this,i=o._events[e];if(i){for(t=t||{},t.sender=o,t._defaultPrevented=!1,t.preventDefault=_,t.isDefaultPrevented=N,i=i.slice(),n=0,r=i.length;r>n;n++)i[n].call(o,t);return t._defaultPrevented===!0}return!1},unbind:function(e,t){var r,o=this,i=o._events[e];if(e===n)o._events={};else if(i)if(t)for(r=i.length-1;r>=0;r--)i[r]!==t&&i[r].original!==t||i.splice(r,1);else o._events[e]=[];return o}}),F=/^\\w+/,R=/\\$\\{([^}]*)\\}/g,U=/\\\\\\}/g,I=/__CURLY__/g,$=/\\\\#/g,L=/__SHARP__/g,W=[\"\",\"0\",\"00\",\"000\",\"0000\"],H={paramName:\"data\",useWithBlock:!0,render:function(e,t){var n,r,o=\"\";for(n=0,r=t.length;r>n;n++)o+=e(t[n]);return o},compile:function(e,t){var n,r,i,a=ve({},this,t),s=a.paramName,u=s.match(F)[0],l=a.useWithBlock,c=\"var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;\";if(A(e))return e;for(c+=l?\"with(\"+s+\"){\":\"\",c+=\"$kendoOutput=\",r=e.replace(U,\"__CURLY__\").replace(R,\"#=$kendoHtmlEncode($1)#\").replace(I,\"}\").replace($,\"__SHARP__\").split(\"#\"),i=0;r.length>i;i++)c+=o(r[i],i%2===0);c+=l?\";}\":\";\",c+=\"return $kendoOutput;\",c=c.replace(L,\"#\");try{return n=Function(u,c),n._slotCount=Math.floor(r.length/2),n}catch(d){throw Error(ye.format(\"Invalid template:'{0}' Generated code:'{1}'\",e,c))}}},function(){function e(e){return a.lastIndex=0,a.test(e)?'\"'+e.replace(a,function(e){var t=s[e];return typeof t===He?t:\"\\\\u\"+(\"0000\"+e.charCodeAt(0).toString(16)).slice(-4)})+'\"':'\"'+e+'\"'}function t(i,a){var s,l,c,d,f,m,p=n,h=a[i];if(h&&typeof h===_e&&typeof h.toJSON===Ee&&(h=h.toJSON(i)),typeof o===Ee&&(h=o.call(a,i,h)),m=typeof h,m===He)return e(h);if(m===Ae)return isFinite(h)?h+\"\":Ne;if(m===Pe||m===Ne)return h+\"\";if(m===_e){if(!h)return Ne;if(n+=r,f=[],\"[object Array]\"===u.apply(h)){for(d=h.length,s=0;d>s;s++)f[s]=t(s,h)||Ne;return c=0===f.length?\"[]\":n?\"[\\n\"+n+f.join(\",\\n\"+n)+\"\\n\"+p+\"]\":\"[\"+f.join(\",\")+\"]\",n=p,c}if(o&&typeof o===_e)for(d=o.length,s=0;d>s;s++)typeof o[s]===He&&(l=o[s],c=t(l,h),c&&f.push(e(l)+(n?\": \":\":\")+c));else for(l in h)Object.hasOwnProperty.call(h,l)&&(c=t(l,h),c&&f.push(e(l)+(n?\": \":\":\")+c));return c=0===f.length?\"{}\":n?\"{\\n\"+n+f.join(\",\\n\"+n)+\"\\n\"+p+\"}\":\"{\"+f.join(\",\")+\"}\",n=p,c}}var n,r,o,a=/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,s={\"\\b\":\"\\\\b\",\"\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},u={}.toString;typeof Date.prototype.toJSON!==Ee&&(Date.prototype.toJSON=function(){var e=this;return isFinite(e.valueOf())?i(e.getUTCFullYear(),4)+\"-\"+i(e.getUTCMonth()+1)+\"-\"+i(e.getUTCDate())+\"T\"+i(e.getUTCHours())+\":\"+i(e.getUTCMinutes())+\":\"+i(e.getUTCSeconds())+\"Z\":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()}),typeof xe.stringify!==Ee&&(xe.stringify=function(e,i,a){var s;if(n=\"\",r=\"\",typeof a===Ae)for(s=0;a>s;s+=1)r+=\" \";else typeof a===He&&(r=a);if(o=i,i&&typeof i!==Ee&&(typeof i!==_e||typeof i.length!==Ae))throw Error(\"JSON.stringify\");return t(\"\",{\"\":e})})}(),function(){function e(e){if(e){if(e.numberFormat)return e;if(typeof e===He){var t=ye.cultures;return t[e]||t[e.split(\"-\")[0]]||null}return null}return null}function t(t){return t&&(t=e(t)),t||ye.cultures.current}function r(e,r,o){o=t(o);var a=o.calendars.standard,s=a.days,u=a.months;return r=a.patterns[r]||r,r.replace(l,function(t){var r,o,l;return\"d\"===t?o=e.getDate():\"dd\"===t?o=i(e.getDate()):\"ddd\"===t?o=s.namesAbbr[e.getDay()]:\"dddd\"===t?o=s.names[e.getDay()]:\"M\"===t?o=e.getMonth()+1:\"MM\"===t?o=i(e.getMonth()+1):\"MMM\"===t?o=u.namesAbbr[e.getMonth()]:\"MMMM\"===t?o=u.names[e.getMonth()]:\"yy\"===t?o=i(e.getFullYear()%100):\"yyyy\"===t?o=i(e.getFullYear(),4):\"h\"===t?o=e.getHours()%12||12:\"hh\"===t?o=i(e.getHours()%12||12):\"H\"===t?o=e.getHours():\"HH\"===t?o=i(e.getHours()):\"m\"===t?o=e.getMinutes():\"mm\"===t?o=i(e.getMinutes()):\"s\"===t?o=e.getSeconds():\"ss\"===t?o=i(e.getSeconds()):\"f\"===t?o=Te.floor(e.getMilliseconds()/100):\"ff\"===t?(o=e.getMilliseconds(),o>99&&(o=Te.floor(o/10)),o=i(o)):\"fff\"===t?o=i(e.getMilliseconds(),3):\"tt\"===t?o=e.getHours()<12?a.AM[0]:a.PM[0]:\"zzz\"===t?(r=e.getTimezoneOffset(),l=0>r,o=(\"\"+Te.abs(r/60)).split(\".\")[0],r=Te.abs(r)-60*o,o=(l?\"+\":\"-\")+i(o),o+=\":\"+i(r)):\"zz\"!==t&&\"z\"!==t||(o=e.getTimezoneOffset()/60,l=0>o,o=(\"\"+Te.abs(o)).split(\".\")[0],o=(l?\"+\":\"-\")+(\"zz\"===t?i(o):o)),o!==n?o:t.slice(1,t.length-1)})}function o(e,r,o){o=t(o);var i,u,l,b,w,M,S,T,x,k,O,z,D,C,E,H,A,_,N,P,F,R,U,I=o.numberFormat,$=I[p],L=I.decimals,W=I.pattern[0],j=[],B=0>e,Y=m,J=m,q=-1;if(e===n)return m;if(!isFinite(e))return e;if(!r)return o.name.length?e.toLocaleString():\"\"+e;if(w=c.exec(r)){if(r=w[1].toLowerCase(),u=\"c\"===r,l=\"p\"===r,(u||l)&&(I=u?I.currency:I.percent,$=I[p],L=I.decimals,i=I.symbol,W=I.pattern[B?0:1]),b=w[2],b&&(L=+b),\"e\"===r)return b?e.toExponential(L):e.toExponential();if(l&&(e*=100),e=s(e,L),B=0>e,e=e.split(p),M=e[0],S=e[1],B&&(M=M.substring(1)),J=a(M,0,M.length,I),S&&(J+=$+S),\"n\"===r&&!B)return J;for(e=m,k=0,O=W.length;O>k;k++)z=W.charAt(k),e+=\"n\"===z?J:\"$\"===z||\"%\"===z?i:z;return e}if(B&&(e=-e),(r.indexOf(\"'\")>-1||r.indexOf('\"')>-1||r.indexOf(\"\\\\\")>-1)&&(r=r.replace(d,function(e){var t=e.charAt(0).replace(\"\\\\\",\"\"),n=e.slice(1).replace(t,\"\");return j.push(n),v})),r=r.split(\";\"),B&&r[1])r=r[1],C=!0;else if(0===e){if(r=r[2]||r[0],-1==r.indexOf(g)&&-1==r.indexOf(y))return r}else r=r[0];if(P=r.indexOf(\"%\"),F=r.indexOf(\"$\"),l=-1!=P,u=-1!=F,l&&(e*=100),u&&\"\\\\\"===r[F-1]&&(r=r.split(\"\\\\\").join(\"\"),u=!1),(u||l)&&(I=u?I.currency:I.percent,$=I[p],L=I.decimals,i=I.symbol),D=r.indexOf(h)>-1,D&&(r=r.replace(f,m)),E=r.indexOf(p),O=r.length,-1!=E?(S=(\"\"+e).split(\"e\"),S=S[1]?s(e,Math.abs(S[1])):S[0],S=S.split(p)[1]||m,A=r.lastIndexOf(y)-E,H=r.lastIndexOf(g)-E,_=A>-1,N=H>-1,k=S.length,_||N||(r=r.substring(0,E)+r.substring(E+1),O=r.length,E=-1,k=0),_&&A>H?k=A:H>A&&(N&&k>H?k=H:_&&A>k&&(k=A)),k>-1&&(e=s(e,k))):e=s(e),H=r.indexOf(g),R=A=r.indexOf(y),q=-1==H&&-1!=A?A:-1!=H&&-1==A?H:H>A?A:H,H=r.lastIndexOf(g),A=r.lastIndexOf(y),U=-1==H&&-1!=A?A:-1!=H&&-1==A?H:H>A?H:A,q==O&&(U=q),-1!=q){for(J=(\"\"+e).split(p),M=J[0],S=J[1]||m,T=M.length,x=S.length,B&&-1*e>=0&&(B=!1),e=r.substring(0,q),B&&!C&&(e+=\"-\"),k=q;O>k;k++){if(z=r.charAt(k),-1==E){if(T>U-k){e+=M;break}}else if(-1!=A&&k>A&&(Y=m),T>=E-k&&E-k>-1&&(e+=M,k=E),E===k){e+=(S?$:m)+S,k+=U-E+1;continue}z===y?(e+=z,Y=z):z===g&&(e+=Y)}if(D&&(e=a(e,q+(B?1:0),Math.max(U,T+q),I)),U>=q&&(e+=r.substring(U+1)),u||l){for(J=m,k=0,O=e.length;O>k;k++)z=e.charAt(k),J+=\"$\"===z||\"%\"===z?i:z;e=J}if(O=j.length)for(k=0;O>k;k++)e=e.replace(v,j[k])}return e}var a,s,u,l=/dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g,c=/^(n|c|p|e)(\\d*)$/i,d=/(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g,f=/\\,/g,m=\"\",p=\".\",h=\",\",g=\"#\",y=\"0\",v=\"??\",b=\"en-US\",w={}.toString;ye.cultures[\"en-US\"]={name:b,numberFormat:{pattern:[\"-n\"],decimals:2,\",\":\",\",\".\":\".\",groupSize:[3],percent:{pattern:[\"-n %\",\"n %\"],decimals:2,\",\":\",\",\".\":\".\",groupSize:[3],symbol:\"%\"},currency:{name:\"US Dollar\",abbr:\"USD\",pattern:[\"($n)\",\"$n\"],decimals:2,\",\":\",\",\".\":\".\",groupSize:[3],symbol:\"$\"}},calendars:{standard:{days:{names:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],namesAbbr:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],namesShort:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"]},months:{names:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],namesAbbr:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]},AM:[\"AM\",\"am\",\"AM\"],PM:[\"PM\",\"pm\",\"PM\"],patterns:{d:\"M/d/yyyy\",D:\"dddd, MMMM dd, yyyy\",F:\"dddd, MMMM dd, yyyy h:mm:ss tt\",g:\"M/d/yyyy h:mm tt\",G:\"M/d/yyyy h:mm:ss tt\",m:\"MMMM dd\",M:\"MMMM dd\",s:\"yyyy'-'MM'-'ddTHH':'mm':'ss\",t:\"h:mm tt\",T:\"h:mm:ss tt\",u:\"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",y:\"MMMM, yyyy\",Y:\"MMMM, yyyy\"},\"/\":\"/\",\":\":\":\",firstDay:0,twoDigitYearMax:2029}}},ye.culture=function(t){var r,o=ye.cultures;return t===n?o.current:(r=e(t)||o[b],r.calendar=r.calendars.standard,o.current=r,n)},ye.findCulture=e,ye.getCulture=t,ye.culture(b),a=function(e,t,r,o){var i,a,s,u,l,c,d=e.indexOf(o[p]),f=o.groupSize.slice(),m=f.shift();if(r=-1!==d?d:r+1,i=e.substring(t,r),a=i.length,a>=m){for(s=a,u=[];s>-1;)if(l=i.substring(s-m,s),l&&u.push(l),s-=m,c=f.shift(),m=c!==n?c:m,0===m){u.push(i.substring(0,s));break}i=u.reverse().join(o[h]),e=e.substring(0,t)+i+e.substring(r)}return e},s=function(e,t){return t=t||0,e=(\"\"+e).split(\"e\"),e=Math.round(+(e[0]+\"e\"+(e[1]?+e[1]+t:t))),e=(\"\"+e).split(\"e\"),e=+(e[0]+\"e\"+(e[1]?+e[1]-t:-t)),e.toFixed(Math.min(t,20))},u=function(e,t,i){if(t){if(\"[object Date]\"===w.call(e))return r(e,t,i);if(typeof e===Ae)return o(e,t,i)}return e!==n?e:\"\"},ye.format=function(e){var t=arguments;return e.replace(ze,function(e,n,r){var o=t[parseInt(n,10)+1];return u(o,r?r.substring(1):\"\")})},ye._extractFormat=function(e){return\"{0:\"===e.slice(0,3)&&(e=e.slice(3,e.length-1)),e},ye._activeElement=function(){try{return document.activeElement}catch(e){return document.documentElement.activeElement}},ye._round=s,ye.toString=u}(),function(){function t(e,t,n){return!(e>=t&&n>=e)}function r(e){return e.charAt(0)}function o(t){return e.map(t,r)}function i(e,t){t||23!==e.getHours()||e.setHours(e.getHours()+2)}function a(e){for(var t=0,n=e.length,r=[];n>t;t++)r[t]=(e[t]+\"\").toLowerCase();return r}function s(e){var t,n={};for(t in e)n[t]=a(e[t]);return n}function u(e,r,a){if(!e)return null;var u,l,c,d,f,h,g,y,v,w,M,S,T,x=function(e){for(var t=0;r[F]===e;)t++,F++;return t>0&&(F-=1),t},k=function(t){var n=b[t]||RegExp(\"^\\\\d{1,\"+t+\"}\"),r=e.substr(R,t).match(n);return r?(r=r[0],R+=r.length,parseInt(r,10)):null},O=function(t,n){for(var r,o,i,a=0,s=t.length,u=0,l=0;s>a;a++)r=t[a],o=r.length,i=e.substr(R,o),n&&(i=i.toLowerCase()),i==r&&o>u&&(u=o,l=a);return u?(R+=u,l+1):null},z=function(){var t=!1;return e.charAt(R)===r[F]&&(R++,t=!0),t},D=a.calendars.standard,C=null,E=null,H=null,A=null,_=null,N=null,P=null,F=0,R=0,U=!1,I=new Date,$=D.twoDigitYearMax||2029,L=I.getFullYear();for(r||(r=\"d\"),d=D.patterns[r],d&&(r=d),r=r.split(\"\"),c=r.length;c>F;F++)if(u=r[F],U)\"'\"===u?U=!1:z();else if(\"d\"===u){if(l=x(\"d\"),D._lowerDays||(D._lowerDays=s(D.days)),null!==H&&l>2)continue;if(H=3>l?k(2):O(D._lowerDays[3==l?\"namesAbbr\":\"names\"],!0),null===H||t(H,1,31))return null}else if(\"M\"===u){if(l=x(\"M\"),D._lowerMonths||(D._lowerMonths=s(D.months)),E=3>l?k(2):O(D._lowerMonths[3==l?\"namesAbbr\":\"names\"],!0),null===E||t(E,1,12))return null;E-=1}else if(\"y\"===u){if(l=x(\"y\"),C=k(l),null===C)return null;2==l&&(\"string\"==typeof $&&($=L+parseInt($,10)),C=L-L%100+C,C>$&&(C-=100))}else if(\"h\"===u){if(x(\"h\"),A=k(2),12==A&&(A=0),null===A||t(A,0,11))return null}else if(\"H\"===u){if(x(\"H\"),A=k(2),null===A||t(A,0,23))return null}else if(\"m\"===u){if(x(\"m\"),_=k(2),null===_||t(_,0,59))return null}else if(\"s\"===u){if(x(\"s\"),N=k(2),null===N||t(N,0,59))return null}else if(\"f\"===u){if(l=x(\"f\"),T=e.substr(R,l).match(b[3]),P=k(l),null!==P&&(P=parseFloat(\"0.\"+T[0],10),P=ye._round(P,3),P*=1e3),null===P||t(P,0,999))return null}else if(\"t\"===u){if(l=x(\"t\"),y=D.AM,v=D.PM,1===l&&(y=o(y),v=o(v)),f=O(v),!f&&!O(y))return null}else if(\"z\"===u){if(h=!0,l=x(\"z\"),\"Z\"===e.substr(R,1)){z();continue}if(g=e.substr(R,6).match(l>2?p:m),!g)return null;if(g=g[0].split(\":\"),w=g[0],M=g[1],!M&&w.length>3&&(R=w.length-2,M=w.substring(R),w=w.substring(0,R)),w=parseInt(w,10),t(w,-12,13))return null;if(l>2&&(M=parseInt(M,10),isNaN(M)||t(M,0,59)))return null}else if(\"'\"===u)U=!0,z();else if(!z())return null;return S=null!==A||null!==_||N||null,null===C&&null===E&&null===H&&S?(C=L,E=I.getMonth(),H=I.getDate()):(null===C&&(C=L),null===H&&(H=1)),f&&12>A&&(A+=12),h?(w&&(A+=-w),M&&(_+=-M),e=new Date(Date.UTC(C,E,H,A,_,N,P))):(e=new Date(C,E,H,A,_,N,P),i(e,A)),100>C&&e.setFullYear(C),e.getDate()!==H&&h===n?null:e}function l(e){var t=\"-\"===e.substr(0,1)?-1:1;return e=e.substring(1),e=60*parseInt(e.substr(0,2),10)+parseInt(e.substring(2),10),t*e}function c(e){var t,n,r,o=Te.max(y.length,v.length),i=e.calendar.patterns,a=[];for(r=0;o>r;r++){for(t=y[r],n=0;t.length>n;n++)a.push(i[t[n]]);a=a.concat(v[r])}return a}var d=/\\u00A0/g,f=/[eE][\\-+]?[0-9]+/,m=/[+|\\-]\\d{1,2}/,p=/[+|\\-]\\d{1,2}:?\\d{2}/,h=/^\\/Date\\((.*?)\\)\\/$/,g=/[+-]\\d*/,y=[[],[\"G\",\"g\",\"F\"],[\"D\",\"d\",\"y\",\"m\",\"T\",\"t\"]],v=[[\"yyyy-MM-ddTHH:mm:ss.fffffffzzz\",\"yyyy-MM-ddTHH:mm:ss.fffffff\",\"yyyy-MM-ddTHH:mm:ss.fffzzz\",\"yyyy-MM-ddTHH:mm:ss.fff\",\"ddd MMM dd yyyy HH:mm:ss\",\"yyyy-MM-ddTHH:mm:sszzz\",\"yyyy-MM-ddTHH:mmzzz\",\"yyyy-MM-ddTHH:mmzz\",\"yyyy-MM-ddTHH:mm:ss\",\"yyyy-MM-dd HH:mm:ss\",\"yyyy/MM/dd HH:mm:ss\"],[\"yyyy-MM-ddTHH:mm\",\"yyyy-MM-dd HH:mm\",\"yyyy/MM/dd HH:mm\"],[\"yyyy/MM/dd\",\"yyyy-MM-dd\",\"HH:mm:ss\",\"HH:mm\"]],b={2:/^\\d{1,2}/,3:/^\\d{1,3}/,4:/^\\d{4}/},w={}.toString;ye.parseDate=function(e,t,n){var r,o,i,a;if(\"[object Date]\"===w.call(e))return e;if(r=0,o=null,e&&0===e.indexOf(\"/D\")&&(o=h.exec(e)))return o=o[1],a=g.exec(o.substring(1)),o=new Date(parseInt(o,10)),a&&(a=l(a[0]),o=ye.timezone.apply(o,0),o=ye.timezone.convert(o,0,-1*a)),o;for(n=ye.getCulture(n),t||(t=c(n)),t=we(t)?t:[t],i=t.length;i>r;r++)if(o=u(e,t[r],n))return o;return o},ye.parseInt=function(e,t){var n=ye.parseFloat(e,t);return n&&(n=0|n),n},ye.parseFloat=function(e,t,n){if(!e&&0!==e)return null;if(typeof e===Ae)return e;e=\"\"+e,t=ye.getCulture(t);var r,o,i=t.numberFormat,a=i.percent,s=i.currency,u=s.symbol,l=a.symbol,c=e.indexOf(\"-\");return f.test(e)?(e=parseFloat(e.replace(i[\".\"],\".\")),isNaN(e)&&(e=null),e):c>0?null:(c=c>-1,e.indexOf(u)>-1||n&&n.toLowerCase().indexOf(\"c\")>-1?(i=s,r=i.pattern[0].replace(\"$\",u).split(\"n\"),e.indexOf(r[0])>-1&&e.indexOf(r[1])>-1&&(e=e.replace(r[0],\"\").replace(r[1],\"\"),c=!0)):e.indexOf(l)>-1&&(o=!0,i=a,u=l),e=e.replace(\"-\",\"\").replace(u,\"\").replace(d,\" \").split(i[\",\"].replace(d,\" \")).join(\"\").replace(i[\".\"],\".\"),e=parseFloat(e),isNaN(e)?e=null:c&&(e*=-1),e&&o&&(e/=100),e)}}(),function(){var r,o,i,a,s,u,l;ke._scrollbar=n,ke.scrollbar=function(e){if(isNaN(ke._scrollbar)||e){var t,n=document.createElement(\"div\");return n.style.cssText=\"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\",n.innerHTML=\"&nbsp;\",document.body.appendChild(n),ke._scrollbar=t=n.offsetWidth-n.scrollWidth,document.body.removeChild(n),t}return ke._scrollbar},ke.isRtl=function(t){return e(t).closest(\".k-rtl\").length>0},r=document.createElement(\"table\");try{r.innerHTML=\"<tr><td></td></tr>\",ke.tbodyInnerHtml=!0}catch(d){ke.tbodyInnerHtml=!1}ke.touch=\"ontouchstart\"in t,ke.msPointers=t.MSPointerEvent,ke.pointers=t.PointerEvent,o=ke.transitions=!1,i=ke.transforms=!1,a=\"HTMLElement\"in t?HTMLElement.prototype:[],ke.hasHW3D=\"WebKitCSSMatrix\"in t&&\"m11\"in new t.WebKitCSSMatrix||\"MozPerspective\"in document.documentElement.style||\"msPerspective\"in document.documentElement.style,be([\"Moz\",\"webkit\",\"O\",\"ms\"],function(){var e,t=\"\"+this,a=typeof r.style[t+\"Transition\"]===He;return a||typeof r.style[t+\"Transform\"]===He?(e=t.toLowerCase(),i={css:\"ms\"!=e?\"-\"+e+\"-\":\"\",prefix:t,event:\"o\"===e||\"webkit\"===e?e:\"\"},a&&(o=i,o.event=o.event?o.event+\"TransitionEnd\":\"transitionend\"),!1):n}),r=null,ke.transforms=i,ke.transitions=o,ke.devicePixelRatio=t.devicePixelRatio===n?1:t.devicePixelRatio;try{ke.screenWidth=t.outerWidth||t.screen?t.screen.availWidth:t.innerWidth,ke.screenHeight=t.outerHeight||t.screen?t.screen.availHeight:t.innerHeight}catch(d){ke.screenWidth=t.screen.availWidth,ke.screenHeight=t.screen.availHeight}ke.detectOS=function(e){var n,r,o=!1,i=[],a=!/mobile safari/i.test(e),s={wp:/(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,fire:/(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,android:/(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,iphone:/(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,ipad:/(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,meego:/(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,webos:/(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,blackberry:/(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,playbook:/(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,windows:/(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,tizen:/(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,sailfish:/(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,ffos:/(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/},u={ios:/^i(phone|pad|pod)$/i,android:/^android|fire$/i,blackberry:/^blackberry|playbook/i,windows:/windows/,wp:/wp/,flat:/sailfish|ffos|tizen/i,meego:/meego/},l={tablet:/playbook|ipad|fire/i},d={omini:/Opera\\sMini/i,omobile:/Opera\\sMobi/i,firefox:/Firefox|Fennec/i,mobilesafari:/version\\/.*safari/i,ie:/MSIE|Windows\\sPhone/i,chrome:/chrome|crios/i,webkit:/webkit/i};for(r in s)if(s.hasOwnProperty(r)&&(i=e.match(s[r]))){if(\"windows\"==r&&\"plugins\"in navigator)return!1;o={},o.device=r,o.tablet=c(r,l,!1),o.browser=c(e,d,\"default\"),o.name=c(r,u),o[o.name]=!0,o.majorVersion=i[2],o.minorVersion=i[3].replace(\"_\",\".\"),n=o.minorVersion.replace(\".\",\"\").substr(0,2),o.flatVersion=o.majorVersion+n+Array(3-(3>n.length?n.length:2)).join(\"0\"),o.cordova=typeof t.PhoneGap!==Fe||typeof t.cordova!==Fe,o.appMode=t.navigator.standalone||/file|local|wmapp/.test(t.location.protocol)||o.cordova,o.android&&(1.5>ke.devicePixelRatio&&400>o.flatVersion||a)&&(ke.screenWidth>800||ke.screenHeight>800)&&(o.tablet=r);break}return o},s=ke.mobileOS=ke.detectOS(navigator.userAgent),ke.wpDevicePixelRatio=s.wp?screen.width/320:0,ke.kineticScrollNeeded=s&&(ke.touch||ke.msPointers||ke.pointers),ke.hasNativeScrolling=!1,(s.ios||s.android&&s.majorVersion>2||s.wp)&&(ke.hasNativeScrolling=s),ke.delayedClick=function(){if(ke.touch){if(s.ios)return!0;if(s.android)return ke.browser.chrome?32>ke.browser.version?!1:!(e(\"meta[name=viewport]\").attr(\"content\")||\"\").match(/user-scalable=no/i):!0}return!1},ke.mouseAndTouchPresent=ke.touch&&!(ke.mobileOS.ios||ke.mobileOS.android),ke.detectBrowser=function(e){var t,n=!1,r=[],o={edge:/(edge)[ \\/]([\\w.]+)/i,webkit:/(chrome)[ \\/]([\\w.]+)/i,safari:/(webkit)[ \\/]([\\w.]+)/i,opera:/(opera)(?:.*version|)[ \\/]([\\w.]+)/i,msie:/(msie\\s|trident.*? rv:)([\\w.]+)/i,mozilla:/(mozilla)(?:.*? rv:([\\w.]+)|)/i};for(t in o)if(o.hasOwnProperty(t)&&(r=e.match(o[t]))){n={},n[t]=!0,n[r[1].toLowerCase().split(\" \")[0].split(\"/\")[0]]=!0,n.version=parseInt(document.documentMode||r[2],10);break}return n},ke.browser=ke.detectBrowser(navigator.userAgent),ke.detectClipboardAccess=function(){var e={copy:document.queryCommandSupported?document.queryCommandSupported(\"copy\"):!1,cut:document.queryCommandSupported?document.queryCommandSupported(\"cut\"):!1,paste:document.queryCommandSupported?document.queryCommandSupported(\"paste\"):!1};return ke.browser.chrome&&(e.paste=!1,ke.browser.version>=43&&(e.copy=!0,e.cut=!0)),e},ke.clipboard=ke.detectClipboardAccess(),ke.zoomLevel=function(){var e,n,r;try{return e=ke.browser,n=0,r=document.documentElement,e.msie&&11==e.version&&r.scrollHeight>r.clientHeight&&!ke.touch&&(n=ke.scrollbar()),ke.touch?r.clientWidth/t.innerWidth:e.msie&&e.version>=10?((top||t).document.documentElement.offsetWidth+n)/(top||t).innerWidth:1}catch(o){return 1}},ke.cssBorderSpacing=n!==document.documentElement.style.borderSpacing&&!(ke.browser.msie&&8>ke.browser.version),function(t){var n=\"\",r=e(document.documentElement),o=parseInt(t.version,10);t.msie?n=\"ie\":t.mozilla?n=\"ff\":t.safari?n=\"safari\":t.webkit?n=\"webkit\":t.opera?n=\"opera\":t.edge&&(n=\"edge\"),n&&(n=\"k-\"+n+\" k-\"+n+o),ke.mobileOS&&(n+=\" k-mobile\"),r.addClass(n)}(ke.browser),ke.eventCapture=document.documentElement.addEventListener,u=document.createElement(\"input\"),ke.placeholder=\"placeholder\"in u,ke.propertyChangeEvent=\"onpropertychange\"in u,ke.input=function(){for(var e,t=[\"number\",\"date\",\"time\",\"month\",\"week\",\"datetime\",\"datetime-local\"],n=t.length,r=\"test\",o={},i=0;n>i;i++)e=t[i],u.setAttribute(\"type\",e),u.value=r,o[e.replace(\"-\",\"\")]=\"text\"!==u.type&&u.value!==r;return o}(),u.style.cssText=\"float:left;\",ke.cssFloat=!!u.style.cssFloat,u=null,ke.stableSort=function(){var e,t=513,n=[{index:0,field:\"b\"}];for(e=1;t>e;e++)n.push({index:e,field:\"a\"});return n.sort(function(e,t){return e.field>t.field?1:t.field>e.field?-1:0}),1===n[0].index}(),ke.matchesSelector=a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||a.oMatchesSelector||a.matchesSelector||a.matches||function(t){for(var n=document.querySelectorAll?(this.parentNode||document).querySelectorAll(t)||[]:e(t),r=n.length;r--;)if(n[r]==this)return!0;return!1},ke.pushState=t.history&&t.history.pushState,l=document.documentMode,ke.hashChange=\"onhashchange\"in t&&!(ke.browser.msie&&(!l||8>=l)),ke.customElements=\"registerElement\"in t.document}(),j={left:{reverse:\"right\"},right:{reverse:\"left\"},down:{reverse:\"up\"},up:{reverse:\"down\"},top:{reverse:\"bottom\"},bottom:{reverse:\"top\"},\"in\":{reverse:\"out\"},out:{reverse:\"in\"}},B={},e.extend(B,{enabled:!0,Element:function(t){this.element=e(t)},promise:function(e,t){e.is(\":visible\")||e.css({display:e.data(\"olddisplay\")||\"block\"}).css(\"display\"),t.hide&&e.data(\"olddisplay\",e.css(\"display\")).hide(),t.init&&t.init(),t.completeCallback&&t.completeCallback(e),e.dequeue()},disable:function(){this.enabled=!1,this.promise=this.promiseShim},enable:function(){this.enabled=!0,this.promise=this.animatedPromise}}),B.promiseShim=B.promise,\"kendoAnimate\"in e.fn||ve(e.fn,{kendoStop:function(e,t){return this.stop(e,t)},kendoAnimate:function(e,t,n,r){return M(this,e,t,n,r)},kendoAddClass:function(e,t){return ye.toggleClass(this,e,t,!0)},kendoRemoveClass:function(e,t){return ye.toggleClass(this,e,t,!1)},kendoToggleClass:function(e,t,n){return ye.toggleClass(this,e,t,n)}}),Y=/&/g,J=/</g,q=/\"/g,V=/'/g,G=/>/g,K=function(e){return e.target},ke.touch&&(K=function(e){var t=\"originalEvent\"in e?e.originalEvent.changedTouches:\"changedTouches\"in e?e.changedTouches:null;return t?document.elementFromPoint(t[0].clientX,t[0].clientY):e.target},be([\"swipe\",\"swipeLeft\",\"swipeRight\",\"swipeUp\",\"swipeDown\",\"doubleTap\",\"tap\"],function(t,n){e.fn[n]=function(e){return this.bind(n,e)}})),ke.touch?ke.mobileOS?(ke.mousedown=\"touchstart\",ke.mouseup=\"touchend\",ke.mousemove=\"touchmove\",ke.mousecancel=\"touchcancel\",ke.click=\"touchend\",ke.resize=\"orientationchange\"):(ke.mousedown=\"mousedown touchstart\",ke.mouseup=\"mouseup touchend\",ke.mousemove=\"mousemove touchmove\",ke.mousecancel=\"mouseleave touchcancel\",ke.click=\"click\",ke.resize=\"resize\"):ke.pointers?(ke.mousemove=\"pointermove\",ke.mousedown=\"pointerdown\",ke.mouseup=\"pointerup\",ke.mousecancel=\"pointercancel\",ke.click=\"pointerup\",ke.resize=\"orientationchange resize\"):ke.msPointers?(ke.mousemove=\"MSPointerMove\",ke.mousedown=\"MSPointerDown\",ke.mouseup=\"MSPointerUp\",ke.mousecancel=\"MSPointerCancel\",ke.click=\"MSPointerUp\",ke.resize=\"orientationchange resize\"):(ke.mousemove=\"mousemove\",ke.mousedown=\"mousedown\",ke.mouseup=\"mouseup\",ke.mousecancel=\"mouseleave\",ke.click=\"click\",ke.resize=\"resize\"),Q=function(e,t){var n,r,o,i,a=t||\"d\",s=1;for(r=0,o=e.length;o>r;r++)i=e[r],\"\"!==i&&(n=i.indexOf(\"[\"),0!==n&&(-1==n?i=\".\"+i:(s++,i=\".\"+i.substring(0,n)+\" || {})\"+i.substring(n))),s++,a+=i+(o-1>r?\" || {})\":\")\"));return Array(s).join(\"(\")+a},Z=/^([a-z]+:)?\\/\\//i,ve(ye,{widgets:[],_widgetRegisteredCallbacks:[],ui:ye.ui||{},fx:ye.fx||b,effects:ye.effects||B,mobile:ye.mobile||{},data:ye.data||{},dataviz:ye.dataviz||{},drawing:ye.drawing||{},spreadsheet:{messages:{}},keys:{INSERT:45,DELETE:46,BACKSPACE:8,TAB:9,ENTER:13,ESC:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,END:35,HOME:36,SPACEBAR:32,PAGEUP:33,PAGEDOWN:34,F2:113,F10:121,F12:123,NUMPAD_PLUS:107,NUMPAD_MINUS:109,NUMPAD_DOT:110},support:ye.support||ke,animate:ye.animate||M,ns:\"\",attr:function(e){return\"data-\"+ye.ns+e},getShadows:a,wrap:s,deepExtend:u,getComputedStyles:m,webComponents:ye.webComponents||[],isScrollable:p,scrollLeft:h,size:g,toCamelCase:f,toHyphens:d,getOffset:ye.getOffset||y,parseEffects:ye.parseEffects||v,toggleClass:ye.toggleClass||S,directions:ye.directions||j,Observable:P,Class:r,Template:H,template:Me(H.compile,H),render:Me(H.render,H),stringify:Me(xe.stringify,xe),eventTarget:K,htmlEncode:T,isLocalUrl:function(e){return e&&!Z.test(e)},expr:function(e,t,n){return e=e||\"\",typeof t==He&&(n=t,t=!1),n=n||\"d\",e&&\"[\"!==e.charAt(0)&&(e=\".\"+e),t?(e=e.replace(/\"([^.]*)\\.([^\"]*)\"/g,'\"$1_$DOT$_$2\"'),e=e.replace(/'([^.]*)\\.([^']*)'/g,\"'$1_$DOT$_$2'\"),e=Q(e.split(\".\"),n),e=e.replace(/_\\$DOT\\$_/g,\".\")):e=n+e,e},getter:function(e,t){var n=e+t;return Re[n]=Re[n]||Function(\"d\",\"return \"+ye.expr(e,t))},setter:function(e){return Ue[e]=Ue[e]||Function(\"d,value\",ye.expr(e)+\"=value\")},accessor:function(e){return{get:ye.getter(e),set:ye.setter(e)}},guid:function(){var e,t,n=\"\";for(e=0;32>e;e++)t=16*Te.random()|0,8!=e&&12!=e&&16!=e&&20!=e||(n+=\"-\"),n+=(12==e?4:16==e?3&t|8:t).toString(16);return n},roleSelector:function(e){return e.replace(/(\\S+)/g,\"[\"+ye.attr(\"role\")+\"=$1],\").slice(0,-1)},directiveSelector:function(e){var t,n=e.split(\" \");if(n)for(t=0;n.length>t;t++)\"view\"!=n[t]&&(n[t]=n[t].replace(/(\\w*)(view|bar|strip|over)$/,\"$1-$2\"));return n.join(\" \").replace(/(\\S+)/g,\"kendo-mobile-$1,\").slice(0,-1)},triggeredByInput:function(e){return/^(label|input|textarea|select)$/i.test(e.target.tagName)},onWidgetRegistered:function(e){for(var t=0,n=ye.widgets.length;n>t;t++)e(ye.widgets[t]);ye._widgetRegisteredCallbacks.push(e)},logToConsole:function(e,r){var o=t.console;!ye.suppressLog&&n!==o&&o.log&&o[r||\"log\"](e)}}),X=P.extend({init:function(e,t){var n,r=this;r.element=ye.jQuery(e).handler(r),r.angular(\"init\",t),P.fn.init.call(r),n=t?t.dataSource:null,n&&(t=ve({},t,{dataSource:{}})),t=r.options=ve(!0,{},r.options,t),\nn&&(t.dataSource=n),r.element.attr(ye.attr(\"role\"))||r.element.attr(ye.attr(\"role\"),(t.name||\"\").toLowerCase()),r.element.data(\"kendo\"+t.prefix+t.name,r),r.bind(r.events,t)},events:[],options:{prefix:\"\"},_hasBindingTarget:function(){return!!this.element[0].kendoBindingTarget},_tabindex:function(e){e=e||this.wrapper;var t=this.element,n=\"tabindex\",r=e.attr(n)||t.attr(n);t.removeAttr(n),e.attr(n,isNaN(r)?0:r)},setOptions:function(t){this._setEvents(t),e.extend(this.options,t)},_setEvents:function(e){for(var t,n=this,r=0,o=n.events.length;o>r;r++)t=n.events[r],n.options[t]&&e[t]&&n.unbind(t,n.options[t]);n.bind(n.events,e)},resize:function(e){var t=this.getSize(),n=this._size;(e||(t.width>0||t.height>0)&&(!n||t.width!==n.width||t.height!==n.height))&&(this._size=t,this._resize(t,e),this.trigger(\"resize\",t))},getSize:function(){return ye.dimensions(this.element)},size:function(e){return e?(this.setSize(e),n):this.getSize()},setSize:e.noop,_resize:e.noop,destroy:function(){var e=this;e.element.removeData(\"kendo\"+e.options.prefix+e.options.name),e.element.removeData(\"handler\"),e.unbind()},_destroy:function(){this.destroy()},angular:function(){},_muteAngularRebind:function(e){this._muteRebind=!0,e.call(this),this._muteRebind=!1}}),ee=X.extend({dataItems:function(){return this.dataSource.flatView()},_angularItems:function(t){var n=this;n.angular(t,function(){return{elements:n.items(),data:e.map(n.dataItems(),function(e){return{dataItem:e}})}})}}),ye.dimensions=function(e,t){var n=e[0];return t&&e.css(t),{width:n.offsetWidth,height:n.offsetHeight}},ye.notify=Se,te=/template$/i,ne=/^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/,re=/^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/,oe=/([A-Z])/g,ye.initWidget=function(r,o,i){var a,s,u,l,c,d,f,m,p,h,g,y,v;if(i?i.roles&&(i=i.roles):i=ye.ui.roles,r=r.nodeType?r:r[0],d=r.getAttribute(\"data-\"+ye.ns+\"role\")){p=-1===d.indexOf(\".\"),u=p?i[d]:ye.getter(d)(t),g=e(r).data(),y=u?\"kendo\"+u.fn.options.prefix+u.fn.options.name:\"\",h=p?RegExp(\"^kendo.*\"+d+\"$\",\"i\"):RegExp(\"^\"+y+\"$\",\"i\");for(v in g)if(v.match(h)){if(v!==y)return g[v];a=g[v]}if(u){for(m=x(r,\"dataSource\"),o=e.extend({},k(r,u.fn.options),o),m&&(o.dataSource=typeof m===He?ye.getter(m)(t):m),l=0,c=u.fn.events.length;c>l;l++)s=u.fn.events[l],f=x(r,s),f!==n&&(o[s]=ye.getter(f)(t));return a?e.isEmptyObject(o)||a.setOptions(o):a=new u(r,o),a}}},ye.rolesFromNamespaces=function(e){var t,n,r=[];for(e[0]||(e=[ye.ui,ye.dataviz.ui]),t=0,n=e.length;n>t;t++)r[t]=e[t].roles;return ve.apply(null,[{}].concat(r.reverse()))},ye.init=function(t){var n=ye.rolesFromNamespaces(Ie.call(arguments,1));e(t).find(\"[data-\"+ye.ns+\"role]\").addBack().each(function(){ye.initWidget(this,{},n)})},ye.destroy=function(t){e(t).find(\"[data-\"+ye.ns+\"role]\").addBack().each(function(){var t,n=e(this).data();for(t in n)0===t.indexOf(\"kendo\")&&typeof n[t].destroy===Ee&&n[t].destroy()})},ye.resize=function(t,n){var r,o=e(t).find(\"[data-\"+ye.ns+\"role]\").addBack().filter(z);o.length&&(r=e.makeArray(o),r.sort(O),e.each(r,function(){var t=ye.widgetInstance(e(this));t&&t.resize(n)}))},ye.parseOptions=k,ve(ye.ui,{Widget:X,DataBoundWidget:ee,roles:{},progress:function(t,n){var r,o,i,a,s=t.find(\".k-loading-mask\"),u=ye.support,l=u.browser;n?s.length||(r=u.isRtl(t),o=r?\"right\":\"left\",a=t.scrollLeft(),i=l.webkit&&r?t[0].scrollWidth-t.width()-2*a:0,s=e(\"<div class='k-loading-mask'><span class='k-loading-text'>\"+ye.ui.progress.messages.loading+\"</span><div class='k-loading-image'/><div class='k-loading-color'/></div>\").width(\"100%\").height(\"100%\").css(\"top\",t.scrollTop()).css(o,Math.abs(a)+i).prependTo(t)):s&&s.remove()},plugin:function(t,r,o){var i,a,s,u,l=t.fn.options.name;for(r=r||ye.ui,o=o||\"\",r[l]=t,r.roles[l.toLowerCase()]=t,i=\"getKendo\"+o+l,l=\"kendo\"+o+l,a={name:l,widget:t,prefix:o||\"\"},ye.widgets.push(a),s=0,u=ye._widgetRegisteredCallbacks.length;u>s;s++)ye._widgetRegisteredCallbacks[s](a);e.fn[l]=function(r){var o,i=this;return typeof r===He?(o=Ie.call(arguments,1),this.each(function(){var t,a,s=e.data(this,l);if(!s)throw Error(ye.format(\"Cannot call method '{0}' of {1} before it is initialized\",r,l));if(t=s[r],typeof t!==Ee)throw Error(ye.format(\"Cannot find method '{0}' of {1}\",r,l));return a=t.apply(s,o),a!==n?(i=a,!1):n})):this.each(function(){return new t(this,r)}),i},e.fn[l].widget=t,e.fn[i]=function(){return this.data(l)}}}),ye.ui.progress.messages={loading:\"Loading...\"},ie={bind:function(){return this},nullObject:!0,options:{}},ae=X.extend({init:function(e,t){X.fn.init.call(this,e,t),this.element.autoApplyNS(),this.wrapper=this.element,this.element.addClass(\"km-widget\")},destroy:function(){X.fn.destroy.call(this),this.element.kendoDestroy()},options:{prefix:\"Mobile\"},events:[],view:function(){var e=this.element.closest(ye.roleSelector(\"view splitview modalview drawer\"));return ye.widgetInstance(e,ye.mobile.ui)||ie},viewHasNativeScrolling:function(){var e=this.view();return e&&e.options.useNativeScrolling},container:function(){var e=this.element.closest(ye.roleSelector(\"view layout modalview drawer splitview\"));return ye.widgetInstance(e.eq(0),ye.mobile.ui)||ie}}),ve(ye.mobile,{init:function(e){ye.init(e,ye.mobile.ui,ye.ui,ye.dataviz.ui)},appLevelNativeScrolling:function(){return ye.mobile.application&&ye.mobile.application.options&&ye.mobile.application.options.useNativeScrolling},roles:{},ui:{Widget:ae,DataBoundWidget:ee.extend(ae.prototype),roles:{},plugin:function(e){ye.ui.plugin(e,ye.mobile.ui,\"Mobile\")}}}),u(ye.dataviz,{init:function(e){ye.init(e,ye.dataviz.ui)},ui:{roles:{},themes:{},views:[],plugin:function(e){ye.ui.plugin(e,ye.dataviz.ui)}},roles:{}}),ye.touchScroller=function(t,n){return n||(n={}),n.useNative=!0,e(t).map(function(t,r){return r=e(r),ke.kineticScrollNeeded&&ye.mobile.ui.Scroller&&!r.data(\"kendoMobileScroller\")?(r.kendoMobileScroller(n),r.data(\"kendoMobileScroller\")):!1})[0]},ye.preventDefault=function(e){e.preventDefault()},ye.widgetInstance=function(e,n){var r,o,i,a,s=e.data(ye.ns+\"role\"),u=[];if(s){if(\"content\"===s&&(s=\"scroller\"),n)if(n[0])for(r=0,o=n.length;o>r;r++)u.push(n[r].roles[s]);else u.push(n.roles[s]);else u=[ye.ui.roles[s],ye.dataviz.ui.roles[s],ye.mobile.ui.roles[s]];for(s.indexOf(\".\")>=0&&(u=[ye.getter(s)(t)]),r=0,o=u.length;o>r;r++)if(i=u[r],i&&(a=e.data(\"kendo\"+i.fn.options.prefix+i.fn.options.name)))return a}},ye.onResize=function(n){var r=n;return ke.mobileOS.android&&(r=function(){setTimeout(n,600)}),e(t).on(ke.resize,r),r},ye.unbindResize=function(n){e(t).off(ke.resize,n)},ye.attrValue=function(e,t){return e.data(ye.ns+t)},ye.days={Sunday:0,Monday:1,Tuesday:2,Wednesday:3,Thursday:4,Friday:5,Saturday:6},e.extend(e.expr[\":\"],{kendoFocusable:function(t){var n=e.attr(t,\"tabindex\");return D(t,!isNaN(n)&&n>-1)}}),se=[\"mousedown\",\"mousemove\",\"mouseenter\",\"mouseleave\",\"mouseover\",\"mouseout\",\"mouseup\",\"click\"],ue=\"label, input, [data-rel=external]\",le={setupMouseMute:function(){var t,n=0,r=se.length,o=document.documentElement;if(!le.mouseTrap&&ke.eventCapture)for(le.mouseTrap=!0,le.bustClick=!1,le.captureMouse=!1,t=function(t){le.captureMouse&&(\"click\"===t.type?le.bustClick&&!e(t.target).is(ue)&&(t.preventDefault(),t.stopPropagation()):t.stopPropagation())};r>n;n++)o.addEventListener(se[n],t,!0)},muteMouse:function(e){le.captureMouse=!0,e.data.bustClick&&(le.bustClick=!0),clearTimeout(le.mouseTrapTimeoutID)},unMuteMouse:function(){clearTimeout(le.mouseTrapTimeoutID),le.mouseTrapTimeoutID=setTimeout(function(){le.captureMouse=!1,le.bustClick=!1},400)}},ce={down:\"touchstart mousedown\",move:\"mousemove touchmove\",up:\"mouseup touchend touchcancel\",cancel:\"mouseleave touchcancel\"},ke.touch&&(ke.mobileOS.ios||ke.mobileOS.android)?ce={down:\"touchstart\",move:\"touchmove\",up:\"touchend touchcancel\",cancel:\"touchcancel\"}:ke.pointers?ce={down:\"pointerdown\",move:\"pointermove\",up:\"pointerup\",cancel:\"pointercancel pointerleave\"}:ke.msPointers&&(ce={down:\"MSPointerDown\",move:\"MSPointerMove\",up:\"MSPointerUp\",cancel:\"MSPointerCancel MSPointerLeave\"}),!ke.msPointers||\"onmspointerenter\"in t||e.each({MSPointerEnter:\"MSPointerOver\",MSPointerLeave:\"MSPointerOut\"},function(t,n){e.event.special[t]={delegateType:n,bindType:n,handle:function(t){var r,o=this,i=t.relatedTarget,a=t.handleObj;return i&&(i===o||e.contains(o,i))||(t.type=a.origType,r=a.handler.apply(this,arguments),t.type=n),r}}}),de=function(e){return ce[e]||e},fe=/([^ ]+)/g,ye.applyEventMap=function(e,t){return e=e.replace(fe,de),t&&(e=e.replace(fe,\"$1.\"+t)),e},me=e.fn.on,ve(!0,E,e),E.fn=E.prototype=new e,E.fn.constructor=E,E.fn.init=function(t,n){return n&&n instanceof e&&!(n instanceof E)&&(n=E(n)),e.fn.init.call(this,t,n,pe)},E.fn.init.prototype=E.fn,pe=E(document),ve(E.fn,{handler:function(e){return this.data(\"handler\",e),this},autoApplyNS:function(e){return this.data(\"kendoNS\",e||ye.guid()),this},on:function(){var e,t,n,r,o,i,a=this,s=a.data(\"kendoNS\");return 1===arguments.length?me.call(a,arguments[0]):(e=a,t=Ie.call(arguments),typeof t[t.length-1]===Fe&&t.pop(),n=t[t.length-1],r=ye.applyEventMap(t[0],s),ke.mouseAndTouchPresent&&r.search(/mouse|click/)>-1&&this[0]!==document.documentElement&&(le.setupMouseMute(),o=2===t.length?null:t[1],i=r.indexOf(\"click\")>-1&&r.indexOf(\"touchend\")>-1,me.call(this,{touchstart:le.muteMouse,touchend:le.unMuteMouse},o,{bustClick:i})),typeof n===He&&(e=a.data(\"handler\"),n=e[n],t[t.length-1]=function(t){n.call(e,t)}),t[0]=r,me.apply(a,t),a)},kendoDestroy:function(e){return e=e||this.data(\"kendoNS\"),e&&this.off(\".\"+e),this}}),ye.jQuery=E,ye.eventMap=ce,ye.timezone=function(){function e(e,t){var n,r,o,i=t[3],a=t[4],s=t[5],u=t[8];return u||(t[8]=u={}),u[e]?u[e]:(isNaN(a)?0===a.indexOf(\"last\")?(n=new Date(Date.UTC(e,c[i]+1,1,s[0]-24,s[1],s[2],0)),r=d[a.substr(4,3)],o=n.getUTCDay(),n.setUTCDate(n.getUTCDate()+r-o-(r>o?7:0))):a.indexOf(\">=\")>=0&&(n=new Date(Date.UTC(e,c[i],a.substr(5),s[0],s[1],s[2],0)),r=d[a.substr(0,3)],o=n.getUTCDay(),n.setUTCDate(n.getUTCDate()+r-o+(o>r?7:0))):n=new Date(Date.UTC(e,c[i],a,s[0],s[1],s[2],0)),u[e]=n)}function t(t,n,r){var o,i,a,s;return(n=n[r])?(a=new Date(t).getUTCFullYear(),n=jQuery.grep(n,function(e){var t=e[0],n=e[1];return a>=t&&(n>=a||t==a&&\"only\"==n||\"max\"==n)}),n.push(t),n.sort(function(t,n){return\"number\"!=typeof t&&(t=+e(a,t)),\"number\"!=typeof n&&(n=+e(a,n)),t-n}),s=n[jQuery.inArray(t,n)-1]||n[n.length-1],isNaN(s)?s:null):(o=r.split(\":\"),i=0,o.length>1&&(i=60*o[0]+ +o[1]),[-1e6,\"max\",\"-\",\"Jan\",1,[0,0,0],i,\"-\"])}function n(e,t,n){var r,o,i,a=t[n];if(\"string\"==typeof a&&(a=t[a]),!a)throw Error('Timezone \"'+n+'\" is either incorrect, or kendo.timezones.min.js is not included.');for(r=a.length-1;r>=0&&(o=a[r][3],!(o&&e>o));r--);if(i=a[r+1],!i)throw Error('Timezone \"'+n+'\" not found on '+e+\".\");return i}function r(e,r,o,i){typeof e!=Ae&&(e=Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));var a=n(e,r,i);return{zone:a,rule:t(e,o,a[1])}}function o(e,t){var n,o,i;return\"Etc/UTC\"==t||\"Etc/GMT\"==t?0:(n=r(e,this.zones,this.rules,t),o=n.zone,i=n.rule,ye.parseFloat(i?o[0]-i[6]:o[0]))}function i(e,t){var n=r(e,this.zones,this.rules,t),o=n.zone,i=n.rule,a=o[2];return a.indexOf(\"/\")>=0?a.split(\"/\")[i&&+i[6]?1:0]:a.indexOf(\"%s\")>=0?a.replace(\"%s\",i&&\"-\"!=i[7]?i[7]:\"\"):a}function a(e,t,n){var r,o;return typeof t==He&&(t=this.offset(e,t)),typeof n==He&&(n=this.offset(e,n)),r=e.getTimezoneOffset(),e=new Date(e.getTime()+6e4*(t-n)),o=e.getTimezoneOffset(),new Date(e.getTime()+6e4*(o-r))}function s(e,t){return this.convert(e,e.getTimezoneOffset(),t)}function u(e,t){return this.convert(e,t,e.getTimezoneOffset())}function l(e){return this.apply(new Date(e),\"Etc/UTC\")}var c={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},d={Sun:0,Mon:1,Tue:2,Wed:3,Thu:4,Fri:5,Sat:6};return{zones:{},rules:{},offset:o,convert:a,apply:s,remove:u,abbr:i,toLocalDate:l}}(),ye.date=function(){function e(e,t){return 0===t&&23===e.getHours()?(e.setHours(e.getHours()+2),!0):!1}function t(t,n,r){var o=t.getHours();r=r||1,n=(n-t.getDay()+7*r)%7,t.setDate(t.getDate()+n),e(t,o)}function n(e,n,r){return e=new Date(e),t(e,n,r),e}function r(e){return new Date(e.getFullYear(),e.getMonth(),1)}function o(e){var t=new Date(e.getFullYear(),e.getMonth()+1,0),n=r(e),o=Math.abs(t.getTimezoneOffset()-n.getTimezoneOffset());return o&&t.setHours(n.getHours()+o/60),t}function i(t){return t=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0),e(t,0),t}function a(e){return Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())}function s(e){return e.getTime()-i(e)}function u(e,t,n){var r,o=s(t),i=s(n);return e&&o!=i?(t>=n&&(n+=y),r=s(e),o>r&&(r+=y),o>i&&(i+=y),r>=o&&i>=r):!0}function l(e,t,n){var r,o=t.getTime(),i=n.getTime();return o>=i&&(i+=y),r=e.getTime(),r>=o&&i>=r}function c(t,n){var r=t.getHours();return t=new Date(t),d(t,n*y),e(t,r),t}function d(e,t,n){var r,o=e.getTimezoneOffset();e.setTime(e.getTime()+t),n||(r=e.getTimezoneOffset()-o,e.setTime(e.getTime()+r*g))}function f(t,n){return t=new Date(ye.date.getDate(t).getTime()+ye.date.getMilliseconds(n)),e(t,n.getHours()),t}function m(){return i(new Date)}function p(e){return i(e).getTime()==m().getTime()}function h(e){var t=new Date(1980,1,1,0,0,0);return e&&t.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()),t}var g=6e4,y=864e5;return{adjustDST:e,dayOfWeek:n,setDayOfWeek:t,getDate:i,isInDateRange:l,isInTimeRange:u,isToday:p,nextDay:function(e){return c(e,1)},previousDay:function(e){return c(e,-1)},toUtcTime:a,MS_PER_DAY:y,MS_PER_HOUR:60*g,MS_PER_MINUTE:g,setTime:d,setHours:f,addDays:c,today:m,toInvariantTime:h,firstDayOfMonth:r,lastDayOfMonth:o,getMilliseconds:s}}(),ye.stripWhitespace=function(e){var t,n,r;if(document.createNodeIterator)for(t=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,function(t){return t.parentNode==e?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT},!1);t.nextNode();)t.referenceNode&&!t.referenceNode.textContent.trim()&&t.referenceNode.parentNode.removeChild(t.referenceNode);else for(n=0;e.childNodes.length>n;n++)r=e.childNodes[n],3!=r.nodeType||/\\S/.test(r.nodeValue)||(e.removeChild(r),n--),1==r.nodeType&&ye.stripWhitespace(r)},he=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)},ye.animationFrame=function(e){he.call(t,e)},ge=[],ye.queueAnimation=function(e){ge[ge.length]=e,1===ge.length&&ye.runNextAnimation()},ye.runNextAnimation=function(){ye.animationFrame(function(){ge[0]&&(ge.shift()(),ge[0]&&ye.runNextAnimation())})},ye.parseQueryStringParams=function(e){for(var t=e.split(\"?\")[1]||\"\",n={},r=t.split(/&|=/),o=r.length,i=0;o>i;i+=2)\"\"!==r[i]&&(n[decodeURIComponent(r[i])]=decodeURIComponent(r[i+1]));return n},ye.elementUnderCursor=function(e){return n!==e.x.client?document.elementFromPoint(e.x.client,e.y.client):n},ye.wheelDeltaY=function(e){var t,r=e.originalEvent,o=r.wheelDeltaY;return r.wheelDelta?(o===n||o)&&(t=r.wheelDelta):r.detail&&r.axis===r.VERTICAL_AXIS&&(t=10*-r.detail),t},ye.throttle=function(e,t){var r,o,i=0;return!t||0>=t?e:(o=function(){function o(){e.apply(a,u),i=+new Date}var a=this,s=+new Date-i,u=arguments;return i?(r&&clearTimeout(r),s>t?o():r=setTimeout(o,t-s),n):o()},o.cancel=function(){clearTimeout(r)},o)},ye.caret=function(t,r,o){var i,a,s,u,l=r!==n;if(o===n&&(o=r),t[0]&&(t=t[0]),!l||!t.disabled){try{t.selectionStart!==n?l?(t.focus(),t.setSelectionRange(r,o)):r=[t.selectionStart,t.selectionEnd]:document.selection&&(e(t).is(\":visible\")&&t.focus(),i=t.createTextRange(),l?(i.collapse(!0),i.moveStart(\"character\",r),i.moveEnd(\"character\",o-r),i.select()):(a=i.duplicate(),i.moveToBookmark(document.selection.createRange().getBookmark()),a.setEndPoint(\"EndToStart\",i),s=a.text.length,u=s+i.text.length,r=[s,u]))}catch(c){r=[]}return r}},ye.compileMobileDirective=function(e,n){var r=t.angular;return e.attr(\"data-\"+ye.ns+\"role\",e[0].tagName.toLowerCase().replace(\"kendo-mobile-\",\"\").replace(\"-\",\"\")),r.element(e).injector().invoke([\"$compile\",function(t){t(e)(n),/^\\$(digest|apply)$/.test(n.$$phase)||n.$digest()}]),ye.widgetInstance(e,ye.mobile.ui)},ye.antiForgeryTokens=function(){var t={},r=e(\"meta[name=csrf-token],meta[name=_csrf]\").attr(\"content\"),o=e(\"meta[name=csrf-param],meta[name=_csrf_header]\").attr(\"content\");return e(\"input[name^='__RequestVerificationToken']\").each(function(){t[this.name]=this.value}),o!==n&&r!==n&&(t[o]=r),t},ye.cycleForm=function(e){function t(e){var t=ye.widgetInstance(e);t&&t.focus?t.focus():e.focus()}var n=e.find(\"input, .k-widget\").first(),r=e.find(\"button, .k-button\").last();r.on(\"keydown\",function(e){e.keyCode!=ye.keys.TAB||e.shiftKey||(e.preventDefault(),t(n))}),n.on(\"keydown\",function(e){e.keyCode==ye.keys.TAB&&e.shiftKey&&(e.preventDefault(),t(r))})},function(){function n(t,n,r,o){var i,a,s=e(\"<form>\").attr({action:r,method:\"POST\",target:o}),u=ye.antiForgeryTokens();u.fileName=n,i=t.split(\";base64,\"),u.contentType=i[0].replace(\"data:\",\"\"),u.base64=i[1];for(a in u)u.hasOwnProperty(a)&&e(\"<input>\").attr({value:u[a],name:a,type:\"hidden\"}).appendTo(s);s.appendTo(\"body\").submit().remove()}function r(e,t){var n,r,o,i,a,s=e;if(\"string\"==typeof e){for(n=e.split(\";base64,\"),r=n[0],o=atob(n[1]),i=new Uint8Array(o.length),a=0;o.length>a;a++)i[a]=o.charCodeAt(a);s=new Blob([i.buffer],{type:r})}navigator.msSaveBlob(s,t)}function o(e,n){t.Blob&&e instanceof Blob&&(e=URL.createObjectURL(e)),i.download=n,i.href=e;var r=document.createEvent(\"MouseEvents\");r.initMouseEvent(\"click\",!0,!1,t,0,0,0,0,0,!1,!1,!1,!1,0,null),i.dispatchEvent(r),setTimeout(function(){URL.revokeObjectURL(e)})}var i=document.createElement(\"a\"),a=\"download\"in i&&!ye.support.browser.edge;ye.saveAs=function(e){var t=n;e.forceProxy||(a?t=o:navigator.msSaveBlob&&(t=r)),t(e.dataURI,e.fileName,e.proxyURL,e.proxyTarget)}}(),ye.proxyModelSetters=function(e){var t={};return Object.keys(e||{}).forEach(function(n){Object.defineProperty(t,n,{get:function(){return e[n]},set:function(t){e[n]=t,e.dirty=!0}})}),t}}(jQuery,window),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.core.min.js.map\n","import { isMap } from \"immutable\";\n\n/** Validates that the object has a key and that the value is a boolean in a way that satisfies TypeScript. */\nexport const hasBooleanProperty = <X extends object, Y extends PropertyKey>(\n  obj: X,\n  prop: Y,\n): obj is X & Record<Y, boolean> => {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore - TypeScript can't tell that Object.prototype.hasOwnProperty.call(obj, prop) guarantees the second half of the check is safe\n  return Object.prototype.hasOwnProperty.call(obj, prop) && typeof obj[prop] === \"boolean\";\n};\n\nexport const isSlideEnabled = (slide: unknown): boolean => {\n  if (typeof slide !== \"object\" || !slide) {\n    return false;\n  }\n\n  if (isMap(slide)) {\n    return slide.get(\"enabled\", false);\n  }\n\n  if (hasBooleanProperty(slide, \"enabled\")) {\n    return slide.enabled;\n  }\n\n  return false;\n};\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\nimport * as fileSaver from \"file-saver\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport { handleErrors } from \"../reducers/Utils\";\n\nexport async function downloadFile(url, filename) {\n  try {\n    const response = await fetcher.fetch(url);\n    const blob = await response.blob();\n\n    fileSaver.saveAs(blob, filename);\n  } catch (error) {\n    handleErrors(error, dispatch);\n  }\n}\n\n/**\n * Determine file type based on filename extension\n * Returns \"document\" for PDFs, \"image\" for everything else\n */\nexport const getFileType = (file: { name: string }): \"document\" | \"image\" => {\n  const index = file.name.toLowerCase().indexOf(\".pdf\");\n  const target = file.name.length - 4;\n  if (index === target) {\n    return \"document\";\n  }\n  return \"image\";\n};\n\n/**\n * Convert a data URL to a File object\n */\nexport const dataURLToFile = (dataurl: string, filename: string): File => {\n  const arr = dataurl.split(\",\");\n  const mime = arr[0].match(/:(.*?);/)![1];\n  const bstr = atob(arr[1]);\n  let n = bstr.length;\n  const u8arr = new Uint8Array(n);\n  while (n--) {\n    u8arr[n] = bstr.charCodeAt(n);\n  }\n  return new File([u8arr], filename, { type: mime });\n};\n\n/**\n * Parse XML string to JSON object\n *\n * @param xml - XML string to parse\n * @param arrayTags - Array of tag names that should always be arrays\n */\nexport const parseXml = (xml: string, arrayTags?: string[]): any => {\n  let dom: Document | null = null;\n  if (window.DOMParser) {\n    dom = new DOMParser().parseFromString(xml, \"text/xml\");\n  } else if ((window as any).ActiveXObject) {\n    dom = new (window as any).ActiveXObject(\"Microsoft.XMLDOM\");\n    (dom as any).async = false;\n    if (!(dom as any).loadXML(xml)) {\n      throw (dom as any).parseError.reason + \" \" + (dom as any).parseError.srcText;\n    }\n  } else {\n    throw new Error(\"cannot parse xml string!\");\n  }\n\n  function isArray(o: any): boolean {\n    return Object.prototype.toString.apply(o) === \"[object Array]\";\n  }\n\n  function parseNode(xmlNode: Node, result: any): void {\n    if (xmlNode.nodeName === \"#text\") {\n      const v = xmlNode.nodeValue;\n      if (v && v.trim()) {\n        result[\"#text\"] = v;\n      }\n      return;\n    }\n\n    const jsonNode: any = {};\n    const existing = result[xmlNode.nodeName];\n    if (existing) {\n      if (!isArray(existing)) {\n        result[xmlNode.nodeName] = [existing, jsonNode];\n      } else {\n        result[xmlNode.nodeName].push(jsonNode);\n      }\n    } else {\n      if (arrayTags && arrayTags.indexOf(xmlNode.nodeName) !== -1) {\n        result[xmlNode.nodeName] = [jsonNode];\n      } else {\n        result[xmlNode.nodeName] = jsonNode;\n      }\n    }\n\n    if ((xmlNode as Element).attributes) {\n      const length = (xmlNode as Element).attributes.length;\n      for (let i = 0; i < length; i++) {\n        const attribute = (xmlNode as Element).attributes[i];\n        jsonNode[attribute.nodeName] = attribute.nodeValue;\n      }\n    }\n\n    const length = xmlNode.childNodes.length;\n    for (let i = 0; i < length; i++) {\n      parseNode(xmlNode.childNodes[i], jsonNode);\n    }\n  }\n\n  const result: any = {};\n  if (dom && dom.childNodes.length) {\n    parseNode(dom.childNodes[0], result);\n  }\n  return result;\n};\n","import * as config from \"react-global-configuration\";\n\n// prettier-ignore\nconfig.set({\n  \"ENVIRONMENT\": \"rsf\",\n  \"BASE_URL\": \"https://api.remotesf.com\",\n  \"PRICELIST_API_URL\": \"https://api.remotesf.com\",\n  \"APP_URL\": \"https://app.remotesf.com\",\n  \"APP_V2_URL\": \"https://app.remotesf.com/v2\",\n  \"STORAGE_URL\": \"https://storage.remotesf.com\",\n  \"CUSTOMER_URL\": \"http://customer.remotesf.com\",\n  \"CUSTOMER_URL_SSL\": \"https://customer.remotesf.com\",\n  \"ALT_URL\": \"https://app2.remotesf.com\",\n  \"LEADS_URL\": \"https://app.remotesf.com/leads_module/\",\n  \"GA_KEY\": \"G-4XKZ6G1615\",\n  \"NEWRELIC_APP_ID\": \"1588648437\",\n  \"RSF_ANALYTICS_KEY\": \"prod_a2efr83sspq\",\n  \"RSF_ANALYTICS_URL\": \"https://analytics.remotesf.com\",\n  \"RSF_ANALYTICS_WS\": \"wss://analytics.remotesf.com\",\n  \"OIDC_DOMAIN\": \"auth.1andfund.com\",\n  \"OIDC_CLIENT_ID\": \"7hXFINQ3VLhin4aUJkjERVck8zzFbPZi\",\n  \"OIDC_REDIRECT_URL\": \"https://app.remotesf.com/sso/callback\",\n  \"OIDC_AUDIENCE\": \"https://api.oneclickcontractor.com\",\n  \"OIDC_SCOPE\": \"email offline_access\",\n  \"DABELLA_OKTA_DOMAIN\": \"dabella.okta.com\",\n  \"DABELLA_OKTA_CLIENT_ID\": \"0oakwkexmkrxqCVNU697\",\n  \"DABELLA_OKTA_REDIRECT_URL\": \"https://app.remotesf.com/okta/callback\",\n  \"DABELLA_OKTA_LOGOUT_URL\": \"https://app.remotesf.com/okta/logout\",\n  \"STRIPE_KEY\": \"pk_live_0wOH6GDjH8wlzgN51EccRNwH\",\n  \"LEARN_MORE_URL\": \"https://oneclickcontractor.com\",\n  \"APP_NAME\": \"One Click Contractor\",\n  \"APP_NAME_SHORT\": \"One Click Contractor\",\n  \"APP_LOGO_URL\": \"/assets/images/big_logo-01.a3b2ddd4.png\",\n  \"APP_ICON_URL\": \"/assets/images/logo.d0e212c3.png\",\n  \"APP_ICON_BIG_URL\": \"/assets/images/occ-logo_rgb_lightbkg.a3b2ddd4.png\",\n  \"COMPANY_NAME\": \"Remote Sales Force\",\n  \"STATES_FILE\": \"us-ca.ts\",\n  \"FAVICON_FILE\": \"occ-favicon.ico\",\n  \"ENFORCE_TOS\": false,\n  \"DEFAULT_ROUTE\": \"root.job_list\",\n  \"DEFAULT_ROUTE_LINK\": \"/jobs\",\n  \"REPORT_PROVIDERS\": [\n    \"wvs\",\n    \"eagleview\"\n  ],\n  \"REPORT_KINDS\": [\n    \"roofing\",\n    \"walls\",\n    \"hail\",\n    \"wind\",\n    \"lightning\"\n  ],\n  \"REPORT_INIT_LAT\": 38.8668583,\n  \"REPORT_INIT_LNG\": -100.6228446,\n  \"REPORT_INIT_ZOOM\": 4,\n  \"AUTOCOMPLETE_COUNTRIES\": [\n    \"us\",\n    \"ca\"\n  ],\n  \"NEARMAP_API_KEY\": \"MTgzNzU5NzItMDVmZi00NGYyLWI1ZGItNTFhZmUxNjBiMzNi\",\n  \"SUPPORT_URL\": \"https://help.oneclickcontractor.com/knowledge\",\n  \"SAMPLE_JOB_CSV_FILE_URL\": \"https://help.oneclickcontractor.com/knowledge/how-to-import-jobs-from-a-csv-file\",\n  \"IMAGERY_AVAILABLE\": false,\n  \"CONTACT_ADDRESS\": \"879 W Carmel Drive\",\n  \"CONTACT_CITY\": \"Carmel\",\n  \"CONTACT_STATE\": \"IN\",\n  \"CONTACT_POSTAL\": \"46032\",\n  \"CONTACT_COUNTRY\": \"US\",\n  \"CONTACT_PHONE\": \"877-320-2391\",\n  \"CONTACT_EMAIL\": \"support@oneclickcontractor.com\",\n  \"CONTACT_HOURS\": \"\",\n  \"ADS_URL\": \"https://s3.us-east-2.amazonaws.com/ads.oneclickcontractor.com/occ-freemium/occ_freemium_ads.json\",\n  \"CUSTOMERIO_SITEID\": \"\",\n  \"ONBOARDING_NAME\": \"Customer Support\",\n  \"ONBOARDING_EMAIL\": \"onboarding@oneclickcontractor.com\",\n  \"ONBOARDING_PHONE\": \"877-320-2391\",\n  \"ONBOARDING_PHONE_DIAL\": \"tel:+18773202391\",\n  \"PAYSIMPLE_SCRIPT\": \"https://api.paysimple.com/paysimplejs/v1/scripts/client.js\",\n  \"CARD_CONNECT_IFRAME_URL\": \"https://fts.cardconnect.com/itoke/ajax-tokenizer.html\",\n  \"TWILIO_NUMBER\": \"(844) 299-2269\",\n  \"BILLING_LEAD_SOURCES\": [\n    \"unset\",\n    \"RSF\",\n    \"Marketsharp\",\n    \"Royal\",\n    \"LP\",\n    \"GAF\",\n    \"James Hardie\",\n    \"EcoView\",\n    \"Sunrise\",\n    \"LivingSpace\",\n    \"Renoworks\",\n    \"Chameleon\",\n    \"Internal\",\n    \"LP Freemium\",\n    \"OCC Freemium\",\n    \"Sunrise TSM\"\n  ],\n  \"DOCUMENT_ORDER_VALUES\": [\n    \"cover_page\",\n    \"estimate_pdf\",\n    \"product_images\",\n    \"job_photos\",\n    \"job_documents\",\n    \"product_brochures\",\n    \"resource_documents\",\n    \"inspection\",\n    \"inspection_pdf\"\n  ],\n  \"STRIPE_NAME\": \"OCC Subscription Plan\",\n  \"STRIPE_IMAGE\": \"/assets/images/rsf-circle-128x128.d0e212c3.png\",\n  \"HOMEVEST_CALLBACK\": \"https://api.remotesf.com/integrations/fin_mkt/callback\",\n  \"HOMEVEST_FAILURE\": \"https://homevestfinance.com/result/failure\",\n  \"HOMEVEST_SUCCESS\": \"https://homevestfinance.com/result/success\",\n  \"HOMEVEST_PREQUALSUCCESS\": \"https://homevestfinance.com/result/offers\",\n  \"HOMEVEST_PREQUALFAILURE\": \"https://homevestfinance.com/result/offersfailure\",\n  \"VGS_VAULT_ID\": \"tntwuexevnt\",\n  \"VGS_ENVIRONMENT\": \"live\",\n  \"ONE_LOOK_API_URL\": \"https://1look.1andfund.com\",\n  \"VERSION\": \"d6131501b\"\n});\n","import * as angular from \"angular\";\nimport \"angulartics\";\nimport * as UAParser from \"ua-parser-js\";\nimport { dispatchException, dispatchToRsf } from \"app2/src/helpers/Analytics\";\nimport ReactGA from \"react-ga4\";\n\nangular.module(\"angulartics.rsf.analytics\", [\"angulartics\"])\n  .config([\"$analyticsProvider\", \"$windowProvider\", ($analyticsProvider, $windowProvider) => {\n    const localStorageKey = \"rsf-analytics-queue\";\n\n    /**\n     * Adds element(s) to the RSF-Analytics queue and updates `localStorage`\n     */\n    const enqueueAnalyticsData = (data: any | any[]) => {\n      // Queue the record to be POSTED later\n      const queue = getAnalyticsQueue();\n      if (Array.isArray(data)) {\n        queue.push(...data);\n      } else {\n        queue.push(data);\n      }\n      setAnalyticsQueue(queue);\n    };\n\n    /**\n     * Dequeue a batch of records that matches `chunkSize` (or 5,000 when\n     * omitted). The remaining items are returned to `localStorage`.\n     */\n    const dequeueAnalyticsChunk = (chunkSize?: number) => {\n      if (chunkSize === undefined) {\n        chunkSize = 5_000;\n      }\n\n      const queue = getAnalyticsQueue();\n      const chunk = queue.splice(0, chunkSize);\n      setAnalyticsQueue(queue);\n\n      return chunk;\n    };\n\n    /**\n     * Returns an array representing RSF-Analytics data that exists in\n     * `localStorage`\n     */\n    const getAnalyticsQueue = (): any[] => {\n      const queueJSON = localStorage.getItem(localStorageKey) || \"[]\";\n      return JSON.parse(queueJSON);\n    };\n\n    /**\n     * Overwrites the RSF-Analytics queue in `localStorage` with the value in\n     * `queue`\n     */\n    const setAnalyticsQueue = (queue: any[]) => {\n      localStorage.setItem(localStorageKey, JSON.stringify(queue));\n    };\n\n    const parser = new UAParser();\n\n    const settings: any = {\n      url: \"https://analytics.remotesf.com/api/v1/events\",\n      userId: null,\n      orgId: null,\n      appVersion: null,\n    };\n\n    const $window: ng.IWindowService = $windowProvider.$get();\n    let pagePathCache: string;\n\n    $analyticsProvider.registerSetUsername((userId: string) => {\n      settings.userId = userId;\n    });\n\n    $analyticsProvider.registerSetUserProperties((props: any) => {\n      if (props.orgId) {\n        settings.orgId = props.orgId;\n      }\n\n      if (props.appVersion) {\n        settings.appVersion = props.appVersion;\n      }\n    });\n\n    $analyticsProvider.registerPageTrack(function (path, properties) {\n      pagePathCache = path;\n\n      properties = properties || {};\n\n      if ($window.location.search.indexOf(\"mobile\") >= 0) {\n        properties.mobile = true;\n      }\n\n      if ($window.location.search.indexOf(\"embedded\") >= 0) {\n        properties.embedded = true;\n      }\n\n      dispatchToRsf(angular.extend(JSON.parse(angular.toJson(properties)), {\n        appVersion: settings.appVersion,\n        hitType: \"pageview\",\n        page: path,\n        userAgent: parser.getResult()\n      }));\n    });\n\n    $analyticsProvider.registerEventTrack((action, properties) => {\n      if (!action) {\n        return;\n      }\n\n      if ($window.location.search.indexOf(\"mobile\") >= 0) {\n        properties.mobile = true;\n      }\n\n      if ($window.location.search.indexOf(\"embedded\") >= 0) {\n        properties.embedded = true;\n      }\n\n      // Sets default properties\n      properties = properties || {};\n      properties.category = properties.category || \"Event\";\n\n      // GA requires that eventValue be an integer, see:\n      // https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#eventValue\n      // https://github.com/luisfarzati/angulartics/issues/81\n      if (properties.value) {\n        const parsed = parseInt(properties.value, 10);\n        properties.value = isNaN(parsed) ? 0 : parsed;\n      }\n\n      ReactGA.event({\n        category: properties.category,\n        action: action,\n      });\n\n      dispatchToRsf(angular.extend(angular.copy(properties), {\n        hitType: \"event\",\n        action: action,\n        page: getPage_(properties)\n      }));\n    });\n\n    $analyticsProvider.registerExceptionTrack(dispatchException);\n\n    const getPage_ = (properties) => {\n      return properties.page || pagePathCache ||\n        $window.location.hash.substring(1) || window.location.pathname;\n    };\n  }]);\n","import * as authActions from \"./auth.actions\";\nimport { Record } from \"immutable\";\n\nexport const AuthStateRecord = Record({\n  token: null,\n  refreshToken: null,\n  authenticating: false,\n  refreshTokenExpired: false,\n  accessUid: null,\n});\n\nexport const initialState = AuthStateRecord({ token: null, refreshToken: null });\nexport type AuthState = typeof initialState;\n\nexport const reducer = (state = initialState, action: authActions.Actions): AuthState => {\n  switch (action.type) {\n    case authActions.SET_TOKENS:\n      return state.set(\"token\", action.payload.token).set(\"refreshToken\", action.payload.refreshToken);\n    case authActions.SET_TOKEN:\n      return state.set(\"token\", action.payload);\n    case authActions.SET_ACCESS_UID:\n      return state.set(\"accessUid\", action.payload.uid);\n    case authActions.SET_AUTHENTICATING:\n      return state.set(\"authenticating\", action.payload);\n    case authActions.SET_REFRESH_TOKEN_EXPIRED:\n      return state.set(\"refreshTokenExpired\", action.payload);\n    default:\n      return state;\n  }\n};\n","import * as hoverActions from \"./hover.actions\";\nimport { Map, fromJS } from \"immutable\";\nimport { Record } from \"immutable\";\n\nexport const HoverStateRecord = Record({\n  importing: false,\n  importLog: \"\",\n  authorizing: false,\n  authorized: false,\n  pages: Map<number, hoverActions.Page>(),\n  page: 1,\n  search: \"\",\n  currentJob: null,\n  errors: [],\n});\n\nexport const initialState = HoverStateRecord();\nexport type HoverState = typeof initialState;\n\nexport const reducer = (state = initialState, action: hoverActions.Actions): HoverState => {\n  switch (action.type) {\n    case hoverActions.RECEIVE_PAGE:\n      return state\n        .setIn([\"pages\", action.payload.page], action.payload)\n        .setIn([\"pages\", action.payload.page, \"loading\"], false);\n    case hoverActions.FETCH_PAGE:\n      if (state.getIn([\"pages\", action.payload.page])) {\n        return state\n          .setIn([\"pages\", action.payload.page, \"loading\"], true)\n          .setIn([\"pages\", action.payload.page, \"jobs\"], [])\n          .set(\"page\", action.payload.page)\n          .set(\"search\", action.payload.search);\n      }\n      return state.setIn([\"pages\", action.payload.page], fromJS({ loading: true })).set(\"page\", action.payload.page);\n    case hoverActions.RESET_PAGES:\n      return state.set(\"pages\", Map());\n    case hoverActions.SET_AUTHORIZING:\n      return state.set(\"authorizing\", action.payload);\n    case hoverActions.SET_AUTHORIZED:\n      return state.set(\"authorized\", action.payload);\n    case hoverActions.SET_ERRORS:\n      return state.set(\"errors\", action.payload);\n    case hoverActions.SET_IMPORTING:\n      return state.set(\"importing\", action.payload);\n    case hoverActions.SET_IMPORT_LOG:\n      return state.set(\"importLog\", action.payload);\n    case hoverActions.SET_CURRENT_JOB:\n      return state.set(\"currentJob\", action.payload);\n    default:\n      return state;\n  }\n};\n","import * as quickMeasureActions from \"app2/src/reducers/integrations/quickMeasure.actions\";\nimport { Record } from \"immutable\";\n\nexport const QuickMeasureStateRecord = Record({\n  authorizing: false,\n  authorized: false,\n});\n\nexport const initialState = QuickMeasureStateRecord();\nexport type QuickMeasureState = typeof initialState;\n\nexport const reducer = (state = initialState, action: quickMeasureActions.Actions): QuickMeasureState => {\n  switch (action.type) {\n    case quickMeasureActions.SET_AUTHORIZING:\n      return state.set(\"authorizing\", action.payload);\n    case quickMeasureActions.SET_AUTHORIZED:\n      return state.set(\"authorized\", action.payload);\n    default:\n      return state;\n  }\n};\n","import * as eagleviewActions from \"./eagleview.actions\";\nimport { Record, fromJS, Map } from \"immutable\";\nimport { Page } from \"app2/src/api/integrations/eagleview.service\";\n\nexport const EagleviewStateRecord = Record({\n  pages: Map<number, Page>(),\n  page: 1,\n  total_count: 0,\n  total_pages: 0,\n  importing: false,\n});\n\nexport const initialState = EagleviewStateRecord({});\nexport type EagleviewState = typeof initialState;\n\nexport const reducer = (state = initialState, action: eagleviewActions.Actions): EagleviewState => {\n  switch (action.type) {\n    case eagleviewActions.RECEIVE_PAGE:\n      return state\n        .setIn([\"pages\", action.payload.page], action.payload)\n        .setIn([\"pages\", action.payload.page, \"loading\"], false);\n\n    case eagleviewActions.FETCH_PAGE:\n      if (state.getIn([\"pages\", action.payload])) {\n        return state.setIn([\"pages\", action.payload, \"loading\"], true).set(\"page\", action.payload);\n      }\n      return state.setIn([\"pages\", action.payload], fromJS({ loading: true })).set(\"page\", action.payload);\n\n    case eagleviewActions.RESET_PAGES:\n      return state.set(\"pages\", Map());\n\n    case eagleviewActions.START_IMPORT:\n      return state.set(\"importing\", true);\n\n    case eagleviewActions.FINISH_IMPORT:\n      return state.set(\"importing\", false);\n\n    default:\n      return state;\n  }\n};\n","import * as paysimpleActions from \"./paysimple.actions\";\nimport { Record, fromJS, Map } from \"immutable\";\n\nexport const PaySimpleStateRecord = Record({\n  fetchingToken: false,\n  authorized: Map<number, boolean>(),\n  authorization: Map<number, Map<string, string>>(),\n  token: null,\n  token_error: \"\",\n  error: \"\",\n});\n\nexport const initialState = PaySimpleStateRecord({});\nexport type PaySimpleState = typeof initialState;\n\nexport const reducer = (state = initialState, action: paysimpleActions.Actions): PaySimpleState => {\n  switch (action.type) {\n    case paysimpleActions.FETCH_AUTHORIZATION:\n      if (state.getIn([\"authorization\", action.payload])) {\n        return state.setIn([\"authorization\", action.payload, \"loading\"], true);\n      }\n\n      return state.setIn(\n        [\"authorization\", action.payload],\n        fromJS({ loading: true, username: \"\", api_key: \"\", hpp_url: \"\" }),\n      );\n    case paysimpleActions.SET_AUTHORIZATION:\n      let newState = state\n        .setIn([\"authorization\", action.payload.orgId], fromJS(action.payload.authorization))\n        .setIn([\"authorization\", action.payload.orgId, \"loading\"], false);\n\n      if (\n        action.payload.authorization.username &&\n        action.payload.authorization.username !== \"\" &&\n        action.payload.authorization.api_key &&\n        action.payload.authorization.api_key !== \"\"\n      ) {\n        newState = newState.setIn([\"authorized\", action.payload.orgId], true);\n      }\n      return newState;\n    case paysimpleActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n    case paysimpleActions.RESET:\n      return state.setIn([\"byOrgId\", action.payload.id], state.getIn([\"lastSavedByOrgId\", action.payload.id]));\n    case paysimpleActions.FETCH_CHECKOUT_TOKEN:\n      return state.set(\"fetchingToken\", true);\n    case paysimpleActions.RECEIVE_CHECKOUT_TOKEN:\n      return state.set(\"fetchingToken\", false).set(\"token\", fromJS(action.payload));\n    case paysimpleActions.RECEIVE_CHECKOUT_TOKEN_ERROR:\n      return state.set(\"fetchingToken\", false).set(\"token_error\", action.payload);\n    case paysimpleActions.RECEIVE_GENERAL_ERROR:\n      return state.set(\"error\", action.payload);\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<ICardConnectAuthorizationData>): CardConnectAuthorizationRecord => {\n  const recordData: ICardConnectAuthorizationRecord = { ...(json as any) };\n\n  return new CardConnectAuthorizationRecord(recordData);\n};\n\nexport interface ICardConnectAuthorizationData {\n  username: string;\n  token: string;\n  merchant_id: string;\n  hpp_url: string;\n  loading?: boolean;\n}\n\nexport interface ICardConnectAuthorizationRecord {\n  username: string;\n  token: string;\n  merchant_id: string;\n  hpp_url: string;\n  loading: boolean;\n}\n\nexport const defaultCardConnectAuthorizationRecord: ICardConnectAuthorizationRecord = {\n  username: \"\",\n  token: \"\",\n  merchant_id: \"\",\n  hpp_url: \"\",\n  loading: false,\n};\n\nexport class CardConnectAuthorizationRecord\n  extends Record(defaultCardConnectAuthorizationRecord)\n  implements ICardConnectAuthorizationRecord {}\n","import * as cardconnectActions from \"./cardconnect.actions\";\nimport { Record, Map } from \"immutable\";\nimport { fromJSON } from \"app2/src/records/CardConnectAuthorization\";\n\nexport const CardConnectStateRecord = Record({\n  lastSavedByOrgId: Map<number, Map<string, string>>(),\n  byOrgId: Map<number, Map<string, string>>(),\n  token: null,\n  token_error: \"\",\n  error: \"\",\n});\n\nexport const initialState = CardConnectStateRecord({});\nexport type CardConnectState = typeof initialState;\n\nexport const reducer = (state = initialState, action: cardconnectActions.Actions): CardConnectState => {\n  switch (action.type) {\n    case cardconnectActions.FETCH_AUTHORIZATION:\n      return state.setIn([\"byOrgId\", action.payload], fromJSON({ loading: true }));\n    case cardconnectActions.SET_AUTHORIZATION:\n      let newState = state\n        .setIn([\"byOrgId\", action.payload.orgId], fromJSON(action.payload.authorization))\n        .setIn([\"lastSavedByOrgId\", action.payload.orgId], fromJSON(action.payload.authorization))\n        .setIn([\"byOrgId\", action.payload.orgId, \"loading\"], false);\n\n      if (\n        action.payload.authorization.username &&\n        action.payload.authorization.username !== \"\" &&\n        action.payload.authorization.api_key &&\n        action.payload.authorization.api_key !== \"\" &&\n        action.payload.authorization.merchant_id &&\n        action.payload.authorization.merchant_id !== \"\"\n      ) {\n        newState = newState.setIn([\"byOrgId\", action.payload.orgId], true);\n      }\n      return newState;\n    case cardconnectActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n    case cardconnectActions.RESET:\n      return state.setIn([\"byOrgId\", action.payload.id], state.getIn([\"lastSavedByOrgId\", action.payload.id]));\n    default:\n      return state;\n  }\n};\n","import * as roofScopeActions from \"app2/src/reducers/integrations/roofscope.actions\";\nimport { Record } from \"immutable\";\n\nexport const RoofScopeStateRecord = Record({\n  authorized: false,\n});\n\nexport const initialState = RoofScopeStateRecord();\nexport type RoofScopeState = typeof initialState;\n\nexport const reducer = (state = initialState, action: roofScopeActions.Actions): RoofScopeState => {\n  switch (action.type) {\n    case roofScopeActions.SET_AUTHORIZED:\n      return state.set(\"authorized\", action.payload);\n    default:\n      return state;\n  }\n};\n","import { combineReducers } from \"redux-immutable\";\nimport { Map } from \"immutable\";\nimport { reducer as hoverReducer, initialState as HoverInitialState } from \"./integrations/hover.reducer\";\nimport { Actions as hoverActions } from \"./integrations/hover.actions\";\nimport {\n  reducer as quickMeasureReducer,\n  initialState as QuickMeasureInitialState,\n} from \"app2/src/reducers/integrations/quickMeasure.reducer\";\nimport { Actions as quickMeasureActions } from \"app2/src/reducers/integrations/quickMeasure.actions\";\nimport { reducer as eagleviewReducer, initialState as EagleviewInitialState } from \"./integrations/eagleview.reducer\";\nimport { Actions as eagleviewActions } from \"./integrations/eagleview.actions\";\nimport { reducer as paysimpleReducer, initialState as PaySimpleInitialState } from \"./integrations/paysimple.reducer\";\nimport { Actions as paysimpleActions } from \"./integrations/paysimple.actions\";\nimport {\n  reducer as cardconnectReducer,\n  initialState as CardConnectInitialState,\n} from \"./integrations/cardconnect.reducer\";\nimport { Actions as cardconnectActions } from \"./integrations/cardconnect.actions\";\nimport { Actions as roofScopeActions } from \"./integrations/roofscope.actions\";\nimport { reducer as roofScopeReducer, initialState as RoofScopeInitialState } from \"./integrations/roofscope.reducer\";\n\nexport const IntegrationsInitialState = Map({\n  hover: HoverInitialState,\n  eagleview: EagleviewInitialState,\n  paysimple: PaySimpleInitialState,\n  cardconnect: CardConnectInitialState,\n  quickMeasure: QuickMeasureInitialState,\n  roofScope: RoofScopeInitialState,\n});\n\nexport type IntegrationsState = typeof IntegrationsInitialState;\n\nexport const reducer = combineReducers<IntegrationsState, IntegrationsActions>({\n  //@ts-ignore\n  hover: hoverReducer,\n  eagleview: eagleviewReducer,\n  paysimple: paysimpleReducer,\n  quickMeasure: quickMeasureReducer,\n  cardconnect: cardconnectReducer,\n  roofScope: roofScopeReducer,\n});\n\nexport type IntegrationsActions =\n  | hoverActions\n  | eagleviewActions\n  | paysimpleActions\n  | cardconnectActions\n  | quickMeasureActions\n  | roofScopeActions;\n","import * as analyticsActions from \"./analytics.actions\";\nimport { Record, Map } from \"immutable\";\nimport { EventData } from \"./analytics.actions\";\n\nconst EventPagination = Record({\n  total_count: 0,\n  total_pages: 0,\n  page: 1,\n  pages: Map<number, typeof EventPageRecord>(),\n});\n\nconst UserPagination = Record({\n  total_count: 0,\n  total_pages: 0,\n  page: 1,\n  pages: Map<number, typeof UserEventPageRecord>(),\n});\n\nexport const EventPageRecord = Record({\n  loading: false,\n  data: [] as EventData[],\n  pagination: {},\n});\n\nexport const UserEventPageRecord = Record({\n  loading: false,\n  data: [] as analyticsActions.IUserAnalyticsData[],\n  pagination: {},\n});\n\nexport const AnalyticStateRecord = Record({\n  eventsById: Map<number, EventData>(),\n  eventPagination: EventPagination(),\n  userPagination: UserPagination(),\n});\n\nexport const initialState = AnalyticStateRecord();\nexport type AnalyticState = typeof initialState;\n\nexport const reducer = (state = initialState, action: analyticsActions.Actions): AnalyticState => {\n  switch (action.type) {\n    case analyticsActions.FETCH_PAGE:\n      if (!state.getIn([\"eventPagination\", \"pages\", action.payload])) {\n        return state\n          .setIn([\"eventPagination\", \"page\"], action.payload)\n          .setIn([\"eventPagination\", \"pages\", action.payload], EventPageRecord({ loading: true }));\n      }\n      return state\n        .setIn([\"eventPagination\", \"page\"], action.payload)\n        .setIn([\"eventPagination\", \"pages\", action.payload, \"loading\"], true)\n        .setIn([\"eventPagination\", \"pages\", action.payload, \"data\"], []);\n    case analyticsActions.RESET_PAGES:\n      return state.setIn([\"eventPagination\", \"pages\"], Map());\n    case analyticsActions.RECEIVE_PAGE:\n      return state\n        .setIn([\"eventPagination\", \"pages\", action.payload.page, \"data\"], action.payload.data)\n        .setIn([\"eventPagination\", \"pages\", action.payload.page, \"loading\"], false)\n        .setIn([\"eventPagination\", \"pages\", action.payload.page, \"pagination\"], action.payload.pagination)\n        .setIn([\"eventPagination\", \"total_count\"], action.payload.pagination.total_count)\n        .setIn([\"eventPagination\", \"total_pages\"], action.payload.pagination.total_pages);\n    case analyticsActions.FETCH_USER_PAGE:\n      if (!state.getIn([\"userPagination\", \"pages\", action.payload])) {\n        return state\n          .setIn([\"userPagination\", \"page\"], action.payload)\n          .setIn([\"userPagination\", \"pages\", action.payload], EventPageRecord({ loading: true }));\n      }\n      return state\n        .setIn([\"userPagination\", \"page\"], action.payload)\n        .setIn([\"userPagination\", \"pages\", action.payload, \"loading\"], true)\n        .setIn([\"userPagination\", \"pages\", action.payload, \"data\"], []);\n    case analyticsActions.RESET_USER_PAGES:\n      return state.setIn([\"userPagination\", \"pages\"], Map());\n    case analyticsActions.RECEIVE_USER_PAGE:\n      return state\n        .setIn([\"userPagination\", \"pages\", action.payload.page, \"data\"], action.payload.data)\n        .setIn([\"userPagination\", \"pages\", action.payload.page, \"loading\"], false)\n        .setIn([\"userPagination\", \"pages\", action.payload.page, \"pagination\"], action.payload.pagination)\n        .setIn([\"userPagination\", \"total_count\"], action.payload.pagination.total_count)\n        .setIn([\"userPagination\", \"total_pages\"], action.payload.pagination.total_pages);\n    default:\n      return state;\n  }\n};\n","import * as leadsActions from \"./leads.actions\";\nimport { Record, Map, List } from \"immutable\";\n\nexport const LeadRecord = Record({\n  id: 0,\n  first_name: \"\",\n  last_name: \"\",\n  email_address: \"\",\n  lead_source: \"\",\n  form_data: {},\n  job_id: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n});\n\nexport const Page = Record({\n  leads: List([]),\n});\n\nexport const LeadPageRecord = Record({\n  loading: false,\n  leads: [] as number[],\n  pagination: {},\n});\n\nexport const LeadStateRecord = Record({\n  leadsById: Map<number, typeof LeadRecord>(),\n  pages: Map<number, typeof LeadPageRecord>(),\n  params: {\n    page: 1,\n    filter: \"unclaimed\",\n    query: \"\",\n  },\n  total_count: 0,\n  total_pages: 0,\n});\n\nexport const LeadsInitialState = LeadStateRecord();\nexport type LeadState = typeof LeadsInitialState;\n\nexport const reducer = (state = LeadsInitialState, action: leadsActions.Actions): LeadState => {\n  switch (action.type) {\n    case leadsActions.FETCH_PAGE:\n      if (!state.getIn([\"pages\", action.payload.page])) {\n        return state\n          .set(\"params\", action.payload)\n          .setIn([\"pages\", action.payload.page], LeadPageRecord({ loading: true }));\n      }\n      return state\n        .set(\"params\", action.payload)\n        .setIn([\"pages\", action.payload.page, \"loading\"], true)\n        .setIn([\"pages\", action.payload.page, \"leads\"], []);\n    case leadsActions.RESET_PAGES:\n      return state.set(\"pages\", Map());\n    case leadsActions.RECEIVE_PAGE:\n      _.each(action.payload.leads, (lead) => {\n        state = state.setIn([\"leadsById\", lead.id], LeadRecord(lead));\n      });\n      return state\n        .setIn([\"pages\", action.payload.page, \"leads\"], _.pluck(action.payload.leads, \"id\"))\n        .setIn([\"pages\", action.payload.page, \"loading\"], false)\n        .setIn([\"pages\", action.payload.page, \"pagination\"], action.payload.meta.pagination)\n        .set(\"total_count\", action.payload.meta.pagination.total_count)\n        .set(\"total_pages\", action.payload.meta.pagination.total_pages);\n    case leadsActions.RECEIVE_LEAD:\n      return state\n        .setIn([\"leadsById\", action.payload.id], action.payload)\n        .setIn([\"leadsById\", action.payload.id, \"loading\"], false);\n    case leadsActions.POST_JOB:\n      return state.setIn([\"leadsById\", action.payload, \"loading\"], true);\n    default:\n      return state;\n  }\n};\n","import { List } from \"immutable\";\n\n/**\n * Generates an array of evenly distributed colors\n * @param numberOfColors\n * @returns Array of colors in `hsl(h, s, l)` format\n */\nexport const generateColors = (numberOfColors: number): string[] => {\n  const colors = [];\n  let prevColor = 1;\n  for (let i = 1; i <= numberOfColors; i++) {\n    colors.push(`hsl(${prevColor}, 55%, 40%)`);\n    prevColor = prevColor + 360 / numberOfColors;\n  }\n  return colors;\n};\n\n/**\n * Gets the hue value in a color in `hsl(h, s, l)` format\n */\nexport const parseHueValue = (color: string): number => {\n  return parseInt(color.slice(4).split(\",\")[0]) || 0;\n};\n\n// List of 20 colors that are recognizably unique and keep white text legible\nexport const baseColors = List([\n  \"hsl(1, 70%, 40%)\",\n  \"hsl(241, 70%, 40%)\",\n  \"hsl(281, 70%, 40%)\",\n  \"hsl(41, 70%, 40%)\",\n  \"hsl(121, 70%, 40%)\",\n  \"hsl(321, 70%, 40%)\",\n  \"hsl(171, 70%, 40%)\",\n  \"hsl(60, 80%, 40%)\",\n  \"hsl(201, 70%, 40%)\",\n  \"hsl(24, 70%, 40%)\",\n  \"hsl(71, 70%, 40%)\",\n  \"hsl(260, 70%, 40%)\",\n  \"hsl(5, 50%, 35%)\",\n  \"hsl(245, 50%, 35%)\",\n  \"hsl(285, 50%, 35%)\",\n  \"hsl(45, 50%, 35%)\",\n  \"hsl(125, 50%, 35%)\",\n  \"hsl(325, 50%, 35%)\",\n  \"hsl(175, 50%, 35%)\",\n  \"hsl(65, 50%, 35%)\",\n]);\n","import { Record, List } from \"immutable\";\nimport { IAddressData, fromJSON as addressFromJSON, AddressRecord } from \"./Address\";\nimport { IPhoneNumberData, fromJSON as phoneFromJSON, PhoneNumberRecord } from \"./PhoneNumber\";\nimport { Nullable } from \"app2/src/records\";\nimport { IJobAssignmentData, JobAssignmentRecord, fromJSON as jobAssignmentFromJSON } from \"./JobAssignment\";\n\nexport const fromJSON = (json: Partial<IJobBasicData>): JobBasicRecord => {\n  const record: IJobBasicRecord = { ...(json as any) };\n\n  if (json.address) {\n    record.address = addressFromJSON(json.address);\n  } else {\n    record.address = addressFromJSON({});\n  }\n\n  if (json.phone_numbers) {\n    record.phone_numbers = List<PhoneNumberRecord>(json.phone_numbers.map((pn) => phoneFromJSON(pn)));\n  } else {\n    record.phone_numbers = List<PhoneNumberRecord>();\n  }\n\n  if (json.assignments) {\n    record.assignments = List(json.assignments.map((a) => jobAssignmentFromJSON(a)));\n  }\n\n  return new JobBasicRecord(record);\n};\n\nexport interface IJobBasicData {\n  id: number;\n  name: string;\n  customer_name: string;\n  email: string;\n  address: IAddressData;\n  phone_numbers: IPhoneNumberData[];\n  assignments?: IJobAssignmentData[];\n}\n\nexport interface IJobBasicRecord {\n  id: number;\n  name: Nullable<string>;\n  customer_name: Nullable<string>;\n  address: AddressRecord;\n  phone_numbers: List<PhoneNumberRecord>;\n  assignments: List<JobAssignmentRecord>;\n}\n\nexport const defaultJobBasicProps = {\n  id: 0,\n  name: \"\",\n  customer_name: \"\",\n  email: \"\",\n  address: addressFromJSON({}),\n  phone_numbers: List<PhoneNumberRecord>(),\n  assignments: List<JobAssignmentRecord>(),\n};\n\nexport class JobBasicRecord extends Record<IJobBasicRecord>(defaultJobBasicProps) implements IJobBasicRecord {}\n","import { RootState } from \"app2/src/reducers\";\n\nexport const currentAccessUid = (state: RootState) => state.getIn([\"auth\", \"accessUid\"]);\nexport const currentToken = (state: RootState) => state.getIn([\"auth\", \"token\"]);\nexport const currentRefreshToken = (state: RootState) => state.getIn([\"auth\", \"refreshToken\"]);\n","import { currentAccessUid } from \"app2/src/reducers/auth.selectors\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\nexport const addAuthUser = (route: string, accessUid: string) => {\n  if (accessUid === undefined || accessUid === \"\") {\n    return route;\n  }\n  let currentParams = \"\";\n  // if we have existing query params, get them out\n  // so we can append to them safely\n  if (route.includes(\"?\")) {\n    [route, currentParams] = route.split(\"?\");\n  }\n  const routeParams = new URLSearchParams(currentParams);\n  routeParams.set(\"authUser\", accessUid);\n  return `${route}?${routeParams.toString()}`;\n};\n\nexport interface CustomLinkProps<T> extends React.HTMLAttributes<T> {\n  to: string;\n  tag: React.ElementType;\n  activeClassName?: string;\n  variant?: string;\n  target?: \"_blank\";\n}\n\nexport const CustomLink: React.FunctionComponent<\n  CustomLinkProps<\n    | React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>\n    | React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>\n  >\n> = ({ activeClassName, className, to, tag: Tag, children, ...rest }) => {\n  const accessUid = useSelector(currentAccessUid);\n  const callback = useCallback(\n    (e: any) => {\n      e.preventDefault();\n\n      StoreRegistry.get<ng.IRootScopeService>(\"$rootScope\").$apply(() => {\n        StoreRegistry.get<ng.ILocationService>(\"$location\").url(to);\n      });\n    },\n    [to],\n  );\n\n  if (window.location.pathname === to) {\n    className = className || \"\";\n    className = `${className} ${activeClassName}`;\n  }\n\n  let attrs = { ...rest } as any;\n\n  if (Tag === \"a\") {\n    attrs = { ...attrs, href: addAuthUser(to, accessUid) };\n    className = `${className} text-decoration-none leads-anchor-tag`;\n  }\n\n  return (\n    <Tag {...attrs} className={className} onClick={attrs.target ? null : callback}>\n      {children ? children : null}\n    </Tag>\n  );\n};\n","import { Nullable } from \"app2/src/records\";\nimport { Record, List } from \"immutable\";\n\nexport interface ISalesOpportunityData {\n  id: string;\n  name: string;\n  result_id: number;\n  result_reason_id: number;\n}\n\nexport interface ISalesOpportunityRecord {\n  id: string;\n  name: string;\n  result_id: number;\n  result_reason_id: number;\n}\n\nexport const defaultSalesOpportunityProps = {\n  id: \"\",\n  name: \"\",\n  result_id: 0,\n  result_reason_id: 0,\n} as ISalesOpportunityRecord;\n\nexport class SalesOpportunityRecord extends Record(defaultSalesOpportunityProps) {}\n\nexport const fromJSON = (json: IEventMetadata) => {\n  const recordData: IEventMetadataRecord = { ...(json as any) };\n\n  if (json.sales_opportunities) {\n    recordData.sales_opportunities = List(json.sales_opportunities.map((obj) => new SalesOpportunityRecord(obj)));\n  }\n\n  return new EventMetadataRecord(recordData);\n};\n\nexport interface IEventMetadata {\n  sales_opportunities?: ISalesOpportunityData[];\n  marketsharp_id?: number;\n  improveit360_appointment_id?: number;\n  sales_rabbit_id?: number;\n  salesforce_event_id?: number;\n  lead_perfection_id?: number;\n}\n\nexport interface IEventMetadataRecord {\n  sales_opportunities: Nullable<List<SalesOpportunityRecord>>;\n  marketsharp_id: Nullable<number>;\n  improveit360_appointment_id: Nullable<number>;\n  sales_rabbit_id: Nullable<number>;\n  salesforce_event_id: Nullable<number>;\n  lead_perfection_id: Nullable<number>;\n}\n\nexport const defaultEventMetadataProps = {\n  sales_opportunities: null,\n  marketsharp_id: null,\n  improveit360_appointment_id: null,\n  sales_rabbit_id: null,\n  salesforce_event_id: null,\n  lead_perfection_id: null,\n} as IEventMetadataRecord;\n\nexport class EventMetadataRecord extends Record(defaultEventMetadataProps) {}\n","import { checkDate, Nullable } from \"app2/src/records\";\nimport { toOneLiner } from \"app2/src/records/Address\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { IJobBasicData, JobBasicRecord, fromJSON as jobBasicFromJson } from \"app2/src/records/JobBasic\";\nimport { Record } from \"immutable\";\nimport { addAuthUser } from \"app2/src/components/Common/CustomLink\";\nimport * as config from \"react-global-configuration\";\nimport { EventMetadataRecord, IEventMetadata, fromJSON as eventMetadataFromJSON } from \"app2/src/records/EventMetadata\";\n\nexport const fromJSON = (json: Partial<IEventData>): EventRecord => {\n  const recordData: IEventRecord = { ...(json as any) };\n\n  if (json.job) {\n    recordData.job = jobBasicFromJson(json.job);\n  }\n\n  if (json.start_time) {\n    recordData.start_time = checkDate(json.start_time);\n  }\n\n  if (json.end_time) {\n    recordData.end_time = checkDate(json.end_time);\n  }\n\n  if (json.metadata) {\n    recordData.metadata = eventMetadataFromJSON(json.metadata);\n  }\n\n  return new EventRecord(recordData);\n};\n\nexport const initDescription = (job: JobRecord, accessUid: string): string => {\n  const location = `Location:\\n${toOneLiner(job.address)}\\n\\n`;\n  const additionalInfo = job.additional_info ? `Additional Info:\\n${job.additional_info}\\n\\n` : \"\";\n  const phoneNumbers = `Phone Numbers:\\n${job.phone_numbers.map((pn) => `${pn.name}: ${pn.number}`).join(\"\\n\")}\\n\\n`;\n  const link = addAuthUser(`${config.get(\"APP_URL\")}/jobs/${job.id}`, accessUid);\n  return `${location}${additionalInfo}${phoneNumbers}Link: ${link}`;\n};\n\nexport interface IEventData {\n  id: number;\n  summary: string;\n  start_time: string | Date;\n  end_time: string | Date;\n  job_id: Nullable<number>;\n  job?: IJobBasicData;\n  description: string;\n  metadata?: IEventMetadata;\n  events_result_id?: number;\n  events_result_reason_id?: number;\n  notes?: string;\n  user_id: Nullable<number>;\n  org_id: Nullable<number>;\n  editable?: boolean;\n}\n\nexport interface IEventRecord {\n  id: number;\n  summary: string;\n  start_time: Nullable<Date>;\n  end_time: Nullable<Date>;\n  job_id: Nullable<number>;\n  job: Nullable<JobBasicRecord>;\n  description: string;\n  metadata?: EventMetadataRecord;\n  events_result_id: Nullable<number>;\n  events_result_reason_id: Nullable<number>;\n  notes: Nullable<string>;\n  user_id: Nullable<number>;\n  org_id: Nullable<number>;\n  editable: boolean;\n\n  loading: boolean;\n}\n\nexport const defaultEventProps = {\n  id: 0,\n  summary: \"\",\n  start_time: null,\n  end_time: null,\n  job_id: null,\n  job: null,\n  description: \"\",\n  metadata: null,\n  events_result_id: null,\n  events_result_reason_id: null,\n  notes: null,\n  user_id: null,\n  org_id: null,\n  editable: true,\n  loading: false,\n};\n\nexport class EventRecord extends Record(defaultEventProps) implements IEventRecord {\n  public readonly id!: number;\n  public readonly summary!: string;\n  public readonly start_time!: Date;\n  public readonly end_time!: Date;\n  public readonly job!: Nullable<JobBasicRecord>;\n  public readonly editable!: boolean;\n  public readonly metadata!: EventMetadataRecord;\n}\n","import { fromJS, List, Map, Record } from \"immutable\";\nimport { RootActions, RootState } from \".\";\nimport { baseColors, parseHueValue } from \"../helpers/Color\";\nimport { EventRecord, fromJSON } from \"../records/Event\";\nimport * as eventActions from \"./event.actions\";\nimport { fetch, receive, reset } from \"./Reducer\";\n\nexport const EventStateRecord = Record({\n  busyInfo: Map<string, boolean>(),\n  lastSavedById: Map<number, EventRecord>(),\n  byId: Map<number, EventRecord>(),\n  colors: Map<\"byUserId\", Map<number, string>>(),\n});\n\nexport const initialState = EventStateRecord();\nexport type AppointmentState = typeof initialState;\n\nconst model = \"events\";\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case eventActions.FETCH_EVENT:\n      return fetch(state, model, fromJSON({ id: action.payload.eventId }));\n\n    case eventActions.RECEIVE_EVENT:\n      return receive(state, model, fromJSON(action.payload.event));\n\n    case eventActions.RECEIVE_EVENTS:\n      action.payload.events.forEach((event) => {\n        state = reducer(state, eventActions.Actions.receiveEvent(event));\n      });\n      return state;\n\n    case eventActions.FETCH_BUSY:\n      return state;\n\n    case eventActions.RECEIVE_BUSY:\n      return state.updateIn([model, \"busyInfo\"], (busyInfo) => busyInfo.merge(fromJS(action.payload.busyInfo)));\n\n    case eventActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n\n      const nameSplit = List(name.split(\".\"));\n      const lastName = nameSplit.last();\n      const rootName = nameSplit.splice(-1, 1);\n\n      if (lastName === \"events_result_id\") {\n        const eventResultReasonName = rootName.push(\"events_result_reason_id\").toArray();\n        state = state.setIn(rootPath.concat(eventResultReasonName), null);\n      }\n\n      if (lastName === \"result_id\") {\n        const resultReasonName = rootName.push(\"result_reason_id\").toArray();\n        state = state.setIn(rootPath.concat(resultReasonName), 0);\n      }\n\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n\n    case eventActions.INITIALIZE_EVENT:\n      const newState = state.setIn([model, \"byId\", 0], fromJSON(action.payload.newEventData));\n      return newState;\n\n    case eventActions.RESET_EVENT:\n      return reset(state, model, action.payload.eventId);\n\n    case eventActions.REMOVE_EVENT:\n      return state.deleteIn([model, \"byId\", action.payload.eventId]);\n\n    case eventActions.GENERATE_COLORS:\n      const { userIds, userToAssignId } = action.payload;\n      let colorsByUserId: Map<number, string> = state.getIn([model, \"colors\", \"byUserId\"], Map<number, string>());\n\n      let colors = baseColors;\n\n      // Generate 20 more colors if needed (should rarely happen)\n      if (colorsByUserId.size + 1 > colors.size) {\n        colors = colors.concat(\n          baseColors.map((c) => {\n            return `hsl(${(parseHueValue(c) + 10) % 360}, 50%, 35%)`;\n          }),\n        );\n      }\n\n      // Remove used colors\n      colorsByUserId.toList().forEach((color) => {\n        if (colors.includes(color)) {\n          colors = colors.filter((c) => c !== color);\n        }\n      });\n\n      userIds.forEach((id) => {\n        // Only userIds that haven't been assigned a color\n        if (!colorsByUserId.get(id) || colorsByUserId.get(id) === \"hsl(0, 0%, 45%)\") {\n          // Assign colors starting from the top\n          let lastAssignedIndex = 0;\n          colorsByUserId = colorsByUserId.set(id, colors.get(lastAssignedIndex));\n          lastAssignedIndex += 1;\n        }\n      });\n\n      // Should always be gray\n      if (userToAssignId) {\n        colorsByUserId = colorsByUserId.set(userToAssignId, \"hsl(0, 0%, 45%)\");\n      }\n      return state.setIn([model, \"colors\", \"byUserId\"], colorsByUserId);\n\n    default:\n      return state;\n  }\n};\n","import { Record, List } from \"immutable\";\nimport { CurrencyFormat, PercentageFormat } from \"app2/src/helpers/Format\";\n\nexport interface IDiscountData {\n  id: number;\n  org_id: number;\n  name: string;\n  description: string;\n  breakdown: IDiscountBreakdown;\n  sort_order: number;\n  archived: boolean;\n  created_at: Date;\n  updated_at: Date;\n}\n\n// No good way to not duplicate things\ntype DiscountKind = \"percent\" | \"flat\" | \"percent_limit\";\nexport const DiscountKinds: Array<DiscountKind> = [\"percent\", \"flat\", \"percent_limit\"];\n\nexport interface IDiscountBreakdown {\n  kind: DiscountKind;\n  amount: number;\n  limit: number;\n}\n\nexport const formatKind = (type: DiscountKind): string => {\n  switch (type) {\n    case \"percent\":\n      return \"Percentage Off\";\n    case \"flat\":\n      return \"Flat Amount\";\n    case \"percent_limit\":\n      return \"Percentage up to $$\";\n  }\n};\n\nexport const formatBreakdown = (breakdown: IDiscountBreakdown): string => {\n  if (breakdown.kind === \"flat\") {\n    return CurrencyFormat(breakdown.amount);\n  }\n\n  let formattedValue = PercentageFormat(breakdown.amount);\n\n  if (breakdown.kind === \"percent_limit\") {\n    formattedValue = `${formattedValue} up to ${CurrencyFormat(breakdown.limit)}`;\n  }\n\n  return formattedValue;\n};\n\nexport interface IDiscountRecord extends IDiscountData {\n  loading: boolean;\n  errors: List<string>;\n}\n\nconst defaultBreakdownProps: IDiscountBreakdown = {\n  kind: \"percent\",\n  amount: 0,\n  limit: 0,\n};\n\nexport class DiscountBreakdown extends Record(defaultBreakdownProps) implements IDiscountBreakdown {\n  public kind!: DiscountKind;\n  public amount!: number;\n  public limit!: number;\n\n  public constructor(values?: Partial<DiscountBreakdown>) {\n    values ? super(values) : super();\n  }\n}\n\nconst defaultDiscountProps: IDiscountRecord = {\n  id: -1,\n  org_id: null,\n  name: \"\",\n  description: \"\",\n  breakdown: new DiscountBreakdown(),\n  sort_order: 0,\n  archived: false,\n  created_at: null,\n  updated_at: null,\n  loading: false,\n  errors: List<string>(),\n};\n\nexport class DiscountRecord extends Record(defaultDiscountProps) implements IDiscountRecord {\n  public id!: number;\n  public org_id!: number;\n  public name!: string;\n  public description!: string;\n  public breakdown!: any;\n  public sort_order!: number;\n  public archived!: boolean;\n  public created_at!: Date;\n  public updated_at!: Date;\n\n  public loading!: boolean;\n  public errors!: List<string>;\n\n  public constructor(values?: Partial<IDiscountRecord>) {\n    if (values) {\n      values.breakdown = new DiscountBreakdown(values.breakdown);\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import * as discountActions from \"./discount.actions\";\nimport { DiscountRecord } from \"app2/src/records/DiscountRecord\";\nimport { Map, Record, List } from \"immutable\";\n\nexport interface IOrgDiscountsRecord {\n  discounts: List<number>;\n  errors: List<string>;\n  loading: boolean;\n}\nexport const OrgDiscountsRecord: Record.Factory<IOrgDiscountsRecord> = Record<IOrgDiscountsRecord>({\n  discounts: List<number>(),\n  errors: List<string>(),\n  loading: false,\n});\n\nexport const DiscountStateRecord = Record({\n  discountsById: Map<number, DiscountRecord>(),\n  discountsByOrgId: Map<number, List<typeof OrgDiscountsRecord>>(),\n});\n\nexport const initialState = DiscountStateRecord();\nexport type DiscountState = typeof initialState;\n\nexport const reducer = (state = initialState, action: discountActions.Actions): DiscountState => {\n  switch (action.type) {\n    case discountActions.RECEIVE_DISCOUNT:\n      const discount = new DiscountRecord({ ...action.payload, loading: false });\n\n      if (!state.getIn([\"discountsByOrgId\", discount.org_id])) {\n        state = state.setIn([\"discountsByOrgId\", discount.org_id], OrgDiscountsRecord({}));\n      }\n\n      return state.setIn([\"discountsById\", discount.id], discount).setIn(\n        [\"discountsByOrgId\", discount.org_id, \"discounts\"],\n        state\n          //@ts-ignore\n          .getIn([\"discountsByOrgId\", discount.org_id, \"discounts\"], List<number>())\n          .push(discount.id)\n          .toSet()\n          .toList(),\n      );\n    case discountActions.RECEIVE_DISCOUNT_ERROR:\n      return state\n        .setIn([\"discountsById\", action.payload.discountId, \"errors\"], List<string>(action.payload.errors))\n        .setIn([\"discountsById\", action.payload.discountId, \"loading\"], false);\n    case discountActions.FETCH_DISCOUNT:\n      if (state.getIn([\"discountsById\", action.payload.discountId])) {\n        return state.setIn([\"discountsById\", action.payload.discountId, \"loading\"], true);\n      }\n      return state.setIn(\n        [\"discountsById\", action.payload.discountId],\n        new DiscountRecord({ id: action.payload.discountId, org_id: action.payload.orgId, loading: true }),\n      );\n    case discountActions.FETCH_ORG_DISCOUNTS:\n      if (!state.getIn([\"discountsByOrgId\", action.payload])) {\n        return state.setIn([\"discountsByOrgId\", action.payload], OrgDiscountsRecord({ loading: true }));\n      }\n\n      return state.setIn([\"discountsByOrgId\", action.payload, \"loading\"], true);\n    case discountActions.RECEIVE_ORG_DISCOUNTS:\n      state = state.setIn([\"discountsByOrgId\", action.payload.orgId, \"discounts\"], List([]));\n      action.payload.discounts.forEach((d) => {\n        state = reducer(state, discountActions.Actions.receiveDiscount(d));\n      });\n\n      return state.setIn([\"discountsByOrgId\", action.payload.orgId, \"loading\"], false);\n    case discountActions.RECEIVE_ORG_ERRORS:\n      return state\n        .setIn([\"discountsByOrgId\", action.payload.orgId, \"errors\"], List<string>(action.payload.errors))\n        .setIn([\"discountsByOrgId\", action.payload.orgId, \"loading\"], false);\n    case discountActions.REMOVE_DISCOUNT:\n      return state.removeIn([\"discountsById\", action.payload]);\n    case discountActions.REMOVE_ORG_DISCOUNT:\n      return state.updateIn([\"discountsByOrgId\", action.payload.orgId, \"discounts\"], (discounts: List<number>) => {\n        return discounts.filter((d) => d !== action.payload.discountId);\n      });\n    default:\n      return state;\n  }\n};\n","import * as paymentTermTemplateActions from \"./paymentTermTemplate.actions\";\nimport { PaymentTermTemplateRecord, fromJSON } from \"app2/src/records/PaymentTermTemplate\";\nimport { Map, Record, List } from \"immutable\";\n\nexport interface IOrgPaymentTermTemplatesRecord {\n  paymentTermTemplates: List<number>;\n  errors: List<string>;\n  loading: boolean;\n}\nexport const OrgPaymentTermTemplatesRecord: Record.Factory<IOrgPaymentTermTemplatesRecord> =\n  Record<IOrgPaymentTermTemplatesRecord>({\n    paymentTermTemplates: List<number>(),\n    errors: List<string>(),\n    loading: false,\n  });\n\nexport const PaymentTermTemplateStateRecord = Record({\n  paymentTermTemplatesById: Map<number, PaymentTermTemplateRecord>(),\n  paymentTermTemplatesByOrgId: Map<number, List<typeof OrgPaymentTermTemplatesRecord>>(),\n});\n\nexport const initialState = PaymentTermTemplateStateRecord();\nexport type PaymentTermTemplateState = typeof initialState;\n\nexport const reducer = (state = initialState, action: paymentTermTemplateActions.Actions): PaymentTermTemplateState => {\n  switch (action.type) {\n    case paymentTermTemplateActions.RECEIVE_PAYMENT_TERM_TEMPLATE:\n      const paymentTermTemplate = fromJSON({ ...action.payload, loading: false });\n\n      if (!state.getIn([\"paymentTermTemplatesByOrgId\", paymentTermTemplate.org_id])) {\n        state = state.setIn(\n          [\"paymentTermTemplatesByOrgId\", paymentTermTemplate.org_id],\n          OrgPaymentTermTemplatesRecord({}),\n        );\n      }\n\n      return state.setIn([\"paymentTermTemplatesById\", paymentTermTemplate.id], paymentTermTemplate).setIn(\n        [\"paymentTermTemplatesByOrgId\", paymentTermTemplate.org_id, \"paymentTermTemplates\"],\n        state\n          //@ts-ignore\n          .getIn([\"paymentTermTemplatesByOrgId\", paymentTermTemplate.org_id, \"paymentTermTemplates\"], List<number>())\n          .push(paymentTermTemplate.id)\n          .toSet()\n          .toList(),\n      );\n    case paymentTermTemplateActions.RECEIVE_PAYMENT_TERM_TEMPLATE_ERROR:\n      return state\n        .setIn(\n          [\"paymentTermTemplatesById\", action.payload.paymentTermTemplateId, \"errors\"],\n          List<string>(action.payload.errors),\n        )\n        .setIn([\"paymentTermTemplatesById\", action.payload.paymentTermTemplateId, \"loading\"], false);\n    case paymentTermTemplateActions.FETCH_PAYMENT_TERM_TEMPLATE:\n      if (state.getIn([\"paymentTermTemplatesById\", action.payload.paymentTermTemplateId])) {\n        return state.setIn([\"paymentTermTemplatesById\", action.payload.paymentTermTemplateId, \"loading\"], true);\n      }\n      return state.setIn(\n        [\"paymentTermTemplatesById\", action.payload.paymentTermTemplateId],\n        new PaymentTermTemplateRecord({\n          id: action.payload.paymentTermTemplateId,\n          org_id: action.payload.orgId,\n          loading: true,\n        }),\n      );\n    case paymentTermTemplateActions.FETCH_ORG_PAYMENT_TERM_TEMPLATES:\n      if (!state.getIn([\"paymentTermTemplatesByOrgId\", action.payload.orgId])) {\n        return state.setIn(\n          [\"paymentTermTemplatesByOrgId\", action.payload.orgId],\n          OrgPaymentTermTemplatesRecord({ loading: true }),\n        );\n      }\n\n      return state.setIn([\"paymentTermTemplatesByOrgId\", action.payload.orgId, \"loading\"], true);\n    case paymentTermTemplateActions.RECEIVE_ORG_PAYMENT_TERM_TEMPLATES:\n      state = state.setIn([\"paymentTermTemplatesByOrgId\", action.payload.orgId, \"paymentTermTemplates\"], List([]));\n      action.payload.paymentTermTemplates.forEach((d) => {\n        state = reducer(state, paymentTermTemplateActions.Actions.receivePaymentTermTemplate(d));\n      });\n\n      return state.setIn([\"paymentTermTemplatesByOrgId\", action.payload.orgId, \"loading\"], false);\n    case paymentTermTemplateActions.RECEIVE_ORG_ERRORS:\n      return state\n        .setIn([\"paymentTermTemplatesByOrgId\", action.payload.orgId, \"errors\"], List<string>(action.payload.errors))\n        .setIn([\"paymentTermTemplatesByOrgId\", action.payload.orgId, \"loading\"], false);\n    case paymentTermTemplateActions.REMOVE_PAYMENT_TERM_TEMPLATE:\n      return state.removeIn([\"paymentTermTemplatesById\", action.payload]);\n    case paymentTermTemplateActions.REMOVE_ORG_PAYMENT_TERM_TEMPLATE:\n      return state.updateIn(\n        [\"paymentTermTemplatesByOrgId\", action.payload.orgId, \"paymentTermTemplates\"],\n        (paymentTermTemplates: List<number>) => {\n          return paymentTermTemplates.filter((d) => d !== action.payload.paymentTermTemplateId);\n        },\n      );\n    default:\n      return state;\n  }\n};\n","import * as toolActions from \"./tool.actions\";\nimport { ToolRecord, fromJSON } from \"app2/src/records/Tool\";\nimport { Map, Record, List } from \"immutable\";\n\nexport interface IOrgToolsRecord {\n  tools: List<number>;\n  design_tools: List<number>;\n  errors: List<string>;\n  loading: boolean;\n}\nexport const OrgToolsRecord: Record.Factory<IOrgToolsRecord> = Record<IOrgToolsRecord>({\n  tools: List<number>(),\n  design_tools: List<number>(),\n  errors: List<string>(),\n  loading: false,\n});\n\nexport const ToolStateRecord = Record({\n  byId: Map<number, ToolRecord>(),\n  byOrgId: Map<number, List<typeof OrgToolsRecord>>(),\n});\n\nexport const initialState = ToolStateRecord();\nexport type ToolState = typeof initialState;\n\nexport const reducer = (state = initialState, action: toolActions.Actions): ToolState => {\n  switch (action.type) {\n    case toolActions.RECEIVE_TOOL:\n      const tool = fromJSON({ ...action.payload, loading: false });\n\n      if (!state.getIn([\"byOrgId\", tool.org_id])) {\n        state = state.setIn([\"byOrgId\", tool.org_id], OrgToolsRecord({}));\n      }\n      return state.setIn([\"byId\", tool.id], tool).setIn(\n        [\"byOrgId\", tool.org_id, `${tool.kind}s`],\n        state\n          //@ts-ignore\n          .getIn([\"byOrgId\", tool.org_id, `${tool.kind}s`], List<number>())\n          .push(tool.id)\n          .toSet()\n          .toList(),\n      );\n    case toolActions.RECEIVE_TOOL_ERROR:\n      return state\n        .setIn([\"byId\", action.payload.toolId, \"errors\"], List<string>(action.payload.errors))\n        .setIn([\"byId\", action.payload.toolId, \"loading\"], false);\n    case toolActions.FETCH_TOOL:\n      if (state.getIn([\"byId\", action.payload.toolId])) {\n        return state.setIn([\"byId\", action.payload.toolId, \"loading\"], true);\n      }\n      return state.setIn(\n        [\"byId\", action.payload.toolId],\n        new ToolRecord({ id: action.payload.toolId, org_id: action.payload.orgId, loading: true }),\n      );\n    case toolActions.FETCH_ORG_TOOLS:\n      if (!state.getIn([\"byOrgId\", action.payload])) {\n        return state.setIn([\"byOrgId\", action.payload], OrgToolsRecord({ loading: true }));\n      }\n\n      return state.setIn([\"byOrgId\", action.payload, \"loading\"], true);\n    case toolActions.RECEIVE_ORG_TOOLS:\n      state = state.setIn([\"byOrgId\", action.payload.orgId, \"tools\"], List([]));\n      action.payload.tools.forEach((d) => {\n        state = reducer(state, toolActions.Actions.receiveTool(d));\n      });\n\n      return state.setIn([\"byOrgId\", action.payload.orgId, \"loading\"], false);\n    case toolActions.RECEIVE_ORG_ERRORS:\n      return state\n        .setIn([\"byOrgId\", action.payload.orgId, \"errors\"], List<string>(action.payload.errors))\n        .setIn([\"byOrgId\", action.payload.orgId, \"loading\"], false);\n    case toolActions.REMOVE_TOOL:\n      return state.removeIn([\"byId\", action.payload]);\n    case toolActions.REMOVE_ORG_TOOL:\n      return state.updateIn([\"byOrgId\", action.payload.orgId, \"tools\"], (tools: List<number>) => {\n        return tools.filter((d) => d !== action.payload.toolId);\n      });\n    default:\n      return state;\n  }\n};\n","import * as paymentsActions from \"./payment.actions\";\nimport { Record, Map, List } from \"immutable\";\nimport { PaymentRecord, fromJSON as PaymentFromJSON } from \"../records/PaymentRecord\";\nimport { PaymentAuthorizationRecord } from \"../records/PaymentAuthorizationRecord\";\n\nexport const Page = Record({\n  payments: List([]),\n});\n\nexport const PaymentPageRecord = Record({\n  loading: false,\n  payments: List(),\n  pagination: {},\n});\n\nexport const PaymentStateRecord = Record({\n  paymentsById: Map<number, PaymentRecord>(),\n  pages: Map<number, typeof PaymentPageRecord>(),\n  params: {\n    page: 1,\n    job_id: null,\n  },\n  total_count: 0,\n  total_pages: 0,\n  authByOrgId: Map<number, PaymentAuthorizationRecord>(),\n  makingPayment: false,\n  lastPayment: null,\n  providerLoading: false,\n  providerValid: false,\n  providerSubmitting: false,\n  sendingReceipt: false,\n  error: null,\n});\n\nexport const initialState = PaymentStateRecord();\nexport type PaymentState = typeof initialState;\n\nexport const reducer = (state = initialState, action: paymentsActions.Actions): PaymentState => {\n  switch (action.type) {\n    case paymentsActions.FETCH_PAGE:\n      if (!state.getIn([\"pages\", action.payload.page])) {\n        return state\n          .set(\"params\", action.payload)\n          .setIn([\"pages\", action.payload.page], PaymentPageRecord({ loading: true }));\n      }\n      return state\n        .set(\"params\", action.payload)\n        .setIn([\"pages\", action.payload.page, \"loading\"], true)\n        .setIn([\"pages\", action.payload.page, \"payments\"], List());\n    case paymentsActions.RESET_PAGES:\n      return state.set(\"pages\", Map());\n    case paymentsActions.RECEIVE_PAGE:\n      _.each(action.payload.payments, (payment) => {\n        state = state.setIn([\"paymentsById\", payment.id], PaymentFromJSON(payment));\n      });\n      return state\n        .setIn([\"pages\", action.payload.page, \"payments\"], List(_.pluck(action.payload.payments, \"id\")))\n        .setIn([\"pages\", action.payload.page, \"loading\"], false)\n        .setIn([\"pages\", action.payload.page, \"pagination\"], action.payload.meta.pagination)\n        .set(\"total_count\", action.payload.meta.pagination.total_count)\n        .set(\"total_pages\", action.payload.meta.pagination.total_pages);\n    case paymentsActions.RECEIVE_PAYMENT:\n      return state\n        .setIn([\"paymentsById\", action.payload.id], action.payload)\n        .setIn([\"paymentsById\", action.payload.id, \"loading\"], false)\n        .set(\"makingPayment\", false)\n        .set(\"lastPayment\", action.payload);\n    case paymentsActions.CLEAR_LAST_PAYMENT:\n      return state.set(\"lastPayment\", null);\n    case paymentsActions.POST_JOB:\n      return state.setIn([\"paymentsById\", action.payload, \"loading\"], true);\n    case paymentsActions.FETCH_AUTHORIZED:\n      if (state.getIn([\"authByOrgId\", action.payload.orgId])) {\n        return state.setIn([\"authByOrgId\", action.payload.orgId, \"loading\"], true);\n      }\n      return state.setIn([\"authByOrgId\", action.payload.orgId], new PaymentAuthorizationRecord({ loading: true }));\n    case paymentsActions.RECEIVE_AUTHORIZED:\n      return state.setIn([\"authByOrgId\", action.payload.orgId], action.payload.auth);\n    case paymentsActions.SET_PAYMENT_ERROR:\n      return state.set(\"error\", action.payload.error).set(\"makingPayment\", false);\n    case paymentsActions.SET_PROVIDER_LOADING:\n      return state.set(\"providerLoading\", action.payload.loading);\n    case paymentsActions.SET_PROVIDER_VALID:\n      return state.set(\"providerValid\", action.payload.valid);\n    case paymentsActions.SET_PROVIDER_SUBMITTING:\n      return state.set(\"providerSubmitting\", action.payload.submitting);\n    case paymentsActions.MAKE_PAYMENT:\n      return state.set(\"makingPayment\", true);\n    case paymentsActions.SET_SENDING_RECEIPT:\n      return state.set(\"sendingReceipt\", action.payload.sending);\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<ITaskData>): TaskRecord => {\n  const data: Partial<ITaskData> = { ...(json as any) };\n  return new TaskRecord(data);\n};\n\nexport type TaskStatus = \"submitted\" | \"processing\" | \"error\" | \"finished\";\n\nexport interface ITaskContext {\n  model?: string;\n  action?: string;\n  action_payload?: any;\n  error_action?: string;\n}\n\nexport interface ITaskData {\n  id: string;\n  job_id: string;\n  lock_version: number;\n  logs: string;\n  location: string;\n  results: any;\n  status: TaskStatus;\n  created_at: Date;\n  updated_at: Date;\n  context: ITaskContext;\n}\n\nexport type ITaskRecord = ITaskData;\n\nconst defaultTaskProps = {\n  id: \"\",\n  job_id: null,\n  lock_version: null,\n  logs: \"\",\n  location: \"\",\n  results: {},\n  status: \"submitted\",\n  created_at: new Date(),\n  updated_at: new Date(),\n  context: { action: \"taskHandler\" } as ITaskContext,\n};\n\nexport class TaskRecord extends Record(defaultTaskProps) implements ITaskRecord {\n  public readonly id!: string;\n  public readonly job_id!: string;\n  public readonly lock_version!: number;\n  public readonly logs!: string;\n  public readonly location!: string;\n  public readonly results!: any;\n  public readonly status!: TaskStatus;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n  public context!: ITaskContext;\n\n  public constructor(values?: Partial<ITaskRecord>) {\n    values ? super(values) : super();\n  }\n}\n","import { Record, Map } from \"immutable\";\nimport * as taskActions from \"./task.actions\";\nimport { TaskRecord, fromJSON } from \"app2/src/records/Task\";\n\nexport const TaskStateRecord = Record({\n  byId: Map<string, typeof TaskRecord>(),\n});\n\nexport const initialState = TaskStateRecord();\nexport type TaskState = typeof initialState;\n\nexport const reducer = (state = initialState, action: taskActions.Actions): TaskState => {\n  switch (action.type) {\n    case taskActions.RECEIVE_TASK:\n      const task = state.getIn([\"byId\", action.payload.id]);\n      if (task) {\n        state = state.updateIn([\"byId\", action.payload.id], (oldTask: TaskRecord) => {\n          return fromJSON({ ...oldTask.toJS(), ...action.payload });\n        });\n      } else {\n        state = state.setIn([\"byId\", action.payload.id], fromJSON(action.payload));\n      }\n      localStorage.setItem(\"ngStorage-tasks\", JSON.stringify(state.getIn([\"byId\"])));\n      return state;\n    default:\n      return state;\n  }\n};\n","import { List, Record } from \"immutable\";\nimport { Nullable } from \".\";\nimport { checkDate } from \".\";\nimport { DropResult } from \"react-beautiful-dnd\";\nimport { JobAttributeTypes, orgJobAttributeLinkIdName } from \"./OrgRecord\";\nimport { sortDragEnd } from \"../helpers/Record\";\n\n/**\n * Levels\n */\nexport interface IOrgLevelLinkData {\n  id: string;\n  org_uuid: string;\n  level_id: string;\n  sort_order: number;\n\n  created_at: string | Date;\n  updated_at: string | Date;\n}\n\nexport interface ILevelData {\n  id: string;\n  name: string;\n  org_id: Nullable<number>;\n  org_level_link: Nullable<IOrgLevelLinkData>;\n  org_level_links_attributes?: IOrgLevelLinkData[];\n\n  created_at: string | Date;\n  updated_at: string | Date;\n\n  loading?: boolean;\n}\n\nexport interface IOrgLevelLinkRecord {\n  id: string;\n  org_uuid: string;\n  level_id: string;\n  sort_order: number;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface ILevelRecord {\n  id: string;\n  name: string;\n  org_id: Nullable<number>;\n\n  created_at: Date;\n  updated_at: Date;\n\n  loading: boolean;\n}\n\nexport const defaultLevelProps = {\n  id: \"\",\n  name: \"\",\n  org_id: null,\n  created_at: new Date(),\n  updated_at: new Date(),\n  loading: false,\n};\n\nexport const defaultOrgLevelLinkProps = {\n  id: \"\",\n  org_uuid: \"\",\n  level_id: \"\",\n  sort_order: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class LevelRecord extends Record<ILevelRecord>(defaultLevelProps) implements ILevelRecord {}\n\nexport class OrgLevelLinkRecord\n  extends Record<IOrgLevelLinkRecord>(defaultOrgLevelLinkProps)\n  implements IOrgLevelLinkRecord {}\n\nexport const levelFromJSON = (json: Partial<ILevelData>): LevelRecord => {\n  const recordData: ILevelRecord = { ...(json as any) };\n  if (json.created_at) {\n    recordData.created_at = checkDate(json.created_at);\n  }\n  if (json.updated_at) {\n    recordData.updated_at = checkDate(json.updated_at);\n  }\n\n  delete (recordData as any).org_level_link;\n\n  return new LevelRecord(recordData);\n};\n\nexport const orgLevelLinkFromJSON = (json: Partial<IOrgLevelLinkData>): OrgLevelLinkRecord => {\n  const recordData = { ...(json as any) };\n  if (json.created_at) {\n    recordData.created_at = checkDate(json.created_at);\n  }\n  if (json.updated_at) {\n    recordData.updated_at = checkDate(json.updated_at);\n  }\n  return new OrgLevelLinkRecord(recordData);\n};\n\n/**\n * Location\n */\n\nexport interface IOrgLocationLinkData {\n  id: string;\n  org_uuid: string;\n  location_id: string;\n  sort_order: number;\n\n  created_at: string | Date;\n  updated_at: string | Date;\n}\n\nexport interface ILocationData {\n  id: string;\n  name: string;\n  org_id: Nullable<number>;\n  org_location_link: Nullable<IOrgLocationLinkData>;\n  org_location_links_attributes?: IOrgLocationLinkData[];\n\n  created_at: string | Date;\n  updated_at: string | Date;\n\n  loading?: boolean;\n}\n\nexport interface IOrgLocationLinkRecord {\n  id: string;\n  org_uuid: string;\n  location_id: string;\n  sort_order: number;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface ILocationRecord {\n  id: string;\n  name: string;\n  org_id: Nullable<number>;\n\n  created_at: Date;\n  updated_at: Date;\n\n  loading: boolean;\n}\n\nexport const defaultLocationProps = {\n  id: \"\",\n  name: \"\",\n  org_id: null,\n  created_at: new Date(),\n  updated_at: new Date(),\n  loading: false,\n};\n\nexport const defaultOrgLocationLinkProps = {\n  id: \"\",\n  org_uuid: \"\",\n  location_id: \"\",\n  sort_order: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class LocationRecord extends Record<ILocationRecord>(defaultLocationProps) implements ILocationRecord {}\nexport class OrgLocationLinkRecord\n  extends Record<IOrgLocationLinkRecord>(defaultOrgLocationLinkProps)\n  implements IOrgLocationLinkRecord {}\n\nexport const locationFromJSON = (json: Partial<ILocationData>): LocationRecord => {\n  const recordData: ILocationRecord = { ...(json as any) };\n  if (json.created_at) {\n    recordData.created_at = checkDate(json.created_at);\n  }\n  if (json.updated_at) {\n    recordData.updated_at = checkDate(json.updated_at);\n  }\n\n  delete (recordData as any).org_location_link;\n\n  return new LocationRecord(recordData);\n};\n\nexport const orgLocationLinkFromJSON = (json: Partial<IOrgLocationLinkData>): OrgLocationLinkRecord => {\n  const recordData = { ...(json as any) };\n  if (json.created_at) {\n    recordData.created_at = checkDate(json.created_at);\n  }\n  if (json.updated_at) {\n    recordData.updated_at = checkDate(json.updated_at);\n  }\n  return new OrgLocationLinkRecord(recordData);\n};\n\n/**\n * Job Object (Job Type)\n */\n\nexport interface IOrgJobObjectLinkData {\n  id: number;\n  org_id: number;\n  object_id: number;\n  sort_order: number;\n\n  created_at: string | Date;\n  updated_at: string | Date;\n}\n\nexport interface IJobObjectData {\n  id: number;\n  name: string;\n  description: string;\n  org_id: Nullable<number>;\n  org_job_object_link: Nullable<IOrgJobObjectLinkData>;\n  org_job_object_links_attributes?: IOrgJobObjectLinkData[];\n\n  created_at: string | Date;\n  updated_at: string | Date;\n\n  loading?: boolean;\n}\n\nexport interface IOrgJobObjectLinkRecord {\n  id: number;\n  org_id: number;\n  object_id: number;\n  sort_order: number;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IJobObjectRecord {\n  id: number;\n  name: string;\n  description: string;\n  org_id: Nullable<number>;\n\n  created_at: Date;\n  updated_at: Date;\n\n  loading: boolean;\n}\n\nexport const defaultJobObjectProps = {\n  id: 0,\n  name: \"\",\n  description: \"\",\n  org_id: null,\n  created_at: new Date(),\n  updated_at: new Date(),\n  loading: false,\n};\n\nexport const defaultOrgJobObjectLinkProps = {\n  id: 0,\n  org_id: 0,\n  object_id: 0,\n  sort_order: 0,\n\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class JobObjectRecord extends Record<IJobObjectRecord>(defaultJobObjectProps) implements IJobObjectRecord {}\nexport class OrgJobObjectLinkRecord\n  extends Record<IOrgJobObjectLinkRecord>(defaultOrgJobObjectLinkProps)\n  implements IOrgJobObjectLinkRecord {}\n\nexport const jobObjectFromJSON = (json: Partial<IJobObjectData>): JobObjectRecord => {\n  const recordData: IJobObjectRecord = { ...(json as any) };\n  if (json.created_at) {\n    recordData.created_at = checkDate(json.created_at);\n  }\n  if (json.updated_at) {\n    recordData.updated_at = checkDate(json.updated_at);\n  }\n\n  delete (recordData as any).org_job_object_link;\n\n  return new JobObjectRecord(recordData);\n};\n\nexport const orgJobObjectLinkFromJSON = (json: Partial<IOrgJobObjectLinkData>): OrgJobObjectLinkRecord => {\n  const recordData = { ...(json as any) };\n  if (json.created_at) {\n    recordData.created_at = checkDate(json.created_at);\n  }\n  if (json.updated_at) {\n    recordData.updated_at = checkDate(json.updated_at);\n  }\n  return new OrgJobObjectLinkRecord(recordData);\n};\n\n/**\n * JobAttribute Types\n */\n\nexport type JobAttribute = IJobObjectData | ILevelData | ILocationData;\nexport type JobAttributeRecordType = JobObjectRecord | LevelRecord | LocationRecord;\nexport type JobAttributeLink = IOrgJobObjectLinkData | IOrgLevelLinkData | IOrgLocationLinkData;\nexport type JobAttributeLinkRecordType = OrgJobObjectLinkRecord | OrgLevelLinkRecord | OrgLocationLinkRecord;\n\nexport const toJSON = <T extends JobAttribute>(jobObject: JobAttributeRecordType): T => jobObject.toJS() as any;\n\nexport const fromJsonByType = {\n  job_type: jobObjectFromJSON,\n  level: levelFromJSON,\n  location: locationFromJSON,\n};\n\nexport const linkFromJsonByType = {\n  job_type: orgJobObjectLinkFromJSON,\n  level: orgLevelLinkFromJSON,\n  location: orgLocationLinkFromJSON,\n};\n\nexport const sortJobAttributes = (\n  result: DropResult,\n  records: List<JobAttributeLinkRecordType>,\n  byId: Map<string | number, JobAttributeRecordType>,\n  updateRecord: (a, b, c) => any,\n  jobAttrType: JobAttributeTypes,\n): void => {\n  if (!result.destination || result.destination.index === result.source.index) {\n    return;\n  }\n\n  const { list, dirtyIds } = sortDragEnd(records, result, [\"sort_order\"]);\n\n  // update order in backend\n  // iterate through each dirty id, sending an API call to update the job source's\n  // sort_order to what we got back from sortDragEnd()\n  dirtyIds.forEach((id, idx) => {\n    const dirtyLinkRecord: JobAttributeLinkRecordType = list.find((t: any) => t.get(\"id\") === id);\n    const jobAttrRecord: JobAttributeRecordType = byId.get(\n      dirtyLinkRecord.get(orgJobAttributeLinkIdName(jobAttrType), \"\"),\n    );\n    const last = idx === dirtyIds.count() - 1;\n    updateRecord(jobAttrRecord, dirtyLinkRecord, last);\n  });\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { Map, List, getIn } from \"immutable\";\nimport { SnakeToCamel } from \"../helpers/Format\";\nimport {\n  JobAttribute,\n  JobAttributeLinkRecordType,\n  JobAttributeRecordType,\n  linkFromJsonByType,\n} from \"../records/JobAttribute\";\nimport { JobAttributeTypes, orgJobAttributeLinkIdName, orgJobAttributeLinkKey } from \"../records/OrgRecord\";\n\nexport const rootKey = \"jobAttributes\";\n\nexport interface BaseSelectorProps {\n  orgId: number;\n  jobAttrType: JobAttributeTypes;\n}\n\n/**\n * Returns the job attributes for type in Map by id\n *\n * @param RootState state p\n * @param { jobAttrType: JobAttributeTypes } props\n * @returns Map<number | string, JobAttributeRecordType>\n */\nexport const jobAttributesByTypeAndId = (\n  state: RootState,\n  props: { jobAttrType: JobAttributeTypes },\n): Map<number | string, JobAttributeRecordType> => state.getIn([rootKey, \"byTypeAndId\", props.jobAttrType]);\n\n/**\n * Returns a List of ids for available job attributes for type and orgId\n * @param RootState state\n * @param BaseSelectorProps props\n * @returns List<number | string>\n */\nexport const availableJobAttributeIdsByTypeAndOrgId = (\n  state: RootState,\n  props: BaseSelectorProps,\n): List<number | string> => getIn(state, [rootKey, \"availableByTypeAndOrgId\", props.jobAttrType, props.orgId], List());\n\n/**\n * Returns a List of link records for active job attributes for type and orgId\n *\n * @param RootState state\n * @param BaseSelectorProps props\n * @returns List<JobAttributeLinkRecordType>\n */\nexport const activeJobAttributeLinksByTypeAndOrgId = (\n  state: RootState,\n  props: BaseSelectorProps,\n): List<JobAttributeLinkRecordType> => {\n  return getIn(state, [rootKey, \"activeByTypeAndOrgId\", props.jobAttrType, props.orgId], List());\n};\n\n/**\n * Returns boolean indiciating if job attributes for type and orgId are loading\n *\n * @param RootState state\n * @param BaseSelectorProps props\n * @returns boolean\n */\nexport const loadingByTypeAndOrgId = (state, props: BaseSelectorProps): boolean => {\n  return state.getIn([rootKey, \"loadingByTypeAndOrgId\", props.jobAttrType, props.orgId], false);\n};\n\n/**\n * Returns a JobAttributeRecordType for the job attribute with id and type\n *\n * @param RootState state\n * @param { id: number | string; jobAttrType: JobAttributeTypes} props\n * @returns JobAttributeRecordType\n */\nexport const jobAttributeByTypeAndId = (\n  state: RootState,\n  props: { id: number | string; jobAttrType: JobAttributeTypes },\n): JobAttributeRecordType => state.getIn([rootKey, \"byTypeAndId\", props.jobAttrType, props.id]);\n\n/**\n * Returns the JobAttributeLinkRecordType for the JobAttribute with id and type\n *\n * @param RootState state\n * @param {BaseSelectorProps & { id: number | string }} props\n * @returns JobAttributeLinkRecordType\n */\nexport const jobAttributeLinkByTypeAndJobAttrId = (\n  state: RootState,\n  props: BaseSelectorProps & { id: number | string },\n): JobAttributeLinkRecordType => {\n  const { orgId, jobAttrType, id } = props;\n  const active = getIn(state, [rootKey, \"activeByTypeAndOrgId\", jobAttrType, orgId], List());\n\n  return (\n    active.find((link) => {\n      return link.get(orgJobAttributeLinkIdName(jobAttrType)) === id;\n    }) || linkFromJsonByType[jobAttrType]({})\n  );\n};\n\n/**\n * Returns a List of JobAttributes based on the list of active JobAttributeLinks for the given type and orgId\n *\n * @param state RootState\n * @param props BaseSelectorProps\n * @returns List<JobAttributeRecordType>\n */\nexport const getActiveJobAttributesList = createSelector(\n  [\n    (state: RootState, props: BaseSelectorProps) => ({ state, props }),\n    jobAttributesByTypeAndId,\n    activeJobAttributeLinksByTypeAndOrgId,\n  ],\n  ({ props }, byId: Map<string | number, JobAttributeRecordType>, links: List<JobAttributeLinkRecordType>) => {\n    if (!links || links.count() <= 0) {\n      return List();\n    }\n\n    return links\n      .map((link) => {\n        return byId.get(link.get(orgJobAttributeLinkIdName(props.jobAttrType), null));\n      })\n      .filter((a) => a !== null && a !== undefined);\n  },\n);\n","import * as jobAttributeActions from \"app2/src/reducers/jobAttribute.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport {\n  JobAttributeLinkRecordType,\n  JobObjectRecord,\n  fromJsonByType,\n  linkFromJsonByType,\n} from \"app2/src/records/JobAttribute\";\nimport { LevelRecord, LocationRecord, JobAttributeRecordType } from \"../records/JobAttribute\";\nimport { JobAttributeTypes, orgJobAttributeLinkIdName, orgJobAttributeLinkKey } from \"../records/OrgRecord\";\nimport { RootActions, RootState } from \".\";\nimport { rootKey } from \"app2/src/selectors/jobAttribute.selectors\";\n\nexport const JobAttributeStateRecord = Record({\n  activeByTypeAndOrgId: Map<string, Map<number, List<JobAttributeLinkRecordType>>>(),\n  availableByTypeAndOrgId: Map<string, Map<number, List<string | number>>>(),\n  byTypeAndId: Map<string, Map<string | number, JobAttributeRecordType>>(),\n  lastSavedByTypeAndId: Map<string, Map<string | number, JobAttributeRecordType>>(),\n  loadingByTypeAndOrgId: Map<string, Map<number, boolean>>(),\n});\n\nexport const initialState = JobAttributeStateRecord();\n\nexport type JobAttributeState = typeof initialState;\n\nexport const model = rootKey;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  const jobAttrType: JobAttributeTypes = ((action as any)?.payload as any)?.jobAttrType;\n\n  switch (action.type) {\n    case jobAttributeActions.FETCH_JOB_ATTRIBUTES:\n      return state.setIn([model, \"loadingByTypeAndOrgId\", jobAttrType, action.payload.orgId], true);\n\n    case jobAttributeActions.FETCH_JOB_ATTRIBUTE:\n      return state.updateIn(\n        [model, \"byTypeAndId\", jobAttrType, action.payload.jobAttributeId],\n        (record: JobAttributeRecordType | null) => {\n          if (!record) {\n            return fromJsonByType[jobAttrType]({ id: action.payload.jobAttributeId, loading: true } as any);\n          }\n\n          return (record as any).set(\"loading\", true);\n        },\n      );\n\n    case jobAttributeActions.RECEIVE_JOB_ATTRIBUTES:\n      const { orgId } = action.payload;\n      let newState = state;\n\n      action.payload.jobAttributes.forEach((ja) => {\n        newState = reducer(newState, jobAttributeActions.Actions.receiveJobAttribute(ja, orgId, jobAttrType));\n      });\n\n      return newState.setIn([model, \"loadingByTypeAndOrgId\", jobAttrType, orgId], false);\n\n    case jobAttributeActions.RECEIVE_JOB_ATTRIBUTE:\n      const jobAttribute = action.payload.jobAttribute;\n      if (jobAttribute[orgJobAttributeLinkKey(jobAttrType)]) {\n        state = reducer(\n          state,\n          jobAttributeActions.Actions.receiveActiveOrgJobAttribute(\n            action.payload.orgId,\n            jobAttribute[orgJobAttributeLinkKey(jobAttrType)],\n            jobAttrType,\n          ),\n        );\n      } else {\n        state = reducer(\n          state,\n          jobAttributeActions.Actions.receiveAvailableOrgJobAttribute(\n            action.payload.orgId,\n            jobAttribute.id,\n            jobAttrType,\n          ),\n        );\n      }\n      const jobAttributeRecord = fromJsonByType[jobAttrType]({ ...jobAttribute, loading: false } as any);\n      return state\n        .setIn([model, \"byTypeAndId\", jobAttrType, jobAttributeRecord.id], jobAttributeRecord)\n        .setIn([model, \"lastSavedByTypeAndId\", jobAttrType, jobAttributeRecord.id], jobAttributeRecord);\n\n    case jobAttributeActions.RECEIVE_ACTIVE_ORG_JOB_ATTRIBUTE:\n      return state.updateIn(\n        [model, \"activeByTypeAndOrgId\", jobAttrType, action.payload.orgId],\n        (value: List<JobAttributeLinkRecordType> | undefined) => {\n          if (!value) {\n            value = List<JobAttributeLinkRecordType>();\n          }\n          const linkRecord = linkFromJsonByType[jobAttrType](action.payload.linkData as any);\n          const linkIdProperty = orgJobAttributeLinkIdName(jobAttrType);\n\n          const existingIdx = value.findIndex((v) => v.get(linkIdProperty, \"\") === linkRecord.get(linkIdProperty, \"\"));\n\n          if (existingIdx >= 0) {\n            return value.set(existingIdx, linkRecord).sortBy((v) => v.sort_order);\n          }\n          return value.push(linkRecord).sortBy((v) => v.sort_order);\n        },\n      );\n\n    case jobAttributeActions.RECEIVE_AVAILABLE_ORG_JOB_ATTRIBUTE:\n      return state\n        .updateIn(\n          [model, \"availableByTypeAndOrgId\", jobAttrType, action.payload.orgId],\n          (value: List<string | number> | undefined) => {\n            if (!value) {\n              value = List<string | number>();\n            }\n\n            if (value.includes(action.payload.jobAttributeId)) {\n              return value;\n            }\n            return value.push(action.payload.jobAttributeId);\n          },\n        )\n        .setIn([model, \"byTypeAndId\", jobAttrType, action.payload.jobAttributeId, \"loading\"], false);\n\n    case jobAttributeActions.REMOVE_AVAILABLE_ORG_JOB_ATTRIBUTE:\n      return state.updateIn(\n        [model, \"availableByTypeAndOrgId\", jobAttrType, action.payload.orgId],\n        (value: List<string | number>) => (value || List()).filter((a) => a !== action.payload.jobAttributeId),\n      );\n\n    case jobAttributeActions.REMOVE_ACTIVE_JOB_ATTRIBUTE:\n      const linkIdProperty = orgJobAttributeLinkIdName(jobAttrType);\n      return state.updateIn(\n        [model, \"activeByTypeAndOrgId\", jobAttrType, action.payload.orgId],\n        (value: List<JobAttributeLinkRecordType>) => {\n          return (value || List())\n            .filter((a) => a.get(linkIdProperty, 0) !== action.payload.jobAttributeId)\n            .map((a, idx) => a.set(\"sort_order\", idx));\n        },\n      );\n\n    case jobAttributeActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n\n    case jobAttributeActions.RESET_JOB_ATTRIBUTE:\n      const { id: resetId, jobAttrType: resetJobAttrType } = action.payload;\n      return state.setIn(\n        [model, \"byTypeAndId\", resetJobAttrType, resetId],\n        state.getIn([model, \"lastSavedByTypeAndId\", resetJobAttrType, resetId]),\n      );\n\n    case jobAttributeActions.RECEIVE_JOB_ATTRIBUTE_ERROR:\n      const { id } = action.payload;\n      return state.setIn([model, \"byTypeAndId\", jobAttrType, id, \"loading\"], false);\n\n    default:\n      return state;\n  }\n};\n","import * as presentationActions from \"./presentation.actions\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { reducer as paginationReducer } from \"app2/src/reducers/pagination.reducer\";\nimport { PresentationRecord, fromJSON } from \"app2/src/records/Presentation\";\nimport { Map, Record, List } from \"immutable\";\nimport { SlideRecord } from \"../records/Slide\";\nimport { fromJSON as fileFromJSON } from \"app2/src/records/File\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { Nullable } from \"app2/src/records\";\n\nexport interface IIndexPresentationsRecord {\n  presentations: List<number>;\n  errors: List<string>;\n  loading: boolean;\n}\n\nexport const IndexPresentationsRecord: Record.Factory<IIndexPresentationsRecord> = Record<IIndexPresentationsRecord>({\n  presentations: List<number>(),\n  errors: List<string>(),\n  loading: false,\n});\n\nexport const PresentationStateRecord = Record({\n  byId: Map<number, PresentationRecord>(),\n  lastSavedById: Map<number, PresentationRecord>(),\n  presentationsByOrgId: Map<number, List<typeof IndexPresentationsRecord>>(),\n  presentationsByJobId: Map<number, List<typeof IndexPresentationsRecord>>(),\n  // Presentation ID of the presentation being presented\n  currentPresentationId: null as Nullable<number>,\n  slidesById: Map<number, SlideRecord>(),\n});\n\nexport const initialState = PresentationStateRecord();\nexport type PresentationState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"presentations\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case presentationActions.SET_CURRENT_PRESENTATION_ID:\n      return state.setIn([model, \"currentPresentationId\"], action.payload.id);\n    case presentationActions.RECEIVE_PRESENTATION:\n      const presentation = action.payload.presentation;\n      let basePath = \"presentationsByOrgId\";\n      let baseProp = \"org_id\";\n\n      // is this a Job presentation? if not then it's still an Org Presentation\n      if (presentation.job_id > 0) {\n        basePath = \"presentationsByJobId\";\n        baseProp = \"job_id\";\n      }\n\n      if (!state.getIn([model, basePath, presentation[baseProp]])) {\n        state = state.setIn(\n          [model, basePath, presentation[baseProp]],\n          IndexPresentationsRecord({ presentations: List([presentation.id]) }),\n        );\n      } else {\n        state = state.updateIn([model, basePath, presentation[baseProp], model], (p) => {\n          return p.push(presentation.id);\n        });\n      }\n\n      presentation.slides.forEach((s) => (state = reducer(state, presentationActions.Actions.receiveSlide(s))));\n\n      return state\n        .setIn([model, \"byId\", presentation.id], presentation)\n        .setIn([model, \"lastSavedById\", presentation.id], presentation);\n    case presentationActions.RECEIVE_PRESENTATIONS:\n      action.payload.presentations.forEach((d) => {\n        state = reducer(state, presentationActions.Actions.receivePresentation(fromJSON(d)));\n      });\n\n      return state;\n    case presentationActions.BATCH_REMOVE_IDS:\n      action.payload.presentationIds.forEach((id) => {\n        state = paginationReducer(state, paginationActions.Actions.removeId(id, \"presentation\"));\n      });\n\n      return state;\n    case presentationActions.SET_PRESENTATIONS_LOADED:\n      action.payload.presentationIds.forEach((id) => {\n        state = state.setIn([model, \"byId\", id, \"loading\"], false);\n      });\n\n      return state;\n    case presentationActions.RECEIVE_SLIDE:\n      return state.setIn([model, \"slidesById\", action.payload.slide.id], action.payload.slide);\n    case presentationActions.RECEIVE_PRESENTATION_ERROR:\n      return state.updateIn([model, \"byId\", action.payload.presentationId], (p: PresentationRecord) => {\n        return p.merge({ loading: false, errors: List(action.payload.errors) });\n      });\n    case presentationActions.FETCH_PRESENTATION:\n      if (state.getIn([model, \"byId\", action.payload.presentationId])) {\n        return state.setIn([model, \"byId\", action.payload.presentationId, \"loading\"], true);\n      }\n      return state.setIn(\n        [model, \"byId\", action.payload.presentationId],\n        fromJSON({ id: action.payload.presentationId, loading: true }),\n      );\n    case presentationActions.FETCH_PRESENTATIONS:\n      action.payload.presentationIds.forEach((id) => {\n        state = reducer(state, presentationActions.Actions.fetchPresentation(id));\n      });\n      return state;\n    case presentationActions.REMOVE_PRESENTATION:\n      return state.updateIn([model, \"byId\"], (byId) => {\n        return byId.delete(action.payload.presentationId);\n      });\n    case presentationActions.FETCH_ORG_PRESENTATIONS:\n      if (!state.getIn([model, \"presentationsByOrgId\", action.payload])) {\n        return state.setIn(\n          [model, \"presentationsByOrgId\", action.payload.orgId],\n          new IndexPresentationsRecord({ loading: true }),\n        );\n      }\n\n      return state.setIn([model, \"presentationsByOrgId\", action.payload, \"loading\"], true);\n    case presentationActions.RECEIVE_ORG_PRESENTATIONS:\n      state = state.setIn([model, \"presentationsByOrgId\", action.payload.orgId, model], List([]));\n      action.payload.presentations.forEach((d) => {\n        state = reducer(state, presentationActions.Actions.receivePresentation(d));\n      });\n\n      return state.setIn([model, \"presentationsByOrgId\", action.payload.orgId, \"loading\"], false);\n    case presentationActions.RECEIVE_ORG_ERRORS:\n      return state\n        .setIn([model, \"presentationsByOrgId\", action.payload.orgId, \"errors\"], List<string>(action.payload.errors))\n        .setIn([model, \"presentationsByOrgId\", action.payload.orgId, \"loading\"], false);\n    case presentationActions.FETCH_JOB_PRESENTATIONS:\n      if (!state.getIn([model, \"presentationsByJobId\", action.payload.jobId])) {\n        return state.setIn(\n          [model, \"presentationsByJobId\", action.payload],\n          IndexPresentationsRecord({ loading: true }),\n        );\n      }\n\n      return state.setIn([model, \"presentationsByJobId\", action.payload, \"loading\"], true);\n    case presentationActions.RECEIVE_JOB_PRESENTATIONS:\n      state = state.setIn([model, \"presentationsByJobId\", action.payload.jobId, model], List([]));\n      action.payload.presentations.forEach((d) => {\n        state = reducer(state, presentationActions.Actions.receivePresentation(d));\n      });\n\n      return state.setIn([model, \"presentationsByJobId\", action.payload.jobId, \"loading\"], false);\n    case presentationActions.REMOVE_JOB_PRESENTATION:\n      return state.updateIn([model, \"presentationsByJobId\", action.payload.jobId, model], (list: List<number>) => {\n        return list.filter((n) => n !== action.payload.presentationId);\n      });\n    case presentationActions.RECEIVE_JOB_ERRORS:\n      return state\n        .setIn([model, \"presentationsByJobId\", action.payload.jobId, \"errors\"], List<string>(action.payload.errors))\n        .setIn([model, \"presentationsByJobId\", action.payload.jobId, \"loading\"], false);\n    case presentationActions.EDIT_COVER_IMAGE:\n      return state.setIn(\n        [model, \"byId\", action.payload.presentationId, \"cover_image\"],\n        fileFromJSON(action.payload.coverImage),\n      );\n    case presentationActions.EDIT_SORT_ORDER:\n      return state.setIn([model, \"byId\", action.payload.presentationId, \"sort_order\"], action.payload.sortOrder);\n    case presentationActions.EDIT_NAME:\n      return state.setIn([model, \"byId\", action.payload.presentationId, \"name\"], action.payload.name);\n    case presentationActions.EDIT_LINK:\n      return state.setIn([model, \"byId\", action.payload.presentationId, \"link\"], action.payload.link);\n    case presentationActions.EDIT_PRESENTATION:\n      return state.setIn([model, \"byId\", action.payload.presentationId, action.payload.name], action.payload.value);\n    case presentationActions.RESET_PRESENTATION:\n      return state.setIn(\n        [model, \"byId\", action.payload.presentationId],\n        state.getIn([model, \"lastSavedById\", action.payload.presentationId]),\n      );\n    case presentationActions.BATCH_EDIT_FOLDER_ID:\n      action.payload.presentationIds.forEach((id) => {\n        state = state.setIn([model, \"byId\", id, \"folder_id\"], action.payload.folderId);\n      });\n      return state;\n    case presentationActions.EDIT_SELECTED:\n      return state.setIn([model, \"byId\", action.payload.presentationId, \"selected\"], action.payload.value);\n    case presentationActions.BATCH_EDIT_SELECTED:\n      action.payload.presentationIds.forEach((id) => {\n        state = reducer(state, presentationActions.Actions.editSelected(id, action.payload.value));\n      });\n      return state;\n    default:\n      return state;\n  }\n};\n","import { List } from \"immutable\";\nimport { RootState } from \"../reducers\";\n\nexport const rootKey = \"reports\";\n\n/**\n * returns the pricing for plnar\n *\n * @param {RootState} state The RootState\n * @returns {List} List\n */\nexport const plnarPricing = (state: RootState): List<Map<string, string | number>> => {\n  return state.getIn([\"reports\", \"pricingReports\", \"plnar_interior\", \"data\"]);\n};\n\n/**\n * returns the loading flag for pricing reports\n *\n * @param {RootState} state The RootState\n * @returns {boolean} boolean\n */\nexport const plnarPricingLoading = (state: RootState): boolean => {\n  return state.getIn([\"reports\", \"pricingReports\", \"plnar_interior\", \"loading\"]);\n};\n","import * as reportActions from \"./report.actions\";\nimport { ReportRecord, fromJSON } from \"app2/src/records/Report\";\nimport { Map, Record } from \"immutable\";\nimport { fromJS } from \"immutable\";\nimport { rootKey } from \"app2/src/selectors/report.selectors\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { fetch, loaded, receive } from \"app2/src/reducers/Reducer\";\n\nexport const ReportStateRecord = Record({\n  byId: Map<number, ReportRecord>(),\n  lastSavedById: Map<number, ReportRecord>(),\n  pricingReports: Map<any, any>(),\n});\n\nexport const initialState = ReportStateRecord();\nexport type ReportState = typeof initialState;\n\nexport const model = rootKey;\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case reportActions.FETCH_REPORT:\n      return fetch(state, model, fromJSON({ id: action.payload.reportId }));\n    case reportActions.RECEIVE_REPORT:\n      return receive(state, model, fromJSON({ ...action.payload.report }));\n    case reportActions.SET_REPORT_LOADED:\n      return loaded(state, model, action.payload.reportId);\n    case reportActions.RECEIVE_REPORTS:\n      action.payload.reports.forEach((report) => {\n        state = reducer(state, reportActions.Actions.receiveReport(report));\n      });\n      return state;\n    case reportActions.FETCH_PRICING_REPORT:\n      return state.setIn(\n        [model, \"pricingReports\", action.payload.provider + \"_\" + action.payload.kind, \"loading\"],\n        true,\n      );\n    case reportActions.RECEIVE_PRICING_REPORT:\n      return state.setIn(\n        [model, \"pricingReports\", action.payload.provider + \"_\" + action.payload.kind],\n        fromJS({ loading: false, data: action.payload.report }),\n      );\n    case reportActions.SET_PRICING_REPORT_LOADED:\n      return state.setIn(\n        [model, \"pricingReports\", action.payload.provider + \"_\" + action.payload.kind, \"loading\"],\n        false,\n      );\n\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IFlashAlertData>): FlashAlertRecord => {\n  return new FlashAlertRecord(json);\n};\n\nexport interface IFlashAlertAction {\n  model: string;\n  handler: string;\n  payload?: any;\n}\n\nexport interface IFlashAlertData {\n  message: string | string[];\n  level: FlashLevels;\n  autoDismiss?: boolean;\n  actionButton?: {\n    text: string;\n    action?: IFlashAlertAction;\n  };\n  onDismiss?: IFlashAlertAction;\n  externalId: Nullable<string | number>;\n}\n\nexport interface IFlashAlertRecord {\n  message: string | string[];\n  level: FlashLevels;\n  autoDismiss?: boolean;\n  actionButton?: {\n    text: string;\n    action?: IFlashAlertAction;\n  };\n  onDismiss?: IFlashAlertAction;\n  externalId: Nullable<string | number>;\n}\n\nexport const defaultFlashAlertProps = {\n  message: \"\",\n  level: FlashLevels.success,\n  autoDismiss: true,\n  actionButton: undefined,\n  onDismiss: undefined,\n  externalId: undefined,\n};\n\nexport class FlashAlertRecord extends Record<IFlashAlertRecord>(defaultFlashAlertProps) implements IFlashAlertRecord {}\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<ISendInviteData>): SendInviteRecord => {\n  const data: ISendInviteRecord = { ...(json as any) };\n\n  return new SendInviteRecord(data);\n};\n\nexport interface ISendInviteData {\n  modal: boolean;\n  type: \"image_uploader\" | \"screenshare\";\n  options: any;\n  sent: number;\n}\n\nexport interface ISendInviteRecord {\n  modal: boolean;\n  type: \"image_uploader\" | \"screenshare\";\n  options: any;\n  sent: number;\n}\n\nconst defaultSendInviteProps: ISendInviteRecord = {\n  modal: false,\n  type: \"screenshare\",\n  options: {},\n  sent: 0,\n};\n\nexport class SendInviteRecord extends Record(defaultSendInviteProps) implements ISendInviteRecord {}\n","import * as commonActions from \"./common.actions\";\nimport { fromJSON } from \"app2/src/records/FlashAlert\";\nimport { fromJSON as sendInviteFromJSON } from \"app2/src/records/SendInvite\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { IFlashAlertRecord } from \"app2/src/records/FlashAlert\";\nimport { List, Record } from \"immutable\";\nimport { Nullable } from \"app2/src/records\";\nimport { LocationStateRecord } from \"app2/src/records/LocationState\";\n\nexport const CommonStateRecord = Record({\n  flashAlerts: List<IFlashAlertRecord>(),\n  currentJob: new JobRecord(),\n  displayWebCam: false,\n  sendInvite: sendInviteFromJSON({}),\n  notifierMessages: List<string>(),\n  showImportModal: false,\n  savedLocationState: null as Nullable<LocationStateRecord>,\n  navDisplay: true,\n  pageTitle: \"\",\n});\n\nexport const initialState = CommonStateRecord();\nexport type CommonState = typeof initialState;\n\nexport const reducer = (state = initialState, action: commonActions.Actions): CommonState => {\n  switch (action.type) {\n    case commonActions.FLASH_ADD_ALERT:\n      const flashAddAlerts = state.getIn([\"flashAlerts\"]);\n\n      if (\n        action.payload.externalId &&\n        flashAddAlerts.findIndex(\n          (alert) => alert.externalId !== null && alert.externalId === action.payload.externalId,\n        ) !== -1\n      ) {\n        return state;\n      }\n\n      return state.setIn([\"flashAlerts\"], flashAddAlerts.push(fromJSON(action.payload)));\n    case commonActions.FLASH_REMOVE_ALERT:\n      const flashRemoveAlerts = state.getIn([\"flashAlerts\"]);\n      return state.setIn([\"flashAlerts\"], flashRemoveAlerts.delete(action.payload));\n    case commonActions.FLASH_REMOVE_ALERT_EXTERNAL_ID:\n      const flashRemoveByIdAlerts = state.getIn([\"flashAlerts\"]);\n      const indexToRemove = flashRemoveByIdAlerts.findIndex(\n        (alert) => alert.externalId !== null && alert.externalId === action.payload.externalId,\n      );\n      if (indexToRemove !== -1) {\n        return state.setIn([\"flashAlerts\"], flashRemoveByIdAlerts.delete(indexToRemove));\n      }\n      return state;\n    case commonActions.SET_JOB:\n      return state.set(\"currentJob\", action.payload);\n    case commonActions.OPEN_SEND_INVITE_MODAL:\n      return state\n        .setIn([\"sendInvite\", \"modal\"], true)\n        .setIn([\"sendInvite\", \"type\"], action.payload.type)\n        .setIn([\"sendInvite\", \"options\"], action.payload.options);\n    case commonActions.CLOSE_SEND_INVITE_MODAL:\n      if (action.payload.sent) {\n        state = state.updateIn([\"sendInvite\", \"sent\"], (sendInviteSent) => sendInviteSent + 1);\n      }\n      return state.setIn([\"sendInvite\", \"modal\"], false);\n    case commonActions.OPEN_WEB_CAM_MODAL:\n      return state.set(\"displayWebCam\", true);\n    case commonActions.CLOSE_WEB_CAM_MODAL:\n      return state.set(\"displayWebCam\", false);\n    case commonActions.NOTIFIER_ADD_MESSAGE:\n      const notifierMessages = state.getIn([\"notifierMessages\"]);\n      return state.setIn([\"notifierMessages\"], notifierMessages.push(action.payload));\n    case commonActions.NOTIFIER_REMOVE_MESSAGE:\n      const notifierRemoveMessages = state.getIn([\"notifierMessages\"]);\n      return state.setIn([\"notifierMessages\"], notifierRemoveMessages.delete(action.payload));\n    case commonActions.OPEN_IMPORT_MODAL:\n      return state.set(\"showImportModal\", true);\n    case commonActions.CLOSE_IMPORT_MODAL:\n      return state.set(\"showImportModal\", false);\n    case commonActions.SET_NAV_DISPLAY:\n      return state.set(\"navDisplay\", action.payload.value);\n    case commonActions.SET_SAVED_LOCATION_STATE:\n      return state.set(\"savedLocationState\", action.payload.location);\n    case commonActions.SET_PAGE_TITLE:\n      return state.set(\"pageTitle\", action.payload.value);\n    default:\n      return state;\n  }\n};\n","import * as integrationsViewActions from \"./integrationsView.actions\";\nimport { Record } from \"immutable\";\n\nexport const IntegrationsViewStateRecord = Record({\n  showQuickMeasureModal: false,\n  showRoofScopeModal: false,\n  showPlnarModal: false,\n});\n\nexport const initialState = IntegrationsViewStateRecord();\nexport type CommonState = typeof initialState;\n\nexport const reducer = (state = initialState, action: integrationsViewActions.Actions): CommonState => {\n  switch (action.type) {\n    case integrationsViewActions.OPEN_QUICKMEASURE_MODAL:\n      return state.setIn([\"showQuickMeasureModal\"], true);\n    case integrationsViewActions.CLOSE_QUICKMEASURE_MODAL:\n      return state.setIn([\"showQuickMeasureModal\"], false);\n    case integrationsViewActions.OPEN_ROOF_SCOPE_MODAL:\n      return state.setIn([\"showRoofScopeModal\"], true);\n    case integrationsViewActions.CLOSE_ROOF_SCOPE_MODAL:\n      return state.setIn([\"showRoofScopeModal\"], false);\n    case integrationsViewActions.OPEN_PLNAR_MODAL:\n      return state.setIn([\"showPlnarModal\"], true);\n    case integrationsViewActions.CLOSE_PLNAR_MODAL:\n      return state.setIn([\"showPlnarModal\"], false);\n    default:\n      return state;\n  }\n};\n","import * as estimatorActions from \"./estimator.actions\";\nimport { Record } from \"immutable\";\n\nexport const EstimatorStateRecord = Record({\n  showingPaymentOptionEditor: false,\n  showingPricingDrawer: false,\n});\n\nexport const initialState = EstimatorStateRecord();\nexport type EstimatorState = typeof initialState;\n\nexport const reducer = (state = initialState, action: estimatorActions.Actions): EstimatorState => {\n  switch (action.type) {\n    case estimatorActions.SET_PAYMENT_OPTION_EDITOR_VISIBLE:\n      return state.set(\"showingPaymentOptionEditor\", action.payload.visible);\n    case estimatorActions.SET_PRICING_DRAWER_VISIBLE:\n      return state.set(\"showingPaymentOptionEditor\", action.payload.visible);\n    default:\n      return state;\n  }\n};\n","import { combineReducers } from \"redux-immutable\";\nimport { Map } from \"immutable\";\nimport { reducer as commonReducer, initialState as CommonInitialState } from \"./common.reducer\";\nimport { Actions as commonActions } from \"./common.actions\";\nimport {\n  reducer as integrationsViewReducer,\n  initialState as IntegrationsViewInitialState,\n} from \"./integrationsView.reducer\";\nimport { Actions as integrationsViewActions } from \"./integrationsView.actions\";\nimport { Actions as estimatorActions } from \"./estimator.actions\";\nimport { reducer as estimatorReducer, initialState as EstimatorInitialState } from \"./estimator.reducer\";\n\nexport const ComponentsInitialState = Map({\n  common: CommonInitialState,\n  estimator: EstimatorInitialState,\n  integrations: IntegrationsViewInitialState,\n});\n\nexport type ComponentsState = typeof ComponentsInitialState;\n\nexport const reducer = combineReducers<ComponentsState, ComponentsActions>({\n  //@ts-ignore\n  common: commonReducer,\n  integrations: integrationsViewReducer,\n  estimator: estimatorReducer,\n});\n\nexport type ComponentsActions = commonActions | integrationsViewActions | estimatorActions;\n","import * as presentationTemplateActions from \"./presentationTemplate.actions\";\nimport { PresentationTemplateRecord, fromJSON } from \"app2/src/records/PresentationTemplate\";\nimport { Map, Record, List } from \"immutable\";\n\nexport interface IOrgPresentationTemplatesRecord {\n  presentationTemplates: List<number>;\n  errors: List<string>;\n  loading: boolean;\n}\nexport const OrgPresentationTemplatesRecord: Record.Factory<IOrgPresentationTemplatesRecord> =\n  Record<IOrgPresentationTemplatesRecord>({\n    presentationTemplates: List<number>(),\n    errors: List<string>(),\n    loading: false,\n  });\n\nexport const PresentationTemplateStateRecord = Record({\n  presentationTemplatesById: Map<number, PresentationTemplateRecord>(),\n  presentationTemplatesByOrgId: Map<number, typeof OrgPresentationTemplatesRecord>(),\n});\n\nexport const initialState = PresentationTemplateStateRecord();\nexport type PresentationTemplateState = typeof initialState;\n\nexport const reducer = (\n  state = initialState,\n  action: presentationTemplateActions.Actions,\n): PresentationTemplateState => {\n  switch (action.type) {\n    case presentationTemplateActions.FETCH_PRESENTATION_TEMPLATES:\n      if (!state.getIn([\"presentationTemplatesByOrgId\", action.payload.orgId])) {\n        return state.setIn(\n          [\"presentationTemplatesByOrgId\", action.payload.orgId],\n          OrgPresentationTemplatesRecord({ loading: true }),\n        );\n      }\n\n      return state.setIn([\"presentationTemplatesByOrgId\", action.payload.orgId, \"loading\"], true);\n    case presentationTemplateActions.RECEIVE_PRESENTATION_TEMPLATES:\n      state = state.setIn([\"presentationTemplatesByOrgId\", action.payload.orgId, \"presentationTemplates\"], List([]));\n      action.payload.presentationTemplates.forEach((d) => {\n        state = reducer(\n          state,\n          presentationTemplateActions.Actions.receivePresentationTemplate(action.payload.orgId, d),\n        );\n      });\n\n      return state.setIn([\"presentationTemplatesByOrgId\", action.payload.orgId, \"loading\"], false);\n    case presentationTemplateActions.RECEIVE_PRESENTATION_TEMPLATES_ERROR:\n      return state\n        .setIn([\"presentationTemplatesByOrgId\", action.payload.orgId, \"errors\"], List<string>(action.payload.errors))\n        .setIn([\"presentationTemplatesByOrgId\", action.payload.orgId, \"loading\"], false);\n    case presentationTemplateActions.FETCH_PRESENTATION_TEMPLATE:\n      if (state.getIn([\"presentationTemplatesById\", action.payload.id])) {\n        return state.setIn([\"presentationTemplatesById\", action.payload.id, \"loading\"], true);\n      }\n      return state.setIn(\n        [\"presentationTemplatesById\", action.payload.id],\n        fromJSON({ id: action.payload.id, loading: true }),\n      );\n    case presentationTemplateActions.RECEIVE_PRESENTATION_TEMPLATE:\n      const presentationTemplate = action.payload.presentationTemplate.set(\"loading\", false);\n\n      if (!state.getIn([\"presentationTemplatesByOrgId\", action.payload.orgId])) {\n        state = state.setIn([\"presentationTemplatesByOrgId\", action.payload.orgId], OrgPresentationTemplatesRecord({}));\n      }\n\n      return state\n        .setIn([\"presentationTemplatesById\", presentationTemplate.id], presentationTemplate)\n        .updateIn([\"presentationTemplatesByOrgId\", action.payload.orgId, \"presentationTemplates\"], (pts) => {\n          return pts.push(presentationTemplate.id).toSet().toList();\n        });\n    case presentationTemplateActions.RECEIVE_PRESENTATION_TEMPLATE_ERROR:\n      return state\n        .setIn(\n          [\"presentationTemplatesById\", action.payload.presentationTemplateId, \"errors\"],\n          List<string>(action.payload.errors),\n        )\n        .setIn([\"presentationTemplatesById\", action.payload.presentationTemplateId, \"loading\"], false);\n    case presentationTemplateActions.REMOVE_PRESENTATION_TEMPLATE:\n      return state\n        .removeIn([\"presentationTemplatesById\", action.payload.presentationTemplate.id])\n        .updateIn(\n          [\"presentationTemplatesByOrgId\", action.payload.presentationTemplate.org_id, \"presentationTemplates\"],\n          (presentationTemplates: List<number>) => {\n            return presentationTemplates.filter((d) => d !== action.payload.presentationTemplate.id);\n          },\n        );\n    default:\n      return state;\n  }\n};\n","import { Record, List } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IScreenShareData>): ScreenShareRecord => {\n  const data: IScreenShareRecord = { ...(json as any) };\n\n  return new ScreenShareRecord(data);\n};\n\nexport interface IScreenShareData {\n  id: number;\n  kind: string;\n  uuid: string;\n  uid: string;\n  job_id: number;\n  shared: Nullable<boolean>;\n  start_time: string;\n  started: string;\n  ended: Nullable<string>;\n  event_id: Nullable<number>;\n  estimate_id: number;\n  metadata: any;\n  created_at: string;\n  updated_at: string;\n  redirect_on_end_url: string;\n\n  loading?: boolean;\n}\n\nexport interface IScreenShareRecord {\n  id: number;\n  kind: string;\n  uuid: string;\n  uid: string;\n  job_id: number;\n  shared: boolean;\n  start_time: Date;\n  started: Date;\n  ended: Date;\n  event_id: number;\n  estimate_id: number;\n  metadata: any;\n  created_at: Date;\n  updated_at: Date;\n  redirect_on_end_url: string;\n\n  loading: boolean;\n  errors: Nullable<List<string>>;\n}\n\nexport const defaultScreenShareProps = {\n  id: 0,\n  kind: \"basic\",\n  uuid: \"\",\n  uid: \"\",\n  job_id: 0,\n  shared: false,\n  start_time: null,\n  started: null,\n  ended: null,\n  event_id: 0,\n  estimate_id: 0,\n  metadata: {},\n  created_at: null,\n  updated_at: null,\n  redirect_on_end_url: \"\",\n  loading: false,\n  errors: List<string>(),\n};\n\nexport class ScreenShareRecord\n  extends Record<IScreenShareRecord>(defaultScreenShareProps)\n  implements IScreenShareRecord {}\n","import * as screenShareActions from \"./screenShare.actions\";\nimport { fromJSON, ScreenShareRecord } from \"app2/src/records/ScreenShare\";\nimport { Record, List, Map } from \"immutable\";\n\nexport type ScreenShareStatusValues = \"off\" | \"start_requested\" | \"stop_requested\" | \"tab_opened\" | \"active\";\nexport type ScreenShareKindValues = \"basic\" | \"premium\";\n\nexport interface IJobScreenShareRecord {\n  screenShare: ScreenShareRecord;\n  screenShareStatus: ScreenShareStatusValues;\n  screenShareKind: ScreenShareKindValues;\n}\n\nexport const JobScreenShareRecord: Record.Factory<IJobScreenShareRecord> = Record<IJobScreenShareRecord>({\n  screenShare: null,\n  screenShareStatus: \"off\",\n  screenShareKind: \"basic\",\n});\n\nexport const ScreenShareStateRecord = Record({\n  screenShareToken: null,\n  activeScreenShareJobId: null,\n  byJobId: Map<number, typeof JobScreenShareRecord>(),\n  roomExists: false,\n});\n\nexport const initialState = ScreenShareStateRecord();\nexport type ScreenShareState = typeof initialState;\n\nexport const reducer = (state = initialState, action: screenShareActions.Actions): ScreenShareState => {\n  switch (action.type) {\n    case screenShareActions.SET_SCREEN_SHARE_STATUS:\n      if (!state.getIn([\"byJobId\", action.payload.jobId])) {\n        state = state.setIn([\"byJobId\", action.payload.jobId], JobScreenShareRecord());\n      }\n      return state.setIn([\"byJobId\", action.payload.jobId, \"screenShareStatus\"], action.payload.status);\n    case screenShareActions.SET_SCREEN_SHARE_KIND:\n      if (!state.getIn([\"byJobId\", action.payload.jobId])) {\n        state = state.setIn([\"byJobId\", action.payload.jobId], JobScreenShareRecord());\n      }\n      return state.setIn([\"byJobId\", action.payload.jobId, \"screenShareKind\"], action.payload.kind);\n    case screenShareActions.SET_ACTIVE_SCREEN_SHARE_JOB:\n      return state.setIn([\"activeScreenShareJobId\"], action.payload);\n    case screenShareActions.FETCH_SCREEN_SHARE:\n      if (!state.getIn([\"byJobId\", action.payload.jobId])) {\n        state = state.setIn([\"byJobId\", action.payload.jobId], JobScreenShareRecord());\n      }\n      if (state.getIn([\"byJobId\", action.payload.jobId, \"screenShare\"])) {\n        return state.setIn([\"byJobId\", action.payload.jobId, \"screenShare\", \"loading\"], true);\n      }\n      return state.setIn(\n        [\"byJobId\", action.payload.jobId, \"screenShare\"],\n        fromJSON({\n          id: action.payload.id,\n          job_id: action.payload.jobId,\n          loading: true,\n        }),\n      );\n    case screenShareActions.RECEIVE_SCREEN_SHARE:\n      const screenShare = fromJSON({ ...action.payload.screenShare, loading: false });\n\n      if (!state.getIn([\"byJobId\", action.payload.jobId])) {\n        state = state.setIn([\"byJobId\", action.payload.jobId], JobScreenShareRecord());\n      }\n      return state.setIn([\"byJobId\", action.payload.jobId, \"screenShare\"], screenShare);\n    case screenShareActions.RECEIVE_SCREEN_SHARE_ERROR:\n      return state\n        .setIn([\"byJobId\", action.payload.jobId, \"screenShare\", \"errors\"], List<string>(action.payload.errors))\n        .setIn([\"byJobId\", action.payload.jobId, \"screenShare\", \"loading\"], false);\n    case screenShareActions.RECEIVE_SCREEN_SHARE_TOKEN:\n      return state.setIn([\"screenShareToken\"], action.payload);\n    case screenShareActions.RECEIVE_ROOM_STATUS:\n      return state.setIn([\"roomExists\"], action.payload);\n    default:\n      return state;\n  }\n};\n","import * as estimateComparisonActions from \"./estimateComparison.actions\";\nimport { EstimateComparisonRecord, fromJSON } from \"app2/src/records/EstimateComparison\";\nimport { EstimateComparisonLinkRecord, fromJSON as eclFromJSON } from \"app2/src/records/EstimateComparisonLink\";\nimport { List, Map, Record } from \"immutable\";\nimport { RootState, RootActions } from \".\";\n\nexport const EstimateComparisonStateRecord = Record({\n  byJobId: Map<number, EstimateComparisonRecord>(),\n  lastSavedByJobId: Map<number, EstimateComparisonRecord>(),\n  expandDrawer: false,\n});\n\nexport const initialState = EstimateComparisonStateRecord();\nexport type EstimateComparisonState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(\"estimateComparisons\")) {\n    state = state.set(\"estimateComparisons\", initialState);\n  }\n\n  let estimateComparisonRecord: EstimateComparisonRecord;\n  switch (action.type) {\n    case estimateComparisonActions.FETCH_ESTIMATE_COMPARISON:\n      if (state.getIn([\"estimateComparisons\", \"byJobId\", action.payload.jobId])) {\n        return state.setIn([\"estimateComparisons\", \"byJobId\", action.payload.jobId, \"loading\"], true);\n      }\n\n      estimateComparisonRecord = fromJSON({ job_id: action.payload.jobId, loading: true });\n\n      return state.setIn([\"estimateComparisons\", \"byJobId\", action.payload.jobId], estimateComparisonRecord);\n\n    case estimateComparisonActions.RECEIVE_ESTIMATE_COMPARISON:\n      state = state.setIn(\n        [\"estimateComparisons\", \"byJobId\", action.payload.estimateComparison.job_id],\n        action.payload.estimateComparison,\n      );\n      state = state.setIn(\n        [\"estimateComparisons\", \"lastSavedByJobId\", action.payload.estimateComparison.job_id],\n        action.payload.estimateComparison,\n      );\n      state = state.setIn(\n        [\"estimateComparisons\", \"lastSavedByJobId\", action.payload.estimateComparison.job_id, \"show\"],\n        true,\n      );\n      return state.setIn([\"estimateComparisons\", \"byJobId\", action.payload.estimateComparison.job_id, \"show\"], true);\n\n    case estimateComparisonActions.SET_LOADED:\n      return state.setIn([\"estimateComparisons\", \"byJobId\", action.payload.jobId, \"loading\"], false);\n\n    case estimateComparisonActions.BUILD_ESTIMATE_COMPARISON:\n      const estimateComparison = state.getIn([\"estimateComparisons\", \"byJobId\", action.payload.jobId]);\n      let builtEstimateComparison: EstimateComparisonRecord;\n      if (estimateComparison) {\n        const estimateComparisonJson = estimateComparison.toJS();\n        estimateComparisonJson.estimate_comparison_links = List();\n        builtEstimateComparison = fromJSON(estimateComparisonJson);\n      } else {\n        builtEstimateComparison = fromJSON({ job_id: action.payload.jobId });\n      }\n\n      state = state.setIn([\"estimateComparisons\", \"byJobId\", builtEstimateComparison.job_id], builtEstimateComparison);\n\n      action.payload.estimateIds.forEach((estimate_id) => {\n        state = reducer(\n          state,\n          estimateComparisonActions.Actions.addEstimateComparisonLink(estimate_id, action.payload.jobId),\n        );\n      });\n\n      return state;\n\n    case estimateComparisonActions.VIEW_ESTIMATE_COMPARISON:\n      return state.setIn([\"estimateComparisons\", \"byJobId\", action.payload.jobId, \"show\"], true);\n\n    case estimateComparisonActions.SHOW_DRAWER:\n      return state.setIn([\"estimateComparisons\", \"expandDrawer\"], true);\n\n    case estimateComparisonActions.HIDE_DRAWER:\n      return state.setIn([\"estimateComparisons\", \"expandDrawer\"], false);\n\n    case estimateComparisonActions.ADD_ESTIMATE_COMPARISON_LINK:\n      const newECL = eclFromJSON({ estimate_id: action.payload.estimateId } as any);\n      const currentECLs = state.getIn([\n        \"estimateComparisons\",\n        \"byJobId\",\n        action.payload.jobId,\n        \"estimate_comparison_links\",\n      ]);\n      const newECLs = currentECLs.push(newECL);\n      return state.setIn(\n        [\"estimateComparisons\", \"byJobId\", action.payload.jobId, \"estimate_comparison_links\"],\n        newECLs,\n      );\n\n    case estimateComparisonActions.REMOVE_ESTIMATE_COMPARISON_LINK:\n      const currentLinks = state.getIn([\n        \"estimateComparisons\",\n        \"byJobId\",\n        action.payload.jobId,\n        \"estimate_comparison_links\",\n      ]);\n      const newLinks = currentLinks.map((ecl: EstimateComparisonLinkRecord) => {\n        if (ecl.estimate_id === action.payload.estimateId) {\n          return ecl.set(\"_destroy\", true);\n        } else {\n          return ecl;\n        }\n      });\n      return state.setIn(\n        [\"estimateComparisons\", \"byJobId\", action.payload.jobId, \"estimate_comparison_links\"],\n        newLinks,\n      );\n\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\nimport { v4 as uuid } from \"uuid\";\n\nexport const feneTechManufacturerFromJSON = (json: Partial<IFeneTechManufacturerData>): FeneTechManufacturerRecord => {\n  const record: IFeneTechManufacturerRecord = { ...(json as any) };\n\n  if (!record.id) {\n    record.id = uuid();\n  }\n\n  return new FeneTechManufacturerRecord(record);\n};\n\nexport interface IFeneTechManufacturerData {\n  id: string;\n  url: string;\n  name: string;\n  image: string;\n}\n\nexport interface IFeneTechManufacturerRecord {\n  id: string;\n  url: string;\n  name: string;\n  image: string;\n}\n\nconst defaultManufacturerProps: IFeneTechManufacturerRecord = {\n  id: \"\",\n  url: \"https://secure.fenetech.com/WEB\",\n  name: \"FeneVision Web\",\n  image: \"\",\n};\n\nexport class FeneTechManufacturerRecord\n  extends Record(defaultManufacturerProps)\n  implements IFeneTechManufacturerRecord {}\n","import { feneTechManufacturerFromJSON, IFeneTechManufacturerData } from \"app2/src/records/FeneTechManufacturer\";\nimport { IImageData, fromJSON as imageFromJSON, ImageRecord } from \"app2/src/records/Image\";\nimport { List, Record, Map, fromJS } from \"immutable\";\n\nexport const fromJSON = (json: Partial<ITokenData>): TokenRecord => {\n  const record: ITokenRecord = { ...(json as any) };\n\n  record.data = fromJSWithDefaults(json.kind, json.data);\n\n  if (json.payload) {\n    record.payload = fromJS(json.payload);\n  }\n\n  if (json.images) {\n    record.images = List(json.images.map((i) => imageFromJSON(i)));\n  }\n\n  return new TokenRecord(record);\n};\n\nconst fromJSWithDefaults = (kind: string, data: any): Map<string, any> => {\n  data = data || {};\n  switch (kind) {\n    case \"companycam\":\n      data.settings = data.settings || {};\n      if (data.settings.create_jobs_from_cc_projects === undefined) {\n        data.settings.create_jobs_from_cc_projects = true;\n      }\n      break;\n    case \"job_nimbus\":\n      if (data.jn_type === undefined) {\n        data.jn_type = \"job\";\n      }\n      break;\n    case \"improveit360\":\n      data.create_prospect_sale = {\n        appointment_resulted: data.create_prospect_sale?.appointment_resulted ?? true,\n        signed_document_signed: data.create_prospect_sale?.signed_document_signed ?? true,\n      };\n      data.create_marketing_opportunity = data.create_marketing_opportunity ?? true;\n      break;\n    case \"ingage\":\n      data.presentation_url = data.presentation_url || \"\";\n      data.discount = data.discount || {\n        name: \"\",\n        description: \"\",\n        amount: 0,\n      };\n      data.packages = data.packages || [\n        {\n          name: \"\",\n          description: \"\",\n          markup_factor: 0,\n          markdown_factor: 0,\n          default: true,\n        },\n      ];\n      data.packages = List(\n        data.packages.map((p) => ({\n          name: p.name,\n          description: p.description,\n          markup_factor: p.markup_factor,\n          markdown_factor: p.markdown_factor,\n          default: p.default,\n        })),\n      );\n      data.finance_options = data.finance_options || [\n        {\n          name: \"\",\n          rate: 0,\n          term: 0,\n        },\n      ];\n      data.finance_options = List(\n        data.finance_options.map((financeOption) => ({\n          name: financeOption.name,\n          rate: financeOption.rate,\n          term: financeOption.term,\n        })),\n      );\n      data.enabled = data.enabled || false;\n      break;\n    case \"fene_tech\":\n      if (data.manufacturers) {\n        data.manufacturers = List(\n          data.manufacturers.map((manufacturer: IFeneTechManufacturerData) =>\n            feneTechManufacturerFromJSON(manufacturer),\n          ),\n        );\n      } else {\n        data.manufacturers = List();\n      }\n\n      if (data.availableManufacturers) {\n        data.availableManufacturers = List(\n          data.availableManufacturers.map((manufacturer: IFeneTechManufacturerData) =>\n            feneTechManufacturerFromJSON(manufacturer),\n          ),\n        );\n      } else {\n        data.availableManufacturers = List();\n      }\n      break;\n  }\n  return fromJS(data);\n};\n\nexport type TokenKind =\n  | \"marketsharp\"\n  | \"eagleview\"\n  | \"salesforce\"\n  | \"job_nimbus\"\n  | \"hover\"\n  | \"improveit360\"\n  | \"sales_rabbit\"\n  | \"paysimple\"\n  | \"lead_perfection\"\n  | \"card_connect\"\n  | \"companycam\"\n  | \"jobprogress\"\n  | \"roof_scope\"\n  | \"accu_lynx\"\n  | \"fin_mkt\"\n  | \"plnar\"\n  | \"renoworks\"\n  | \"ingage\"\n  | \"provia\"\n  | \"fene_tech\"\n  | \"green_sky\"\n  | \"occ_pay\";\n\nexport interface ITokenData {\n  id: number;\n  uuid: string;\n  org_id: number;\n  user_id: number;\n  kind: TokenKind;\n  images: IImageData[];\n  data: any;\n  payload: any;\n  created_at: Date;\n  updated_at: Date;\n  loading?: boolean;\n}\n\nexport interface ITokenRecord {\n  id: number;\n  uuid: string;\n  org_id: number;\n  user_id: number;\n  kind: TokenKind;\n  images: List<ImageRecord>;\n  data: Map<string, any>;\n  payload: Map<string, any>;\n\n  created_at: Date;\n  updated_at: Date;\n\n  loading: boolean;\n}\n\nconst defaultTokenProps: ITokenRecord = {\n  id: 0,\n  uuid: \"\",\n  user_id: 0,\n  org_id: 0,\n  kind: \"marketsharp\",\n  images: List<ImageRecord>(),\n  data: Map(),\n  payload: Map(),\n  created_at: new Date(),\n  updated_at: new Date(),\n  loading: false,\n};\n\nexport class TokenRecord extends Record(defaultTokenProps) implements ITokenRecord {}\n","import { Record, Map } from \"immutable\";\nimport * as tokenActions from \"./token.actions\";\nimport { TokenRecord, TokenKind, fromJSON } from \"../records/Token\";\nimport { List } from \"immutable\";\n\nexport interface ITokenStateRecord {\n  byOrgId: Map<number, ITokenKindRecord>;\n  lastSavedByOrgId: Map<number, ITokenKindRecord>;\n  authByOrgId: Map<number, TokenKindAuthorizedRecord>;\n  statuses: List<any>;\n}\n\nexport interface ITokenKindRecord {\n  byKind: Map<TokenKind, TokenRecord>;\n}\n\nexport interface ITokenKindAuthorizedRecord {\n  byKind: Map<TokenKind, AuthorizedTokenRecord>;\n  loading: boolean;\n}\n\nexport const defaultTokenKindAuthorizedRecord: ITokenKindAuthorizedRecord = {\n  byKind: Map<TokenKind, AuthorizedTokenRecord>(),\n  loading: false,\n};\n\nexport class TokenKindAuthorizedRecord\n  extends Record<ITokenKindAuthorizedRecord>(defaultTokenKindAuthorizedRecord)\n  implements ITokenKindAuthorizedRecord {}\n\nexport interface IAuthorizedTokenRecord {\n  authorized: boolean;\n}\n\nexport const defaultAuthorizedTokenRecord: IAuthorizedTokenRecord = {\n  authorized: false,\n};\n\nexport class AuthorizedTokenRecord\n  extends Record<IAuthorizedTokenRecord>(defaultAuthorizedTokenRecord)\n  implements IAuthorizedTokenRecord {}\n\nexport const defaultTokenStateRecord: ITokenStateRecord = {\n  byOrgId: Map<number, ITokenKindRecord>(),\n  lastSavedByOrgId: Map<number, ITokenKindRecord>(),\n  authByOrgId: Map<number, TokenKindAuthorizedRecord>(),\n  statuses: List<any>(),\n};\n\nexport class TokenStateRecord extends Record<ITokenStateRecord>(defaultTokenStateRecord) implements ITokenStateRecord {}\n\nexport const initialState = new TokenStateRecord();\n\nexport const reducer = (state = initialState, action: tokenActions.Actions): TokenStateRecord => {\n  switch (action.type) {\n    case tokenActions.FETCH_TOKEN:\n      if (state.getIn([\"byOrgId\", action.payload.orgId, action.payload.tokenKind])) {\n        return state.setIn([\"byOrgId\", action.payload.orgId, action.payload.tokenKind, \"loading\"], true);\n      }\n      return state.setIn(\n        [\"byOrgId\", action.payload.orgId, action.payload.tokenKind],\n        fromJSON({ kind: action.payload.tokenKind, loading: true }),\n      );\n    case tokenActions.RECEIVE_TOKEN:\n      return state\n        .setIn([\"byOrgId\", action.payload.orgId, action.payload.token.kind], fromJSON(action.payload.token))\n        .setIn([\"lastSavedByOrgId\", action.payload.orgId, action.payload.token.kind], fromJSON(action.payload.token));\n    case tokenActions.EDIT_TOKEN_DATA:\n      return state.setIn([\"byOrgId\", action.payload.orgId, action.payload.tokenKind, \"data\"], action.payload.data);\n    case tokenActions.RESET_TOKEN:\n      return state.setIn(\n        [\"byOrgId\", action.payload.orgId, action.payload.tokenKind],\n        state.getIn([\"lastSavedByOrgId\", action.payload.orgId, action.payload.tokenKind]),\n      );\n    case tokenActions.SET_LOADED:\n      state = state.setIn([\"byOrgId\", action.payload.orgId, action.payload.tokenKind, \"loading\"], false);\n      return state.setIn([\"lastSavedByOrgId\", action.payload.orgId, action.payload.tokenKind, \"loading\"], false);\n    case tokenActions.FETCH_AUTHORIZED:\n      return state\n        .setIn([\"authByOrgId\", action.payload], new TokenKindAuthorizedRecord())\n        .setIn([\"authByOrgId\", action.payload, \"loading\"], true);\n    case tokenActions.RECEIVE_AUTHORIZED:\n      Object.keys(action.payload.authorized).forEach((key) => {\n        state = state.setIn(\n          [\"authByOrgId\", action.payload.orgId, \"byKind\", key],\n          new AuthorizedTokenRecord(action.payload.authorized[key]),\n        );\n      });\n      return state.setIn([\"authByOrgId\", action.payload.orgId, \"loading\"], false);\n    case tokenActions.SET_AUTHORIZED_LOADED:\n      return state.setIn([\"authByOrgId\", action.payload, \"loading\"], false);\n    case tokenActions.UPDATE_FORM: {\n      const { isInsert, isDelete } = action.payload.event;\n      let { name, value, rootPath } = action.payload.event;\n      rootPath = _.without(rootPath, \"tokens\");\n      if (isInsert) {\n        const list = state.getIn(rootPath.concat(name.split(\".\"))) as List<any>;\n        value = list.insert(list.size, value);\n      } else if (isDelete) {\n        const nameSplitted = name.split(\".\");\n        const index = nameSplitted.pop();\n        name = nameSplitted.join(\".\");\n        value = (state.getIn(rootPath.concat(name.split(\".\"))) as List<any>).delete(index);\n      }\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n    }\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IValidationData>): ValidationRecord => {\n  const data: IValidationRecord = { ...(json as any) };\n\n  return new ValidationRecord(data);\n};\n\nexport interface IValidationData {\n  id: number;\n  name: string;\n  item_uuid: string;\n  kind: \"default\" | \"inspection\";\n  definition: any;\n  org_id: number;\n  loading?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IValidationRecord {\n  id: number;\n  name: string;\n  item_uuid: string;\n  definition: any;\n  org_id: number;\n  kind: \"default\" | \"inspection\";\n  loading: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nconst defaultValidationProps: IValidationRecord = {\n  id: 0,\n  name: \"\",\n  item_uuid: \"\",\n  definition: {},\n  org_id: null,\n  kind: \"default\",\n  loading: false,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class ValidationRecord extends Record(defaultValidationProps) implements IValidationRecord {\n  public readonly id!: number;\n  public readonly name!: string;\n  public readonly item_uuid!: string;\n  public readonly definition!: any;\n  public readonly org_id!: Nullable<number>;\n  public readonly loading!: boolean;\n\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public constructor(values?: Partial<IValidationRecord>) {\n    values ? super(values) : super();\n  }\n}\n","import * as validationActions from \"./validation.actions\";\nimport { ValidationRecord, IValidationData, fromJSON } from \"app2/src/records/Validation\";\nimport { Map, Record, List, Set } from \"immutable\";\n\nexport interface IOrgValidationsRecord {\n  validations: Set<number>;\n  errors: List<string>;\n  loading: boolean;\n}\nexport const OrgValidationsRecord: Record.Factory<IOrgValidationsRecord> = Record<IOrgValidationsRecord>({\n  validations: Set<number>(),\n  errors: List<string>(),\n  loading: false,\n});\n\nexport const ValidationStateRecord = Record({\n  byId: Map<number, ValidationRecord>(),\n  byItemUuid: Map<string, number>(),\n  byOrgId: Map<number, List<typeof OrgValidationsRecord>>(),\n});\n\nexport const initialState = ValidationStateRecord();\nexport type ValidationState = typeof initialState;\n\nexport const reducer = (state = initialState, action: validationActions.Actions): ValidationState => {\n  switch (action.type) {\n    case validationActions.RECEIVE_VALIDATION:\n      const validation = fromJSON({ ...action.payload.validation, loading: false });\n\n      if (!state.getIn([\"byOrgId\", validation.org_id])) {\n        state = state.setIn([\"byOrgId\", validation.org_id], OrgValidationsRecord({}));\n      }\n\n      return state\n        .setIn([\"byId\", validation.id], validation)\n        .setIn([\"byItemUuid\", `${validation.kind}-${validation.item_uuid}`], validation.id)\n        .setIn(\n          [\"byOrgId\", validation.org_id, \"validations\"],\n          state.getIn([\"byOrgId\", validation.org_id, \"validations\"]).add(validation.id),\n        );\n    case validationActions.FETCH_ORG_VALIDATIONS:\n      if (!state.getIn([\"byOrgId\", action.payload.orgId])) {\n        return state.setIn([\"byOrgId\", action.payload.orgId], OrgValidationsRecord({ loading: true }));\n      }\n\n      return state.setIn([\"byOrgId\", action.payload.orgId, \"loading\"], true);\n    case validationActions.RECEIVE_ORG_VALIDATIONS:\n      action.payload.validations.forEach((v: IValidationData) => {\n        state = reducer(state, validationActions.Actions.receiveValidation(v));\n      });\n      return state.setIn([\"byOrgId\", action.payload.orgId, \"loading\"], false);\n    case validationActions.ORG_VALIDATIONS_LOADED:\n      return state.setIn([\"byOrgId\", action.payload.orgId, \"loading\"], false);\n    default:\n      return state;\n  }\n};\n","import { List, Record } from \"immutable\";\nimport { IProductData } from \"./Product\";\nimport { IProductOptionGroupData } from \"./ProductOptionGroup\";\n\nexport const fromJSON = (json: Partial<IPriceListData>): PriceListRecord => {\n  const recordData: IPriceListRecord = { ...(json as any) };\n\n  if (json.product_option_groups) {\n    recordData.product_option_group_ids = List(json.product_option_groups.map((pog) => pog.id));\n  }\n\n  if (json.products) {\n    recordData.product_ids = List(json.products.map((p) => p.id));\n  }\n\n  return new PriceListRecord(recordData);\n};\n\nexport interface IPriceListData {\n  id: number;\n  org_id: number;\n  name: string;\n  kind: string;\n  hidden_products: boolean;\n  products: IProductData[];\n  product_option_groups: IProductOptionGroupData[];\n  loading: boolean;\n\n  created_at: string;\n  updated_at: string;\n}\n\nexport interface IPriceListRecord {\n  id: number;\n  org_id: number;\n  name: string;\n  kind: string;\n  hidden_products: boolean;\n  product_ids: List<number>;\n  product_option_group_ids: List<number>;\n  loading: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultPriceListProps = {\n  id: 0,\n  org_id: 0,\n  name: \"\",\n  kind: \"default\",\n  hidden_products: false,\n  product_ids: List<number>(),\n  product_option_group_ids: List<number>(),\n  loading: false,\n\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class PriceListRecord extends Record<IPriceListRecord>(defaultPriceListProps) implements IPriceListRecord {\n  public id!: number;\n  public org_id!: number;\n  public name!: string;\n  public kind!: string;\n  public hidden_products!: boolean;\n  public product_ids!: List<number>;\n  public product_option_group_ids!: List<number>;\n  public loading!: boolean;\n\n  public created_at!: Date;\n  public updated_at!: Date;\n\n  public constructor(values?: Partial<IPriceListRecord>) {\n    values ? super(values) : super();\n  }\n}\n","import * as productActions from \"./product.actions\";\nimport { Map, Record } from \"immutable\";\nimport { ProductRecord, fromJSON } from \"../records/Product\";\nimport { RootActions, RootState } from \".\";\nimport { ActivatedPriceListRecord } from \"app2/src/records/ActivatedPriceList\";\nimport { ancestralName } from \"app2/src/selectors/product.selectors\";\n\nexport const ProductStateRecord = Record({\n  byId: Map<number, ProductRecord>(),\n});\n\nexport const initialState = ProductStateRecord();\n\nexport type ProductState = typeof initialState;\n\nexport type ProductReducerState = RootState | ActivatedPriceListRecord;\n\nexport const reducer = (state: ProductReducerState, action: RootActions): ProductReducerState => {\n  const model = \"products\";\n  if (state && !state.getIn([model])) {\n    state = state.setIn([model], initialState);\n  }\n\n  let product: ProductRecord;\n  switch (action.type) {\n    case productActions.RECEIVE_PRODUCT:\n      const { product: productData } = action.payload;\n      let { options } = action.payload;\n\n      // check if we need to pass down discountable\n      // else if options has discountable, set this data as discountable if it's a leaf node\n      if (productData.discountable) {\n        options = options.set(\"discountable\", productData.discountable);\n      } else if (\n        options.get(\"discountable\") &&\n        productData.children !== undefined &&\n        _.isArray(productData.children) &&\n        productData.children.length <= 0\n      ) {\n        productData.discountable = options.get(\"discountable\");\n      }\n\n      product = fromJSON({ ...productData });\n      state = state.setIn([model, \"byId\", product.id], product);\n\n      const name = ancestralName(state, { productId: product.id });\n      product = product.merge({ ancestral_name: name, ancestral_name_lowercase: name.toLowerCase() });\n\n      state = state.setIn([model, \"byId\", product.id], product);\n\n      productData.children.forEach((child) => {\n        state = reducer(state, productActions.Actions.receiveProduct(child, options));\n      });\n\n      return state;\n\n    default:\n      return state;\n  }\n};\n","import { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport { Record, List } from \"immutable\";\nimport { IProductOptionData, ProductOptionRecord, fromJSON as poFromJSON } from \"./ProductOption\";\n\nexport const fromJSON = (json: Partial<IProductOptionGroupData>): ProductOptionGroupRecord => {\n  const recordData: IProductOptionGroupRecord = { ...(json as any) };\n\n  if (json.options) {\n    recordData.option_ids = List(json.options.map((opt) => opt.id));\n  }\n\n  if (json.product_ids) {\n    recordData.product_ids = List(json.product_ids);\n  }\n\n  if (!json.match_id) {\n    recordData.match_id = json.uuid;\n  }\n\n  return new ProductOptionGroupRecord(recordData);\n};\n\nexport const optionSelected = (options: List<ProductOptionRecord>, lineItem: IEstimateLineItem) => {\n  const option_uuids = options.map((o) => o.uuid);\n  return _.chain(lineItem.existingOptions())\n    .any((elio: IEstimateLineItemOption) => {\n      return option_uuids.includes(elio.product_option_uuid);\n    })\n    .value();\n};\n\nexport interface IProductOptionGroupData {\n  id: number;\n  matched: IProductOptionGroupData[];\n  uuid: string;\n  match_id: string;\n  name: string;\n  selection_mode: string;\n  pog_type: string;\n  product_ids: number[];\n  option_count: number;\n  product_count: number;\n  option_group_count: number;\n  option_group_ids: number[];\n  show: boolean;\n  sort_order: number;\n  price_list_id: number;\n  options: IProductOptionData[];\n}\n\nexport interface IProductOptionGroupRecord {\n  id: number;\n  matched: List<ProductOptionGroupRecord>;\n  uuid: string;\n  match_id: string;\n  name: string;\n  selection_mode: string;\n  pog_type: string;\n  product_ids: List<number>;\n  option_count: number;\n  product_count: number;\n  option_group_count: number;\n  option_group_ids: List<number>;\n  show: boolean;\n  sort_order: number;\n  price_list_id: number;\n  option_ids: List<number>;\n}\n\nconst defaultProductOptionGroupProps: IProductOptionGroupRecord = {\n  id: 0,\n  matched: List<ProductOptionGroupRecord>(),\n  uuid: \"\",\n  match_id: \"\",\n  name: \"\",\n  selection_mode: \"\",\n  // price lists that were activated prior to adding pog_type column are set to \"default\"\n  pog_type: \"default\",\n  product_ids: List<number>(),\n  option_count: 0,\n  product_count: 0,\n  option_group_count: 0,\n  option_group_ids: List<number>(),\n  show: true,\n  sort_order: 0,\n  price_list_id: 0,\n  option_ids: List<number>(),\n};\n\nexport class ProductOptionGroupRecord\n  extends Record(defaultProductOptionGroupProps)\n  implements IProductOptionGroupRecord\n{\n  public readonly id!: number;\n  public readonly matched!: List<ProductOptionGroupRecord>;\n  public readonly uuid!: string;\n  public readonly match_id!: string;\n  public readonly name!: string;\n  public readonly selection_mode!: string;\n  public readonly pog_type!: string;\n  public readonly product_ids!: List<number>;\n  public readonly option_count!: number;\n  public readonly product_count!: number;\n  public readonly option_group_count!: number;\n  public readonly option_group_ids!: List<number>;\n  public readonly show!: boolean;\n  public readonly sort_order!: number;\n  public readonly price_list_id!: number;\n  public readonly option_ids!: List<number>;\n\n  public constructor(values?: Partial<IProductOptionGroupRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { IEstimateMarkups } from \"app/src/Models/Estimate\";\nimport { IImageData, ImageRecord, fromJSON as imageFromJSON } from \"app2/src/records/Image\";\nimport { Record, List } from \"immutable\";\nimport { markupMultiplier } from \"app2/src/records/Estimate\";\nimport { IEstimateLineItemMarkupable, isMarkupable } from \"app2/src/records/EstimateLineItem\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport const fromJSON = (json: Partial<IProductOptionData>): ProductOptionRecord => {\n  const recordData: IProductOptionRecord = { ...(json as any) };\n\n  if (!json.match_id) {\n    recordData.match_id = json.uuid;\n  }\n\n  let record = new ProductOptionRecord(recordData);\n\n  if (Array.isArray(json.images)) {\n    record = record.set(\"images\", List(json.images.map((i) => imageFromJSON(i))));\n  }\n\n  return record;\n};\n\nexport const calculatePrice = (\n  productOption: ProductOptionRecord,\n  estimate: IEstimateMarkups,\n  estimateLineItem: IEstimateLineItemMarkupable,\n): number => {\n  let productPrice = productOption.product_price || 0;\n  let laborPrice = productOption.labor_price || 0;\n  if (isMarkupable(estimateLineItem)) {\n    productPrice = roundToDecimals(productOption.product_price * markupMultiplier(estimate.product_markup), -2);\n    laborPrice = roundToDecimals(productOption.labor_price * markupMultiplier(estimate.labor_markup), -2);\n  }\n\n  return productPrice + laborPrice;\n};\n\nexport interface IProductOptionData {\n  id: number;\n  matched: IProductOptionData[];\n  uuid: string;\n  match_id: string;\n  option_group_id: number;\n  name: string;\n  uom: string;\n  description: string;\n  cost: number;\n  msrp: number;\n  labor_price: number;\n  product_price: number;\n  price: number;\n  sort_order: number;\n  images: IImageData[];\n  charge_type: string;\n  pog_type: string;\n  show: boolean;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IProductOptionRecord {\n  id: number;\n  matched: List<ProductOptionRecord>;\n  uuid: string;\n  match_id: string;\n  option_group_id: number;\n  name: string;\n  uom: string;\n  description: string;\n  cost: number;\n  msrp: number;\n  labor_price: number;\n  product_price: number;\n  price: number;\n  sort_order: number;\n  images: List<ImageRecord>;\n  charge_type: string;\n  pog_type: string;\n  show: boolean;\n  created_at: Date;\n  updated_at: Date;\n}\n\nconst defaultProductOptionProps: IProductOptionRecord = {\n  id: 0,\n  matched: List<ProductOptionRecord>(),\n  uuid: \"\",\n  match_id: \"\",\n  option_group_id: 0,\n  name: \"\",\n  uom: \"\",\n  description: \"\",\n  cost: 0,\n  msrp: 0,\n  labor_price: 0,\n  product_price: 0,\n  price: 0,\n  sort_order: 0,\n  images: List(),\n  charge_type: \"\",\n  pog_type: \"\",\n  show: true,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class ProductOptionRecord extends Record(defaultProductOptionProps) implements IProductOptionRecord {\n  public readonly id!: number;\n  public readonly matched!: List<ProductOptionRecord>;\n  public readonly uuid!: string;\n  public readonly match_id!: string;\n  public readonly option_group_id!: number;\n  public readonly name!: string;\n  public readonly uom!: string;\n  public readonly description!: string;\n  public readonly cost!: number;\n  public readonly msrp!: number;\n  public readonly labor_price!: number;\n  public readonly product_price!: number;\n  public readonly price!: number;\n  public readonly sort_order!: number;\n  public readonly images!: List<ImageRecord>;\n  public readonly charge_type!: string;\n  public readonly pog_type!: string;\n  public readonly show!: boolean;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public constructor(values?: Partial<IProductOptionRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import * as productOptionActions from \"./productOption.actions\";\nimport { Map, Record } from \"immutable\";\nimport { ProductOptionRecord, fromJSON } from \"../records/ProductOption\";\nimport { RootActions, RootState } from \".\";\nimport { ActivatedPriceListRecord } from \"app2/src/records/ActivatedPriceList\";\n\nexport const ProductOptionStateRecord = Record({\n  byId: Map<number, ProductOptionRecord>(),\n});\n\nexport const initialState = ProductOptionStateRecord();\n\nexport type ProductOptionState = typeof initialState;\n\nexport type ProductOptionReducerState = RootState | ActivatedPriceListRecord;\n\nexport const reducer = (state: ProductOptionReducerState, action: RootActions): ProductOptionReducerState => {\n  const model = \"productOptions\";\n  if (state && !state.getIn([model])) {\n    state = state.setIn([model], initialState);\n  }\n\n  let productOption: ProductOptionRecord;\n  switch (action.type) {\n    case productOptionActions.RECEIVE_PRODUCT_OPTION:\n      productOption = fromJSON({ ...action.payload.productOption });\n\n      return state.setIn([model, \"byId\", productOption.id], productOption);\n\n    default:\n      return state;\n  }\n};\n","import * as productOptionGroupActions from \"./productOptionGroup.actions\";\nimport * as productOptionActions from \"./productOption.actions\";\nimport { Map, Record } from \"immutable\";\nimport { ProductOptionGroupRecord, fromJSON } from \"../records/ProductOptionGroup\";\nimport { RootActions, RootState } from \".\";\nimport { ActivatedPriceListRecord } from \"app2/src/records/ActivatedPriceList\";\nimport { reducer as productOptionReducer } from \"app2/src/reducers/productOption.reducer\";\n\nexport const ProductOptionGroupStateRecord = Record({\n  byId: Map<number, ProductOptionGroupRecord>(),\n});\n\nexport const initialState = ProductOptionGroupStateRecord();\n\nexport type ProductOptionGroupState = typeof initialState;\n\nexport type ProductOptionGroupReducerState = RootState | ActivatedPriceListRecord;\n\nexport const reducer = (state: ProductOptionGroupReducerState, action: RootActions): ProductOptionGroupReducerState => {\n  const model = \"productOptionGroups\";\n  if (state && !state.getIn([model])) {\n    state = state.setIn([model], initialState);\n  }\n\n  let productOptionGroup: ProductOptionGroupRecord;\n  switch (action.type) {\n    case productOptionGroupActions.RECEIVE_PRODUCT_OPTION_GROUP:\n      productOptionGroup = fromJSON({ ...action.payload.productOptionGroup });\n\n      action.payload.productOptionGroup.options.forEach((option) => {\n        state = productOptionReducer(state, productOptionActions.Actions.receiveProductOption(option));\n      });\n\n      return state.setIn([model, \"byId\", productOptionGroup.id], productOptionGroup);\n\n    default:\n      return state;\n  }\n};\n","import * as priceListActions from \"./priceList.actions\";\nimport { Map, Record } from \"immutable\";\nimport { PriceListRecord, fromJSON } from \"../records/PriceList\";\nimport { RootActions, RootState } from \".\";\nimport { ActivatedPriceListRecord } from \"app2/src/records/ActivatedPriceList\";\nimport * as productActions from \"./product.actions\";\nimport { reducer as productReducer } from \"./product.reducer\";\nimport * as productOptionGroupActions from \"./productOptionGroup.actions\";\nimport { reducer as productOptionGroupReducer } from \"./productOptionGroup.reducer\";\n\nexport const PriceListStateRecord = Record({\n  byId: Map<number, PriceListRecord>(),\n});\n\nexport const initialState = PriceListStateRecord();\n\nexport type PriceListState = typeof initialState;\n\nexport type PriceListReducerState = RootState | ActivatedPriceListRecord;\n\nexport const reducer = (state: PriceListReducerState, action: RootActions): PriceListReducerState => {\n  const model = \"priceLists\";\n  if (state && !state.getIn([model])) {\n    state = state.setIn([model], initialState);\n  }\n\n  let priceList: PriceListRecord;\n  switch (action.type) {\n    case priceListActions.RECEIVE_PRICE_LIST:\n      priceList = fromJSON({ ...action.payload.priceList });\n\n      action.payload.priceList.products.forEach((product) => {\n        state = productReducer(state, productActions.Actions.receiveProduct(product));\n      });\n\n      action.payload.priceList.product_option_groups.forEach((productOptionGroup) => {\n        state = productOptionGroupReducer(\n          state,\n          productOptionGroupActions.Actions.receiveProductOptionGroup(productOptionGroup),\n        );\n      });\n\n      return state.setIn([model, \"byId\", priceList.id], priceList);\n\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\nimport { DocumentRecord, IDocumentData, fromJSON as docFromJSON } from \"./Document\";\nimport { Nullable } from \".\";\nimport { PriceListState, initialState as PriceListInitialState } from \"app2/src/reducers/priceList.reducer\";\nimport { ProductState, initialState as ProductInitialState } from \"app2/src/reducers/product.reducer\";\nimport {\n  ProductOptionGroupState,\n  initialState as ProductOptionGroupInitialState,\n} from \"app2/src/reducers/productOptionGroup.reducer\";\nimport { ProductOptionState, initialState as ProductOptionInitialState } from \"app2/src/reducers/productOption.reducer\";\n\nexport const fromJSON = (json: Partial<IActivatedPriceListData>): ActivatedPriceListRecord => {\n  const recordData: IActivatedPriceListRecord = { ...(json as any) };\n\n  if (json.file) {\n    recordData.file = docFromJSON(json.file);\n  }\n\n  return new ActivatedPriceListRecord(recordData);\n};\n\nexport interface IActivatedPriceListData {\n  id: number;\n  org_id: number;\n  name: string;\n  price_list_id: number;\n  file: IDocumentData;\n  hidden_products: boolean;\n  csv_url: string;\n  csv_generated_on: Date;\n  location: string;\n  estimate_count: number;\n  activated_price_list_id: number;\n  loading: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IActivatedPriceListRecord {\n  id: number;\n  org_id: number;\n  name: string;\n  price_list_id: number;\n  priceLists: PriceListState;\n  products: ProductState;\n  productOptionGroups: ProductOptionGroupState;\n  productOptions: ProductOptionState;\n  file: Nullable<DocumentRecord>;\n  hidden_products: boolean;\n  csv_url: string;\n  csv_generated_on: Nullable<Date>;\n  location: string;\n  estimate_count: number;\n  activated_price_list_id: Nullable<number>;\n  loading: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultActivatedPriceListProps = {\n  id: 0,\n  org_id: 0,\n  name: \"\",\n  price_list_id: 0,\n  priceLists: PriceListInitialState,\n  products: ProductInitialState,\n  productOptionGroups: ProductOptionGroupInitialState,\n  productOptions: ProductOptionInitialState,\n  file: null,\n  hidden_products: false,\n  csv_url: \"\",\n  csv_generated_on: null,\n  location: \"\",\n  activated_price_list_id: null,\n  loading: false,\n  estimate_count: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class ActivatedPriceListRecord\n  extends Record<IActivatedPriceListRecord>(defaultActivatedPriceListProps)\n  implements IActivatedPriceListRecord\n{\n  public id!: number;\n  public org_id!: number;\n  public name!: string;\n  public price_list_id!: number;\n  public priceLists!: PriceListState;\n  public products!: ProductState;\n  public productOptionGroups!: ProductOptionGroupState;\n  public productOptions!: ProductOptionState;\n  public file!: Nullable<DocumentRecord>;\n  public hidden_products!: boolean;\n  public csv_url!: string;\n  public csv_generated_on!: Nullable<Date>;\n  public location!: string;\n  public estimate_count!: number;\n  public activated_price_list_id!: Nullable<number>;\n  public loading!: boolean;\n\n  public created_at!: Date;\n  public updated_at!: Date;\n\n  public constructor(values?: Partial<IActivatedPriceListRecord>) {\n    values ? super(values) : super();\n  }\n}\n","import * as activatedPriceListActions from \"./activatedPriceList.actions\";\nimport * as priceListActions from \"./priceList.actions\";\nimport { reducer as priceListReducer } from \"./priceList.reducer\";\nimport { Map, Record } from \"immutable\";\nimport { RootState, RootActions } from \".\";\nimport { fromJSON, ActivatedPriceListRecord } from \"app2/src/records/ActivatedPriceList\";\nimport { fetch, loaded, receive } from \"app2/src/reducers/Reducer\";\n\nexport const ActivatedPriceListStateRecord = Record({\n  byId: Map<number, ActivatedPriceListRecord>(),\n});\n\nexport const initialState = ActivatedPriceListStateRecord();\n\nexport type ActivatedPriceListState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"activatedPriceLists\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let activatedPriceListRecord: ActivatedPriceListRecord;\n  switch (action.type) {\n    case activatedPriceListActions.FETCH_ACTIVATED_PRICE_LIST:\n      return fetch(state, model, fromJSON({ id: action.payload.activatedPriceListId }));\n\n    case activatedPriceListActions.RECEIVE_ACTIVATED_PRICE_LIST:\n      activatedPriceListRecord = fromJSON({ ...action.payload.activatedPriceList });\n\n      activatedPriceListRecord = priceListReducer(\n        activatedPriceListRecord,\n        priceListActions.Actions.receivePriceList(action.payload.cachedPriceList),\n      ) as ActivatedPriceListRecord;\n\n      return receive(state, model, activatedPriceListRecord);\n\n    case activatedPriceListActions.SET_LOADED:\n      return loaded(state, model, action.payload.activatedPriceListId);\n\n    default:\n      return state;\n  }\n};\n","import { Record, List } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IRoofFaceData>): RoofFaceRecord => {\n  const recordData: IRoofFaceRecord = { ...(json as any) };\n\n  return new RoofFaceRecord(recordData);\n};\n\nexport interface IRoofFaceData {\n  id: number;\n  name: string;\n  designator: string;\n  location: string;\n  level: string;\n  orientation: number;\n  pitch: number;\n  area: number;\n  ui: number;\n  created_at: Date;\n  updated_at: Date;\n  _destroy?: boolean;\n}\n\nexport interface IRoofFaceRecord {\n  id: number;\n  name: string;\n  designator: string;\n  location: string;\n  level: string;\n  orientation: number;\n  pitch: number;\n  area: number;\n  ui: number;\n  created_at: Date;\n  updated_at: Date;\n\n  _destroy: Nullable<boolean>;\n}\n\nconst defaultRoofFaceProps: IRoofFaceRecord = {\n  id: 0,\n  name: \"\",\n  designator: \"\",\n  location: \"\",\n  level: \"\",\n  orientation: 0,\n  pitch: 0,\n  area: 0,\n  ui: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n\n  _destroy: null,\n};\n\nexport class RoofFaceRecord extends Record(defaultRoofFaceProps) implements IRoofFaceRecord {\n  public readonly id!: number;\n  public readonly name!: string;\n  public readonly designator!: string;\n  public readonly location!: string;\n  public readonly level!: string;\n  public readonly orientation!: number;\n  public readonly pitch!: number;\n  public readonly area!: number;\n  public readonly ui!: number;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n  public readonly _destroy!: Nullable<boolean>;\n\n  public constructor(values?: Partial<IRoofFaceRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import * as roofFaceActions from \"./roofFace.actions\";\nimport { Map, Record } from \"immutable\";\nimport { RoofFaceRecord, fromJSON } from \"../records/RoofFace\";\nimport { RootActions, RootState } from \".\";\n\nexport const RoofFaceStateRecord = Record({\n  byId: Map<number, RoofFaceRecord>(),\n  lastSavedById: Map<number, RoofFaceRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = RoofFaceStateRecord();\n\nexport type RoofFaceState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"roofFaces\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let roofFace: RoofFaceRecord;\n  switch (action.type) {\n    case roofFaceActions.RECEIVE_ROOF_FACE:\n      roofFace = fromJSON({ ...action.payload.roofFace });\n\n      return state.setIn([model, \"byId\", roofFace.id], roofFace).setIn([model, \"lastSavedById\", roofFace.id], roofFace);\n\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IWallFacadeData>): WallFacadeRecord => {\n  const recordData: IWallFacadeRecord = { ...(json as any) };\n\n  return new WallFacadeRecord(recordData);\n};\n\nexport interface IWallFacadeData {\n  id: number;\n  name: string;\n  designator: string;\n  ref_id: string;\n  location: string;\n  level: string;\n  orientation: number;\n  pitch: number;\n  area: number;\n  ui: number;\n  created_at: Date;\n  updated_at: Date;\n\n  _destroy?: boolean;\n}\n\nexport interface IWallFacadeRecord {\n  id: number;\n  name: string;\n  designator: string;\n  ref_id: string;\n  location: string;\n  level: string;\n  orientation: number;\n  pitch: number;\n  area: number;\n  ui: number;\n  created_at: Date;\n  updated_at: Date;\n\n  _destroy: Nullable<boolean>;\n}\n\nconst defaultWallFacadeProps: IWallFacadeRecord = {\n  id: 0,\n  name: \"\",\n  designator: \"\",\n  ref_id: \"\",\n  location: \"\",\n  level: \"\",\n  orientation: 0,\n  pitch: 0,\n  area: 0,\n  ui: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n  _destroy: null,\n};\n\nexport class WallFacadeRecord extends Record(defaultWallFacadeProps) implements IWallFacadeRecord {\n  public readonly id!: number;\n  public readonly name!: string;\n  public readonly designator!: string;\n  public readonly ref_id!: string;\n  public readonly location!: string;\n  public readonly level!: string;\n  public readonly orientation!: number;\n  public readonly pitch!: number;\n  public readonly area!: number;\n  public readonly ui!: number;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n  public readonly _destroy!: Nullable<boolean>;\n\n  public constructor(values?: Partial<IWallFacadeRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import * as wallFacadeActions from \"./wallFacade.actions\";\nimport { Map, Record } from \"immutable\";\nimport { WallFacadeRecord, fromJSON } from \"../records/WallFacade\";\nimport { RootActions, RootState } from \".\";\nimport { rootKey } from \"app2/src/selectors/wallFacade.selectors\";\n\nexport const WallFacadeStateRecord = Record({\n  byId: Map<number, WallFacadeRecord>(),\n  lastSavedById: Map<number, WallFacadeRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = WallFacadeStateRecord();\n\nexport type WallFacadeState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(rootKey)) {\n    state = state.set(rootKey, initialState);\n  }\n\n  let wallFacade: WallFacadeRecord;\n  switch (action.type) {\n    case wallFacadeActions.RECEIVE_WALL_FACADE:\n      wallFacade = fromJSON({ ...action.payload.wallFacade });\n\n      return state\n        .setIn([rootKey, \"byId\", wallFacade.id], wallFacade)\n        .setIn([rootKey, \"lastSavedById\", wallFacade.id], wallFacade);\n\n    case wallFacadeActions.EDIT_WALL_FACADE:\n      wallFacade = fromJSON({ ...action.payload.wallFacade });\n\n      return state.setIn([rootKey, \"byId\", wallFacade.id], wallFacade);\n\n    default:\n      return state;\n  }\n};\n","import { Record, List } from \"immutable\";\nimport { Nullable } from \".\";\nimport { IOpeningEstimationData, OpeningEstimationRecord } from \"./OpeningEstimation\";\nimport { IAnnotationData, AnnotationRecord } from \"./Annotation\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const calculateOpeningArea = (height: number, width: number): number => {\n  if (isNullOrUndefined(height) || isNullOrUndefined(width)) {\n    return 0;\n  }\n\n  return roundToDecimals((width * height) / 144, -2);\n};\n\nexport const calculateOpeningUI = (height: number, width: number): number => {\n  if (isNullOrUndefined(height) || isNullOrUndefined(width)) {\n    return 0;\n  }\n\n  return roundToDecimals(width + height, -2);\n};\n\nexport interface IOpeningData {\n  id: number;\n  name: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  designator: string;\n  location: string;\n  level: string;\n  height: number;\n  width: number;\n  area: number;\n  ui: number;\n  kind: string;\n  sort_order: number;\n\n  opening_estimations?: IOpeningEstimationData[];\n\n  annotation_id?: number;\n  annotation?: IAnnotationData;\n\n  _destroy?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IOpeningRecord {\n  id: number;\n  name: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  designator: string;\n  location: string;\n  level: string;\n  height: number;\n  width: number;\n  area: number;\n  ui: number;\n  kind: string;\n  sort_order: number;\n\n  opening_estimations: List<OpeningEstimationRecord>;\n\n  annotation_id: Nullable<number>;\n  annotation: Nullable<AnnotationRecord>;\n\n  _destroy: Nullable<boolean>;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultOpeningProps: IOpeningRecord = {\n  id: 0,\n  name: \"\",\n  designator: \"\",\n  location: \"\",\n  level: \"\",\n  height: 0,\n  width: 0,\n  area: 0,\n  ui: 0,\n  kind: \"\",\n  sort_order: null,\n  opening_estimations: List<OpeningEstimationRecord>(),\n  annotation_id: null,\n  annotation: null,\n  _destroy: null,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class OpeningRecord extends Record(defaultOpeningProps) implements IOpeningRecord {}\n","import { List, Record } from \"immutable\";\nimport { defaultOpeningProps, IOpeningData, IOpeningRecord } from \"app2/src/records/Opening\";\nimport { fromJSON as openingEstimationFromJSON } from \"app2/src/records/OpeningEstimation\";\n\nexport const fromJSON = (json: Partial<IWindowData>): WindowRecord => {\n  const recordData: IWindowRecord = { ...(json as any) };\n  recordData.kind = \"Window\";\n\n  if (json.opening_estimations) {\n    recordData.opening_estimations = List(json.opening_estimations.map((oe) => openingEstimationFromJSON(oe)));\n  }\n\n  return new WindowRecord(recordData);\n};\n\nexport type IWindowData = IOpeningData;\n\nexport type IWindowRecord = IOpeningRecord;\n\nexport class WindowRecord extends Record(defaultOpeningProps) implements IWindowRecord {}\n","import * as windowActions from \"./window.actions\";\nimport { Map, Record } from \"immutable\";\nimport { WindowRecord, fromJSON } from \"../records/Window\";\nimport { RootActions, RootState } from \".\";\nimport { rootKey } from \"app2/src/selectors/window.selectors\";\nimport { calculateOpeningArea, calculateOpeningUI, defaultOpeningProps } from \"app2/src/records/Opening\";\nimport { parseUpdateForm, reset } from \"app2/src/reducers/Reducer\";\n\nexport const WindowStateRecord = Record({\n  byId: Map<string, WindowRecord>(),\n  lastSavedById: Map<string, WindowRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = WindowStateRecord();\n\nexport type WindowState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = rootKey;\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let window: WindowRecord;\n  switch (action.type) {\n    case windowActions.RECEIVE_WINDOW:\n      window = fromJSON({ ...action.payload.window });\n\n      return state\n        .setIn([model, \"byId\", window.id.toString()], window)\n        .setIn([model, \"lastSavedById\", window.id.toString()], window);\n\n    case windowActions.EDIT_WINDOW:\n      window = fromJSON({ ...action.payload.window });\n\n      return state.setIn([model, \"byId\", window.id.toString()], window);\n\n    case windowActions.RESET_WINDOWS:\n      action.payload.windowIds.forEach((windowId) => {\n        state = reset(state, model, windowId.toString());\n      });\n      return state;\n\n    case windowActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      const nameArray = name.split(\".\");\n      const rootPathName = rootPath.concat(nameArray);\n      state = state.setIn(rootPathName, parseUpdateForm(defaultOpeningProps, name, value));\n\n      nameArray.pop();\n      const width = state.getIn(rootPath.concat(nameArray.concat([\"width\"])));\n      const height = state.getIn(rootPath.concat(nameArray.concat([\"height\"])));\n      return state\n        .setIn(rootPath.concat(nameArray.concat([\"area\"])), calculateOpeningArea(width, height))\n        .setIn(rootPath.concat(nameArray.concat([\"ui\"])), calculateOpeningUI(width, height));\n\n    default:\n      return state;\n  }\n};\n","import { List, Record } from \"immutable\";\nimport { defaultOpeningProps, IOpeningData, IOpeningRecord } from \"app2/src/records/Opening\";\nimport { fromJSON as openingEstimationFromJSON } from \"app2/src/records/OpeningEstimation\";\n\nexport const fromJSON = (json: Partial<IDoorData>): DoorRecord => {\n  const recordData: IDoorRecord = { ...(json as any) };\n  recordData.kind = \"Door\";\n\n  if (json.opening_estimations) {\n    recordData.opening_estimations = List(json.opening_estimations.map((oe) => openingEstimationFromJSON(oe)));\n  }\n\n  return new DoorRecord(recordData);\n};\n\nexport type IDoorData = IOpeningData;\n\nexport type IDoorRecord = IOpeningRecord;\n\nexport class DoorRecord extends Record(defaultOpeningProps) implements IDoorRecord {}\n","import * as doorActions from \"./door.actions\";\nimport { Map, Record } from \"immutable\";\nimport { DoorRecord, fromJSON } from \"../records/Door\";\nimport { RootActions, RootState } from \".\";\nimport { rootKey } from \"app2/src/selectors/door.selectors\";\nimport { calculateOpeningArea, calculateOpeningUI, defaultOpeningProps } from \"app2/src/records/Opening\";\nimport { parseUpdateForm, reset } from \"app2/src/reducers/Reducer\";\n\nexport const DoorStateRecord = Record({\n  byId: Map<string, DoorRecord>(),\n  lastSavedById: Map<string, DoorRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = DoorStateRecord();\n\nexport type DoorState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(rootKey)) {\n    state = state.set(rootKey, initialState);\n  }\n\n  let door: DoorRecord;\n  switch (action.type) {\n    case doorActions.RECEIVE_DOOR:\n      door = fromJSON({ ...action.payload.door });\n\n      return state\n        .setIn([rootKey, \"byId\", door.id.toString()], door)\n        .setIn([rootKey, \"lastSavedById\", door.id.toString()], door);\n\n    case doorActions.EDIT_DOOR:\n      door = fromJSON({ ...action.payload.door });\n\n      return state.setIn([rootKey, \"byId\", door.id.toString()], door);\n\n    case doorActions.RESET_DOORS:\n      action.payload.doorIds.forEach((doorId) => {\n        state = reset(state, rootKey, doorId.toString());\n      });\n      return state;\n\n    case doorActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      const nameArray = name.split(\".\");\n      const rootPathName = rootPath.concat(nameArray);\n      state = state.setIn(rootPathName, parseUpdateForm(defaultOpeningProps, name, value));\n\n      nameArray.pop();\n      const width = state.getIn(rootPath.concat(nameArray.concat([\"width\"])));\n      const height = state.getIn(rootPath.concat(nameArray.concat([\"height\"])));\n      return state\n        .setIn(rootPath.concat(nameArray.concat([\"area\"])), calculateOpeningArea(width, height))\n        .setIn(rootPath.concat(nameArray.concat([\"ui\"])), calculateOpeningUI(width, height));\n\n    default:\n      return state;\n  }\n};\n","import { IRoom } from \"app/src/Models/Room\";\nimport { List, Record } from \"immutable\";\nimport { Nullable } from \".\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\nimport { Parser } from \"hot-formula-parser\";\nimport { IRoomEstimationData, RoomEstimationRecord, fromJSON as roomEstimationFromJson } from \"./RoomEstimation\";\n\nexport const fromJSON = (json: Partial<IRoomData>): RoomRecord => {\n  const recordData: IRoomRecord = { ...(json as any) };\n\n  if (json.room_estimations) {\n    recordData.room_estimations = List(json.room_estimations.map((estimation) => roomEstimationFromJson(estimation)));\n  }\n\n  return new RoomRecord(recordData);\n};\n\nexport interface IRoomData {\n  id: number;\n  name: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  designator: string;\n  location: string;\n  level: string;\n  area: number;\n  perimeter: number;\n  inside_corner: number;\n  outside_corner: number;\n  threshold: number;\n  ceiling_area: number;\n  ceiling_area_less_structures: number;\n  ceiling_perimeter: number;\n  ceiling_perimeter_less_structures: number;\n  door_area: number;\n  door_count: number;\n  door_total_width: number;\n  exposed_structure_perimeter: number;\n  floor_area_less_structures: number;\n  floor_opening_total_width: number;\n  floor_plan_area: number;\n  floor_plan_perimeter: number;\n  floor_plan_perimeter_less_structures: number;\n  floor_plan_perimeter_without_openings: number;\n  object_count: number;\n  opening_count: number;\n  opening_total_area: number;\n  opening_total_width: number;\n  structure_total_ceiling_area: number;\n  structure_total_ceiling_width: number;\n  structure_total_floor_area: number;\n  structure_total_floor_width: number;\n  structure_total_wall_area: number;\n  volume: number;\n  wall_count: number;\n  wall_total_area: number;\n  wall_total_area_without_openings: number;\n  window_count: number;\n  window_total_area: number;\n  measurement_id: number;\n  ref_id: number;\n  room_estimations: IRoomEstimationData[];\n  viewer_url: Nullable<string>;\n  _destroy?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IRoomRecord {\n  id: number;\n  name: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  designator: string;\n  location: string;\n  level: string;\n  area: number;\n  perimeter: number;\n  inside_corner: number;\n  outside_corner: number;\n  threshold: number;\n  ceiling_area: number;\n  ceiling_area_less_structures: number;\n  ceiling_perimeter: number;\n  ceiling_perimeter_less_structures: number;\n  door_area: number;\n  door_count: number;\n  door_total_width: number;\n  exposed_structure_perimeter: number;\n  floor_area_less_structures: number;\n  floor_opening_total_width: number;\n  floor_plan_area: number;\n  floor_plan_perimeter: number;\n  floor_plan_perimeter_less_structures: number;\n  floor_plan_perimeter_without_openings: number;\n  object_count: number;\n  opening_count: number;\n  opening_total_area: number;\n  opening_total_width: number;\n  structure_total_ceiling_area: number;\n  structure_total_ceiling_width: number;\n  structure_total_floor_area: number;\n  structure_total_floor_width: number;\n  structure_total_wall_area: number;\n  volume: number;\n  wall_count: number;\n  wall_total_area: number;\n  wall_total_area_without_openings: number;\n  window_count: number;\n  window_total_area: number;\n  measurement_id: number;\n  ref_id: number;\n  room_estimations: List<RoomEstimationRecord>;\n  viewer_url: Nullable<string>;\n\n  _destroy: Nullable<boolean>;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultRoomProps: IRoomRecord = {\n  id: 0,\n  name: \"\",\n  designator: \"\",\n  location: \"\",\n  level: \"\",\n  area: 0,\n  perimeter: 0,\n  inside_corner: 0,\n  outside_corner: 0,\n  threshold: 0,\n  ceiling_area: 0,\n  ceiling_area_less_structures: 0,\n  ceiling_perimeter: 0,\n  ceiling_perimeter_less_structures: 0,\n  door_area: 0,\n  door_count: 0,\n  door_total_width: 0,\n  exposed_structure_perimeter: 0,\n  floor_area_less_structures: 0,\n  floor_opening_total_width: 0,\n  floor_plan_area: 0,\n  floor_plan_perimeter: 0,\n  floor_plan_perimeter_less_structures: 0,\n  floor_plan_perimeter_without_openings: 0,\n  object_count: 0,\n  opening_count: 0,\n  opening_total_area: 0,\n  opening_total_width: 0,\n  structure_total_ceiling_area: 0,\n  structure_total_ceiling_width: 0,\n  structure_total_floor_area: 0,\n  structure_total_floor_width: 0,\n  structure_total_wall_area: 0,\n  volume: 0,\n  wall_count: 0,\n  wall_total_area: 0,\n  wall_total_area_without_openings: 0,\n  window_count: 0,\n  window_total_area: 0,\n  measurement_id: 0,\n  ref_id: 0,\n  room_estimations: List(),\n  viewer_url: null,\n\n  _destroy: null,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class RoomRecord extends Record(defaultRoomProps) implements IRoomRecord {\n  public constructor(values?: Partial<IRoomRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n\nexport const roomColumnKeys = (room: IRoom | RoomRecord) => {\n  let keys: string[];\n  if (Record.isRecord(room)) {\n    keys = Object.keys(room.toJS());\n  } else {\n    keys = Object.keys(room);\n  }\n\n  return keys.filter(\n    (k) =>\n      ![\n        \"id\",\n        \"name\",\n        \"designator\",\n        \"location\",\n        \"level\",\n        \"kind\",\n        \"created_at\",\n        \"updated_at\",\n        \"_destroy\",\n        \"ref_id\",\n        \"measurement_id\",\n        \"room_estimations\",\n      ].includes(k),\n  );\n};\n\nexport const setupFormulaParser = (room: IRoom) => {\n  const parser = new Parser();\n  _.each(roomColumnKeys(room), (k) => {\n    parser.setVariable(k, room[k]);\n  });\n  return parser;\n};\n\nexport const calculateRoomFormula = (formula: string, room: IRoom): { result: number; error: string } => {\n  if (!formula) {\n    return { result: 1, error: null };\n  }\n\n  try {\n    const parser = setupFormulaParser(room);\n    const { error } = parser.parse(formula);\n    let { result } = parser.parse(formula);\n    if (result) {\n      result = roundToDecimals(result, -2);\n    }\n    return { result, error };\n  } catch (error) {\n    return { result: null, error: \"ERROR!\" };\n  }\n};\n","import * as roomActions from \"./room.actions\";\nimport { Map, Record } from \"immutable\";\nimport { RoomRecord, fromJSON, defaultRoomProps } from \"../records/Room\";\nimport { RootActions, RootState } from \".\";\nimport { rootKey } from \"app2/src/selectors/room.selectors\";\nimport { parseUpdateForm, reset } from \"app2/src/reducers/Reducer\";\n\nexport const RoomStateRecord = Record({\n  byId: Map<string, RoomRecord>(),\n  lastSavedById: Map<string, RoomRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = RoomStateRecord();\n\nexport type RoomState = typeof initialState;\n\nconst model = rootKey;\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let room: RoomRecord;\n  switch (action.type) {\n    case roomActions.RECEIVE_ROOM:\n      room = fromJSON({ ...action.payload.room });\n\n      return state\n        .setIn([model, \"byId\", room.id.toString()], room)\n        .setIn([model, \"lastSavedById\", room.id.toString()], room);\n\n    case roomActions.EDIT_ROOM:\n      room = fromJSON({ ...action.payload.room });\n\n      return state.setIn([model, \"byId\", room.id.toString()], room);\n\n    case roomActions.RESET_ROOMS:\n      action.payload.roomIds.forEach((roomId) => {\n        state = reset(state, model, roomId.toString());\n      });\n      return state;\n\n    case roomActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n\n      return state.setIn(rootPath.concat(name.split(\".\")), parseUpdateForm(defaultRoomProps, name, value));\n\n    default:\n      return state;\n  }\n};\n","import { Record, List, fromJS, Map } from \"immutable\";\nimport { Nullable } from \".\";\nimport { IMeasurementMetadata } from \"rsf-visualizer\";\nimport { IImageData, ImageRecord } from \"./Image\";\nimport { IAnnotationData, AnnotationRecord } from \"./Annotation\";\nimport { IWallFacadeData, WallFacadeRecord } from \"./WallFacade\";\nimport { IMeasurement } from \"app/src/Models/Measurement\";\nimport { IElevation } from \"app/src/Models/Elevation\";\n\nexport const fromJSON = (json: Partial<IElevationData>): ElevationRecord => {\n  const recordData: IElevationRecord = { ...(json as any) };\n\n  recordData.annotations = fromJS(json.annotations);\n\n  return new ElevationRecord(recordData);\n};\n\nexport const unWindAngular = (elevation: IElevation): IElevationData => {\n  const data = { ...elevation } as any;\n\n  data.annotations = {\n    list: _.map(data.annotations, (a: any) => {\n      delete a.elevation;\n      return a;\n    }),\n    wallFacades: data.wallFacades,\n    measuring: data.drawingMetadata,\n  };\n  return data;\n};\n\nexport interface IElevationData {\n  id: number;\n  name: string;\n  abbr: string;\n  src_image_id: number;\n  src_image: IImageData;\n  rendered_image_id: number;\n  rendered_image: IImageData;\n  annotations: { list: IAnnotationData[]; wallFacades: IWallFacadeData[]; measuring: IMeasurementMetadata };\n  removedAnnotations: IAnnotationData[];\n  removedWallFacades: IWallFacadeData[];\n  measurement: IMeasurement;\n  measurement_id: number;\n  $hasChanged: boolean;\n  renderedDataUrl?: string;\n}\n\nexport interface IElevationRecord {\n  id: number;\n  name: string;\n  abbr: string;\n  src_image_id: number;\n  src_image: ImageRecord;\n  rendered_image_id: number;\n  rendered_image: ImageRecord;\n  annotations: Map<string, any>;\n  removedAnnotations: List<AnnotationRecord>;\n  removedWallFacades: List<WallFacadeRecord>;\n  measurement: Nullable<IMeasurement>;\n  measurement_id: number;\n  $hasChanged: boolean;\n  renderedDataUrl: Nullable<string>;\n}\n\nconst defaultElevationProps: IElevationRecord = {\n  id: 0,\n  name: \"\",\n  abbr: \"\",\n  src_image_id: 0,\n  src_image: new ImageRecord(),\n  rendered_image_id: 0,\n  rendered_image: new ImageRecord(),\n  annotations: Map(),\n  removedAnnotations: List<AnnotationRecord>(),\n  removedWallFacades: List<WallFacadeRecord>(),\n  measurement: null,\n  measurement_id: 0,\n  $hasChanged: false,\n  renderedDataUrl: null,\n};\n\nexport class ElevationRecord extends Record(defaultElevationProps) implements IElevationRecord {}\n","import * as elevationActions from \"./elevation.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { ElevationRecord, fromJSON } from \"../records/Elevation\";\nimport { RootActions, RootState } from \".\";\nimport { capitalize } from \"humanize-plus\";\n\nexport interface IElevationMeasurementRecord {\n  ids: List<number>;\n  loading: boolean;\n}\n\nexport const defaultElevationMeasurementRecord = {\n  ids: List(),\n  loading: false,\n};\n\nexport class ElevationMeasurementRecord\n  extends Record<IElevationMeasurementRecord>(defaultElevationMeasurementRecord)\n  implements IElevationMeasurementRecord {}\n\nexport const ElevationStateRecord = Record({\n  byId: Map<number, ElevationRecord>(),\n  byMeasurementId: Map<number, ElevationMeasurementRecord>(),\n  lastSavedById: Map<number, ElevationRecord>(),\n  // Map<doorId, elevationId>\n  byDoorId: Map<number, number>(),\n  // Map<windowId, elevationId>\n  byWindowId: Map<number, number>(),\n  unsavedId: -1,\n});\n\nexport const initialState = ElevationStateRecord();\n\nexport type ElevationState = typeof initialState;\nconst model = \"elevations\";\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let elevation: ElevationRecord;\n  switch (action.type) {\n    // SINGLE\n    case elevationActions.RECEIVE_ELEVATION:\n      elevation = fromJSON({ ...action.payload.elevation });\n\n      action.payload.elevation.annotations?.list.forEach((annotation) => {\n        state = state.setIn([model, `by${capitalize(annotation.opening_type)}Id`, annotation.opening_id], elevation.id);\n      });\n\n      return state\n        .setIn([model, \"byId\", elevation.id], elevation)\n        .setIn([model, \"lastSavedById\", elevation.id], elevation);\n\n    // MULTIPLE\n    case elevationActions.FETCH_ELEVATIONS:\n      const id = action.payload.measurementId;\n      if (state.getIn([model, \"byMeasurementId\", id])) {\n        return state.setIn([model, \"byMeasurementId\", id, \"loading\"], true);\n      }\n      return state.setIn([model, \"byMeasurementId\", id], new ElevationMeasurementRecord({ loading: true }));\n\n    case elevationActions.RECEIVE_ELEVATIONS:\n      action.payload.elevations.forEach((elevation) => {\n        state = reducer(state, elevationActions.Actions.receiveElevation(elevation));\n      });\n\n      return state\n        .setIn(\n          [model, \"byMeasurementId\", action.payload.measurementId, \"ids\"],\n          List(action.payload.elevations.map((e) => e.id)),\n        )\n        .setIn([model, \"byMeasurementId\", action.payload.measurementId, \"loading\"], false);\n\n    case elevationActions.SET_ELEVATIONS_LOADED:\n      return state.setIn([model, \"byMeasurementId\", action.payload.measurementId, \"loading\"], false);\n\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IDeckData>): DeckRecord => {\n  const recordData: IDeckRecord = { ...(json as any) };\n\n  return new DeckRecord(recordData);\n};\n\nexport interface IDeckData {\n  id: number;\n  name: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  designator: string;\n  area: number;\n  perimeter: number;\n  wall_length: number;\n  railing_length: number;\n  railing_area: number;\n  metadata: any;\n  _destroy?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IDeckRecord {\n  id: number;\n  name: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  designator: string;\n  area: number;\n  perimeter: number;\n  wall_length: number;\n  railing_length: number;\n  railing_area: number;\n  metadata: any;\n\n  _destroy: Nullable<boolean>;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultDeckProps: IDeckRecord = {\n  id: 0,\n  name: \"\",\n  designator: \"\",\n  area: 0,\n  perimeter: 0,\n  wall_length: 0,\n  railing_length: 0,\n  railing_area: 0,\n  metadata: {},\n\n  _destroy: null,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class DeckRecord extends Record(defaultDeckProps) implements IDeckRecord {\n  public readonly id!: number;\n  public readonly name!: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  public readonly designator!: string;\n  public readonly area!: number;\n  public readonly perimeter!: number;\n  public readonly wall_length!: number;\n  public readonly railing_length!: number;\n  public readonly railing_area!: number;\n  public readonly metadata!: any;\n\n  public readonly _destroy!: Nullable<boolean>;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public constructor(values?: Partial<IDeckRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import * as deckActions from \"./deck.actions\";\nimport { Map, Record } from \"immutable\";\nimport { DeckRecord, fromJSON } from \"../records/Deck\";\nimport { RootActions, RootState } from \".\";\n\nexport const DeckStateRecord = Record({\n  byId: Map<number, DeckRecord>(),\n  lastSavedById: Map<number, DeckRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = DeckStateRecord();\n\nexport type DeckState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"decks\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let deck: DeckRecord;\n  switch (action.type) {\n    case deckActions.RECEIVE_DECK:\n      deck = fromJSON({ ...action.payload.deck });\n\n      return state.setIn([model, \"byId\", deck.id], deck).setIn([model, \"lastSavedById\", deck.id], deck);\n    case deckActions.EDIT_DECK:\n      deck = fromJSON({ ...action.payload.deck });\n\n      return state.setIn([model, \"byId\", deck.id], deck);\n\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IPoolData>): PoolRecord => {\n  const recordData: IPoolRecord = { ...(json as any) };\n\n  return new PoolRecord(recordData);\n};\n\nexport interface IPoolData {\n  id: number;\n  name: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  designator: string;\n  area: number;\n  perimeter: number;\n  volume: number;\n  average_depth: number;\n  metadata: any;\n  _destroy?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IPoolRecord {\n  id: number;\n  name: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  designator: string;\n  area: number;\n  perimeter: number;\n  volume: number;\n  average_depth: number;\n  metadata: any;\n\n  _destroy: Nullable<boolean>;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultPoolProps: IPoolRecord = {\n  id: 0,\n  name: \"\",\n  designator: \"\",\n  area: 0,\n  perimeter: 0,\n  volume: 0,\n  average_depth: 0,\n  metadata: {},\n\n  _destroy: null,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class PoolRecord extends Record(defaultPoolProps) implements IPoolRecord {\n  public readonly id!: number;\n  public readonly name!: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  public readonly designator!: string;\n  public readonly area!: number;\n  public readonly perimeter!: number;\n  public readonly volume!: number;\n  public readonly average_depth!: number;\n  public readonly metadata!: any;\n\n  public readonly _destroy!: Nullable<boolean>;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public constructor(values?: Partial<IPoolRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import * as poolActions from \"./pool.actions\";\nimport { Map, Record } from \"immutable\";\nimport { PoolRecord, fromJSON } from \"../records/Pool\";\nimport { RootActions, RootState } from \".\";\n\nexport const PoolStateRecord = Record({\n  byId: Map<number, PoolRecord>(),\n  lastSavedById: Map<number, PoolRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = PoolStateRecord();\n\nexport type PoolState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"pools\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let pool: PoolRecord;\n  switch (action.type) {\n    case poolActions.RECEIVE_POOL:\n      pool = fromJSON({ ...action.payload.pool });\n\n      return state.setIn([model, \"byId\", pool.id], pool).setIn([model, \"lastSavedById\", pool.id], pool);\n    case poolActions.EDIT_POOL:\n      pool = fromJSON({ ...action.payload.pool });\n\n      return state.setIn([model, \"byId\", pool.id], pool);\n\n    default:\n      return state;\n  }\n};\n","import * as measurementActions from \"./measurement.actions\";\nimport { fromJS, List, Map, Record } from \"immutable\";\nimport {\n  MeasurementRecord,\n  fromJSON,\n  IMeasurementRecord,\n  defaultMeasurementProps,\n  lineMeasurementUpdate,\n  sunroomUpdate,\n  sunroomKneeWallUpdate,\n  getUoM,\n  calculateArea,\n} from \"../records/Measurement\";\nimport { RootActions, RootState } from \".\";\nimport { fetch, loaded, receive, reset } from \"app2/src/reducers/Reducer\";\n\nimport * as roofFaceActions from \"app2/src/reducers/roofFace.actions\";\nimport { reducer as roofFaceReducer } from \"app2/src/reducers/roofFace.reducer\";\n\nimport * as wallFacadeActions from \"app2/src/reducers/wallFacade.actions\";\nimport { reducer as wallFacadeReducer } from \"app2/src/reducers/wallFacade.reducer\";\n\nimport * as windowActions from \"app2/src/reducers/window.actions\";\nimport { reducer as windowReducer } from \"app2/src/reducers/window.reducer\";\n\nimport * as doorActions from \"app2/src/reducers/door.actions\";\nimport { reducer as doorReducer } from \"app2/src/reducers/door.reducer\";\n\nimport * as roomActions from \"app2/src/reducers/room.actions\";\nimport { reducer as roomReducer } from \"app2/src/reducers/room.reducer\";\n\nimport * as elevationActions from \"app2/src/reducers/elevation.actions\";\nimport { reducer as elevationReducer } from \"app2/src/reducers/elevation.reducer\";\n\nimport * as deckActions from \"app2/src/reducers/deck.actions\";\nimport { reducer as deckReducer } from \"app2/src/reducers/deck.reducer\";\n\nimport * as poolActions from \"app2/src/reducers/pool.actions\";\nimport { reducer as poolReducer } from \"app2/src/reducers/pool.reducer\";\n\nimport { addMeasurementForm, currentMeasurement, rootKey } from \"app2/src/selectors/measurement.selectors\";\nimport { unWindAngular } from \"app2/src/records/Elevation\";\nimport { IElevation } from \"app/src/Models/Elevation\";\nimport { calculateOpeningArea, calculateOpeningUI } from \"app2/src/records/Opening\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport const defaultAddMeasurementForm = Map({\n  quantity: 1,\n  name: \"\",\n  width: 0,\n  height: 0,\n  area: 0,\n  ui: 0,\n  perimeter: 0,\n  kind: \"windows\",\n  level: \"\",\n  location: \"\",\n});\n\nexport const MeasurementStateRecord = Record({\n  byId: Map<number, MeasurementRecord>(),\n  lastSavedById: Map<number, MeasurementRecord>(),\n  unsavedId: -1,\n  editing: false,\n  addMeasurementForm: defaultAddMeasurementForm,\n});\n\nexport const initialState = MeasurementStateRecord();\n\nexport type MeasurementState = typeof initialState;\n\nexport const model = rootKey;\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let measurement: MeasurementRecord;\n  switch (action.type) {\n    case measurementActions.FETCH_MEASUREMENT:\n      return fetch(state, model, fromJSON({ id: action.payload.measurementId }));\n\n    case measurementActions.RECEIVE_MEASUREMENT:\n      const payloadMeasurement = action.payload.measurement;\n      measurement = fromJSON({ ...payloadMeasurement });\n\n      payloadMeasurement.roof_faces.forEach((roofFace) => {\n        state = roofFaceReducer(state, roofFaceActions.Actions.receiveRoofFace(roofFace));\n      });\n\n      payloadMeasurement.wall_facades.forEach((wallFacade) => {\n        state = wallFacadeReducer(state, wallFacadeActions.Actions.receiveWallFacade(wallFacade));\n      });\n\n      payloadMeasurement.windows.forEach((window) => {\n        state = windowReducer(state, windowActions.Actions.receiveWindow(window));\n      });\n\n      payloadMeasurement.doors.forEach((door) => {\n        state = doorReducer(state, doorActions.Actions.receiveDoor(door));\n      });\n\n      payloadMeasurement.rooms.forEach((room) => {\n        state = roomReducer(state, roomActions.Actions.receiveRoom(room));\n      });\n\n      if (payloadMeasurement.elevations) {\n        payloadMeasurement.elevations.forEach((elevation) => {\n          state = elevationReducer(state, elevationActions.Actions.receiveElevation(elevation));\n        });\n      }\n\n      payloadMeasurement.decks.forEach((deck) => {\n        state = deckReducer(state, deckActions.Actions.receiveDeck(deck));\n      });\n\n      payloadMeasurement.pools.forEach((pool) => {\n        state = poolReducer(state, poolActions.Actions.receivePool(pool));\n      });\n\n      return receive(state, model, measurement);\n\n    case measurementActions.SET_MEASUREMENT_LOADED:\n      return loaded(state, model, action.payload.measurementId);\n\n    case measurementActions.UPDATE_FORM:\n      const { rootPath, name } = action.payload.event;\n      let { value } = action.payload.event;\n      const nameArray = name.split(\".\");\n      const lastName = nameArray[nameArray.length - 1];\n\n      if (typeof defaultMeasurementProps[lastName] === \"number\") {\n        value = roundToDecimals(+value || 0, -2);\n      }\n\n      state = state.setIn(rootPath.concat(name.split(\".\")), value);\n\n      if (lastName === \"roof_total_area\") {\n        state = reducer(state, measurementActions.Actions.updateRoofWaste());\n      }\n\n      if (lastName === \"siding_total_area\") {\n        state = reducer(state, measurementActions.Actions.updateSidingWaste());\n      }\n\n      if (lastName === \"roof_sloped_area\") {\n        state = reducer(state, measurementActions.Actions.updateSlopedRoofWaste());\n      }\n\n      if (lineMeasurementUpdate.includes(lastName)) {\n        state = reducer(state, measurementActions.Actions.updateLineMeasurements());\n      }\n\n      if (sunroomUpdate.includes(lastName)) {\n        state = reducer(state, measurementActions.Actions.updateSunroom());\n      }\n\n      if (sunroomKneeWallUpdate.includes(lastName)) {\n        state = reducer(state, measurementActions.Actions.updateSunroomKneeWall());\n      }\n\n      return state;\n\n    case measurementActions.UPDATE_ROOF_WASTE:\n      measurement = currentMeasurement(state, {});\n      const percents = [5, 10, 12, 15, 20];\n      percents.forEach((percent) => {\n        const key = `roof_${percent}pw_total_area` as keyof IMeasurementRecord;\n        const value = roundToDecimals(measurement.get(\"roof_total_area\") * (1 + percent / 100), -2);\n        measurement = measurement.set(key, value);\n      });\n      return state.setIn([model, \"byId\", measurement.get(\"id\")], measurement);\n\n    case measurementActions.UPDATE_SLOPED_ROOF_WASTE:\n      measurement = currentMeasurement(state, {});\n      const slopedPercents = [10];\n      slopedPercents.forEach((percent) => {\n        const key = `roof_${percent}pw_sloped_area` as keyof IMeasurementRecord;\n        const value = roundToDecimals(measurement.get(\"roof_sloped_area\") * (1 + percent / 100), -2);\n        measurement = measurement.set(key, value);\n      });\n      return state.setIn([model, \"byId\", measurement.get(\"id\")], measurement);\n\n    case measurementActions.UPDATE_LINE_MEASUREMENTS:\n      measurement = currentMeasurement(state, {});\n      measurement = measurement\n        // perimeter (rake + eave)\n        .set(\"roof_perimeter\", roundToDecimals(measurement.get(\"roof_eave\") + measurement.get(\"roof_rake\"), -2))\n        // ridge & hip (ridge + hip)\n        .set(\"roof_ridge_hip\", roundToDecimals(measurement.get(\"roof_ridge\") + measurement.get(\"roof_hip\"), -2))\n        // total flashing (step + headwall)\n        .set(\n          \"roof_total_flashing\",\n          roundToDecimals(measurement.get(\"roof_step_flashing\") + measurement.get(\"roof_headwall_flashing\"), -2),\n        )\n        // valley & eave (valley + eave)\n        .set(\"roof_valley_eave\", roundToDecimals(measurement.get(\"roof_valley\") + measurement.get(\"roof_eave\"), -2))\n        // valley, eave, rake (valley + eave + rake)\n        .set(\n          \"roof_valley_eave_rake\",\n          roundToDecimals(\n            measurement.get(\"roof_valley\") + measurement.get(\"roof_eave\") + measurement.get(\"roof_rake\"),\n            -2,\n          ),\n        );\n\n      return state.setIn([model, \"byId\", measurement.get(\"id\")], measurement);\n\n    case measurementActions.UPDATE_SIDING_WASTE:\n      measurement = currentMeasurement(state, {});\n      const sidingPercents = [5, 10, 15, 18];\n      sidingPercents.forEach((percent) => {\n        const key = `siding_${percent}pw_total_area` as keyof IMeasurementRecord;\n        const value = roundToDecimals(measurement.get(\"siding_total_area\") * (1 + percent / 100), -2);\n        measurement = measurement.set(key, value);\n      });\n      return state.setIn([model, \"byId\", measurement.get(\"id\")], measurement);\n\n    case measurementActions.UPDATE_SUNROOM:\n      measurement = currentMeasurement(state, {});\n      measurement = measurement.set(\n        \"sunroom_wall_perimeter\",\n        roundToDecimals(\n          measurement.get(\"sunroom_a_wall_length\") +\n            measurement.get(\"sunroom_b_wall_length\") +\n            measurement.get(\"sunroom_c_wall_length\"),\n          -2,\n        ),\n      );\n\n      if (measurement.get(\"sunroom_kw_a_length\") === 0) {\n        measurement = measurement.set(\"sunroom_kw_a_length\", measurement.get(\"sunroom_a_wall_length\"));\n      }\n\n      if (measurement.get(\"sunroom_kw_b_length\") === 0) {\n        measurement = measurement.set(\"sunroom_kw_b_length\", measurement.get(\"sunroom_b_wall_length\"));\n      }\n\n      if (measurement.get(\"sunroom_kw_c_length\") === 0) {\n        measurement = measurement.set(\"sunroom_kw_c_length\", measurement.get(\"sunroom_c_wall_length\"));\n      }\n\n      const maxWidth = _.max(\n        [measurement.get(\"sunroom_a_wall_length\"), measurement.get(\"sunroom_b_wall_length\")],\n        function (value: number) {\n          return value;\n        },\n      );\n\n      // Deck Total Area\n      measurement = measurement.set(\n        \"sunroom_deck_total_area\",\n        roundToDecimals(maxWidth * measurement.get(\"sunroom_c_wall_length\"), -2),\n      );\n\n      // Ceiling Area\n      measurement = measurement\n        .set(\"sunroom_ceiling_area\", roundToDecimals(measurement.get(\"sunroom_deck_total_area\") * 1.2, -2))\n        // Studio Roof Area\n        .set(\"sunroom_studio_roof_area\", roundToDecimals(measurement.get(\"sunroom_deck_total_area\") * 1.25, -2))\n        // Cathedral Roof Area\n        .set(\"sunroom_cathedral_roof_area\", roundToDecimals(measurement.get(\"sunroom_deck_total_area\") * 1.3, -2));\n\n      state = state.setIn([model, \"byId\", measurement.get(\"id\")], measurement);\n      return reducer(state, measurementActions.Actions.updateSunroomWall());\n\n    case measurementActions.UPDATE_SUNROOM_WALL:\n      measurement = currentMeasurement(state, {});\n      measurement = measurement\n        .set(\n          \"sunroom_a_wall_area\",\n          calculateArea(\n            measurement.get(\"sunroom_a_wall_height\"),\n            measurement.get(\"sunroom_a_wall_length\"),\n            getUoM(measurement)[\"sunroom_a_wall_height\"],\n          ),\n        )\n        .set(\n          \"sunroom_b_wall_area\",\n          calculateArea(\n            measurement.get(\"sunroom_b_wall_height\"),\n            measurement.get(\"sunroom_b_wall_length\"),\n            getUoM(measurement)[\"sunroom_b_wall_height\"],\n          ),\n        )\n        .set(\n          \"sunroom_c_wall_area\",\n          calculateArea(\n            measurement.get(\"sunroom_c_wall_height\"),\n            measurement.get(\"sunroom_c_wall_length\"),\n            getUoM(measurement)[\"sunroom_c_wall_height\"],\n          ),\n        );\n\n      measurement = measurement.set(\n        \"sunroom_wall_total_area\",\n        roundToDecimals(\n          measurement.get(\"sunroom_a_wall_area\") +\n            measurement.get(\"sunroom_b_wall_area\") +\n            measurement.get(\"sunroom_c_wall_area\"),\n          -2,\n        ),\n      );\n\n      return state.setIn([model, \"byId\", measurement.get(\"id\")], measurement);\n\n    case measurementActions.UPDATE_SUNROOM_KNEE_WALL:\n      measurement = currentMeasurement(state, {});\n      measurement = measurement\n        .set(\n          \"sunroom_kw_total_length\",\n          measurement.get(\"sunroom_kw_a_length\") +\n            measurement.get(\"sunroom_kw_b_length\") +\n            measurement.get(\"sunroom_kw_c_length\"),\n        )\n        .set(\n          \"sunroom_kw_a_area\",\n          calculateArea(\n            measurement.get(\"sunroom_kw_a_height\"),\n            measurement.get(\"sunroom_kw_a_length\"),\n            getUoM(measurement)[\"sunroom_kw_a_height\"],\n          ),\n        )\n        .set(\n          \"sunroom_kw_b_area\",\n          calculateArea(\n            measurement.get(\"sunroom_kw_b_height\"),\n            measurement.get(\"sunroom_kw_b_length\"),\n            getUoM(measurement)[\"sunroom_kw_b_height\"],\n          ),\n        )\n        .set(\n          \"sunroom_kw_c_area\",\n          calculateArea(\n            measurement.get(\"sunroom_kw_c_height\"),\n            measurement.get(\"sunroom_kw_c_length\"),\n            getUoM(measurement)[\"sunroom_kw_c_height\"],\n          ),\n        );\n\n      measurement = measurement.set(\n        \"sunroom_kw_total_area\",\n        roundToDecimals(\n          measurement.get(\"sunroom_kw_a_area\") +\n            measurement.get(\"sunroom_kw_b_area\") +\n            measurement.get(\"sunroom_kw_c_area\"),\n          -2,\n        ),\n      );\n      return state.setIn([model, \"byId\", measurement.get(\"id\")], measurement);\n\n    case measurementActions.UPDATE_RAPID_AREA:\n      measurement = currentMeasurement(state, {})\n        .setIn([\"geojson\", \"rapid_area\"], fromJS(action.payload.rapidArea))\n        .set(\"roof_total_area\", action.payload.rapidArea[0].properties.measurements.pitched_area);\n      state = state.setIn([model, \"byId\", measurement.get(\"id\")], measurement);\n      return reducer(state, measurementActions.Actions.updateRoofWaste());\n\n    case measurementActions.UPDATE_SATELLITE:\n      measurement = currentMeasurement(state, {})\n        .setIn([\"geojson\", \"leaflet\"], fromJS(action.payload.leaflet))\n        .setIn([\"geojson\", \"leafletZoom\"], action.payload.leafletZoom);\n      return state.setIn([model, \"byId\", measurement.get(\"id\")], measurement);\n\n    case measurementActions.UPDATE_POOLS:\n      measurement = currentMeasurement(state, {});\n      let poolIds = List();\n      action.payload.pools.forEach((pool) => {\n        if (_.isNaN(parseInt(pool.id as any))) {\n          pool.id = state.getIn([\"pools\", \"unsavedId\"]);\n          state = state.setIn([\"pools\", \"unsavedId\"], pool.id - 1);\n        }\n        poolIds = poolIds.push(pool.id);\n        state = poolReducer(state, poolActions.Actions.editPool(pool));\n      });\n      return state.setIn([model, \"byId\", measurement.get(\"id\"), \"pool_ids\"], poolIds);\n\n    case measurementActions.UPDATE_DECKS:\n      measurement = currentMeasurement(state, {});\n      let deckIds = List();\n      action.payload.decks.forEach((deck) => {\n        if (_.isNaN(parseInt(deck.id as any))) {\n          deck.id = state.getIn([\"decks\", \"unsavedId\"]);\n          state = state.setIn([\"decks\", \"unsavedId\"], deck.id - 1);\n        }\n        deckIds = deckIds.push(deck.id);\n        state = deckReducer(state, deckActions.Actions.editDeck(deck));\n      });\n      return state.setIn([model, \"byId\", measurement.get(\"id\"), \"deck_ids\"], deckIds);\n\n    case measurementActions.UPDATE_WINDOWS:\n      measurement = currentMeasurement(state, {});\n      let windowIds = List();\n      action.payload.windows.forEach((window) => {\n        if (_.isNaN(parseInt(window.id as any))) {\n          window.id = state.getIn([\"windows\", \"unsavedId\"]);\n          state = state.setIn([\"windows\", \"unsavedId\"], window.id - 1);\n        }\n        windowIds = windowIds.push(window.id);\n        state = windowReducer(state, windowActions.Actions.editWindow(window));\n      });\n      return state.setIn([model, \"byId\", measurement.get(\"id\"), \"window_ids\"], windowIds);\n\n    case measurementActions.UPDATE_DOORS:\n      measurement = currentMeasurement(state, {});\n      let doorIds = List();\n      action.payload.doors.forEach((door) => {\n        if (_.isNaN(parseInt(door.id as any))) {\n          door.id = state.getIn([\"doors\", \"unsavedId\"]);\n          state = state.setIn([\"doors\", \"unsavedId\"], door.id - 1);\n        }\n        doorIds = doorIds.push(door.id);\n        state = doorReducer(state, doorActions.Actions.editDoor(door));\n      });\n      return state.setIn([model, \"byId\", measurement.get(\"id\"), \"door_ids\"], doorIds);\n\n    case measurementActions.UPDATE_ELEVATIONS:\n      measurement = currentMeasurement(state, {});\n      let elevationIds = List();\n      action.payload.elevations.forEach((elevation) => {\n        elevationIds = elevationIds.push(elevation.id);\n        const newElevation = unWindAngular(elevation as unknown as IElevation);\n        state = elevationReducer(state, elevationActions.Actions.receiveElevation(newElevation));\n      });\n      return state\n        .setIn([model, \"byId\", measurement.get(\"id\"), \"elevation_ids\"], elevationIds)\n        .setIn([model, \"lastSavedById\", measurement.get(\"id\"), \"elevation_ids\"], elevationIds);\n\n    case measurementActions.UPDATE_WALL_FACADES:\n      measurement = currentMeasurement(state, {});\n      let wallFacadeIds = List();\n      action.payload.wallFacades.forEach((wall) => {\n        if (_.isNaN(parseInt(wall.id as any))) {\n          wall.id = state.getIn([\"wallFacades\", \"unsavedId\"]);\n          state = state.setIn([\"wallFacades\", \"unsavedId\"], wall.id - 1);\n        }\n        wallFacadeIds = wallFacadeIds.push(wall.id);\n        state = wallFacadeReducer(state, wallFacadeActions.Actions.editWallFacade(wall));\n      });\n      return state.setIn([model, \"byId\", measurement.get(\"id\"), \"wall_facade_ids\"], wallFacadeIds);\n    case measurementActions.UPDATE_ROOMS:\n      measurement = currentMeasurement(state, {});\n      let roomIds = List();\n      action.payload.rooms.forEach((room) => {\n        if (_.isNaN(parseInt(room.id as any))) {\n          room.id = state.getIn([\"rooms\", \"unsavedId\"]);\n          state = state.setIn([\"rooms\", \"unsavedId\"], room.id - 1);\n        }\n        roomIds = roomIds.push(room.id);\n        state = roomReducer(state, roomActions.Actions.editRoom(room));\n      });\n      return state.setIn([model, \"byId\", measurement.get(\"id\"), \"room_ids\"], roomIds);\n\n    case measurementActions.RESET_MEASUREMENT:\n      measurement = currentMeasurement(state, {});\n      return reset(state, model, measurement.id);\n\n    case measurementActions.SET_EDITING:\n      return state.setIn([model, \"editing\"], action.payload.value);\n\n    case measurementActions.INIT_ADD_MEASUREMENT:\n      return state.setIn([model, \"addMeasurementForm\"], defaultAddMeasurementForm);\n\n    case measurementActions.UPDATE_ADD_MEASUREMENT:\n      const { rootPath: rootPathAdd, name: nameAdd } = action.payload.event;\n      let { value: valueAdd } = action.payload.event;\n\n      if ([\"width\", \"height\"].includes(nameAdd)) {\n        valueAdd = roundToDecimals(+valueAdd || 0, -2);\n      }\n\n      if ([\"quantity\"].includes(nameAdd)) {\n        valueAdd = roundToDecimals(+valueAdd || 0, 0);\n      }\n\n      state = state.setIn(rootPathAdd.concat(nameAdd.split(\".\")), valueAdd);\n\n      let measurementForm = addMeasurementForm(state);\n\n      if ([\"width\", \"height\"].includes(nameAdd)) {\n        const width = measurementForm.get(\"width\");\n        const height = measurementForm.get(\"height\");\n        measurementForm = measurementForm\n          .set(\"area\", calculateOpeningArea(width, height))\n          .set(\"ui\", calculateOpeningUI(width, height));\n      }\n\n      return state.setIn([model, \"addMeasurementForm\"], measurementForm);\n\n    case measurementActions.SAVE_ADD_MEASUREMENT:\n      const form = addMeasurementForm(state).toJS();\n      const forms = [];\n      for (let i = 0; i < form.quantity; i++) {\n        let name = form.name;\n        if (form.quantity > 1) {\n          name = `${form.name}-${i + 1}`;\n        }\n        forms.push({ ...form, name });\n      }\n      switch (form.kind) {\n        case \"windows\":\n          return reducer(state, measurementActions.Actions.updateWindows(forms));\n        case \"doors\":\n          return reducer(state, measurementActions.Actions.updateDoors(forms));\n        case \"rooms\":\n          return reducer(state, measurementActions.Actions.updateRooms(forms));\n      }\n\n      return state;\n\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (locationData: Partial<ILocationData>): LocationRecord => {\n  const recordData: ILocationRecord = { ...(locationData as any) };\n\n  return new LocationRecord(recordData);\n};\n\nexport interface ILocationData {\n  pathname: string;\n  search: string;\n  hash: string;\n  key: string;\n  query: any;\n}\n\nexport interface ILocationRecord {\n  pathname: string;\n  search: string;\n  hash: string;\n  key: string;\n  query: any;\n}\n\nexport const defaultLocationProps = {\n  pathname: \"\",\n  search: \"\",\n  hash: \"\",\n  key: \"\",\n  query: {},\n};\n\nexport class LocationRecord extends Record<ILocationRecord>(defaultLocationProps) implements ILocationRecord {}\n","import * as routerActions from \"./router.actions\";\nimport { Record } from \"immutable\";\nimport { fromJSON as locationFromJSON } from \"app2/src/records/Location\";\nimport { RootActions, RootState } from \".\";\n\nexport const RouterStateRecord = Record({\n  location: locationFromJSON({}),\n  action: \"\",\n});\n\nexport const initialState = RouterStateRecord();\n\nexport type RouterState = typeof initialState;\n\nconst model = \"routerPush\";\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case routerActions.LOCATION_CHANGE:\n      return state\n        .setIn([model, \"location\"], locationFromJSON(action.payload.location))\n        .setIn([model, \"action\"], action.payload.action);\n\n    default:\n      return state;\n  }\n};\n","import { FileType } from \"app2/src/components/Folders\";\nimport { Map, Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IFolderData>): FolderRecord => {\n  const recordData: IFolderRecord = { ...(json as any) };\n\n  if (json.createParams) {\n    recordData.createParams = new FolderCreateRecord(json.createParams);\n  }\n\n  return new FolderRecord(recordData);\n};\n\nexport interface IFolderCreateRecord {\n  folderable_id: number;\n  folderable_type: string;\n  parent_name: string;\n}\n\nconst defaultFolderCreateRecord: IFolderCreateRecord = {\n  folderable_id: 0,\n  folderable_type: \"\",\n  parent_name: \"\",\n};\n\nexport type RootFolderNames = \"Presentations\";\nexport const RootFolderNamesMap = Map<FileType, RootFolderNames>({\n  presentations: \"Presentations\",\n});\n\nexport class FolderCreateRecord extends Record(defaultFolderCreateRecord) implements IFolderCreateRecord {}\n\nexport interface IFolderData {\n  id: number;\n  name: string;\n  sort_order: number;\n  folderable_id: number;\n  folderable_type: string;\n  parent_id: number;\n  loading?: boolean;\n  archived?: boolean;\n  createParams?: IFolderCreateRecord;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IFolderRecord {\n  id: number;\n  name: string;\n  sort_order: number;\n  folderable_id: number;\n  folderable_type: string;\n  parent_id: number;\n  loading: boolean;\n  archived: boolean;\n  createParams: FolderCreateRecord;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nconst defaultFolderProps: IFolderRecord = {\n  id: 0,\n  name: \"\",\n  sort_order: null,\n  folderable_id: 0,\n  folderable_type: \"\",\n  parent_id: 0,\n  loading: true,\n  archived: false,\n  createParams: new FolderCreateRecord({}),\n\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class FolderRecord extends Record(defaultFolderProps) implements IFolderRecord {}\n","import * as folderActions from \"./folder.actions\";\nimport { FolderRecord, fromJSON, IFolderData } from \"app2/src/records/Folder\";\nimport { Map, Record } from \"immutable\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { reducer as paginationReducer } from \"app2/src/reducers/pagination.reducer\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { fetch, receive, reset, loaded } from \"app2/src/reducers/Reducer\";\n\nexport const FolderStateRecord = Record({\n  byId: Map<number, FolderRecord>(),\n  lastSavedById: Map<number, FolderRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = FolderStateRecord();\nexport type FolderState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"folders\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case folderActions.FETCH_FOLDER:\n      return fetch(state, model, fromJSON({ id: action.payload.id }));\n\n    case folderActions.RECEIVE_FOLDER:\n      const folder = fromJSON({ ...action.payload.folder, loading: false });\n      return receive(state, model, folder);\n\n    case folderActions.RESET_FOLDER:\n      return reset(state, model, action.payload.id);\n\n    case folderActions.CREATE_FOLDER:\n      const unsavedId = state.getIn([model, \"unsavedId\"]);\n      state = reducer(\n        state,\n        folderActions.Actions.receiveFolder({\n          id: unsavedId,\n          parent_id: action.payload.folderParentId,\n          createParams: action.payload.createParams,\n        } as IFolderData),\n      );\n      state = paginationReducer(state, paginationActions.Actions.pushId(unsavedId, \"folder\"));\n\n      return state.setIn([model, \"unsavedId\"], unsavedId - 1);\n\n    case folderActions.EDIT_NAME:\n      return state.setIn([model, \"byId\", action.payload.folderId, \"name\"], action.payload.name);\n\n    case folderActions.EDIT_SORT_ORDER:\n      return state.setIn([model, \"byId\", action.payload.folderId, \"sort_order\"], action.payload.sortOrder);\n\n    case folderActions.SET_FOLDER_LOADED:\n      return loaded(state, model, action.payload.id);\n\n    case folderActions.ARCHIVE_FOLDER:\n      state = paginationReducer(state, paginationActions.Actions.removeId(action.payload.id, \"folder\"));\n\n      return state.setIn([model, \"byId\", action.payload.id, \"archived\"], true);\n\n    case folderActions.RECEIVE_FOLDERS:\n      action.payload.folders.forEach((folder) => {\n        state = reducer(state, folderActions.Actions.receiveFolder(folder));\n      });\n      return state;\n\n    default:\n      return state;\n  }\n};\n","import * as segmentActions from \"./segment.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { FenceSegmentRecord, fromJSON } from \"app2/src/records/measurements/Segment\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { rootKey } from \"app2/src/selectors/measurements/segment.selectors\";\nimport { rootKey as fenceRootKey } from \"app2/src/selectors/measurements/fence.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const SegmentStateRecord = Record({\n  byId: Map<number, FenceSegmentRecord>(),\n  lastSavedById: Map<number, FenceSegmentRecord>(),\n  byMeasurementId: Map<number, number>(),\n  unsavedId: -1,\n});\n\nexport const initialState = SegmentStateRecord();\n\nexport type SegmentState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(rootKey)) {\n    state = state.set(rootKey, initialState);\n  }\n\n  let segment: FenceSegmentRecord;\n\n  switch (action.type) {\n    case segmentActions.SET_GATE_COUNT:\n      return state.setIn([rootKey, \"byId\", action.payload.segmentId, \"gateCount\"], action.payload.gateCount);\n\n    case segmentActions.SET_GATE_LENGTH:\n      return state.updateIn([rootKey, \"byId\", action.payload.segmentId], (segment: FenceSegmentRecord) => {\n        const newLength = segment.length - action.payload.gateLength;\n        return segment.merge({\n          gateLength: action.payload.gateLength,\n          netLength: newLength,\n          linePosts4: Math.ceil(newLength / 4) - 1,\n          linePosts6: Math.ceil(newLength / 6) - 1,\n          linePosts8: Math.ceil(newLength / 8) - 1,\n        });\n      });\n\n    case segmentActions.RESET_SEGMENT:\n      return state.setIn(\n        [rootKey, \"byId\", action.payload.segmentId],\n        state.getIn([rootKey, \"lastSavedById\", action.payload.segmentId]),\n      );\n\n    case segmentActions.SET_SEGMENT:\n      segment = action.payload.segment;\n\n      if (isNullOrUndefined(segment.id) || segment.id === 0) {\n        segment = segment.set(\"id\", state.getIn([rootKey, \"unsavedId\"]));\n\n        state = state.setIn([rootKey, \"unsavedId\"], segment.id - 1);\n      }\n\n      if (segment.fenceId && segment.fenceId !== 0) {\n        state = state.updateIn([fenceRootKey, \"byId\", segment.fenceId, \"segmentIds\"], (segments: List<number>) => {\n          if (!segments.contains(segment.id)) {\n            segments = segments.push(segment.id);\n          }\n          return segments;\n        });\n      }\n\n      return state.setIn([rootKey, \"byId\", segment.id], segment);\n\n    case segmentActions.DELETE_SEGMENT:\n      return state.deleteIn([rootKey, \"byId\", action.payload.segmentId]);\n\n    case segmentActions.RECEIVE_SEGMENT:\n      segment = fromJSON({ ...action.payload.segment });\n\n      if (isNullOrUndefined(segment.id) || segment.id === 0) {\n        segment = segment.set(\"id\", state.getIn([rootKey, \"unsavedId\"]));\n\n        state = state.setIn([rootKey, \"unsavedId\"], segment.id - 1);\n      }\n\n      if (segment.fenceId && segment.fenceId !== 0) {\n        state = state.updateIn([fenceRootKey, \"byId\", segment.fenceId, \"segmentIds\"], (segments: List<number>) => {\n          if (!segments.contains(segment.id)) {\n            segments = segments.push(segment.id);\n          }\n          return segments;\n        });\n      }\n\n      return state.setIn([rootKey, \"byId\", segment.id], segment).setIn([rootKey, \"lastSavedById\", segment.id], segment);\n\n    default:\n      return state;\n  }\n};\n","import * as fenceActions from \"./fence.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { FenceRecord, fromJSON } from \"app2/src/records/measurements/Fence\";\nimport { FenceSegmentRecord } from \"app2/src/records/measurements/Segment\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport * as segmentActions from \"./segment.actions\";\nimport { reducer as segmentReducer } from \"./segment.reducer\";\nimport { rootKey, fenceSegments, fenceSegmentIds } from \"app2/src/selectors/measurements/fence.selectors\";\nimport { rootKey as fencingRootKey } from \"app2/src/selectors/measurements/fencing.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const FenceStateRecord = Record({\n  byId: Map<number, FenceRecord>(),\n  lastSavedById: Map<number, FenceRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = FenceStateRecord();\n\nexport type FenceState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(rootKey)) {\n    state = state.set(rootKey, initialState);\n  }\n\n  let fenceRecord;\n  switch (action.type) {\n    case fenceActions.UPDATE_TOTALS:\n      let fenceLinePost4 = 0,\n        fenceLinePost6 = 0,\n        fenceLinePost8 = 0,\n        fenceGateCount = 0,\n        fenceGateLength = 0,\n        fenceTotalLength = 0,\n        fenceNetLength = 0;\n\n      fenceSegments(state, action.payload)\n        .filter((s) => !s._destroy)\n        .forEach((segment: FenceSegmentRecord) => {\n          fenceLinePost4 += segment.linePosts4;\n          fenceLinePost6 += segment.linePosts6;\n          fenceLinePost8 += segment.linePosts8;\n          fenceGateCount += segment.gateCount;\n          fenceNetLength += segment.netLength;\n          fenceGateLength += segment.gateLength;\n          fenceTotalLength += segment.length;\n        });\n\n      return state.updateIn([rootKey, \"byId\", action.payload.fenceId], (fence: FenceRecord) => {\n        return fence.merge({\n          linePosts4: fenceLinePost4,\n          linePosts6: fenceLinePost6,\n          linePosts8: fenceLinePost8,\n          gateCount: fenceGateCount,\n          gateLength: fenceGateLength,\n          totalLength: fenceTotalLength,\n          netLength: fenceNetLength,\n        });\n      });\n\n    case fenceActions.RECEIVE_FENCE:\n      const { segments, ...fenceData } = action.payload.fence;\n\n      if (isNullOrUndefined(fenceData.id) || fenceData.id === 0) {\n        fenceData.id = state.getIn([rootKey, \"unsavedId\"]);\n        state = state.setIn([rootKey, \"unsavedId\"], fenceData.id - 1);\n      }\n\n      fenceRecord = fromJSON({ ...fenceData });\n\n      state = state.setIn([rootKey, \"byId\", fenceRecord.id], fenceRecord);\n\n      if (Array.isArray(segments)) {\n        state = segments.reduce((state, segment) => {\n          segment.fence_id = fenceRecord.id;\n          return segmentReducer(state, segmentActions.Actions.receiveSegment(segment));\n        }, state);\n      }\n\n      if (fenceRecord.fencingId && fenceRecord.fencingId !== 0) {\n        state = state.updateIn(\n          [fencingRootKey, \"byId\", fenceRecord.fencingId, \"fenceIds\"],\n          (fenceIds: List<number>) => {\n            if (!fenceIds.contains(fenceRecord.id)) {\n              fenceIds = fenceIds.push(fenceRecord.id);\n            }\n            return fenceIds;\n          },\n        );\n      }\n\n      return state.setIn([rootKey, \"lastSavedById\", fenceRecord.id], state.getIn([rootKey, \"byId\", fenceRecord.id]));\n\n    case fenceActions.RESET_FENCE:\n      const segmentIds: List<number> = fenceSegmentIds(state, { fenceId: action.payload.fenceId });\n      state = state.setIn(\n        [rootKey, \"byId\", action.payload.fenceId],\n        state.getIn([rootKey, \"lastSavedById\", action.payload.fenceId]),\n      );\n\n      return segmentIds\n        .toSet()\n        .union(fenceSegmentIds(state, { fenceId: action.payload.fenceId }))\n        .reduce(\n          (state: RootState, id: number) => segmentReducer(state, segmentActions.Actions.resetSegment(id)),\n          state,\n        );\n\n    case fenceActions.SET_FENCE:\n      fenceRecord = action.payload.fence;\n\n      if (isNullOrUndefined(fenceRecord.id) || fenceRecord.id === 0) {\n        fenceRecord = fenceRecord.set(\"id\", state.getIn([rootKey, \"unsavedId\"]));\n        state = state.setIn([rootKey, \"unsavedId\"], fenceRecord.id - 1);\n      }\n\n      state = state.setIn([rootKey, \"byId\", fenceRecord.id], fenceRecord);\n\n      state = fenceRecord.segments.reduce((state, segment) => {\n        return segmentReducer(state, segmentActions.Actions.setSegment(segment.set(\"fenceId\", fenceRecord.id)));\n      }, state);\n\n      if (fenceRecord.fencingId && fenceRecord.fencingId !== 0) {\n        state = state.updateIn(\n          [fencingRootKey, \"byId\", fenceRecord.fencingId, \"fenceIds\"],\n          (fenceIds: List<number>) => {\n            if (!fenceIds.contains(fenceRecord.id)) {\n              fenceIds = fenceIds.push(fenceRecord.id);\n            }\n            return fenceIds;\n          },\n        );\n      }\n\n      return state.setIn([rootKey, \"byId\", fenceRecord.id, \"segments\"], List());\n\n    case fenceActions.DELETE_FENCE:\n      if (action.payload.cascade) {\n        const segmentIds: List<number> = state.getIn([rootKey, \"byId\", action.payload.fenceId, \"segmentIds\"]);\n\n        state = segmentIds.reduce((prevState, segmentId) => {\n          return segmentReducer(prevState, segmentActions.Actions.deleteSegment(segmentId));\n        }, state);\n      }\n\n      return state.deleteIn([rootKey, \"byId\", action.payload.fenceId]);\n\n    default:\n      return state;\n  }\n};\n","import * as fencingActions from \"./fencing.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { FencingRecord, fromJSON } from \"app2/src/records/measurements/Fencing\";\nimport { FenceRecord } from \"app2/src/records/measurements/Fence\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport * as fenceActions from \"./fence.actions\";\nimport { reducer as fenceReducer } from \"./fence.reducer\";\nimport { rootKey, fencingFences, fencingFenceIds } from \"app2/src/selectors/measurements/fencing.selectors\";\n\nexport const FencingStateRecord = Record({\n  byId: Map<number, FencingRecord>(),\n  lastSavedById: Map<number, FencingRecord>(),\n  byMeasurementId: Map<number, number>(),\n  errorsByMeasurementId: Map<number, List<string>>(),\n  unsavedId: -1,\n});\n\nexport const initialState = FencingStateRecord();\n\nexport type FencingState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(rootKey)) {\n    state = state.set(rootKey, initialState);\n  }\n\n  let fencingRecord: FencingRecord;\n\n  switch (action.type) {\n    case fencingActions.UPDATE_TOTALS:\n      let fenceLinePost4 = 0,\n        fenceLinePost6 = 0,\n        fenceLinePost8 = 0,\n        fenceGateCount = 0,\n        fenceGateLength = 0,\n        fenceTotalLength = 0,\n        fenceNetLength = 0;\n\n      fencingFences(state, action.payload)\n        .filter((f) => !f._destroy)\n        .forEach((fence: FenceRecord) => {\n          fenceLinePost4 += fence.linePosts4;\n          fenceLinePost6 += fence.linePosts6;\n          fenceLinePost8 += fence.linePosts8;\n          fenceGateCount += fence.gateCount;\n          fenceGateLength += fence.gateLength;\n          fenceTotalLength += fence.totalLength;\n          fenceNetLength += fence.netLength;\n        });\n\n      state = state.updateIn([rootKey, \"byId\", action.payload.fencingId], (fencing: FencingRecord) => {\n        return fencing.merge({\n          linePosts4: fenceLinePost4,\n          linePosts6: fenceLinePost6,\n          linePosts8: fenceLinePost8,\n          gateCount: fenceGateCount,\n          gateLength: fenceGateLength,\n          netLength: fenceNetLength,\n          totalLength: fenceTotalLength,\n        });\n      });\n      return state;\n\n    case fencingActions.CREATE_FENCING_BY_MEASUREMENT_ID:\n      const newId = state.getIn([rootKey, \"unsavedId\"]);\n      const newFencing = fromJSON({\n        id: newId,\n        measurement_id: action.payload.measurementId,\n      });\n\n      return state\n        .setIn([rootKey, \"byId\", newId], newFencing)\n        .setIn([rootKey, \"lastSavedById\", newId], newFencing)\n        .setIn([rootKey, \"byMeasurementId\", action.payload.measurementId], newId)\n        .setIn([rootKey, \"unsavedId\"], newId - 1);\n\n    case fencingActions.FETCH_FENCING_BY_MEASUREMENT_ID:\n      return state\n        .deleteIn([rootKey, \"errorsByMeasurementId\", action.payload.measurementId])\n        .deleteIn([rootKey, \"byMeasurementId\", action.payload.measurementId]);\n\n    case fencingActions.RECEIVE_FENCING_ERRORS:\n      return state.setIn([rootKey, \"errorsByMeasurementId\", action.payload.measurementId], List(action.payload.errors));\n\n    case fencingActions.RECEIVE_FENCING:\n      const { fences, ...fencing } = action.payload.fencing;\n      if (!fencing.id || fencing.id === 0) {\n        fencing.id = state.getIn([rootKey, \"unsavedId\"]);\n        state = state.setIn([rootKey, \"unsavedId\"], fencing.id - 1);\n      }\n\n      fencingRecord = fromJSON(fencing);\n      state = state\n        .setIn([rootKey, \"byId\", fencingRecord.id], fencingRecord)\n        .setIn([rootKey, \"byMeasurementId\", fencingRecord.measurementId], fencingRecord.id);\n\n      if (Array.isArray(fences)) {\n        state = fences.reduce((state, fence) => {\n          fence.fencing_id = fencingRecord.id;\n          return fenceReducer(state, fenceActions.Actions.receiveFence(fence));\n        }, state);\n      }\n\n      return state.setIn(\n        [rootKey, \"lastSavedById\", fencingRecord.id],\n        state.getIn([rootKey, \"byId\", fencingRecord.id]),\n      );\n\n    case fencingActions.SET_FENCING:\n      fencingRecord = action.payload.fencing;\n\n      state = state.setIn([rootKey, \"byId\", fencingRecord.id], fencingRecord);\n\n      state = fencingRecord.fences.reduce((state, fence) => {\n        return fenceReducer(state, fenceActions.Actions.setFence(fence.set(\"fencingId\", fencingRecord.id)));\n      }, state);\n\n      return state.setIn([rootKey, \"byId\", fencingRecord.id, \"fences\"], List());\n\n    case fencingActions.RESET_FENCING:\n      const fenceIds = fencingFenceIds(state, { fencingId: action.payload.fencingId });\n\n      state = state.setIn(\n        [rootKey, \"byId\", action.payload.fencingId],\n        state.getIn([rootKey, \"lastSavedById\", action.payload.fencingId]),\n      );\n      return fenceIds\n        .toSet()\n        .union(fencingFenceIds(state, { fencingId: action.payload.fencingId }))\n        .reduce((state: RootState, id: number) => fenceReducer(state, fenceActions.Actions.resetFence(id)), state);\n\n    case fencingActions.DELETE_FENCING:\n      if (action.payload.cascade) {\n        const fenceIds: List<number> = state.getIn([rootKey, \"byId\", action.payload.fencingId, \"fenceIds\"]);\n\n        state = fenceIds.reduce((prevState, fenceId) => {\n          return fenceReducer(prevState, fenceActions.Actions.deleteFence(fenceId, true));\n        }, state);\n      }\n\n      return state.deleteIn([rootKey, \"byId\", action.payload.fencingId]);\n\n    default:\n      return state;\n  }\n};\n","import { SnakeToCamelKeys } from \"app2/src/helpers/Format\";\nimport { Record } from \"immutable\";\n\nexport const fromJSON = (data: Partial<ILineItemOrderData>): LineItemOrderRecord => {\n  const record: ILineItemOrderRecord = SnakeToCamelKeys(data);\n\n  return new LineItemOrderRecord(record);\n};\n\nexport interface ILineItemOrderData {\n  type: string;\n  order: string;\n}\n\nexport interface ILineItemOrderRecord {\n  type: string;\n  order: string;\n}\n\nconst defaultLineItemOrderProps: ILineItemOrderRecord = {\n  type: \"\",\n  order: \"\",\n};\n\nexport class LineItemOrderRecord extends Record(defaultLineItemOrderProps) implements ILineItemOrderRecord {}\n","import { ICustomProduct } from \"app/src/Models/Product\";\nimport { SnakeToCamelKeys } from \"app2/src/helpers/Format\";\nimport { Record, List } from \"immutable\";\n\nexport const fromJSON = (data: Partial<ICustomProduct>): CustomProductRecord => {\n  const record: Partial<ICustomProductRecord> = SnakeToCamelKeys(data);\n\n  if (data.image_ids) {\n    record.imageIds = List(data.image_ids);\n  }\n\n  if (data.document_ids) {\n    record.documentIds = List(data.document_ids);\n  }\n\n  return new CustomProductRecord(record);\n};\n\nexport interface ICustomProductData {\n  name: string;\n  uuid?: string;\n  description: string;\n  sort_order?: number;\n  price: number;\n  product_price: number;\n  labor_price: number;\n  included?: boolean;\n  quantity: number;\n  uom: string;\n  image_ids?: number[];\n  document_ids?: number[];\n  images?: any[];\n  documents?: any[];\n  visibility?: string;\n}\n\nexport interface ICustomProductRecord {\n  name: string;\n  uuid: string;\n  description: string;\n  sortOrder: number;\n  price: number;\n  productPrice: number;\n  laborPrice: number;\n  included: boolean;\n  quantity: number;\n  uom: string;\n  imageIds: List<number>;\n  documentIds: List<number>;\n  visibility: string;\n}\n\nconst defaultTemplateProps: ICustomProductRecord = {\n  name: \"\",\n  uuid: \"\",\n  description: \"\",\n  sortOrder: 0,\n  price: 0,\n  productPrice: 0,\n  laborPrice: 0,\n  included: false,\n  quantity: 0,\n  uom: \"\",\n  imageIds: List(),\n  documentIds: List(),\n  visibility: \"always\",\n};\n\nexport class CustomProductRecord extends Record(defaultTemplateProps) implements ICustomProductRecord {}\n","import { SnakeToCamelKeys } from \"app2/src/helpers/Format\";\nimport { Nullable } from \"app2/src/records\";\nimport {\n  ILineItemOrderData,\n  ILineItemOrderRecord,\n  fromJSON as lineItemOrderFromJSON,\n} from \"app2/src/records/LineItemOrder\";\nimport {\n  ICustomProductData,\n  CustomProductRecord,\n  fromJSON as customProductFromJSON,\n} from \"app2/src/records/CustomProduct\";\nimport { Record, List, Map } from \"immutable\";\n\nexport const fromJSON = (data: Partial<IEstimateTemplateGroupData>): EstimateTemplateGroupRecord => {\n  const record: IEstimateTemplateGroupRecord = SnakeToCamelKeys(data);\n\n  if (data.items) {\n    record.items = List(data.items);\n  }\n\n  if (data.line_item_order) {\n    record.lineItemOrder = List(data.line_item_order.map((group) => lineItemOrderFromJSON(group)));\n  }\n\n  if (record.itemUuids) {\n    record.itemUuids = Map(data.item_uuids);\n    record.itemUuids.map((value, key) => {\n      record.itemUuids = record.itemUuids.set(key, List(value));\n    });\n  }\n\n  if (record.customProducts) {\n    record.customProducts = List(data.custom_products).map((product) => customProductFromJSON(product));\n  }\n\n  return new EstimateTemplateGroupRecord(record);\n};\n\nexport interface IEstimateTemplateGroupData {\n  name: string;\n  included: boolean;\n  sort_order: number;\n  items: string[];\n  item_uuids: {};\n  line_item_order: ILineItemOrderData[];\n  custom_products: ICustomProductData[];\n}\n\nexport interface IEstimateTemplateGroupRecord {\n  name: string;\n  included: boolean;\n  sortOrder: Nullable<number>;\n  items: List<string>;\n  itemUuids: Map<string, List<string>>;\n  lineItemOrder: List<ILineItemOrderRecord>;\n  customProducts: List<CustomProductRecord>;\n}\n\nconst defaultEstimateTemplateGroupProps: IEstimateTemplateGroupRecord = {\n  name: \"\",\n  included: false,\n  sortOrder: null,\n  items: List(),\n  itemUuids: Map(),\n  lineItemOrder: List(),\n  customProducts: List(),\n};\n\nexport class EstimateTemplateGroupRecord\n  extends Record(defaultEstimateTemplateGroupProps)\n  implements IEstimateTemplateGroupRecord {}\n","import { DocumentRecord, IDocumentData } from \"app2/src/records/Document\";\nimport { IImageData, ImageRecord } from \"app2/src/records/Image\";\nimport { Record, List } from \"immutable\";\nimport { SnakeToCamelKeys } from \"app2/src/helpers/Format\";\nimport { checkDate, Nullable } from \"app2/src/records\";\nimport {\n  EstimateTemplateGroupRecord,\n  IEstimateTemplateGroupData,\n  fromJSON as estimateTemplateGroupFromJSON,\n} from \"app2/src/records/EstimateTemplateGroup\";\nimport { fromJSON as imageFromJSON } from \"app2/src/records/Image\";\nimport { fromJSON as documentFromJSON } from \"app2/src/records/Document\";\n\nexport const fromJSON = (data: Partial<IEstimateTemplateData>): EstimateTemplateRecord => {\n  const record: Partial<IEstimateTemplateRecord> = SnakeToCamelKeys(data);\n\n  if (data.template) {\n    record.template = templateFromJSON(data.template);\n  }\n\n  if (data.images) {\n    record.images = List(data.images.map((image) => imageFromJSON(image)));\n  }\n\n  if (data.documents) {\n    record.documents = List(data.documents.map((doc) => documentFromJSON(doc)));\n  }\n\n  if (data.created_at) {\n    record.createdAt = checkDate(data.created_at);\n  }\n\n  if (data.updated_at) {\n    record.updatedAt = checkDate(data.updated_at);\n  }\n\n  return new EstimateTemplateRecord(record);\n};\n\nexport const templateFromJSON = (data: Partial<ITemplateData>): TemplateRecord => {\n  const record: Partial<ITemplateRecord> = SnakeToCamelKeys(data);\n\n  if (data.groups) {\n    record.groups = List(data.groups.map((group) => estimateTemplateGroupFromJSON(group)));\n  }\n\n  return new TemplateRecord(record);\n};\n\nexport interface ITemplateData {\n  groups: IEstimateTemplateGroupData[];\n}\n\nexport interface ITemplateRecord {\n  groups: List<EstimateTemplateGroupRecord>;\n}\n\nconst defaultTemplateProps: ITemplateRecord = {\n  groups: List(),\n};\n\nexport class TemplateRecord extends Record(defaultTemplateProps) implements ITemplateRecord {}\n\nexport interface IEstimateTemplateData {\n  id: number;\n  org_id: number;\n  folder_id: number;\n  name: string;\n  template: ITemplateData;\n  sort_order: number;\n  images: IImageData[];\n  documents: IDocumentData[];\n  loading?: boolean;\n  selected?: boolean;\n  kind: \"standard\" | \"interior\";\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IEstimateTemplateRecord {\n  id: number;\n  orgId: Nullable<number>;\n  folderId: Nullable<number>;\n  name: string;\n  template: TemplateRecord;\n  sortOrder: Nullable<number>;\n  images: List<ImageRecord>;\n  documents: List<DocumentRecord>;\n  loading: boolean;\n  selected: boolean;\n  kind: \"standard\" | \"interior\";\n\n  createdAt: Nullable<Date>;\n  updatedAt: Nullable<Date>;\n}\n\nconst defaultEstimateTemplateProps: IEstimateTemplateRecord = {\n  id: 0,\n  orgId: null,\n  folderId: null,\n  name: \"\",\n  template: new TemplateRecord(),\n  sortOrder: null,\n  images: List(),\n  documents: List(),\n  loading: false,\n  selected: false,\n  kind: \"standard\",\n\n  createdAt: null,\n  updatedAt: null,\n};\n\nexport class EstimateTemplateRecord extends Record(defaultEstimateTemplateProps) implements IEstimateTemplateRecord {}\n","import * as estimateTemplateActions from \"./estimateTemplate.actions\";\nimport { Map, Record } from \"immutable\";\nimport { EstimateTemplateRecord, fromJSON } from \"../records/EstimateTemplate\";\nimport { RootActions, RootState } from \".\";\nimport { reducer as paginationReducer } from \"app2/src/reducers/pagination.reducer\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { fetch, receive, reset, loaded } from \"app2/src/reducers/Reducer\";\n\nexport const EstimateTemplateStateRecord = Record({\n  byId: Map<number, EstimateTemplateRecord>(),\n  lastSavedById: Map<number, EstimateTemplateRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = EstimateTemplateStateRecord();\n\nexport type EstimateTemplateState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"estimateTemplates\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let estimateTemplate: EstimateTemplateRecord;\n  switch (action.type) {\n    // SINGLE\n    case estimateTemplateActions.FETCH_ESTIMATE_TEMPLATE:\n      return fetch(state, model, fromJSON({ id: action.payload.id }));\n\n    case estimateTemplateActions.RECEIVE_ESTIMATE_TEMPLATE:\n      estimateTemplate = fromJSON({ ...action.payload.estimateTemplate });\n      return receive(state, model, estimateTemplate);\n\n    case estimateTemplateActions.RESET_ESTIMATE_TEMPLATE:\n      return reset(state, model, action.payload.id);\n\n    case estimateTemplateActions.SET_ESTIMATE_TEMPLATE_LOADED:\n      return loaded(state, model, action.payload.id);\n\n    case estimateTemplateActions.DESTROY_ESTIMATE_TEMPLATE:\n      state = paginationReducer(state, paginationActions.Actions.removeId(action.payload.id, \"estimateTemplate\"));\n\n      return state;\n\n    case estimateTemplateActions.EDIT_ESTIMATE_TEMPLATE:\n      return state.setIn([\"estimateTemplates\", \"byId\", action.payload.id, action.payload.name], action.payload.value);\n\n    // MULTIPLE\n    case estimateTemplateActions.FETCH_ESTIMATE_TEMPLATES:\n      action.payload.ids.forEach((id) => {\n        state = reducer(state, estimateTemplateActions.Actions.fetchEstimateTemplate(id));\n      });\n      return state;\n\n    case estimateTemplateActions.RECEIVE_ESTIMATE_TEMPLATES:\n      action.payload.estimateTemplates.forEach((estimateTemplate) => {\n        state = reducer(state, estimateTemplateActions.Actions.receiveEstimateTemplate(estimateTemplate));\n      });\n      return state;\n\n    case estimateTemplateActions.SET_ESTIMATE_TEMPLATES_LOADED:\n      action.payload.ids.forEach((id) => {\n        state = reducer(state, estimateTemplateActions.Actions.setEstimateTemplateLoaded(id));\n      });\n\n      return state;\n\n    case estimateTemplateActions.BATCH_EDIT_ESTIMATE_TEMPLATE:\n      return state.updateIn([\"estimateTemplates\", \"byId\"], (byId) => {\n        action.payload.ids.forEach((id) => {\n          byId = byId.setIn([id, action.payload.name], action.payload.value);\n        });\n        return byId;\n      });\n\n    case estimateTemplateActions.BATCH_REMOVE_IDS:\n      action.payload.ids.forEach((id) => {\n        state = paginationReducer(state, paginationActions.Actions.removeId(id, \"estimateTemplate\"));\n      });\n\n      return state;\n\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<INoteData>): NoteRecord => {\n  const noteData: INoteRecord = { ...(json as any) };\n\n  return new NoteRecord(noteData);\n};\n\nexport const toJSON = (record: NoteRecord): INoteData => {\n  return record.toJS();\n};\n\nexport interface INoteData {\n  id: number;\n  note: string;\n  user: string;\n  user_id: number;\n  noteable_id: number;\n  noteable_type: string;\n  loading?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface INoteRecord {\n  id: number;\n  note: string;\n  user: string;\n  user_id: number;\n  noteable_id: number;\n  noteable_type: string;\n  loading: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultNoteProps: INoteRecord = {\n  id: 0,\n  note: \"\",\n  user: \"\",\n  user_id: 0,\n  noteable_id: 0,\n  noteable_type: \"\",\n  loading: true,\n\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class NoteRecord extends Record(defaultNoteProps) implements INoteRecord {}\n","import { RootState } from \"../reducers\";\nimport { createSelector } from \"reselect\";\nimport { NoteRecord } from \"app2/src/records/Note\";\n\nexport const rootKey = \"notes\";\n\nexport const note = (state: RootState, props: any) => state.getIn([rootKey, \"byId\", props.noteId]);\nexport const lastSavedNote = (state: RootState, props: any) => state.getIn([rootKey, \"lastSavedById\", props.noteId]);\n\nexport const noteChanged = createSelector([note, lastSavedNote], (note: NoteRecord, lastSavedNote: NoteRecord) => {\n  if (!lastSavedNote) {\n    return true;\n  }\n  if (note.equals(lastSavedNote)) {\n    return false;\n  } else {\n    return true;\n  }\n});\n","import { Record, Map } from \"immutable\";\nimport { NoteRecord, fromJSON } from \"app2/src/records/Note\";\nimport * as noteActions from \"./note.actions\";\nimport { RootState, RootActions } from \".\";\nimport { reducer as paginationReducer } from \"app2/src/reducers/pagination.reducer\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { rootKey } from \"app2/src/selectors/note.selectors\";\nimport { receive, reset } from \"app2/src/reducers/Reducer\";\nimport { getFullName } from \"app2/src/records/UserRecord\";\n\nexport const NoteStateRecord = Record({\n  byId: Map<number, NoteRecord>(),\n  lastSavedById: Map<number, NoteRecord>(),\n});\n\nexport const initialState = NoteStateRecord();\n\nexport type NoteState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(rootKey)) {\n    state = state.set(rootKey, initialState);\n  }\n\n  switch (action.type) {\n    case noteActions.RECEIVE_NOTE:\n      const note = fromJSON({ ...action.payload.note, loading: false });\n      return receive(state, rootKey, note);\n    case noteActions.RECEIVE_NOTES:\n      action.payload.notes.forEach((note) => {\n        state = reducer(state, noteActions.Actions.receiveNote(note));\n      });\n      return state;\n    case noteActions.REMOVE_NOTE:\n      state = paginationReducer(state, paginationActions.Actions.removeId(action.payload.noteId, \"note\"));\n      return state;\n    case noteActions.RESET_NOTE:\n      return reset(state, rootKey, action.payload.noteId);\n    case noteActions.EDIT_NOTE:\n      return state.setIn([rootKey, \"byId\", action.payload.noteId, \"note\"], action.payload.note);\n    case noteActions.SET_UP_NEW_NOTE:\n      const newNote = fromJSON({\n        note: \"\",\n        noteable_id: action.payload.jobId,\n        noteable_type: \"Job\",\n        user: getFullName(action.payload.user),\n        user_id: action.payload.user.id,\n      });\n      return receive(state, rootKey, newNote);\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\nimport { Nullable } from \"app2/src/records\";\nimport { IMetaPaginationData } from \"../MetaPagination\";\n\nexport const fromJSON = (json: Partial<ICrmUserData>): CrmUserRecord => {\n  return new CrmUserRecord(json);\n};\n\nexport interface ICrmUserIndexResponse {\n  crm_users: ICrmUserData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nexport interface ICrmUserResponse {\n  crm_user: ICrmUserData;\n}\n\nexport type CrmUserType =\n  | \"MsUser\"\n  | \"SfUser\"\n  | \"I360User\"\n  | \"JnUser\"\n  | \"SrUser\"\n  | \"LpUser\"\n  | \"CcUser\"\n  | \"JpUser\"\n  | \"HoverUser\"\n  | \"AlUser\"\n  | \"FmUser\";\n\nexport enum CrmUsers {\n  MsUser,\n  SfUser,\n  I360User,\n  JnUser,\n  SrUser,\n  LpUser,\n  CcUser,\n  JpUser,\n  HoverUser,\n  AlUser,\n  FmUser,\n}\n\nexport interface ICrmUserData {\n  id: number;\n  user_id: number;\n  org_id: number;\n  crm_id: string;\n  username: string;\n  email: string;\n  name: string;\n  active: boolean;\n  type: CrmUserType;\n  errors?: string[];\n  loading?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface ICrmUserRecord {\n  id: Nullable<number>;\n  user_id: Nullable<number>;\n  org_id: Nullable<number>;\n  crm_id: Nullable<string>;\n  username: Nullable<string>;\n  email: Nullable<string>;\n  name: Nullable<string>;\n  active: boolean;\n  type: Nullable<CrmUserType>;\n  loading: boolean;\n  errors: string[];\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nexport const defaultCrmUserProps = {\n  id: 0,\n  user_id: null,\n  org_id: null,\n  crm_id: null,\n  username: null,\n  email: null,\n  name: null,\n  active: false,\n  type: null,\n  loading: false,\n  errors: null,\n\n  created_at: null,\n  updated_at: null,\n};\n\nexport const IntegrationUserType = {\n  job_nimbus: \"JnUser\",\n  jobprogress: \"JpUser\",\n  companycam: \"CcUser\",\n  improveit360classic: \"I360User\",\n  improveit360lightning: \"I360LightningUser\",\n};\n\nexport class CrmUserRecord extends Record<ICrmUserRecord>(defaultCrmUserProps) implements ICrmUserRecord {}\n","import * as crmUserActions from \"./crmUser.actions\";\nimport { Record, List, Map } from \"immutable\";\nimport { CrmUserRecord, fromJSON } from \"app2/src/records/integrations/CrmUser\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { fetch, loaded, receive } from \"app2/src/reducers/Reducer\";\n\nexport const CrmUserStateRecord = Record({\n  byId: Map<number, List<typeof CrmUserRecord>>(),\n  lastSavedById: Map<number, List<typeof CrmUserRecord>>(),\n});\n\nexport const initialState = CrmUserStateRecord();\nexport type CrmUserState = typeof initialState;\n\nconst model = \"crmUsers\";\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case crmUserActions.FETCH_CRM_USER:\n      return fetch(state, model, fromJSON({ id: action.payload.id }));\n\n    case crmUserActions.RECEIVE_CRM_USER:\n      const user = fromJSON({ ...action.payload.crmUser });\n\n      return receive(state, model, user);\n\n    case crmUserActions.SET_CRM_USER_LOADED:\n      return loaded(state, model, action.payload.id);\n\n    case crmUserActions.RECEIVE_CRM_USERS:\n      action.payload.crmUsers.forEach((user) => {\n        state = reducer(state, crmUserActions.Actions.receiveCrmUser(user));\n      });\n\n      return state;\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IEventResultData>): EventResultRecord => {\n  const eventResultData: IEventResultData = { ...(json as any) };\n\n  return new EventResultRecord(eventResultData);\n};\n\nexport const toJSON = (record: EventResultRecord): IEventResultData => {\n  return record.toJS();\n};\n\nexport interface IEventResultData {\n  id: number;\n  ms_id: string;\n  description: string;\n  position: number;\n  presentation: boolean;\n  sold: boolean;\n  url: string;\n  kind: string;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IEventResultRecord {\n  id: number;\n  ms_id: string;\n  description: string;\n  position: number;\n  presentation: boolean;\n  sold: boolean;\n  url: string;\n  kind: string;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultEventResultProps: IEventResultRecord = {\n  id: 0,\n  ms_id: \"\",\n  description: \"\",\n  position: 0,\n  presentation: false,\n  sold: false,\n  url: \"\",\n  kind: \"default\",\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class EventResultRecord extends Record(defaultEventResultProps) implements IEventResultRecord {}\n","import { Record, Map, List } from \"immutable\";\nimport * as eventResultActions from \"./eventResult.actions\";\nimport { EventResultRecord, fromJSON } from \"../records/EventResult\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\n\nexport const EventResultStateRecord = Record({\n  byId: Map<number, EventResultRecord>(),\n  byOrgId: Map<number, List<number>>(),\n});\n\nexport const initialState = EventResultStateRecord();\nexport type EventResultState = typeof initialState;\n\nexport const model = \"eventResults\";\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  switch (action.type) {\n    case eventResultActions.RECEIVE_EVENT_RESULT:\n      const result = fromJSON(action.payload.result);\n      return state.setIn([model, \"byId\", result.id], result);\n    case eventResultActions.RECEIVE_EVENT_RESULTS:\n      const byOrgId = [];\n      action.payload.results.forEach((result) => {\n        state = reducer(state, eventResultActions.Actions.receiveEventResult(action.payload.orgId, result));\n        byOrgId.push(result.id);\n      });\n\n      return state.setIn([model, \"byOrgId\", action.payload.orgId], List(byOrgId));\n\n    default:\n      return state;\n  }\n};\n","import { Nullable } from \"app2/src/records\";\nimport { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IEventResultReasonData>): EventResultReasonRecord => {\n  const eventResultData: IEventResultReasonData = { ...(json as any) };\n\n  return new EventResultReasonRecord(eventResultData);\n};\n\nexport interface IEventResultReasonData {\n  description: string;\n  id: number;\n  ms_id: string;\n  org_id: number;\n  position: number;\n  kind: string;\n  events_result_id: Nullable<number>;\n}\n\nexport interface IEventResultReasonRecord {\n  description: string;\n  id: number;\n  ms_id: string;\n  org_id: number;\n  position: number;\n  kind: string;\n  events_result_id: number;\n}\n\nexport const defaultEventResultReasonProps: IEventResultReasonData = {\n  description: \"\",\n  id: 0,\n  ms_id: \"\",\n  org_id: 0,\n  position: 0,\n  kind: \"default\",\n  events_result_id: 0,\n};\n\nexport class EventResultReasonRecord extends Record(defaultEventResultReasonProps) implements IEventResultReasonData {}\n","import { Record, Map, List } from \"immutable\";\nimport * as eventResultReasonActions from \"./eventResultReason.actions\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { EventResultReasonRecord, fromJSON } from \"../records/EventResultReason\";\n\nexport const eventResultReasonStateRecord = Record({\n  byId: Map<number, EventResultReasonRecord>(),\n  byOrgId: Map<number, List<number>>(),\n});\n\nexport const initialState = eventResultReasonStateRecord();\nexport type eventResultReasonState = typeof initialState;\n\nexport const model = \"eventResultReasons\";\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  switch (action.type) {\n    case eventResultReasonActions.RECEIVE_EVENT_RESULT_REASON:\n      const reason = fromJSON(action.payload.reason);\n      return state.setIn([model, \"byId\", reason.id], reason);\n\n    case eventResultReasonActions.RECEIVE_EVENT_RESULT_REASONS:\n      const reasonsByOrgId = [];\n      action.payload.reasons.forEach((reason) => {\n        state = reducer(state, eventResultReasonActions.Actions.receiveEventResultReason(action.payload.orgId, reason));\n        reasonsByOrgId.push(reason.id);\n      });\n\n      return state.setIn([model, \"byOrgId\", action.payload.orgId], List(reasonsByOrgId));\n\n    default:\n      return state;\n  }\n};\n","import { Nullable, checkDate } from \"app2/src/records\";\nimport { Record } from \"immutable\";\nimport * as moment from \"moment\";\n\nexport const fromJSON = (json: Partial<IFinanceApplicationData>): FinanceApplicationRecord => {\n  const recordData: IFinanceApplicationRecord = { ...(json as any) };\n\n  if (recordData.valid_until) {\n    recordData.valid_until = checkDate(recordData.valid_until);\n  }\n\n  return new FinanceApplicationRecord(recordData);\n};\n\nexport interface IFinanceApplicationData {\n  id: number;\n  estimate_id: number;\n  loan_id: string;\n  redirect_url: string;\n  loan_status: string;\n  offer_status: string;\n  offer_code: string;\n  loading?: boolean;\n  details_url: string;\n  valid_until: string;\n  max_approved_amount: number;\n  apply_url?: string;\n\n  created_at: Date | string;\n  updated_at: Date | string;\n}\n\nexport interface IFinanceApplicationRecord {\n  id: number;\n  estimate_id: Nullable<number>;\n  loan_id: Nullable<string>;\n  redirect_url: string;\n  loan_status: string;\n  offer_status: string;\n  offer_code: string;\n  verify_check: boolean;\n  details_url: string;\n  valid_until: Date;\n  max_approved_amount: number;\n  apply_url: Nullable<string>;\n  loading: boolean;\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nconst defaultFinanceApplicationProps: IFinanceApplicationRecord = {\n  id: 0,\n  estimate_id: null,\n  loan_id: null,\n  redirect_url: \"\",\n  loan_status: \"\",\n  offer_status: \"\",\n  offer_code: \"\",\n  verify_check: false,\n  details_url: \"\",\n  max_approved_amount: 0,\n  valid_until: moment().add(30, \"days\").toDate(),\n  apply_url: null,\n  loading: false,\n\n  created_at: null,\n  updated_at: null,\n};\n\nexport class FinanceApplicationRecord\n  extends Record(defaultFinanceApplicationProps)\n  implements IFinanceApplicationRecord {}\n","import * as financeApplicationActions from \"./financeApplication.actions\";\nimport { FinanceApplicationRecord, fromJSON } from \"app2/src/records/FinanceApplication\";\nimport { Map, Record } from \"immutable\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\n\nexport const FinanceApplicationStateRecord = Record({\n  byEstimateId: Map<number, FinanceApplicationRecord>(),\n});\n\nexport const initialState = FinanceApplicationStateRecord();\nexport type FinanceApplicationState = typeof initialState;\n\nconst model = \"financeApplications\";\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case financeApplicationActions.FETCH_FINANCE_APPLICATION:\n      if (state.getIn([model, \"byEstimateId\", action.payload.estimateId])) {\n        return state.setIn([model, \"byEstimateId\", action.payload.estimateId, \"loading\"], true);\n      }\n      return state.setIn([model, \"byEstimateId\", action.payload.estimateId], fromJSON({ loading: true }));\n\n    case financeApplicationActions.RECEIVE_FINANCE_APPLICATION:\n      return state.setIn(\n        [model, \"byEstimateId\", action.payload.financeApplication.estimate_id],\n        fromJSON({ ...action.payload.financeApplication, loading: false }),\n      );\n\n    case financeApplicationActions.SET_LOADED:\n      return state.setIn([model, \"byEstimateId\", action.payload.estimateId, \"loading\"], false);\n\n    case financeApplicationActions.SET_OFFER_STATUS:\n      return state.setIn([model, \"byEstimateId\", action.payload.estimateId, \"offer_status\"], action.payload.status);\n\n    case financeApplicationActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n\n    case financeApplicationActions.RECEIVE_FINANCE_APPLICATIONS:\n      action.payload.financeApplications.forEach((application) => {\n        state = reducer(state, financeApplicationActions.Actions.receiveFinanceApplication(application));\n      });\n      return state;\n\n    case financeApplicationActions.RECEIVE_APPLY_URL:\n      return state.updateIn(\n        [model, \"byEstimateId\", action.payload.estimateId],\n        (financeApplication: FinanceApplicationRecord) => {\n          return financeApplication.merge({\n            apply_url: action.payload.applyUrl,\n            loading: false,\n          });\n        },\n      );\n\n    default:\n      return state;\n  }\n};\n","import { Nullable } from \"app2/src/records\";\nimport { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<ISkuData>): SkuRecord => {\n  const recordData: ISkuRecord = { ...(json as any) };\n\n  return new SkuRecord(recordData);\n};\n\nexport interface ISkuData {\n  id: number;\n  item_uuid: string;\n  value: string;\n  org_id: number;\n  loading?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface ISkuRecord {\n  id: number;\n  item_uuid: string;\n  value: string;\n  org_id: number;\n  loading: boolean;\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nconst defaultSkuProps: ISkuRecord = {\n  id: 0,\n  item_uuid: \"\",\n  value: \"\",\n  org_id: 0,\n  loading: false,\n\n  created_at: null,\n  updated_at: null,\n};\n\nexport class SkuRecord extends Record(defaultSkuProps) implements ISkuRecord {}\n","import * as skuActions from \"./sku.actions\";\nimport { SkuRecord, fromJSON } from \"app2/src/records/Sku\";\nimport { Map, Record } from \"immutable\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { fetch, loaded, receive, reset } from \"./Reducer\";\n\nexport const SkuStateRecord = Record({\n  byId: Map<number, SkuRecord>(),\n  lastSavedById: Map<number, SkuRecord>(),\n});\n\nexport const initialState = SkuStateRecord();\nexport type SkuState = typeof initialState;\n\nconst model = \"skus\";\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case skuActions.FETCH_SKU:\n      return fetch(state, model, fromJSON({ id: action.payload.id }));\n\n    case skuActions.RECEIVE_SKU:\n      return receive(state, model, fromJSON(action.payload.sku));\n\n    case skuActions.SET_LOADED:\n      return loaded(state, model, action.payload.id);\n\n    case skuActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n\n    case skuActions.CLEAR_SKU:\n      return reset(state, model, action.payload.id);\n\n    case skuActions.UPDATE_VALUE:\n      return state.setIn([model, \"byId\", action.payload.id, \"value\"], action.payload.newValue);\n\n    default:\n      return state;\n  }\n};\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IPaymentRequestData>): PaymentRequestRecord => {\n  const recordData: PaymentRequestRecord = { ...(json as any) };\n\n  return new PaymentRequestRecord(recordData);\n};\n\nexport type PaymentRequestKind = \"occ_pay\" | \"cardconnect\" | \"paysimple\";\n\nexport interface IPaymentRequestData {\n  id: number;\n  description: string;\n  amount: number;\n  to: string;\n  provider: \"email\" | \"text\";\n  job_id: number;\n  user_id: number;\n  org_id: number;\n  loading?: boolean;\n  sms?: string;\n  emails?: string;\n  kind?: PaymentRequestKind;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IPaymentRequestRecord {\n  id: number;\n  description: string;\n  amount: number;\n  to: string;\n  provider: \"email\" | \"text\";\n  job_id: number;\n  user_id: number;\n  org_id: number;\n  loading: boolean;\n  sms: string;\n  emails: string;\n  kind?: string;\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nexport const defaultPaymentRequestProps: IPaymentRequestRecord = {\n  id: 0,\n  description: \"\",\n  amount: 0,\n  to: \"\",\n  provider: \"email\",\n  job_id: 0,\n  user_id: 0,\n  org_id: 0,\n  loading: false,\n  sms: \"\",\n  emails: \"\",\n  kind: \"\",\n  created_at: null,\n  updated_at: null,\n};\n\nexport class PaymentRequestRecord extends Record(defaultPaymentRequestProps) implements IPaymentRequestRecord {}\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { PaymentRecord } from \"../records/PaymentRecord\";\nimport { fromJSON, PaymentAuthorizationRecord, paymentProviders } from \"app2/src/records/PaymentAuthorizationRecord\";\nimport { Map, List } from \"immutable\";\nimport { currentOrgId } from \"./org.selectors\";\n\nconst paymentsById = (state: RootState) => state.getIn([\"payments\", \"paymentsById\"]);\nconst paymentsByPage = (state: RootState, props: any) =>\n  state.getIn([\"payments\", \"pages\", parseInt(props.page), \"payments\"]);\n\n/**\n * Returns the payment authorization info for the given orgId\n *\n * @param {RootState} state\n * @param {{orgId: number}} props\n * @returns {Map}\n */\nexport const paymentAuth = (state: RootState, props: { orgId: number }): PaymentAuthorizationRecord =>\n  state.getIn([\"payments\", \"authByOrgId\", props.orgId]);\n\n/**\n * Returns the first PaymentRequestKind that is authorized for the given orgId, based on Payment Providers\n *\n * @param {RootState} state\n * @param {{orgId: number}} props\n * @returns {PaymentRequestKind | \"\"}\n */\nexport const paymentAuthRequestKind = createSelector([paymentAuth], (auth: PaymentAuthorizationRecord) => {\n  if (!auth) return \"\";\n\n  const found = paymentProviders.find((v) => auth.get(v as any));\n\n  if (!found) return \"\";\n\n  switch (found) {\n    case \"occ_pay\":\n      return \"occ_pay\";\n    case \"card_connect\":\n      return \"cardconnect\";\n    case \"pay_simple\":\n      return \"paysimple\";\n  }\n});\n\n/**\n * Returns a boolean saying whether ANY payment method is authorized for the current OrgId\n *\n * @param {RootState} state\n * @returns {boolean}\n */\nexport const paymentAuthorized = (state: RootState): boolean => {\n  const orgId = currentOrgId(state);\n  const auth: PaymentAuthorizationRecord = state.getIn([\"payments\", \"authByOrgId\", orgId], fromJSON({}));\n\n  return paymentProviders.some((v) => auth.get(v as any));\n};\n\nexport const getPagedPayments = createSelector(\n  [paymentsById, paymentsByPage],\n  (byId: Map<number, PaymentRecord>, payments: List<number>) => {\n    if (!payments) {\n      return List();\n    }\n\n    return payments.map((id) => byId.get(id));\n  },\n);\n","import * as paymentRequestActions from \"./paymentRequest.actions\";\nimport { Map, Record } from \"immutable\";\nimport { IPaymentRequestData, PaymentRequestRecord, fromJSON } from \"../records/PaymentRequest\";\nimport { RootActions, RootState } from \".\";\nimport { fetch, loaded, receive } from \"app2/src/reducers/Reducer\";\nimport { Actions } from \"app2/src/reducers/paymentRequest.actions\";\nimport { currentJob, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { currentUserId } from \"app2/src/selectors/user.selectors\";\nimport { paymentAuth } from \"app2/src/selectors/payment.selectors\";\nimport { estimate } from \"app2/src/selectors/estimate.selectors\";\n\nexport const PaymentRequestStateRecord = Record({\n  byId: Map<number, PaymentRequestRecord>(),\n  lastSavedById: Map<number, PaymentRequestRecord>(),\n});\n\nexport const initialState = PaymentRequestStateRecord();\n\nexport type PaymentRequestState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"paymentRequests\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let paymentRequest: PaymentRequestRecord;\n  switch (action.type) {\n    case paymentRequestActions.FETCH_PAYMENT_REQUEST:\n      return fetch(state, model, fromJSON({ id: action.payload.id }));\n\n    case paymentRequestActions.RECEIVE_PAYMENT_REQUEST:\n      paymentRequest = fromJSON(action.payload.paymentRequest);\n      return receive(state, model, paymentRequest);\n\n    case paymentRequestActions.SET_LOADED:\n      return loaded(state, model, action.payload.id);\n\n    case paymentRequestActions.INIT_PAYMENT_REQUEST:\n      const job = currentJob(state);\n      const orgId = currentOrgId(state);\n      const user_id = currentUserId(state);\n      const auth = paymentAuth(state, { orgId });\n      const estimateId = selectedEstimateId(state);\n      const currentEstimate = estimate(state, { estimateId });\n      let amount = 0;\n      if (currentEstimate) {\n        amount = currentEstimate.total;\n        const firstPaymentTerm = currentEstimate.payment_terms.payment_term_items.first();\n        if (firstPaymentTerm) {\n          amount = firstPaymentTerm.calculated;\n        }\n      }\n      const description = job ? `${job.customer_name} - ${job.name}` : \"\";\n      const paymentRequestData = {\n        id: -1,\n        emails: job.email,\n        sms: job.getIn([\"phone_numbers\", 0, \"number\"], \"\"),\n        job_id: job.id,\n        user_id,\n        org_id: orgId,\n        kind: auth?.get(\"occ_pay\") ? \"occ_pay\" : auth?.get(\"card_connect\") ? \"cardconnect\" : \"paysimple\",\n        amount,\n        description,\n      } as IPaymentRequestData;\n      state = reducer(state, Actions.receivePaymentRequest(paymentRequestData));\n      return reducer(\n        state,\n        Actions.receivePaymentRequest({\n          ...paymentRequestData,\n          id: -2,\n        }),\n      );\n\n    case paymentRequestActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n\n    case paymentRequestActions.RECEIVE_PAYMENT_REQUESTS:\n      action.payload.paymentRequests.forEach((paymentRequest) => {\n        state = reducer(state, Actions.receivePaymentRequest(paymentRequest));\n      });\n      return state;\n\n    default:\n      return state;\n  }\n};\n","import { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { List, Map, Record, fromJS } from \"immutable\";\nimport { RootActions, RootState } from \".\";\nimport { SignedDocumentRecord, fromJSON } from \"../records/SignedDocument\";\nimport { fromJSON as recipientFromJSON } from \"../records/Recipient\";\nimport { fetch, loaded } from \"./Reducer\";\nimport * as signedDocumentActions from \"./signedDocument.actions\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { getFullName } from \"app2/src/records/UserRecord\";\n\nexport const SignedDocumentStateRecord = Record({\n  currentId: -1,\n  byId: Map<number, SignedDocumentRecord>(),\n});\n\nexport const initialState = SignedDocumentStateRecord();\nexport type SignedDocumentState = typeof initialState;\n\nconst model = \"signedDocuments\";\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case signedDocumentActions.SET_CURRENT_ID:\n      return state.setIn([model, \"currentId\"], action.payload.id);\n    case signedDocumentActions.FETCH_DOCUMENT:\n      return fetch(state, model, fromJSON({ id: action.payload.id }));\n    case signedDocumentActions.RECEIVE_DOCUMENT:\n      return state.setIn([model, \"byId\", action.payload.document.id], fromJSON(action.payload.document));\n    case signedDocumentActions.SET_DOCUMENT_LOADED: {\n      const { id, status } = action.payload;\n      return loaded(state, model, id).setIn([model, \"byId\", id, \"validation_status\"], status);\n    }\n\n    case signedDocumentActions.INIT_RECIPIENT_INFO:\n      const { id, index } = action.payload;\n      let { recipient } = action.payload;\n      const job = currentJob(state);\n      switch (recipient.signer) {\n        case \"job\":\n          recipient = recipient.merge({ name: job.customer_name, email: job.email });\n          break;\n        case \"salesrep\":\n          if (job.assignments && job.assignments.size > 0) {\n            const assignee = job.assignments.get(0);\n            recipient = recipient.merge({ name: getFullName(assignee.user), email: assignee.user?.email });\n          } else {\n            recipient = recipient.merge({ name: \"\", email: \"\" });\n          }\n\n          break;\n        default:\n          recipient = recipient.merge({ name: \"\", email: \"\" });\n          break;\n      }\n      return state.setIn([model, \"byId\", id, \"recipients\", index], recipient);\n    case signedDocumentActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n\n      if (name.includes(\"signer\")) {\n        const recipientPath = name.split(\".\");\n        recipientPath.pop();\n        let recipient = state.getIn(rootPath.concat(recipientPath));\n        recipient = recipient.set(\"signer\", value);\n\n        const index = parseInt(recipientPath[recipientPath.length - 1]);\n        state = reducer(\n          state,\n          signedDocumentActions.Actions.initRecipientInfo(recipient, state.getIn([model, \"currentId\"]), index),\n        );\n      }\n\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n\n    case signedDocumentActions.INIT_RECIPIENTS: {\n      const scribbleSigners = action.payload.validations?.getIn([\"data\", \"signers\"]) || List();\n      const orgSigners = state.getIn(\n        [\"orgs\", \"orgsById\", currentOrgId(state), \"settings\", \"config\", \"signature_settings\", \"signers\"],\n        List(),\n      );\n      const initSigners = orgSigners.setSize(scribbleSigners.size).map(() => recipientFromJSON({}));\n      state = state.setIn([model, \"byId\", action.payload.id, \"recipients\"], initSigners);\n\n      scribbleSigners.forEach((scribbleSigner, index) => {\n        const role_id = scribbleSigner.get(\"role\");\n        const orgSigner = orgSigners.find((os) => os.get(\"role\") === role_id) || orgSigners.get(index);\n        let recipient = recipientFromJSON({ role_id });\n        if (orgSigner) {\n          recipient = recipient.merge({\n            signer: orgSigner.get(\"signer\"),\n            required: orgSigner.get(\"required\"),\n            included: orgSigner.get(\"required\"),\n          });\n        }\n\n        state = reducer(state, signedDocumentActions.Actions.initRecipientInfo(recipient, action.payload.id, index));\n      });\n\n      return state;\n    }\n\n    case signedDocumentActions.CREATE_SIGNED_DOCUMENT: {\n      const { response, estimateId } = action.payload;\n      const { document, signature_validations } = response;\n      const validations = fromJS(JSON.parse(signature_validations));\n      const signedDocumentId = -1;\n      const record = fromJSON({\n        id: signedDocumentId,\n        document_id: document.id,\n        estimate_id: estimateId,\n        validation_status: 200,\n        metadata: { validation_uuid: validations.getIn([\"data\", \"id\"]) },\n      });\n      state = state.setIn([model, \"byId\", signedDocumentId], record);\n      return reducer(state, signedDocumentActions.Actions.initRecipients(signedDocumentId, validations));\n    }\n\n    case signedDocumentActions.CLEAR_SIGNED_DOCUMENT: {\n      return reducer(state, signedDocumentActions.Actions.receiveDocument({ id }));\n    }\n    default:\n      return state;\n  }\n};\n","import { Record, Map, fromJS } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IWebhookData>): WebhookRecord => {\n  const record: IWebhookRecord = { ...(json as any) };\n\n  record.auth_config = fromJS(json.auth_config || {});\n\n  if (json.events) {\n    const events = {};\n    json.events.forEach((e) => {\n      const [model, event] = e.split(\".\");\n      if (model && event) events[model] = { [event]: true, ...events[model] };\n    });\n    record.events = fromJS(events);\n  }\n\n  return new WebhookRecord(record);\n};\n\nexport interface IWebhookData {\n  id: string;\n  name: string;\n  auth_config: any;\n  auth_type: string;\n  endpoint: string;\n  events: Array<string>;\n  status: string;\n  org_id: string;\n  created_at: string;\n  updated_at: string;\n  loading: boolean;\n}\n\nexport interface IWebhookRecord {\n  id: string;\n  name: string;\n  auth_config: Nullable<Map<string, any>>;\n  auth_type: string;\n  endpoint: Nullable<string>;\n  events: Map<string, boolean>;\n  status: string;\n  org_id: string;\n  created_at: Nullable<string>;\n  updated_at: Nullable<string>;\n  loading: boolean;\n}\n\nexport const defaultWebhookProps = {\n  id: \"\",\n  name: \"\",\n  auth_config: null,\n  auth_type: \"\",\n  endpoint: null,\n  events: null,\n  status: \"\",\n  org_id: \"\",\n  created_at: null,\n  updated_at: null,\n  loading: false,\n};\n\nexport class WebhookRecord extends Record<IWebhookRecord>(defaultWebhookProps) implements IWebhookRecord {}\n","import { Record, Map, fromJS } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IWebhookEventData>): WebhookEventRecord => {\n  const record: IWebhookEventRecord = { ...(json as any) };\n\n  if (json.payload) {\n    record.payload = fromJS(json.payload);\n  }\n  if (json.tries) {\n    record.tries = fromJS(json.tries);\n  }\n\n  return new WebhookEventRecord(record);\n};\n\nexport interface IWebhookEventData {\n  id: string;\n  webhook_id: string;\n  payload: any;\n  tries: any;\n  status: string;\n  created_at: string;\n  updated_at: string;\n}\n\nexport interface IWebhookEventRecord {\n  id: string;\n  webhook_id: string;\n  payload: Nullable<Map<string, any>>;\n  tries: Nullable<Map<string, any>>;\n  status: string;\n  created_at: Nullable<string>;\n  updated_at: Nullable<string>;\n}\n\nexport const defaultWebhookEventProps = {\n  id: \"\",\n  webhook_id: \"\",\n  payload: null,\n  tries: null,\n  status: \"\",\n  created_at: null,\n  updated_at: null,\n};\n\nexport class WebhookEventRecord\n  extends Record<IWebhookEventRecord>(defaultWebhookEventProps)\n  implements IWebhookEventRecord {}\n","import * as webhookActions from \"./webhook.actions\";\nimport * as paginationActions from \"./pagination.actions\";\nimport { Record, Map, getIn } from \"immutable\";\nimport { fromJSON, IWebhookData, WebhookRecord } from \"../records/Webhook\";\nimport { fromJSON as eventFromJSON, IWebhookEventData, WebhookEventRecord } from \"../records/WebhookEvent\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { reducer as paginationReducer } from \"app2/src/reducers/pagination.reducer\";\nimport { reset } from \"./Reducer\";\n\nexport const WebhookStateRecord = Record({\n  byId: Map<string, WebhookRecord>(),\n  eventsById: Map<string, WebhookEventRecord>(),\n  lastSavedById: Map<string, WebhookRecord>(),\n});\n\nexport const initialState = WebhookStateRecord();\n\nexport type WebhookState = typeof initialState;\n\nexport const model = \"webhooks\";\nexport const eventsModel = \"webhook_events\";\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case webhookActions.RECEIVE_WEBHOOK:\n      const webhookRecord = fromJSON(action.payload);\n      return state\n        .setIn([model, \"byId\", action.payload.id], webhookRecord)\n        .setIn([model, \"lastSavedById\", action.payload.id], webhookRecord);\n\n    case webhookActions.RECEIVE_WEBHOOK_EVENT:\n      const webhookEventRecord = eventFromJSON(action.payload);\n      return state.setIn([model, \"eventsById\", action.payload.id], webhookEventRecord);\n\n    case webhookActions.RESET_WEBHOOK: {\n      const { webhookId } = action.payload;\n      return reset(state, model, webhookId);\n    }\n\n    case webhookActions.SET_WEBHOOK_LOADED:\n      if (getIn(state, [model, \"byId\", action.payload, \"loading\"], false)) {\n        return state.setIn([model, \"byId\", action.payload, \"loading\"], false);\n      }\n      return state;\n\n    case webhookActions.FETCH_WEBHOOK:\n      if (state.getIn([model, \"byId\", action.payload])) {\n        return state.setIn([model, \"byId\", action.payload, \"loading\"], true);\n      }\n      return state.setIn([model, \"byId\", action.payload], new WebhookRecord({ id: action.payload, loading: true }));\n\n    case webhookActions.RECEIVE_WEBHOOKS:\n      action.payload.webhooks.forEach((webhook: IWebhookData) => {\n        state = reducer(state, webhookActions.Actions.receiveWebhook(webhook));\n      });\n      return state;\n\n    case webhookActions.RECEIVE_WEBHOOK_EVENTS:\n      action.payload.webhook_events.forEach((webhook: IWebhookEventData) => {\n        state = reducer(state, webhookActions.Actions.receiveWebhookEvent(webhook));\n      });\n      return state;\n\n    case webhookActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n\n    case webhookActions.REMOVE_WEBHOOK:\n      state = paginationReducer(state, paginationActions.Actions.removeId(action.payload.webhookId, \"webhook\"));\n      return state.deleteIn([\"webhooks\", \"byId\", action.payload.webhookId]);\n    default:\n      return state;\n  }\n};\n","import * as rsfFormActions from \"./rsfForm.actions\";\nimport { fromJS, Map, Record } from \"immutable\";\n\nexport const RsfFormRecord = Record({\n  byForm: Map<string, Map<string, any>>(),\n  errors: Map<string, Map<string, any>>(),\n});\n\nexport const initialState = RsfFormRecord();\nexport type RsfFormState = typeof initialState;\n\nexport type RsfFormRootRecordProps = { rsfForms: RsfFormState };\n\nexport const initialRsfFormRootRecord = Record({ rsfForms: initialState })();\nexport type RsfFormRootRecord = typeof initialRsfFormRootRecord;\n\nconst model = \"rsfForms\";\nexport const formRootPath = [model, \"byForm\"];\nexport const reducer = (state: RsfFormRootRecord, action: rsfFormActions.Actions): RsfFormRootRecord => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case rsfFormActions.UPDATE_FORM: {\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n    }\n\n    case rsfFormActions.UPDATE_FORM_ERROR: {\n      const { rootPath, name, error } = action.payload.event;\n      return state.setIn([model, \"errors\", ...rootPath, name], error);\n    }\n\n    case rsfFormActions.UPDATE_FORM_ERRORS: {\n      const { rootPath, errors } = action.payload.event;\n      return state.setIn([model, \"errors\", ...rootPath], errors);\n    }\n\n    case rsfFormActions.INITIALIZE_FORM: {\n      const { formName, data } = action.payload;\n      return state.setIn([model, \"byForm\", formName], fromJS(data));\n    }\n\n    default:\n      return state;\n  }\n};\n","import { customFormFromJSON, CustomFormRecord } from \"app2/src/components/JobTabs/InfoTab/CustomForm/CustomFormRecord\";\nimport { formatPhoneNumber } from \"app2/src/helpers/Format\";\nimport { RootState } from \"app2/src/reducers\";\nimport {\n  RECEIVE_CUSTOM_FORM,\n  RECEIVE_CUSTOM_FORMS,\n  Actions,\n  SET_APPLICANT_COUNT,\n  UPDATE_DABELLA_FORM,\n  FETCH_CUSTOM_FORM,\n  SET_MODEL_LOADED,\n  UPDATE_CUSTOM_FORM_RJSF,\n  RESET_CUSTOM_FORM,\n} from \"app2/src/reducers/customForm.actions\";\nimport { fetch, loaded, receive, reset } from \"app2/src/reducers/Reducer\";\nimport { Actions as RsfFormActions } from \"app2/src/reducers/rsfForm.actions\";\nimport { reducer as rsfFormReducer, RsfFormRootRecord } from \"app2/src/reducers/rsfForm.reducer\";\nimport { fromJS, Map, Record } from \"immutable\";\n\nexport const CustomFormStateRecord = Record({\n  byId: Map<string, CustomFormRecord>(),\n  lastSavedById: Map<string, CustomFormRecord>(),\n  applicantCountByJobId: Map<number, number>(),\n});\n\nexport const initialState = CustomFormStateRecord();\n\nexport type CustomFormState = typeof initialState;\n\nconst model = \"customForms\";\nexport const reducer = (state: RootState, action: any): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case FETCH_CUSTOM_FORM:\n      return fetch(state, model, customFormFromJSON({ id: action.payload.id })) as RootState;\n    case RECEIVE_CUSTOM_FORM:\n      return receive(state, model, customFormFromJSON(action.payload)) as RootState;\n    case RECEIVE_CUSTOM_FORMS: {\n      action.payload.forEach((customForm) => {\n        state = reducer(state, Actions.receiveCustomForm(customForm));\n      });\n      return state;\n    }\n    case SET_MODEL_LOADED:\n      return loaded(state, model, action.payload.id) as RootState;\n    case SET_APPLICANT_COUNT: {\n      const { jobId, customForms } = action.payload;\n      const single = [\"INDIVIDUAL CREDIT\", \"INDIVIDUAL (REMOTE)\"];\n      const double = [\"JOINT CREDIT\"];\n      let count = 0;\n\n      customForms.forEach((customForm) => {\n        if (single.includes(customForm.form_data.application_status)) {\n          count++;\n        } else if (double.includes(customForm.form_data.application_status)) {\n          count += 2;\n        }\n      });\n      return state.setIn([model, \"applicantCountByJobId\", jobId], count);\n    }\n\n    case UPDATE_DABELLA_FORM: {\n      const { event } = action.payload;\n      if (event.name.includes(\"phone\")) {\n        event.value = formatPhoneNumber(event.value);\n      }\n      state = rsfFormReducer(state as RsfFormRootRecord, RsfFormActions.update(event)) as RootState;\n\n      return state;\n    }\n\n    case UPDATE_CUSTOM_FORM_RJSF: {\n      const { customFormId, formData } = action.payload;\n      state = state.setIn([\"customForms\", \"byId\", customFormId, \"form_data\"], fromJS(formData));\n      return state;\n    }\n\n    case RESET_CUSTOM_FORM: {\n      const { customFormId } = action.payload;\n      return reset(state, model, customFormId) as RootState;\n    }\n    default:\n      return state;\n  }\n};\n","import { RootActions, RootState } from \"app2/src/reducers\";\nimport {\n  ADD_DISCOUNT_GROUP,\n  CLEAR_DISCOUNT_GROUPS,\n  RESET_PRICE_PRESENTATION,\n  SET_CURRENT_SLIDE_INDEX,\n  SET_SLIDE_ESTIMATE_IDS,\n  UPDATE_FINANCING,\n  UPDATE_PRICE_PRESENTATION,\n} from \"app2/src/reducers/pricePresentation.actions\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport { List, Record, Map } from \"immutable\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport const FinancingRecord = Record({\n  downPayment: 0,\n  minPayment: 0,\n  maxPayment: 0,\n});\n\n// Map<estimateId, discountUuid>\ntype DiscountGroupMap = Map<number, string>;\n\nexport const PricePresentationRecord = Record({\n  slideEstimateIds: List<number>(),\n  showExactValues: false,\n  financing: FinancingRecord(),\n  currentSlideIndex: 0,\n  estimateDiscountGroups: List<DiscountGroupMap>(),\n});\n\nexport const PricePresentationInitialState = PricePresentationRecord();\nexport type PricePresentationState = typeof PricePresentationInitialState;\n\nexport type PricePresentationRootRecordProps = { pricePresentation: PricePresentationState };\n\nexport const initialPricePresentationRootRecord = Record({ pricePresentation: PricePresentationInitialState })();\nexport type PricePresentationRootRecord = typeof initialPricePresentationRootRecord;\n\nconst model = \"pricePresentation\";\nexport const pricePresentationReducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, PricePresentationInitialState);\n  }\n\n  switch (action.type) {\n    case SET_SLIDE_ESTIMATE_IDS: {\n      const { ids } = action.payload;\n      return state.setIn([model, \"slideEstimateIds\"], ids);\n    }\n\n    case UPDATE_PRICE_PRESENTATION: {\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n    }\n\n    case RESET_PRICE_PRESENTATION: {\n      return state.set(model, PricePresentationInitialState);\n    }\n\n    case UPDATE_FINANCING: {\n      const { total } = action.payload;\n      const downPayment = state.getIn([model, \"financing\", \"downPayment\"]);\n      const newTotal = total - downPayment;\n      const config = currentOrgPrefConfig(state, { path: [\"enhanced_price_presentation\"] });\n      const minPaymentRange = config?.get(\"min_payment_range\") || 0;\n      const maxPaymentRange = config?.get(\"max_payment_range\") || 0;\n\n      const minPayment = roundToDecimals(newTotal * (minPaymentRange / 100), -2);\n      const maxPayment = roundToDecimals(newTotal * (maxPaymentRange / 100), -2);\n\n      return state\n        .setIn([model, \"financing\", \"minPayment\"], minPayment)\n        .setIn([model, \"financing\", \"maxPayment\"], maxPayment);\n    }\n\n    case SET_CURRENT_SLIDE_INDEX: {\n      const { index } = action.payload;\n      return state.setIn([model, \"currentSlideIndex\"], index);\n    }\n\n    case ADD_DISCOUNT_GROUP: {\n      const { group } = action.payload;\n      return state.updateIn([model, \"estimateDiscountGroups\"], (groups) => groups.push(group));\n    }\n\n    case CLEAR_DISCOUNT_GROUPS: {\n      return state.setIn([model, \"estimateDiscountGroups\"], List<Map<number, string>>());\n    }\n\n    default:\n      return state;\n  }\n};\n","import { List, Map, Record } from \"immutable\";\n\nexport const oneLookLocationFromJSON = (json: Partial<IOneLookLocationData>): OneLookLocationRecord => {\n  const recordData: IOneLookLocationRecord = { ...(json as any) };\n\n  recordData.create = Map<string, string>(json.create || {});\n  recordData.products = List(Object.entries(json.products || {}).map(([name, id]) => name));\n\n  return new OneLookLocationRecord(recordData);\n};\n\nexport interface IOneLookLocationData {\n  code: string;\n  name: string;\n  create: { [key: string]: string };\n  products: { [key: string]: number };\n}\n\nexport interface IOneLookLocationRecord {\n  code: string;\n  name: string;\n  create: Map<string, string>;\n  products: List<string>;\n}\n\nexport const defaultOneLookLocationProps: IOneLookLocationRecord = {\n  code: \"\",\n  name: \"\",\n  create: Map<string, string>(),\n  products: List<string>(),\n};\n\nexport class OneLookLocationRecord extends Record(defaultOneLookLocationProps) implements IOneLookLocationRecord {}\n","import { oneLookLocationFromJSON, OneLookLocationRecord } from \"app2/src/records/OneLookLocation\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { RECEIVE_ONE_LOOK_LOCATIONS, SET_LOADING } from \"app2/src/reducers/oneLook.actions\";\nimport { List, Record } from \"immutable\";\n\nexport const OneLookStateRecord = Record({\n  locations: List<OneLookLocationRecord>(),\n  loading: false,\n});\n\nexport const initialState = OneLookStateRecord();\nexport type OneLookState = typeof initialState;\n\nconst model = \"oneLook\";\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.getIn([model])) {\n    state = state.setIn([model], initialState);\n  }\n  switch (action.type) {\n    case RECEIVE_ONE_LOOK_LOCATIONS: {\n      const locations = action.payload;\n      return state.setIn([model, \"locations\"], List(locations.map(oneLookLocationFromJSON)));\n    }\n\n    case SET_LOADING: {\n      const loading = action.payload;\n      return state.setIn([model, \"loading\"], loading);\n    }\n\n    default:\n      return state;\n  }\n};\n","import { Map, Record } from \"immutable\";\nimport { AppMessageRecipientRecord } from \"app2/src/records/AppMessage\";\nimport * as appMessageActions from \"./appMessage.actions\";\nimport { IAppMessageMetadata } from \"./appMessage.actions\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { Nullable } from \"../records\";\n\nconst AppMessageMetadataRecord = Record<IAppMessageMetadata>({\n  total: 0,\n  unread_total: 0,\n});\n\nconst AppMessageUiState = Record({\n  showModal: false,\n  viewMessageId: null as Nullable<string>,\n  initialized: false,\n});\n\nexport const AppMessageStateRecord = Record({\n  byId: Map<string, AppMessageRecipientRecord>(),\n  uiState: AppMessageUiState(),\n  metadata: AppMessageMetadataRecord(),\n});\n\nexport const initialState = AppMessageStateRecord();\n\nexport type AppMessageState = typeof initialState;\n\nexport const model = \"appMessages\";\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case appMessageActions.RECEIVE_APP_MESSAGE: {\n      const { message } = action.payload;\n\n      return state.setIn([model, \"byId\", message.id], message);\n    }\n\n    case appMessageActions.RECEIVE_APP_MESSAGES: {\n      const { messages, metadata } = action.payload;\n\n      messages.forEach((message) => {\n        state = reducer(state, appMessageActions.Actions.receiveAppMessage(message));\n      });\n\n      return state.setIn([model, \"metadata\"], AppMessageMetadataRecord(metadata));\n    }\n\n    case appMessageActions.UPDATE_APP_MESSAGE: {\n      const { message, metadata } = action.payload;\n\n      return state\n        .setIn([model, \"byId\", message.id], message)\n        .setIn([model, \"metadata\"], AppMessageMetadataRecord(metadata));\n    }\n\n    case appMessageActions.ADD_APP_MESSAGE: {\n      const { message, metadata } = action.payload;\n\n      return state\n        .setIn([model, \"byId\", message.id], message)\n        .setIn([model, \"metadata\"], AppMessageMetadataRecord(metadata));\n    }\n\n    case appMessageActions.SHOW_MESSAGE_MODAL: {\n      const { messageId } = action.payload;\n\n      return state.setIn([model, \"uiState\", \"showModal\"], true).setIn([model, \"uiState\", \"viewMessageId\"], messageId);\n    }\n\n    case appMessageActions.HIDE_MESSAGE_MODAL: {\n      return state.setIn([model, \"uiState\", \"showModal\"], false).setIn([model, \"uiState\", \"viewMessageId\"], null);\n    }\n\n    case appMessageActions.SET_CHANNEL_INIT: {\n      const { initialized } = action.payload;\n      return state.setIn([model, \"uiState\", \"initialized\"], initialized);\n    }\n\n    default:\n      return state;\n  }\n};\n","import { combineReducers } from \"./utilities/combine.reducers\";\nimport { Record, Map } from \"immutable\";\nimport { Reducer } from \"redux\";\nimport { reducer as authReducer, initialState as AuthInitialState } from \"./auth.reducer\";\nimport { Actions as authActions } from \"./auth.actions\";\nimport { reducer as paginationReducer, initialState as PaginationInitialState } from \"./pagination.reducer\";\nimport { Actions as paginationActions } from \"./pagination.actions\";\nimport { reducer as estimateReducer, initialState as EstimateInitialState } from \"./estimate.reducer\";\nimport { reducer as estimateGroupReducer, initialState as EstimateGroupInitialState } from \"./estimateGroup.reducer\";\nimport { Actions as estimateGroupActions } from \"./estimateGroup.actions\";\nimport {\n  reducer as estimateLineItemReducer,\n  initialState as EstimateLineItemInitialState,\n} from \"./estimateLineItem.reducer\";\nimport { Actions as estimateLineItemActions } from \"./estimateLineItem.actions\";\nimport {\n  reducer as estimateLineItemOptionReducer,\n  initialState as EstimateLineItemOptionInitialState,\n} from \"./estimateLineItemOption.reducer\";\nimport { Actions as estimateLineItemOptionActions } from \"./estimateLineItemOption.actions\";\nimport {\n  reducer as openingEstimationReducer,\n  initialState as OpeningEstimationInitialState,\n} from \"./openingEstimation.reducer\";\nimport { Actions as openingEstimationActions } from \"./openingEstimation.actions\";\nimport { reducer as imageReducer, initialState as ImageInitialState } from \"./image.reducer\";\nimport { Actions as imageActions } from \"./image.actions\";\nimport { Actions as estimateActions } from \"./estimate.actions\";\nimport { reducer as usersReducer, initialState as UsersInitialState } from \"./user.reducer\";\nimport { reducer as jobsReducer, initialState as JobsInitialState } from \"./job.reducer\";\nimport { Actions as jobActions } from \"./job.actions\";\nimport { reducer as orgsReducer, initialState as OrgsInitialState } from \"./org.reducer\";\nimport { Actions as orgActions } from \"./org.actions\";\nimport { Actions as userActions } from \"./user.actions\";\nimport { reducer as integrationsReducer, IntegrationsInitialState, IntegrationsActions } from \"./integrations.reducer\";\nimport { reducer as analyticsReducer, initialState as AnalyticsInitialState } from \"./analytics.reducer\";\nimport { Actions as analyticsActions } from \"./analytics.actions\";\nimport { LeadsInitialState, reducer as leadsReducer } from \"./leads.reducer\";\nimport { Actions as eventActions } from \"./event.actions\";\nimport { reducer as eventReducer, initialState as EventInitialState } from \"./event.reducer\";\nimport { Actions as leadsActions } from \"./leads.actions\";\nimport { initialState as DiscountsInitialState, reducer as discountsReducer } from \"./discount.reducer\";\nimport { Actions as discountsActions } from \"./discount.actions\";\nimport {\n  initialState as PaymentTermTemplatesInitialState,\n  reducer as paymentTermTemplatesReducer,\n} from \"./org/paymentTermTemplate.reducer\";\nimport { Actions as paymentTermTemplateActions } from \"./org/paymentTermTemplate.actions\";\nimport { Actions as financeActions } from \"./org/financeOption.actions\";\nimport { Actions as toolActions } from \"./org/tool.actions\";\nimport { initialState as ToolInitialState, reducer as toolReducer } from \"./org/tool.reducer\";\nimport { initialState as PaymentInitialState, reducer as paymentReducer } from \"./payment.reducer\";\nimport { Actions as paymentActions } from \"./payment.actions\";\nimport { reducer as taskReducer, initialState as TaskInitialState } from \"./task.reducer\";\nimport { Actions as taskActions } from \"./task.actions\";\nimport { reducer as jobAttributeReducer, initialState as JobAttributeInitialState } from \"./jobAttribute.reducer\";\nimport { Actions as jobAttributeActions } from \"./jobAttribute.actions\";\nimport { reducer as presentationReducer, initialState as PresentationInitialState } from \"./presentation.reducer\";\nimport { Actions as presentationActions } from \"./presentation.actions\";\nimport { reducer as documentReducer, initialState as DocumentInitialState } from \"./document.reducer\";\nimport { Actions as documentActions } from \"./document.actions\";\nimport { reducer as reportReducer, initialState as ReportInitialState } from \"./report.reducer\";\nimport { Actions as reportActions } from \"./report.actions\";\nimport { reducer as componentsReducer, ComponentsInitialState, ComponentsActions } from \"./components/index\";\nimport {\n  reducer as presentationTemplateReducer,\n  initialState as PresentationTemplateInitialState,\n} from \"./presentationTemplate.reducer\";\nimport { Actions as presentationTemplateActions } from \"./presentationTemplate.actions\";\nimport { reducer as screenSharesReducer, initialState as ScreenShareInitialState } from \"./screenShare.reducer\";\nimport { Actions as screenShareActions } from \"./screenShare.actions\";\nimport {\n  reducer as estimateComparisonReducer,\n  initialState as EstimateComparisonInitialState,\n} from \"./estimateComparison.reducer\";\nimport { Actions as estimateComparisonActions } from \"./estimateComparison.actions\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { reducer as tokenReducer, initialState as TokenInitialState } from \"./token.reducer\";\nimport { Actions as tokenActions } from \"./token.actions\";\nimport { reducer as validationReducer, initialState as ValidationInitialState } from \"./validation.reducer\";\nimport { Actions as validationActions } from \"./validation.actions\";\nimport {\n  reducer as estimateFinanceOptionReducer,\n  initialState as EstimateFinanceOptionsInitialState,\n} from \"./estimateFinanceOption.reducer\";\nimport { Actions as estimateFinanceOptionActions } from \"./estimateFinanceOption.actions\";\nimport {\n  reducer as activatedPriceListReducer,\n  initialState as ActivatedPriceListsInitialState,\n} from \"./activatedPriceList.reducer\";\nimport { Actions as activatedPriceListActions } from \"./activatedPriceList.actions\";\nimport { reducer as priceListReducer, initialState as PriceListsInitialState } from \"./priceList.reducer\";\nimport { Actions as priceListActions } from \"./priceList.actions\";\nimport { reducer as productReducer, initialState as ProductsInitialState } from \"./product.reducer\";\nimport { Actions as productActions } from \"./product.actions\";\nimport {\n  reducer as productOptionGroupReducer,\n  initialState as ProductOptionGroupsInitialState,\n} from \"./productOptionGroup.reducer\";\nimport { Actions as productOptionGroupActions } from \"./productOptionGroup.actions\";\nimport { reducer as productOptionReducer, initialState as ProductOptionsInitialState } from \"./productOption.reducer\";\nimport { Actions as productOptionActions } from \"./productOption.actions\";\nimport { reducer as measurementReducer, initialState as MeasurementInitialState } from \"./measurement.reducer\";\nimport { Actions as measurementActions } from \"./measurement.actions\";\nimport { reducer as roofFaceReducer, initialState as RoofFaceInitialState } from \"./roofFace.reducer\";\nimport { Actions as roofFaceActions } from \"./roofFace.actions\";\nimport { reducer as wallFacadeReducer, initialState as WallFacadeInitialState } from \"./wallFacade.reducer\";\nimport { Actions as wallFacadeActions } from \"./wallFacade.actions\";\nimport { reducer as windowReducer, initialState as WindowInitialState } from \"./window.reducer\";\nimport { Actions as windowActions } from \"./window.actions\";\nimport { reducer as doorReducer, initialState as DoorInitialState } from \"./door.reducer\";\nimport { Actions as doorActions } from \"./door.actions\";\nimport { reducer as roomReducer, initialState as RoomInitialState } from \"./room.reducer\";\nimport { Actions as roomActions } from \"./room.actions\";\nimport { reducer as elevationReducer, initialState as ElevationInitialState } from \"./elevation.reducer\";\nimport { Actions as elevationActions } from \"./elevation.actions\";\nimport { reducer as deckReducer, initialState as DeckInitialState } from \"./deck.reducer\";\nimport { Actions as deckActions } from \"./deck.actions\";\nimport { reducer as poolReducer, initialState as PoolInitialState } from \"./pool.reducer\";\nimport { Actions as poolActions } from \"./pool.actions\";\nimport { reducer as accessReducer, initialState as AccessInitialState } from \"./access.reducer\";\nimport { Actions as accessActions } from \"./access.actions\";\nimport { reducer as routerReducer, initialState as RouterInitialState } from \"./router.reducer\";\nimport { Actions as routerActions } from \"./router.actions\";\nimport { reducer as folderReducer, initialState as FolderInitialState } from \"./folder.reducer\";\nimport { Actions as folderActions } from \"./folder.actions\";\nimport {\n  reducer as fencingReducer,\n  initialState as MeasurementsFencingInitialState,\n} from \"./measurements/fencing.reducer\";\nimport { Actions as fencingActions } from \"./measurements/fencing.actions\";\nimport { reducer as fenceReducer, initialState as MeasurementsFenceInitialState } from \"./measurements/fence.reducer\";\nimport { Actions as fenceActions } from \"./measurements/fence.actions\";\nimport {\n  reducer as segmentReducer,\n  initialState as MeasurementsSegmentInitialState,\n} from \"./measurements/segment.reducer\";\nimport { Actions as segmentActions } from \"./measurements/segment.actions\";\nimport {\n  reducer as estimateTemplateReducer,\n  initialState as EstimateTemplateInitialState,\n} from \"./estimateTemplate.reducer\";\nimport { Actions as estimateTemplateActions } from \"./estimateTemplate.actions\";\nimport { History } from \"history\";\nimport {\n  connectRouter,\n  routerActions as routerActionsConnected,\n  CallHistoryMethodAction,\n} from \"connected-react-router/immutable\";\nimport { ActionsUnion } from \"app2/src/reducers/Utils\";\nimport { reducer as noteReducer, initialState as NoteInitialState } from \"./note.reducer\";\nimport { Actions as noteActions } from \"./note.actions\";\nimport { reducer as crmUserReducer, initialState as CrmUserInitialState } from \"./crmUser.reducer\";\nimport { Actions as crmUserActions } from \"./crmUser.actions\";\nimport { reducer as eventResultReducer, initialState as EventResultInitialState } from \"./eventResult.reducer\";\nimport { Actions as eventResultActions } from \"./eventResult.actions\";\nimport {\n  reducer as eventResultReasonReducer,\n  initialState as EventResultReasonInitialState,\n} from \"./eventResultReason.reducer\";\nimport { Actions as eventResultReasonActions } from \"./eventResultReason.actions\";\nimport {\n  reducer as financeApplicationReducer,\n  initialState as FinanceApplicationInitialState,\n} from \"./financeApplication.reducer\";\nimport { Actions as financeApplicationActions } from \"./financeApplication.actions\";\nimport { reducer as skuReducer, initialState as SkuInitialState } from \"./sku.reducer\";\nimport { Actions as skuActions } from \"./sku.actions\";\nimport { reducer as paymentRequestReducer, initialState as PaymentRequestInitialState } from \"./paymentRequest.reducer\";\nimport { Actions as paymentRequestActions } from \"./paymentRequest.actions\";\nimport { Actions as signedDocumentActions } from \"./signedDocument.actions\";\nimport { reducer as signedDocumentReducer, initialState as SignedDocumentInitialState } from \"./signedDocument.reducer\";\nimport { reducer as webhookReducer, initialState as WebhookInitialState } from \"./webhook.reducer\";\nimport { Actions as webhookActions } from \"./webhook.actions\";\nimport { Nullable } from \"app2/src/records\";\nimport { reducer as rsfFormReducer, initialState as RsfFormInitialState, RsfFormRootRecord } from \"./rsfForm.reducer\";\nimport { Actions as rsfFormActions } from \"./rsfForm.actions\";\nimport { reducer as customFormReducer, initialState as CustomFormInitialState } from \"./customForm.reducer\";\nimport { Actions as customFormActions } from \"./customForm.actions\";\nimport {\n  pricePresentationReducer,\n  PricePresentationInitialState,\n  PricePresentationRootRecord,\n} from \"./pricePresentation.reducer\";\nimport { PricePresentationActions } from \"./pricePresentation.actions\";\nimport { reducer as oneLookReducer, initialState as OneLookInitialState } from \"./oneLook.reducer\";\nimport { OneLookActions } from \"./oneLook.actions\";\nimport { Actions as AppMessageActions } from \"./appMessage.actions\";\nimport { reducer as appMessageReducer, initialState as AppMessageInitialState } from \"./appMessage.reducer\";\n\nexport const ConnectedRouterInitialState = Map({ location: Map({ pathname: \"/\", query: Map() }), action: \"test\" });\n\nexport const InitRootState = Record({\n  auth: AuthInitialState,\n  users: UsersInitialState,\n  jobs: JobsInitialState,\n  integrations: IntegrationsInitialState,\n  analytics: AnalyticsInitialState,\n  leads: LeadsInitialState,\n  discounts: DiscountsInitialState,\n  jobAttributes: JobAttributeInitialState,\n  paymentTermTemplates: PaymentTermTemplatesInitialState,\n  payments: PaymentInitialState,\n  estimates: EstimateInitialState,\n  estimateGroups: EstimateGroupInitialState,\n  estimateLineItems: EstimateLineItemInitialState,\n  estimateLineItemOptions: EstimateLineItemOptionInitialState,\n  orgs: OrgsInitialState,\n  events: EventInitialState,\n  presentations: PresentationInitialState,\n  presentationTemplates: PresentationTemplateInitialState,\n  tasks: TaskInitialState,\n  reports: ReportInitialState,\n  documents: DocumentInitialState,\n  tools: ToolInitialState,\n  screenShares: ScreenShareInitialState,\n  components: ComponentsInitialState,\n  estimateComparisons: EstimateComparisonInitialState,\n  pagination: PaginationInitialState,\n  tokens: TokenInitialState,\n  images: ImageInitialState,\n  openingEstimations: OpeningEstimationInitialState,\n  validations: ValidationInitialState,\n  estimateFinanceOptions: EstimateFinanceOptionsInitialState,\n  activatedPriceLists: ActivatedPriceListsInitialState,\n  priceLists: PriceListsInitialState,\n  products: ProductsInitialState,\n  productOptionGroups: ProductOptionGroupsInitialState,\n  productOptions: ProductOptionsInitialState,\n  measurements: MeasurementInitialState,\n  roofFaces: RoofFaceInitialState,\n  wallFacades: WallFacadeInitialState,\n  windows: WindowInitialState,\n  doors: DoorInitialState,\n  rooms: RoomInitialState,\n  elevations: ElevationInitialState,\n  decks: DeckInitialState,\n  pools: PoolInitialState,\n  accesses: AccessInitialState,\n  routerPush: RouterInitialState,\n  folders: FolderInitialState,\n  measurementsFencings: MeasurementsFencingInitialState,\n  measurementsFences: MeasurementsFenceInitialState,\n  measurementsSegments: MeasurementsSegmentInitialState,\n  estimateTemplates: EstimateTemplateInitialState,\n  notes: NoteInitialState,\n  crmUsers: CrmUserInitialState,\n  eventResults: EventResultInitialState,\n  eventResultReasons: EventResultReasonInitialState,\n  financeApplications: FinanceApplicationInitialState,\n  skus: SkuInitialState,\n  paymentRequests: PaymentRequestInitialState,\n  signedDocuments: SignedDocumentInitialState,\n  webhooks: WebhookInitialState,\n  rsfForms: RsfFormInitialState,\n  customForms: CustomFormInitialState,\n  pricePresentation: PricePresentationInitialState,\n  router: undefined as Nullable<typeof ConnectedRouterInitialState>,\n  oneLook: OneLookInitialState,\n  appMessages: AppMessageInitialState,\n})({ router: ConnectedRouterInitialState });\n\nexport type RootState = typeof InitRootState;\n\nconst createCombineRootReducer = (history: History<any>) =>\n  combineReducers<RootState, RootActions>({\n    //@ts-ignore\n    auth: authReducer,\n    integrations: integrationsReducer,\n    analytics: analyticsReducer,\n    leads: leadsReducer,\n    discounts: discountsReducer,\n    paymentTermTemplates: paymentTermTemplatesReducer,\n    payments: paymentReducer,\n    presentationTemplates: presentationTemplateReducer,\n    tasks: taskReducer,\n    tools: toolReducer,\n    screenShares: screenSharesReducer,\n    components: componentsReducer,\n    tokens: tokenReducer,\n    validations: validationReducer,\n    router: connectRouter(history),\n  });\n\nexport const createRootReducer = (history: History<any>) => {\n  return ((state: RootState, action: RootActions) => {\n    if (!state) {\n      // LBC: If `router` is not set to undefined, connected-react-router won't initialize it correctly\n      //      with the current information.  No immediate \"errors\", just bad data causing issues.\n      state = InitRootState.set(\"router\", undefined);\n    }\n    const localRootReducer = createCombineRootReducer(history);\n    state = estimateComparisonReducer(state, action);\n    state = estimateReducer(state, action);\n    state = estimateGroupReducer(state, action);\n    state = estimateLineItemReducer(state, action);\n    state = estimateLineItemOptionReducer(state, action);\n    state = openingEstimationReducer(state, action);\n    state = imageReducer(state, action);\n    state = documentReducer(state, action);\n    state = estimateFinanceOptionReducer(state, action);\n    state = activatedPriceListReducer(state, action);\n    state = priceListReducer(state, action) as RootState;\n    state = productReducer(state, action) as RootState;\n    state = productOptionGroupReducer(state, action) as RootState;\n    state = productOptionReducer(state, action) as RootState;\n    state = jobsReducer(state, action);\n    state = measurementReducer(state, action);\n    state = roofFaceReducer(state, action);\n    state = wallFacadeReducer(state, action);\n    state = windowReducer(state, action);\n    state = doorReducer(state, action);\n    state = roomReducer(state, action);\n    state = elevationReducer(state, action);\n    state = deckReducer(state, action);\n    state = poolReducer(state, action);\n    state = usersReducer(state, action);\n    state = orgsReducer(state, action);\n    state = accessReducer(state, action);\n    state = routerReducer(state, action);\n    state = folderReducer(state, action);\n    state = paginationReducer(state, action);\n    state = fencingReducer(state, action);\n    state = fenceReducer(state, action);\n    state = segmentReducer(state, action);\n    state = presentationReducer(state, action);\n    state = estimateTemplateReducer(state, action);\n    state = noteReducer(state, action);\n    state = crmUserReducer(state, action);\n    state = eventResultReducer(state, action);\n    state = eventResultReasonReducer(state, action);\n    state = financeApplicationReducer(state, action);\n    state = skuReducer(state, action);\n    state = paymentRequestReducer(state, action);\n    state = eventReducer(state, action);\n    state = localRootReducer(state, action);\n    state = signedDocumentReducer(state, action);\n    state = reportReducer(state, action);\n    state = jobAttributeReducer(state, action);\n    state = webhookReducer(state, action);\n    state = customFormReducer(state, action);\n    state = rsfFormReducer(state as RsfFormRootRecord, action as rsfFormActions) as RootState;\n    state = pricePresentationReducer(\n      state as PricePresentationRootRecord,\n      action as PricePresentationActions,\n    ) as RootState;\n    state = oneLookReducer(state, action);\n    state = appMessageReducer(state, action);\n\n    return state;\n  }) as Reducer<RootState, RootActions>;\n};\n\nexport type RootActions =\n  | userActions\n  | orgActions\n  | authActions\n  | IntegrationsActions\n  | analyticsActions\n  | leadsActions\n  | discountsActions\n  | jobAttributeActions\n  | paymentActions\n  | estimateActions\n  | estimateGroupActions\n  | estimateLineItemActions\n  | estimateLineItemOptionActions\n  | openingEstimationActions\n  | imageActions\n  | taskActions\n  | financeActions\n  | eventActions\n  | presentationActions\n  | jobActions\n  | reportActions\n  | presentationTemplateActions\n  | toolActions\n  | paymentTermTemplateActions\n  | ComponentsActions\n  | documentActions\n  | screenShareActions\n  | estimateComparisonActions\n  | paginationActions\n  | tokenActions\n  | validationActions\n  | estimateFinanceOptionActions\n  | activatedPriceListActions\n  | priceListActions\n  | productActions\n  | productOptionGroupActions\n  | productOptionActions\n  | measurementActions\n  | roofFaceActions\n  | wallFacadeActions\n  | windowActions\n  | doorActions\n  | roomActions\n  | elevationActions\n  | deckActions\n  | poolActions\n  | accessActions\n  | routerActions\n  | folderActions\n  | fencingActions\n  | fenceActions\n  | segmentActions\n  | estimateTemplateActions\n  | noteActions\n  | crmUserActions\n  | eventResultActions\n  | eventResultReasonActions\n  | financeApplicationActions\n  | skuActions\n  | paymentRequestActions\n  | ActionsUnion<typeof routerActionsConnected>\n  | CallHistoryMethodAction\n  | signedDocumentActions\n  | webhookActions\n  | customFormActions\n  | rsfFormActions\n  | PricePresentationActions\n  | OneLookActions\n  | AppMessageActions;\n\nexport type ThunkResult<T> = ThunkAction<T, RootState, undefined, RootActions>;\n","import { createStore, applyMiddleware, compose, Store } from \"redux\";\nimport thunk, { ThunkDispatch, ThunkMiddleware } from \"redux-thunk\";\nimport { RootState, RootActions, createRootReducer } from \"./reducers\";\nimport { composeWithDevTools, EnhancerOptions } from \"redux-devtools-extension\";\nimport { createBrowserHistory } from \"history\";\nimport { routerMiddleware } from \"connected-react-router\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\nexport const history = createBrowserHistory({\n  basename: \"/\",\n});\nStoreRegistry.set(\"history\", history);\n\n//TODO: Need to only do this is staging\nconst options: EnhancerOptions = { trace: true, traceLimit: 25 } as any as EnhancerOptions;\nconst composeEnhancers: typeof compose = composeWithDevTools(options);\nexport type RootDispatchType = ThunkDispatch<RootState, {}, RootActions>;\nexport type RootStoreType = Store<RootState, RootActions> & { dispatch: RootDispatchType };\nexport type RootGetState = () => RootState;\n\nexport const store: RootStoreType = createStore<RootState, RootActions, ThunkMiddleware<RootState, RootActions>, {}>(\n  createRootReducer(history),\n  //required to make all 'future' typings happy\n  //@ts-ignore\n  composeEnhancers(applyMiddleware(thunk, routerMiddleware(history))),\n);\n","import * as Immutable from \"immutable\";\nimport { Action } from \"redux\";\n\nconst validateNextState = <S extends Immutable.Record<any>, A extends Action>(\n  nextState: S,\n  reducerName: string,\n  action: A,\n): void => {\n  // eslint-disable-next-line no-undefined\n  if (nextState === undefined) {\n    throw new Error(\n      'Reducer \"' +\n        reducerName +\n        '\" returned undefined when handling \"' +\n        action.type +\n        '\" action. To ignore an action, you must explicitly return the previous state.',\n    );\n  }\n};\n\nexport const combineReducers = <S extends Immutable.Record<any>, A extends Action>(reducers: Object): Function => {\n  const reducerKeys = Object.keys(reducers);\n\n  const defaultState = Immutable.Record<any>({})();\n\n  //@ts-ignore\n  return (inputState: S = defaultState, action: A): S => {\n    return inputState.withMutations((temporaryState) => {\n      reducerKeys.forEach((reducerName) => {\n        const reducer = reducers[reducerName];\n\n        if (!_.includes(reducerKeys, reducerName)) {\n          return temporaryState;\n        }\n\n        const currentDomainState = temporaryState.get(reducerName);\n        const nextDomainState = reducer(currentDomainState, action);\n\n        validateNextState<S, A>(nextDomainState, reducerName, action);\n\n        temporaryState.set(reducerName, nextDomainState);\n      });\n    });\n  };\n};\n","import { store } from \"app2/src/store\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport * as authActions from \"./reducers/auth.actions\";\nimport { authService } from \"./helpers/Auth.service\";\nimport { remoteStorage } from \"app2/src/api/remoteStorage.service\";\n\nStoreRegistry.setStore(store);\nStoreRegistry.set(\"window\", window);\nStoreRegistry.set(\"authService\", authService);\nStoreRegistry.set(\"remoteStorage\", remoteStorage);\n\n// load any saved authentication information\nstore.dispatch(\n  authActions.Actions.setTokens({\n    token: authService.getToken(),\n    refreshToken: authService.getRefreshToken(),\n  }),\n);\n","import { StoreRegistry } from \"../storeRegistry\";\nimport { RootStoreType } from \"../store\";\nimport { RootState } from \"../reducers\";\n\nclass Subscriber {\n  protected subscribers: { string: ((data: any) => void)[] } = {} as { string: ((data: any) => void)[] };\n  private _store: RootStoreType;\n  private _prevState: RootState;\n\n  constructor() {\n    this._store = StoreRegistry.getStore();\n    this._store.subscribe(this.callback);\n    this._prevState = this._store.getState();\n  }\n\n  public subscribe<T>(path: string, fn: (data: T) => void): () => void {\n    if (this.subscribers.hasOwnProperty(path)) {\n      this.subscribers[path].push(fn);\n    } else {\n      this.subscribers[path] = [fn];\n    }\n\n    // return \"unsubscribe\" function\n    return () => {\n      this.subscribers[path] = this.subscribers[path].filter((s) => s !== fn);\n    };\n  }\n\n  public reset() {\n    this.subscribers = {} as { string: ((data: any) => void)[] };\n  }\n\n  protected callback = () => {\n    const newState = this._store.getState();\n\n    Object.keys(this.subscribers).forEach((key) => {\n      const path = key.split(\".\");\n\n      if (this._prevState.getIn(path) !== newState.getIn(path)) {\n        this.subscribers[key].forEach((cb) => cb(newState.getIn(path)));\n      }\n    });\n\n    this._prevState = newState;\n  };\n}\n\nexport const subscriber = new Subscriber();\n","import { useState, useSelector } from \"app2/src/storeRegistry\";\nimport { subscriber } from \"app2/src/helpers/Subscribe\";\nimport { Permissions, AclKeys, AclValues, UserRecord } from \"../records/UserRecord\";\nimport { Map, List } from \"immutable\";\nimport { OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { SettingsAclKeys, SettingsAclValues } from \"app2/src/records/Settings\";\nimport { PreferenceAclKeys, PreferenceAclValues } from \"app2/src/records/Preference\";\nimport { OrgAclType } from \"app/src/Models/Org\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\nimport { toUnderscore } from \"app2/src/helpers/Format\";\n\nclass AclPolicy {\n  public acl: Permissions;\n  public currentUser: UserRecord;\n  public org: OrgRecord;\n  protected _unsubscribeAcl: () => void;\n  protected _unsubscribeUser: () => void;\n  protected _savedPrefAcl = Map<string, List<string>>();\n  protected _savedSetAcl = Map<string, List<string>>();\n  protected _subscribers = List<() => void>();\n\n  constructor() {\n    this.acl = useState().getIn([\"users\", \"currentUser\", \"permissions\"]);\n    this.currentUser = useState().getIn([\"users\", \"currentUser\"]);\n    if (this.currentUser) {\n      this.org = useState().getIn([\"orgs\", \"orgsById\", this.currentUser.org_id]);\n    }\n\n    this._unsubscribeAcl = subscriber.subscribe(\"users.currentUser.permissions\", (data: Permissions) => {\n      this.acl = data;\n      this._subscribers.forEach((callback) => callback());\n    });\n\n    this._unsubscribeUser = subscriber.subscribe(\"users.currentUser\", (data: UserRecord) => {\n      this.currentUser = data;\n      if (this.currentUser) {\n        this.org = useState().getIn([\"orgs\", \"orgsById\", this.currentUser.org_id]);\n      }\n      this._subscribers.forEach((callback) => callback());\n    });\n  }\n\n  public subscribe(fn: () => void): () => void {\n    this._subscribers = this._subscribers.push(fn);\n    // return \"unsubscribe\" function\n    return () => {\n      this._subscribers = this._subscribers.filter((s) => s !== fn);\n    };\n  }\n\n  public update() {\n    this.acl = useState().getIn([\"users\", \"currentUser\", \"permissions\"]);\n    this.currentUser = useSelector(denormalizedReduxUser);\n    this.org = useState().getIn([\"orgs\", \"orgsById\", this.currentUser.org_id]);\n  }\n\n  public can(\n    action: AclValues | SettingsAclValues | PreferenceAclValues,\n    name: AclKeys | SettingsAclKeys | PreferenceAclKeys,\n    exactMatch = false,\n  ): boolean {\n    if (!this.acl) {\n      return false;\n    }\n\n    if (name.indexOf(\"org_\") === 0) {\n      return this.tools(name.substr(4), action);\n    }\n\n    if (name.indexOf(\"orgpref_\") === 0) {\n      return this.preferencesSetup(name.substr(8), action);\n    }\n\n    if (name.indexOf(\"orgset_\") === 0) {\n      return this.settingsSetup(name.substr(7), action);\n    }\n\n    const resource = toUnderscore(name);\n    const mappedAction = this.mapAction(action);\n\n    if (!_.isArray(this.acl.get(resource))) {\n      return false;\n    }\n\n    if (\n      _.any(this.acl.get(resource), (defined: string) => {\n        if (exactMatch) {\n          return defined === mappedAction;\n        }\n        return defined.indexOf(mappedAction) === 0;\n      })\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  public orgCan(kind: \"setting\" | \"preference\" | \"layered\", key: OrgAclType, action: string): boolean {\n    let acl, permission;\n\n    switch (kind) {\n      case \"setting\":\n        acl = this.org.settings.acl;\n        permission = acl.get(key) || [];\n        break;\n      case \"preference\":\n        acl = this.org.preferences.acl;\n        permission = acl.get(key) || [];\n        break;\n      case \"layered\":\n        permission = this.fetchAcl(key);\n        break;\n    }\n\n    return permission.includes(action);\n  }\n\n  private fetchAcl(key: OrgAclType | SettingsAclKeys | PreferenceAclKeys): List<string> {\n    this._savedPrefAcl = this._savedPrefAcl || this.pluckAcl(this.org.preferences.config);\n    this._savedSetAcl = this._savedSetAcl || this.pluckAcl(this.org.settings.config);\n\n    let pref = this.org.preferences.acl.get(key as PreferenceAclKeys);\n    if (!pref) {\n      pref = this._savedPrefAcl.get(key);\n    }\n\n    let set = this.org.settings.acl.get(key as SettingsAclKeys) as List<string>;\n    if (!set) {\n      set = this._savedSetAcl.get(key);\n    }\n\n    if (!pref) {\n      return set || List<string>();\n    }\n\n    if (!set) {\n      return pref || List<string>();\n    }\n\n    const merged = List<string>(\n      _.intersection((pref as any as List<string>).toArray(), (set as any as List<string>).toArray()),\n    );\n    return merged;\n  }\n\n  private pluckAcl(config: Map<string, string>): Map<string, List<string>> {\n    const keys = config.keySeq();\n    let result: Map<string, List<string>> = Map();\n\n    keys.forEach((key) => {\n      result = result.set(key, config.getIn([key, \"acl\"]));\n    });\n\n    return result;\n  }\n\n  private tools(name: string, action: string): boolean {\n    const tools = this.org.settings.acl.get(name as SettingsAclKeys) || List<string>();\n    return _.include(tools.toArray(), action);\n  }\n\n  private preferencesSetup(name: string, action: string): boolean {\n    return this.orgCan(\"preference\", name as any as OrgAclType, action);\n  }\n\n  private settingsSetup(name: string, action: string): boolean {\n    return this.orgCan(\"setting\", name as any as OrgAclType, action);\n  }\n\n  private mapAction(action: string) {\n    return action.replace(\"destroy\", \"delete\");\n  }\n}\n\nexport const Acl = new AclPolicy();\n","import * as ng from \"angular\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IUser } from \"app/src/Models/User\";\nimport { IFlash } from \"app/src/Common/FlashService\";\nimport { INavDisplayArgs } from \"app/src/Jobs/JobShowCtrl\";\nimport { JobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { IJob } from \"app/src/Models/Job\";\nimport * as angulartics from \"angulartics\";\nimport { TransitionService } from \"@uirouter/angularjs\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { JobShowTourService } from \"../Common/Tours/JobShowTourService\";\nimport { JobInfoTourService } from \"../Common/Tours/JobInfoTourService\";\nimport { RootStoreType } from \"app2/src/store\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getAuthorization } from \"app2/src/selectors/token.selectors\";\nimport { currentUserOrgId } from \"app2/src/selectors/user.selectors\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { currentAccessUid } from \"app2/src/reducers/auth.selectors\";\n\nexport interface IHeaderShowArgs {\n  show: boolean;\n}\n\nexport interface IHeaderSearchArgs {\n  searchString?: string;\n}\n\nexport class HeaderCtrl {\n  public job: IJob;\n  public user: IUser;\n  public search = \"\";\n  public navDisplay = true;\n  public showSearchBar = false;\n  public isNavCollapsed = true;\n  public adUrl: string;\n  public testimonial: any;\n  public hidden = false;\n  public store: RootStoreType;\n  public _cleanupListeners: Function[] = [];\n  public authUser = useSelector(currentAccessUid);\n\n  public static $inject = [\n    \"Session\",\n    \"Flash\",\n    \"JobFetcher\",\n    \"$state\",\n    \"$scope\",\n    \"$rootScope\",\n    \"$location\",\n    \"$timeout\",\n    \"$analytics\",\n    \"$transitions\",\n    \"BaseConfig\",\n    \"JobShowTourService\",\n    \"JobInfoTourService\",\n    \"Repository\",\n  ];\n  constructor(\n    private Session: ISession,\n    public Flash: IFlash,\n    public JobFetcher: JobFetcherService,\n    public $state: ng.ui.IStateService,\n    private $scope: ng.IScope,\n    public $rootScope: ng.IRootScopeService,\n    private $location: ng.ILocationService,\n    public $timeout: ng.ITimeoutService,\n    private $analytics: angulartics.IAnalyticsService,\n    public $transitions: TransitionService,\n    public BaseConfig: IBaseConfig,\n    public JobShowTourService: JobShowTourService,\n    public JobInfoTourService: JobInfoTourService,\n    public Repository: IRepository,\n  ) {\n    this.constructorInit();\n    this.user = Session.currentUser;\n\n    this.hidden = this.$state.params[\"header\"] === \"false\" ? true : false;\n\n    this._cleanupListeners.push(\n      $rootScope.$on(\"auth:login\", (event: ng.IAngularEvent, user: IUser) => {\n        this.user = user;\n      }),\n    );\n\n    this._cleanupListeners.push(\n      $rootScope.$on(\"auth:logout\", () => {\n        this.user = null;\n      }),\n    );\n\n    this._cleanupListeners.push(\n      $rootScope.$on(\"nav:display\", (event: ng.IAngularEvent, args: INavDisplayArgs) => {\n        this.navDisplay = args.navDisplay;\n      }),\n    );\n\n    this._cleanupListeners.push(\n      $rootScope.$on(\"header:search\", (event: ng.IAngularEvent, args: IHeaderShowArgs) => {\n        this.clearSearchText();\n        this.showSearchBar = args.show;\n      }),\n    );\n\n    // noinspection TypeScriptValidateTypes\n    this._cleanupListeners.push(\n      $transitions.onStart({}, () => {\n        this.showSearchBar = false;\n      }),\n    );\n\n    this._cleanupListeners.push(\n      $rootScope.$on(\"header:search_update\", (event: ng.IAngularEvent, args: IHeaderSearchArgs) => {\n        this.search = args.searchString;\n      }),\n    );\n\n    $scope.$on(\"$destroy\", () => {\n      _.each(this._cleanupListeners, (func: () => void) => {\n        if (_.isFunction(func)) {\n          func();\n        }\n      });\n    });\n\n    this.refreshQuery = this.refreshQuery.bind(this);\n  }\n\n  public constructorInit() {}\n\n  public getCurrentStateName(): string {\n    return this.$state.current.name.replace(/\\./g, \"_\");\n  }\n\n  public isCurrentPage(page: string): boolean {\n    return this.$location.path() === page;\n  }\n\n  public isCurrentState(name: string): boolean {\n    return this.$state.current.name === name;\n  }\n\n  public help(type) {\n    switch (type) {\n      case \"estimator\":\n        this.$analytics.eventTrack(\"estimate tour requested\", {\n          category: \"Job Header\",\n          navDisplay: !this.navDisplay,\n        });\n        this.$rootScope.$broadcast(\"header:help:estimator\");\n        break;\n      case \"job_info\":\n        this.$analytics.eventTrack(\"job tour requested\", {\n          category: \"Job Header\",\n          navDisplay: !this.navDisplay,\n        });\n        this.JobInfoTourService.help().then(() => {\n          this.$rootScope.$broadcast(\"header:help:job_info\");\n          this.JobShowTourService.help();\n        });\n        break;\n    }\n  }\n\n  public searchChanged() {\n    this.$rootScope.$broadcast(\"header:search_change\", <IHeaderSearchArgs>{ searchString: this.search });\n  }\n\n  public clearSearchText() {\n    this.search = \"\";\n  }\n\n  public refreshQuery() {\n    this.$rootScope.$broadcast(\"updateJobList\");\n  }\n\n  public showFinanceTab() {\n    const hasPermissions =\n      Acl.can(\"payment_report\", \"payment\", true) ||\n      Acl.can(\"deposit_report\", \"payment\", true) ||\n      Acl.can(\"chargeback_report\", \"payment\", true);\n    const tokenAuthorized = useSelector((state: RootState) =>\n      getAuthorization(state, { orgId: currentUserOrgId(state), integration: \"occ_pay\" }),\n    );\n    return hasPermissions && tokenAuthorized;\n  }\n\n  public navigateToOccApp() {\n    const accessUid = useSelector((state: RootState) => currentAccessUid(state));\n\n    location.href = this.BaseConfig.APP_V2_URL + \"/orgs?authUser=\" + accessUid;\n  }\n}\n","import { IUser } from \"app/src/Models/User\";\nimport { IOrgFetcherService } from \"app/src/Orgs/OrgFetcherService\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport * as angulartics from \"angulartics\";\nimport { IUserPreference, UserPrefConfigType } from \"app/src/Models/UserPreference\";\nimport { IBaseConfig } from \"./IBaseConfig\";\nimport { IRepository } from \"./Repository\";\nimport { OrgAclType } from \"../Models/Org\";\nimport { subscriber } from \"app2/src/helpers/Subscribe\";\nimport { StoreRegistry, dispatch, useState, useSelector } from \"app2/src/storeRegistry\";\nimport { Deferred } from \"app2/src/services/deferred\";\nimport * as authActions from \"app2/src/reducers/auth.actions\";\nimport * as userActions from \"app2/src/reducers/user.actions\";\nimport * as hoverActions from \"app2/src/reducers/integrations/hover.actions\";\nimport * as quickMeasureActions from \"app2/src/reducers/integrations/quickMeasure.actions\";\nimport * as paymentActions from \"app2/src/reducers/payment.actions\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport { IAuthService } from \"app2/src/helpers/Auth.service\";\nimport { Dispatch, setUserProperties } from \"app2/src/helpers/Analytics\";\nimport { Actions as RoofScopeActions } from \"app2/src/reducers/integrations/roofscope.actions\";\nimport { currentUserOrgId, denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\nimport { List } from \"immutable\";\nimport { currentUser as currentUserSelector } from \"app2/src/selectors/userCommon.selectors\";\nimport { UserRecord } from \"app2/src/records/UserRecord\";\nimport { Nullable } from \"app2/src/records\";\nimport { setupUser } from \"app2/src/services/LiveChat.service\";\nimport { OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { byId as orgsById } from \"app2/src/selectors/org.selectors\";\nimport { toUnderscore } from \"app2/src/helpers/Format\";\n\nexport enum Actions {\n  read = 0,\n  create = 1,\n  update = 2,\n  destroy = 3,\n}\n\nconst authService = StoreRegistry.get<IAuthService>(\"authService\");\n\nexport interface ISession {\n  currentUser: IUser;\n  preferences: IUserPreference;\n  permissions: any;\n\n  logout(): ng.IPromise<any>;\n  refreshToken(): ng.IPromise<boolean>;\n  hasToken(): boolean;\n  getToken(): string;\n  getRefreshToken(): string;\n  can(action: Actions | string, name: string, object?: any): ng.IPromise<boolean>;\n  canReport(report: string, action: string | string[]): ng.IPromise<boolean>;\n  fetchUserPref(key): ng.IPromise<boolean>;\n  setTourPref(key: UserPrefConfigType, value: boolean): void;\n  loadPreference(): ng.IPromise<any>;\n  savePreference(): ng.IPromise<any>;\n  stripAuthUser(): void;\n}\n\nexport interface ISessionObject {\n  id: number;\n  email: string;\n  token: string;\n}\n\nexport class Session implements ISession {\n  public currentUser: IUser;\n  public preferences: IUserPreference;\n  public permissions: any;\n  public cannot: any;\n  public authService: IAuthService = authService;\n  private loggedOut: IUser;\n  private _unsubscribeToken: () => void;\n  private _unsubscribeLogin: () => void;\n  private _unsubscribeRefreshToken: () => void;\n  private _unsubscribeAccessUid: () => void;\n  private _userDeferred: Deferred<IUser> = Deferred.defer<IUser>();\n  private _currentToken: string;\n  private _currentAccessUid: string;\n\n  public static $inject = [\n    \"$http\",\n    \"Repository\",\n    \"BaseConfig\",\n    \"OrgFetcher\",\n    \"VERSION\",\n    \"$rootScope\",\n    \"$analytics\",\n    \"$q\",\n    \"$state\",\n    \"$window\",\n  ];\n  public constructor(\n    private $http: ng.IHttpService,\n    private Repository: IRepository,\n    public BaseConfig: IBaseConfig,\n    public OrgFetcher: IOrgFetcherService,\n    public VERSION: string,\n    private $rootScope: RsfRootScope,\n    private $analytics: angulartics.IAnalyticsService,\n    public $q: ng.IQService,\n    public $state: ng.ui.IStateService,\n    public $window: ng.IWindowService,\n  ) {\n    this.stripAuthUser();\n    authService.initialize();\n    const saved: ISessionObject = authService.getCurrentUser();\n    this.loggedOut = { $promise: this.$q.defer().promise } as IUser;\n    this.loadAuth();\n    Dispatch.analytics = $analytics;\n\n    this._unsubscribeToken = subscriber.subscribe<string>(\"auth.token\", (token: string) => {\n      if (token === this._currentToken) {\n        return;\n      }\n      this._currentToken = token;\n      this.setHTTPHeaderDefaults(token);\n      this.loadAuth();\n    });\n\n    this._unsubscribeAccessUid = subscriber.subscribe<string>(\"auth.accessUid\", (uid: string) => {\n      this.changeOrgs(uid);\n    });\n\n    this._unsubscribeRefreshToken = subscriber.subscribe<boolean>(\n      \"auth.refreshTokenExpired\",\n      (refreshToken: boolean) => {\n        if (refreshToken) {\n          authService.logout(authService.getRefreshToken()).then(() => {\n            //set window location to root url to force refresh, clear cache\n            //@ts-ignore\n            this.$window.location = BaseConfig.APP_URL;\n          });\n        }\n      },\n    );\n\n    this._unsubscribeLogin = subscriber.subscribe<IUser>(\"users.currentUser\", (user: IUser) => {\n      if (!user) {\n        this.currentUser = this.loggedOut;\n        return;\n      }\n\n      this.setupReduxUser();\n      if (!this.preferences) {\n        this.loadPreference();\n      }\n    });\n\n    if (saved && saved.token) {\n      this.setHTTPHeaderDefaults(saved.token);\n\n      // check if it's already done, else wait\n      if (useState().getIn([\"users\", \"currentUser\"])) {\n        this.setupReduxUser();\n      } else {\n        this._userDeferred = Deferred.defer<IUser>();\n\n        this.currentUser = {\n          $promise: this._userDeferred.promise as any as ng.IPromise<IUser>,\n        } as any as IUser;\n      }\n\n      this.currentUser.$promise.then(() => {\n        this.setupNewUser();\n        this.loadPreference();\n      });\n    } else {\n      this.currentUser = this.loggedOut;\n    }\n\n    const store = StoreRegistry.getStore();\n    let lastUser: Nullable<UserRecord> = undefined;\n    let lastOrg: Nullable<OrgRecord> = undefined;\n    store.subscribe(() => {\n      const state = store.getState();\n      const currentUser = currentUserSelector(state);\n      const currentOrgId = currentUserOrgId(state);\n      const currentOrg = orgsById(state)?.get(currentOrgId) as Nullable<OrgRecord>;\n\n      if (\n        lastUser?.id !== currentUser?.id ||\n        lastUser?.org_id !== currentUser?.org_id ||\n        lastOrg?.id !== currentOrg?.id ||\n        lastOrg?.name !== currentOrg?.name\n      ) {\n        lastUser = currentUser;\n        lastOrg = currentOrg;\n        setupUser(currentUser, currentOrg);\n      }\n    });\n  }\n\n  public changeOrgs(uid) {\n    if (uid === this._currentAccessUid || !uid) {\n      return;\n    }\n    this._currentAccessUid = uid;\n    this.setHTTPHeaderDefaults(\"\", uid);\n    this.loadAuth().then(() => {\n      this.permissions = undefined;\n      this.setAnalyticsTracking();\n    });\n  }\n\n  public hasToken = (): boolean => {\n    return authService.hasToken();\n  };\n\n  public getToken() {\n    return authService.getToken();\n  }\n\n  public getRefreshToken() {\n    return authService.getRefreshToken();\n  }\n\n  public logout = (): ng.IPromise<any> => {\n    if (this.currentUser !== this.loggedOut) {\n      return this.currentUser.$promise.then(() => {\n        return authService.logout(this.getRefreshToken()).then(() => {\n          this.$rootScope.$broadcast(\"auth:logout\");\n          this.$analytics.setUsername(undefined);\n          this.currentUser = this.loggedOut;\n          this.$rootScope.currentUser = this.loggedOut;\n          this.permissions = undefined;\n          this.preferences = undefined;\n        }) as ng.IPromise<void>;\n      });\n    } else {\n      const defer = this.$q.defer<void>();\n      defer.resolve();\n      return defer.promise;\n    }\n  };\n\n  public refreshToken = (): ng.IPromise<any> => {\n    if (!authService.hasRefreshToken()) {\n      return;\n    }\n\n    const promise = authService.refreshToken(authService.getRefreshToken());\n\n    promise.then(\n      (data: any) => {\n        if (data) {\n          this.currentUser = this.Repository.User.fromJSON(data.user);\n          this.currentUser.$promise = promise.then((data: any) => {\n            return <IUser>data.user;\n          }) as any as ng.IPromise<IUser>;\n\n          this.setHTTPHeaderDefaults(data.token);\n          this.$rootScope.$broadcast(\"auth:login\", this.currentUser);\n\n          if (!this.preferences) {\n            this.loadPreference();\n          }\n\n          this.setupNewUser();\n          return this.currentUser;\n        }\n      },\n      () => {\n        this.logout();\n      },\n    );\n\n    return promise as any as ng.IPromise<any>;\n  };\n\n  public fetchUserPref(key): ng.IPromise<boolean> {\n    if (!this.currentUser || !this.preferences) {\n      return this.asPromised(false);\n    }\n\n    return this.preferences.$promise.then(() => {\n      let pref: boolean;\n      if (key === \"job_list_card_view\") {\n        pref = this.preferences[key.toString()];\n      } else {\n        pref = this.preferences.config[key.toString()];\n      }\n      if (_.isUndefined(pref)) {\n        return true;\n      }\n\n      return pref;\n    });\n  }\n\n  public setTourPref(key: UserPrefConfigType, value: boolean): void {\n    this.preferences.config[key.toString()] = value;\n  }\n\n  /**\n   * If action is an array, it is an 'any', not 'all'\n   */\n  public canReport(report: string, action: string | string[]): ng.IPromise<boolean> {\n    let reportSettingsName = report.replace(\"eagleview\", \"eagleview_roofing\");\n    reportSettingsName = reportSettingsName.replace(\"quick_measure\", \"quick_measure_roofing\");\n    reportSettingsName = reportSettingsName.replace(\"roof_scope\", \"roof_scope_roofing\");\n    reportSettingsName = reportSettingsName.replace(\"plnar\", \"plnar_interior\");\n\n    if (!this.currentUser.org.reportsEnabled(reportSettingsName)) {\n      return this.asPromised(false);\n    }\n\n    if (_.isArray(action)) {\n      const promises = _.map(action, (a) => this.can(a as any as Actions, report));\n      return this.$q.all(promises).then((results: boolean[]) => _.any(results));\n    }\n\n    return this.can(action as any as Actions, report);\n  }\n\n  public can = (action: Actions, name: string, object: any = null): ng.IPromise<boolean> => {\n    if (!this.currentUser || !this.currentUser.permissions) {\n      return this.asPromised(false);\n    }\n\n    if (name.indexOf(\"org_\") === 0) {\n      return this.asPromised(this.tools(name.substr(4), action));\n    }\n\n    if (name.indexOf(\"orgpref_\") === 0) {\n      return this.asPromised(this.preferencesSetup(name.substr(8), action));\n    }\n\n    if (name.indexOf(\"orgset_\") === 0) {\n      return this.asPromised(this.settingsSetup(name.substr(7), action));\n    }\n\n    this.permissions = this.permissions || this.currentUser.permissions;\n\n    const resource: string = toUnderscore(name);\n    const mappedAction: string = this.mapAction(_.isString(action) ? action : Actions[action]);\n\n    if (!_.isArray(this.permissions[resource])) {\n      return this.asPromised(false);\n    }\n\n    let matched_permission = \"\";\n    if (\n      _.any(this.permissions[resource], (defined: string) => {\n        matched_permission = defined;\n        return defined.indexOf(mappedAction) === 0;\n      })\n    ) {\n      if (!object) {\n        return this.asPromised(true);\n      }\n      if (!object.$promise) {\n        const deferred = this.$q.defer();\n        object.$promise = deferred.promise;\n        deferred.resolve();\n      }\n      switch (resource) {\n        case \"org\":\n          return this.orgPolicy(object);\n        case \"user\":\n          return this.userPolicy(object, matched_permission);\n        default:\n          return this.asPromised(true);\n      }\n    }\n    return this.asPromised(false);\n  };\n\n  public orgPolicy(object: any): ng.IPromise<any> {\n    return object.$promise.then(() => {\n      if (this.currentUser.org_id === object.id || object.id === undefined) {\n        return this.asPromised(true);\n      } else {\n        return this.OrgFetcher.getTree(this.currentUser.org_id, object.id).then((resp: any) => {\n          return resp;\n        });\n      }\n    });\n  }\n\n  public userPolicy(object: any, matched_permission: string): ng.IPromise<any> {\n    return object.$promise.then(() => {\n      if (this.currentUser.id !== object.id && matched_permission === \"update_self\") {\n        return this.asPromised(false);\n      } else {\n        return this.asPromised(true);\n      }\n    });\n  }\n\n  public loadPreference(): ng.IPromise<any> {\n    const id = this.currentUser.preferences_id;\n    const user_id = this.currentUser.id;\n    if (!this.preferences) {\n      this.preferences = this.Repository.UserPreference.get({ id: id, user_id: user_id });\n    }\n    return this.preferences.$promise;\n  }\n\n  public savePreference(): ng.IPromise<any> {\n    return this.preferences.$save();\n  }\n\n  // again, need to really separate auth from angular, see loadAuth comment below.\n  // for now this is being tested via the AppSpec.\n  public stripAuthUser() {\n    const [path, params] = this.$window.location.href.split(\"?\");\n    const urlParams = new URLSearchParams(params);\n    if (urlParams.get(\"authUser\") !== null) {\n      const accessUid = urlParams.get(\"authUser\");\n      dispatch(authActions.AsyncActions.changeAccessUid(accessUid));\n      const cleanUrl = new URL(path);\n      urlParams.forEach((v, k) => {\n        if (k === \"authUser\") return;\n        cleanUrl.searchParams.append(k, v);\n      });\n      history.replaceState(null, \"\", cleanUrl.href);\n    }\n  }\n\n  private asPromised(value: boolean): ng.IPromise<boolean> {\n    const deferred: ng.IDeferred<boolean> = this.$q.defer();\n    deferred.resolve(value);\n    return deferred.promise;\n  }\n\n  private tools(name: string, action: Actions): boolean {\n    const tools: any = (this.currentUser.org.settings || {})[\"acl\"] || {};\n\n    return _.include(tools[name] || [], action);\n  }\n\n  private preferencesSetup(name: string, action: Actions | string): boolean {\n    return this.currentUser.org.can(\"preference\", name as any as OrgAclType, action);\n  }\n\n  private settingsSetup(name: string, action: Actions | string): boolean {\n    return this.currentUser.org.can(\"setting\", name as any as OrgAclType, action);\n  }\n\n  private setupNewUser = () => {\n    this.permissions = this.currentUser.permissions;\n    this.$rootScope.currentUser = this.currentUser;\n    this.setAnalyticsTracking();\n    dispatch(tokenActions.AsyncActions.getAuthorizedTokens(this.currentUser.org_id));\n  };\n\n  private setHTTPHeaderDefaults(token = \"\", accessUid = \"\") {\n    if (token) {\n      this.$http.defaults.headers.common.Authorization = \"Bearer \" + token;\n    }\n\n    if (accessUid) {\n      this.$http.defaults.headers.common[\"x-rsf-auth\"] = accessUid;\n    } else if (authService.hasAccessUid()) {\n      this.$http.defaults.headers.common[\"x-rsf-auth\"] = authService.getAccessUid();\n    } else if (this.$http.defaults.headers.common[\"x-rsf-auth\"]) {\n      delete this.$http.defaults.headers.common[\"x-rsf-auth\"];\n    }\n  }\n\n  private setAnalyticsTracking() {\n    this.currentUser.$promise.then(() => {\n      setUserProperties({\n        userId: this.currentUser.id,\n        orgId: this.currentUser.org_id,\n        appVersion: this.VERSION,\n      });\n      // @ts-ignore\n      gtag(\"set\", this.BaseConfig.GA_KEY, {\n        user_id: this.currentUser.id,\n      });\n    });\n  }\n\n  private mapAction(action: string) {\n    return action.replace(\"destroy\", \"delete\");\n  }\n\n  private setupReduxUser() {\n    const userRecord = useSelector(denormalizedReduxUser);\n    if (!userRecord) {\n      return;\n    }\n    this.currentUser = this.Repository.User.fromJSON(userRecord.toJS());\n    this.currentUser.$promise = this._userDeferred.promise as any as ng.IPromise<IUser>;\n    this._userDeferred.resolve(this.currentUser);\n    this.$rootScope.$broadcast(\"auth:login\", this.currentUser);\n\n    if (this._userDeferred) {\n      this._userDeferred.resolve(this.currentUser);\n    }\n\n    this._userDeferred = Deferred.defer<IUser>();\n  }\n\n  /**\n   * TODO: This needs moved to a non angular class.  Testing this is impossible without major overhauling.\n   * fetchMock isn't setup for angular tests, and this uses fetch.  And getting mockStore setup, and all the helper\n   * methods in angular isn't currently supported.\n   */\n  private loadAuth(): Promise<any> {\n    if (!this.hasToken()) {\n      return Promise.reject();\n    }\n\n    dispatch(authActions.Actions.setAccessUid(authService.getAccessUid()));\n\n    return dispatch(userActions.AsyncActions.getCurrentUserByEmail(authService.getCurrentUser().email)).then(() => {\n      const currentUser = useSelector(denormalizedReduxUser);\n      dispatch(paymentActions.AsyncActions.getAuthorized(currentUser.org_id));\n      dispatch(hoverActions.AsyncActions.getAuthorized());\n      dispatch(quickMeasureActions.AsyncActions.getAuthorized());\n\n      if (!authService.hasAccessUid()) {\n        authService.setAccessUid(currentUser.current_access_uid);\n        this._currentAccessUid = currentUser.current_access_uid;\n        dispatch(authActions.Actions.setAccessUid(currentUser.current_access_uid));\n      }\n\n      dispatch(\n        RoofScopeActions.setAuthorized(\n          (currentUser.getIn([\"permissions\", \"roof_scope\"]) || List()).indexOf(\"order\") !== -1,\n        ),\n      );\n    });\n  }\n}\n","import { Nullable } from \"app2/src/records\";\nimport { OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { getFullName, UserRecord } from \"app2/src/records/UserRecord\";\n\n/**\n * Sets up the LiveChatWidget with context data on user & org.\n * Should only ever be called with both but can handle nulls.\n * Catches anything to do with LiveChatWidget that might throw an error.\n *\n * @param user Nullable<UserRecord> - The current user record.\n * @param org Nullable<OrgRecord> - The current users org record\n * @returns\n */\nexport const setupUser = (user: Nullable<UserRecord>, org: Nullable<OrgRecord>) => {\n  const LiveChatWidget = (window as any).LiveChatWidget;\n  if (!LiveChatWidget) return;\n\n  // catching anything from LiveChatWidget that might throw an error\n  try {\n    if (user) {\n      LiveChatWidget.call(\"set_customer_name\", getFullName(user));\n      LiveChatWidget.call(\"set_customer_email\", user.email);\n    }\n\n    LiveChatWidget.call(\"set_session_variables\", {\n      userId: user?.id,\n      orgId: org?.id,\n      orgName: org?.name,\n    });\n  } catch (error) {\n    console.error(\"Error setting up LiveChatWidget:\", error);\n  }\n};\n","import { ISession, Actions } from \"app/src/Common/SessionService\";\n\nexport class RsfPermissions implements ng.IDirective {\n  public restrict = \"A\";\n  public scope = {\n    permissions: \"=\",\n    onObject: \"=\",\n  };\n\n  constructor(\n    private Session: ISession,\n    private $q: ng.IQService,\n  ) {}\n\n  public link = (scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes) => {\n    const permissionsOns: string[] = _.map(attrs[\"permissionsOn\"].split(\",\"), (v: string) => v.trim());\n    const permissions: string[] = _.map(attrs[\"rsfPermissions\"].split(\",\"), (v: string) => {\n      v = v.trim();\n      if (Actions[v]) {\n        return Actions[v];\n      }\n\n      return v;\n    });\n    // let permissions: string[] = _.map((Actions[attrs[\"rsfPermissions\"]] || attrs[\"rsfPermissions\"]).split(\",\"), (v: string) => v.trim());\n\n    const that = this;\n    element.hide();\n\n    let inverse = false;\n    if (\"inverse\" in attrs) {\n      inverse = true;\n    }\n\n    const startWatch = () => {\n      scope.$watch(\n        () => this.Session.currentUser.permissions,\n        function () {\n          const promises: ng.IPromise<boolean>[] = <ng.IPromise<boolean>[]>[];\n\n          _.each(permissions, (permission: string, idx: number) => {\n            // @ts-ignore\n            promises.push(that.Session.can(permission, permissionsOns[idx], scope[\"onObject\"]));\n          });\n\n          that.$q.all(promises).then((values: boolean[]) => {\n            if (_.all(values, (v: boolean) => v)) {\n              if (inverse) {\n                element.hide();\n              } else {\n                element.show();\n              }\n            } else {\n              if (inverse) {\n                element.show();\n              } else {\n                element.hide();\n              }\n            }\n          });\n        },\n      );\n    };\n\n    const userWatch = scope.$watch(\n      () => this.Session.currentUser,\n      (newValue, oldValue) => {\n        if (newValue === null || newValue === undefined) {\n          return;\n        }\n        userWatch();\n        if (this.Session.currentUser.$promise) {\n          this.Session.currentUser.$promise.then(() => {\n            //@ts-ignore\n            if (this.Session.currentUser.$promise.$$state === undefined) {\n              scope.$apply(() => {\n                startWatch();\n              });\n            } else {\n              startWatch();\n            }\n          });\n        } else {\n          startWatch();\n        }\n      },\n    );\n  };\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = (Session: ISession, $q: ng.IQService) => new RsfPermissions(Session, $q);\n    directive.$inject = [\"Session\", \"$q\"];\n    return directive;\n  }\n}\n","import { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\n\nexport class RsfConfirmationDialog implements ng.IDirective {\n  public restrict = \"A\";\n  public scope = {\n    rsfConfirmationMessage: \"@\",\n    rsfConfirmationDialog: \"&\",\n  };\n\n  constructor(\n    public $uibModal: ng.ui.bootstrap.IModalService,\n    public ConfirmDialog: IConfirmDialog,\n  ) {}\n\n  public link = (scope: ng.IScope, element: ng.IAugmentedJQuery) => {\n    const app = this;\n    element.bind(\"click\", function () {\n      app.ConfirmDialog.confirm(scope[\"rsfConfirmationMessage\"]).then(() => {\n        scope[\"rsfConfirmationDialog\"]({});\n      });\n    });\n  };\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = ($uibModal: ng.ui.bootstrap.IModalService, ConfirmDialog: IConfirmDialog) =>\n      new RsfConfirmationDialog($uibModal, ConfirmDialog);\n    directive.$inject = [\"$uibModal\", \"ConfirmDialog\"];\n    return directive;\n  }\n}\n","export class DecimalPlaces implements ng.IDirective {\n  public restrict = \"A\";\n\n  constructor() {}\n\n  public link = (scope: ng.IScope, ele: ng.IAugmentedJQuery, attrs) => {\n    ele.bind(\"keypress\", function (e) {\n      let decimals = \"[0-9]\";\n      for (let i = 1; i < parseInt(attrs.decimalPlaces); i++) {\n        decimals = decimals + decimals;\n      }\n      const expression = new RegExp(\"(.*)\\\\.\" + decimals);\n      const newVal = $(this).val() + (e.charCode !== 0 ? String.fromCharCode(e.charCode) : \"\");\n      if (attrs.decimalPlaces === \"0\") {\n        if (e.charCode === 46) {\n          e.preventDefault();\n        }\n      } else if (($(this).val() as any).search(expression) === 0 && newVal.length > ($(this).val() as any).length) {\n        e.preventDefault();\n      }\n    });\n  };\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = () => new DecimalPlaces();\n    return directive;\n  }\n}\n","import * as angulartics from \"angulartics\";\nimport { IJob } from \"app/src/Models/Job\";\n\nexport class JobAnalytics implements ng.IDirective {\n  public restrict = \"A\";\n\n  constructor(private $analytics: angulartics.IAnalyticsService) {}\n\n  public link = ($scope: ng.IScope, $element: ng.IAugmentedJQuery, $attrs: ng.IAttributes) => {\n    const trackingData: any = {};\n\n    (<IJob>$scope.$eval($attrs[\"jobAnalytics\"])).$promise.then((job: IJob) => {\n      trackingData.job = job.id;\n      trackingData.org = job.org_id;\n    });\n\n    _.each($attrs.$attr as any, (attr: string, name: string) => {\n      if (this._isProperty(name)) {\n        trackingData[this._propertyName(name)] = $attrs[name];\n        $attrs.$observe(name, (value) => {\n          trackingData[this._propertyName(name)] = value;\n        });\n      }\n    });\n\n    angular.element($element[0]).bind(\"click\", ($event) => {\n      const eventName = $attrs.analyticsEvent || this._inferEventName($element[0]);\n      trackingData.eventType = $event.type;\n\n      if ($attrs.analyticsIf) {\n        if (!$scope.$eval($attrs.analyticsIf)) {\n          return; // Cancel this event if we don\"t pass the analytics-if condition\n        }\n      }\n      // Allow components to pass through an expression that gets merged on to the event properties\n      // eg. analytics-properites=\"myComponentScope.someConfigExpression.$analyticsProperties\"\n      if ($attrs.analyticsProperties) {\n        angular.extend(trackingData, $scope.$eval($attrs.analyticsProperties));\n      }\n      this.$analytics.eventTrack(eventName, trackingData);\n    });\n  };\n\n  private _isProperty(name) {\n    return (\n      name.substr(0, 9) === \"analytics\" &&\n      [\"On\", \"Event\", \"If\", \"Properties\", \"EventType\"].indexOf(name.substr(9)) === -1\n    );\n  }\n\n  private _propertyName(name) {\n    const s = name.slice(9); // slice off the \"analytics\" prefix\n    if (typeof s !== \"undefined\" && s !== null && s.length > 0) {\n      return s.substring(0, 1).toLowerCase() + s.substring(1);\n    } else {\n      return s;\n    }\n  }\n\n  private _isCommand(element) {\n    return (\n      [\"a:\", \"button:\", \"button:button\", \"button:submit\", \"input:button\", \"input:submit\"].indexOf(\n        element.tagName.toLowerCase() + \":\" + (element.type || \"\"),\n      ) >= 0\n    );\n  }\n\n  private _inferEventName(element) {\n    if (this._isCommand(element)) return element.innerText || element.value;\n    return element.id || element.name || element.tagName;\n  }\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = ($analytics: angulartics.IAnalyticsService) => new JobAnalytics($analytics);\n    directive.$inject = [\"$analytics\"];\n    return directive;\n  }\n}\n","export const countries = [\"United States\", \"Canada\", \"Mexico\", \"Dominican Republic\"];\n\nexport const countries_abbreviation = {\n  \"United States\": \"US\",\n  Canada: \"CA\",\n  Mexico: \"MX\",\n  \"Dominican Republic\": \"DO\",\n};\n\nexport const us_states = [\n  \"Alabama\",\n  \"Alaska\",\n  \"American Samoa\",\n  \"Arizona\",\n  \"Arkansas\",\n  \"California\",\n  \"Colorado\",\n  \"Connecticut\",\n  \"Delaware\",\n  \"District of Columbia\",\n  \"Federated States Of Micronesia\",\n  \"Florida\",\n  \"Georgia\",\n  \"Guam\",\n  \"Hawaii\",\n  \"Idaho\",\n  \"Illinois\",\n  \"Indiana\",\n  \"Iowa\",\n  \"Kansas\",\n  \"Kentucky\",\n  \"Louisiana\",\n  \"Maine\",\n  \"Marshall Islands\",\n  \"Maryland\",\n  \"Massachusetts\",\n  \"Michigan\",\n  \"Minnesota\",\n  \"Mississippi\",\n  \"Missouri\",\n  \"Montana\",\n  \"Nebraska\",\n  \"Nevada\",\n  \"New Hampshire\",\n  \"New Jersey\",\n  \"New Mexico\",\n  \"New York\",\n  \"North Dakota\",\n  \"North Carolina\",\n  \"Northern Mariana Islands\",\n  \"Ohio\",\n  \"Oklahoma\",\n  \"Oregon\",\n  \"Palau\",\n  \"Pennsylvania\",\n  \"Puerto Rico\",\n  \"Rhode Island\",\n  \"South Carolina\",\n  \"South Dakota\",\n  \"Tennessee\",\n  \"Texas\",\n  \"Utah\",\n  \"Vermont\",\n  \"Virgin Islands\",\n  \"Virginia\",\n  \"Washington\",\n  \"West Virginia\",\n  \"Wisconsin\",\n  \"Wyoming\",\n  \"Alberta\",\n  \"British Columbia\",\n  \"Manitoba\",\n  \"New Brunswick\",\n  \"Newfoundland\",\n  \"Nova Scotia\",\n  \"Ontario\",\n  \"Prince Edward Island\",\n  \"Quebec\",\n  \"Saskatchewan\",\n  \"Aguascalientes\",\n  \"Baja California Norte\",\n  \"Baja California Sur\",\n  \"Coahuila\",\n  \"Chihuahua\",\n  \"Colima\",\n  \"Campeche\",\n  \"Chiapas\",\n  \"Districto Federal\",\n  \"Durango\",\n  \"Guerrero\",\n  \"Guanajuato\",\n  \"Hidalgo\",\n  \"Jalisco\",\n  \"Michoacan\",\n  \"Morelos\",\n  \"Mexico\",\n  \"Nayarit\",\n  \"Nuevo Leon\",\n  \"Oaxaca\",\n  \"Puebla\",\n  \"Queretaro\",\n  \"Quintana Roo\",\n  \"Sinaloa\",\n  \"San Luis Potosi\",\n  \"Sonora\",\n  \"Tamaulipas\",\n  \"Tabasco\",\n  \"Tlaxcala\",\n  \"Veracruz\",\n  \"Yucatan\",\n  \"Zacatecas\",\n  \"Azua\",\n  \"Baoruco\",\n  \"Barahona\",\n  \"Dajabón\",\n  \"Distrito Nacional\",\n  \"Duarte\",\n  \"Elías Piña\",\n  \"El Seibo\",\n  \"Espaillat\",\n  \"Hato Mayor\",\n  \"Hermanas Mirabal\",\n  \"Independencia\",\n  \"La Altagracia\",\n  \"La Romana\",\n  \"La Vega\",\n  \"María Trinidad Sánchez\",\n  \"Monseñor Nouel\",\n  \"Monte Cristi\",\n  \"Monte Plata\",\n  \"Pedernales\",\n  \"Peravia\",\n  \"Puerto Plata\",\n  \"Samaná\",\n  \"Sánchez Ramírez\",\n  \"San Cristóbal\",\n  \"San José de Ocoa\",\n  \"San Juan\",\n  \"San Pedro de Macorís\",\n  \"Santiago\",\n  \"Santiago Rodríguez\",\n  \"Santo Domingo\",\n  \"Valverde\",\n];\n\nexport const us_states_abbreviation = {\n  Alabama: \"AL\",\n  Alaska: \"AK\",\n  \"American Samoa\": \"AS\",\n  Arizona: \"AZ\",\n  Arkansas: \"AR\",\n  California: \"CA\",\n  Colorado: \"CO\",\n  Connecticut: \"CT\",\n  Delaware: \"DE\",\n  \"District Of Columbia\": \"DC\",\n  \"Federated States Of Micronesia\": \"FM\",\n  Florida: \"FL\",\n  Georgia: \"GA\",\n  Guam: \"GU\",\n  Hawaii: \"HI\",\n  Idaho: \"ID\",\n  Illinois: \"IL\",\n  Indiana: \"IN\",\n  Iowa: \"IA\",\n  Kansas: \"KS\",\n  Kentucky: \"KY\",\n  Louisiana: \"LA\",\n  Maine: \"ME\",\n  \"Marshall Islands\": \"MH\",\n  Maryland: \"MD\",\n  Massachusetts: \"MA\",\n  Michigan: \"MI\",\n  Minnesota: \"MN\",\n  Mississippi: \"MS\",\n  Missouri: \"MO\",\n  Montana: \"MT\",\n  Nebraska: \"NE\",\n  Nevada: \"NV\",\n  \"New Hampshire\": \"NH\",\n  \"New Jersey\": \"NJ\",\n  \"New Mexico\": \"NM\",\n  \"New York\": \"NY\",\n  \"North Carolina\": \"NC\",\n  \"North Dakota\": \"ND\",\n  \"Northern Mariana Islands\": \"MP\",\n  Ohio: \"OH\",\n  Oklahoma: \"OK\",\n  Oregon: \"OR\",\n  Palau: \"PW\",\n  Pennsylvania: \"PA\",\n  \"Puerto Rico\": \"PR\",\n  \"Rhode Island\": \"RI\",\n  \"South Carolina\": \"SC\",\n  \"South Dakota\": \"SD\",\n  Tennessee: \"TN\",\n  Texas: \"TX\",\n  Utah: \"UT\",\n  Vermont: \"VT\",\n  \"Virgin Islands\": \"VI\",\n  Virginia: \"VA\",\n  Washington: \"WA\",\n  \"West Virginia\": \"WV\",\n  Wisconsin: \"WI\",\n  Wyoming: \"WY\",\n  Aguascalientes: \"AG\",\n  \"Baja California Norte\": \"BN\",\n  \"Baja California Sur\": \"BS\",\n  Coahuila: \"CH\",\n  Chihuahua: \"CI\",\n  Colima: \"CL\",\n  Campeche: \"CP\",\n  Chiapas: \"CS\",\n  \"Districto Federal\": \"DF\",\n  Durango: \"DG\",\n  Guerrero: \"GE\",\n  Guanajuato: \"GJ\",\n  Hidalgo: \"HD\",\n  Jalisco: \"JA\",\n  Michoacan: \"MC\",\n  Morelos: \"MR\",\n  Mexico: \"MX\",\n  Nayarit: \"NA\",\n  Oaxaca: \"OA\",\n  Puebla: \"PU\",\n  Queretaro: \"QE\",\n  \"Quintana Roo\": \"QI\",\n  Sinaloa: \"SI\",\n  \"San Luis Potosi\": \"SL\",\n  Sonora: \"SO\",\n  Tamaulipas: \"TA\",\n  Tabasco: \"TB\",\n  Tlaxcala: \"TL\",\n  Veracruz: \"VC\",\n  Yucatan: \"YU\",\n  Zacatecas: \"ZA\",\n  // Azua: \"AZ\",\n  Baoruco: \"BH\",\n  Barahona: \"BR\",\n  Dajabón: \"DJ\",\n  \"Distrito Nacional\": \"DN\",\n  Duarte: \"DU\",\n  \"Elías Piña\": \"EP\",\n  \"El Seibo\": \"ES\",\n  Espaillat: \"ET\",\n  \"Hato Mayor\": \"HM\",\n  \"Hermanas Mirabal\": \"HN\",\n  // Independencia: \"IN\",\n  // \"La Altagracia\": \"AL\",\n  \"La Romana\": \"RO\",\n  \"La Vega\": \"VE\",\n  // \"María Trinidad Sánchez\": \"MT\",\n  // \"Monseñor Nouel\": \"MN\",\n  // \"Monte Cristi\": \"MC\",\n  // \"Monte Plata\": \"MP\",\n  Pedernales: \"PD\",\n  Peravia: \"PV\",\n  \"Puerto Plata\": \"PP\",\n  Samaná: \"SM\",\n  \"Sánchez Ramírez\": \"SR\",\n  // \"San Cristóbal\": \"SC\",\n  \"San José de Ocoa\": \"JO\",\n  \"San Juan\": \"SJ\",\n  \"San Pedro de Macorís\": \"PM\",\n  Santiago: \"ST\",\n  // \"Santiago Rodríguez\": \"SO\",\n  // \"Santo Domingo\": \"SD\",\n  // Valverde: \"VA\",\n};\n","import { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IOrgResource, IOrg } from \"app/src/Models/Org\";\nimport { IJobMenuOrderService, ISideBarMenu } from \"../JobMenu/JobMenuOrderService\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport * as ng from \"angular\";\nimport { JobInfoTourService } from \"../Common/Tours/JobInfoTourService\";\nimport { JobShowTourService } from \"../Common/Tours/JobShowTourService\";\nimport { IEventingFactory } from \"../Common/EventingFactory\";\nimport { RootStoreType } from \"app2/src/store\";\nimport { dispatch, useState } from \"app2/src/storeRegistry\";\nimport * as discountActions from \"app2/src/reducers/discount.actions\";\nimport * as paymentTermTemplateActions from \"app2/src/reducers/org/paymentTermTemplate.actions\";\nimport * as financeOptionActions from \"app2/src/reducers/org/financeOption.actions\";\nimport * as orgActions from \"app2/src/reducers/org.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport * as validationActions from \"app2/src/reducers/validation.actions\";\nimport { IOrgData } from \"app2/src/records/OrgRecord\";\nimport * as jobService from \"app2/src/api/job.service\";\nimport { orgService } from \"app2/src/api/org.service\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { push } from \"connected-react-router/immutable\";\nimport * as paymentActions from \"app2/src/reducers/payment.actions\";\n\nexport interface INavDisplayArgs {\n  navDisplay: boolean;\n}\n\nexport class JobShowCtrl {\n  public job: IJob;\n  public org: IOrg;\n  public action: string;\n  public sidebar: ISideBarMenu;\n  public headerHidden = false;\n  public navDisplay = true;\n  private store: RootStoreType;\n\n  public static $inject = [\n    \"JobFetcher\",\n    \"JobMenuOrderService\",\n    \"Session\",\n    \"$state\",\n    \"$stateParams\",\n    \"$location\",\n    \"$scope\",\n    \"$rootScope\",\n    \"Org\",\n    \"BaseConfig\",\n    \"JobShowTourService\",\n    \"JobInfoTourService\",\n    \"$timeout\",\n    \"EventingFactory\",\n  ];\n  constructor(\n    public JobFetcher: IJobFetcherService,\n    private JobMenuOrderService: IJobMenuOrderService,\n    private Session: ISession,\n    public $state: ng.ui.IStateService,\n    public $stateParams: ng.ui.IStateParamsService,\n    public $location: ng.ILocationService,\n    public $scope: ng.IScope,\n    public $rootScope: RsfRootScope,\n    public Org: IOrgResource,\n    public BaseConfig: IBaseConfig,\n    public JobShowTourService: JobShowTourService,\n    public JobInfoTourService: JobInfoTourService,\n    public $timeout: ng.ITimeoutService,\n    public EventingFactory: IEventingFactory,\n  ) {\n    this.headerHidden = $state.params[\"header\"] === \"false\";\n\n    if (this.$stateParams[\"id\"] && this.$stateParams[\"id\"] !== \"new\") {\n      this._loadJob();\n    } else {\n      this.tourInit();\n      Session.currentUser.$promise.then(() => {\n        this.org = JobFetcher.getOrg(Session.currentUser.org_id);\n        this.org.$promise.then(() => {\n          this.sidebar = this.JobMenuOrderService.buildTabs(this.org, this.job);\n        });\n      });\n    }\n\n    $scope.$on(\"$destroy\", () => {\n      dispatch(jobActions.Actions.setSelectedEstimateId(null));\n      dispatch(jobActions.Actions.setCurrentJobId(null));\n      orgService.setCurrentOrgId(null);\n      dispatch(commonActions.Actions.setNavDisplay(true));\n    });\n  }\n\n  public tourInit(): ng.IPromise<any> {\n    return this.JobShowTourService.init({\n      jobShowCtrl: this,\n    });\n  }\n\n  public backToAllCustomers() {\n    dispatch(push(\"/jobs\"));\n  }\n\n  public analyticsInit() {\n    this.EventingFactory.init({\n      category: \"Job\",\n      job: this.job.id,\n      org: this.job.org_id,\n      navDisplay: !this.navDisplay,\n    });\n  }\n\n  public isCurrentPage(page: string): boolean {\n    return new RegExp(page).test(this.$location.path());\n  }\n\n  public toggleNav() {\n    this.navDisplay = !this.navDisplay;\n    dispatch(commonActions.Actions.setNavDisplay(this.navDisplay));\n    this.JobFetcher.setPresentationState(this.navDisplay);\n    this.$rootScope.$broadcast(\"nav:display\", <INavDisplayArgs>{ navDisplay: this.navDisplay });\n  }\n\n  private _loadJob() {\n    this.job = this.JobFetcher.get(this.$stateParams[\"id\"]);\n\n    this.job.$promise.then(() => {\n      this.org = this.job.org;\n      if (this.job.viewed === false) {\n        jobService.view(this.job.org_id, this.job.id).then(() => {});\n      }\n      // Initialize Redux for each job\n      dispatch(orgActions.Actions.setOrg(this.org as any as IOrgData));\n      dispatch(discountActions.AsyncActions.listDiscounts(this.job.org_id));\n      dispatch(paymentTermTemplateActions.AsyncActions.listPaymentTermTemplates(this.job.org_id));\n      dispatch(financeOptionActions.AsyncActions.listFinanceOptions(this.job.org_id));\n      dispatch(validationActions.AsyncActions.listValidations(this.job.org_id));\n\n      if (useState().getIn([\"payments\", \"authByOrgId\", this.job.org_id], null) === null) {\n        dispatch(paymentActions.AsyncActions.getAuthorized(this.job.org_id));\n      }\n\n      this.sidebar = this.JobMenuOrderService.buildTabs(this.org, this.job);\n      this.analyticsInit();\n      this.tourInit().then(() => {\n        this.JobShowTourService.startTour();\n      });\n    });\n  }\n}\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IPhoneNumber } from \"./PhoneNumber\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IUserPreference extends ng.resource.IResource<IUserPreference>, UserPreferencePrototype {}\n\nexport interface IUserPreferenceResource extends ng.resource.IResourceClass<IUserPreference>, IRsfResource {\n  fromJSON?(data: any): IUserPreference;\n}\n\nexport interface IUserNotificationPreferences {\n  email: string;\n  via_email: string[];\n  via_sms: string[];\n}\n\nexport interface IUserPreferenceConfig {\n  estimator_tour: boolean;\n  job_info_tour: boolean;\n  job_show_tour: boolean;\n  notifications: IUserNotificationPreferences;\n}\n\nexport enum UserPrefConfigType {\n  estimator_tour = \"estimator_tour\",\n  job_info_tour = \"job_info_tour\",\n  job_show_tour = \"job_show_tour\",\n  job_list_card_view = \"job_list_card_view\",\n}\n\nclass UserPreferencePrototype {\n  public id: number;\n  public user_id: number;\n  public estimator_tour: boolean;\n  public config: IUserPreferenceConfig;\n  public job_list_card_view: boolean;\n  public sms_number: IPhoneNumber;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/users/:user_id/user_preferences/:id\";\n\n  const transformSingle = (response: string, headers: ng.IHttpHeadersGetter, status: number): IUserPreference => {\n    if (status < 200 || status >= 300) {\n      return JSON.parse(response);\n    }\n\n    return UserPreference.fromJSON(JSON.parse(response).user_preference);\n  };\n\n  const transformRequest = (user_preference: IUserPreference): string => {\n    const data = JSON.parse(angular.toJson(user_preference));\n\n    if (data.sms_number) {\n      if (data.sms_number.id <= 0) {\n        delete data.sms_number.id;\n      }\n\n      data.sms_number_attributes = data.sms_number;\n      delete data.sms_number;\n    }\n\n    return angular.toJson({ user_preference: data });\n  };\n\n  const UserPreference: IUserPreferenceResource = <IUserPreferenceResource>$resource(\n    url,\n    { id: \"@id\", user_id: \"@user_id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: transformSingle,\n      },\n    },\n  );\n\n  UserPreference.fromJSON = (data: any) => {\n    const preference = new UserPreference(data);\n\n    if (preference.config) {\n      preference.config = JSON.parse(angular.toJson(preference.config));\n    } else {\n      preference.config = {} as IUserPreferenceConfig;\n    }\n\n    if (!preference.config.notifications) {\n      preference.config.notifications = {\n        email: null,\n        via_email: [],\n        via_sms: [],\n      };\n    }\n    if (!preference.config.notifications.email) {\n      preference.config.notifications.email = null;\n    }\n    if (!preference.config.notifications.via_email) {\n      preference.config.notifications.via_email = [];\n    }\n    if (!preference.config.notifications.via_sms) {\n      preference.config.notifications.via_sms = [];\n    }\n    if (data.sms_number) {\n      preference.sms_number = resources.PhoneNumber.fromJSON(data.sms_number);\n    } else {\n      preference.sms_number = resources.PhoneNumber.fromJSON({});\n    }\n\n    return preference;\n  };\n\n  hiddenExtend(UserPreference.prototype, UserPreferencePrototype.prototype);\n\n  UserPreference.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return UserPreference;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { subscriber } from \"app2/src/helpers/Subscribe\";\nimport { List } from \"immutable\";\nimport { FlashAlertRecord } from \"app2/src/records/FlashAlert\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nexport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport interface IFlash {\n  alerts: (typeof FlashAlertRecord)[];\n  addMessage(level: FlashLevels, message: string);\n  closeAlert(index: number);\n}\n\nexport class FlashService implements IFlash {\n  public alerts: (typeof FlashAlertRecord)[] = [];\n  private _flashSubscribe: () => void;\n\n  public static $inject = [];\n  constructor() {\n    this._flashSubscribe = subscriber.subscribe<List<typeof FlashAlertRecord>>(\n      \"components.common.flashAlerts\",\n      (flashAlerts: List<typeof FlashAlertRecord>) => {\n        this.alerts = flashAlerts.toArray();\n      },\n    );\n  }\n\n  public addMessage(level: FlashLevels, message: string) {\n    dispatch(commonActions.Actions.flashAddAlert(level, message));\n  }\n\n  public closeAlert(index) {\n    dispatch(commonActions.Actions.flashRemoveAlert(index));\n  }\n}\n","/**\n * Lightens (or Darkens) a hex string by the percent change\n * @param hex Hex String\n * @param change Percent string 15 => %15\n */\nexport const lighten = (hex: string, change = 0): string => {\n  hex = hex.replace(/[^0-9a-f]/gi, \"\");\n\n  if (hex.length === 3) {\n    hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n  }\n\n  if (hex.length !== 6) {\n    return hex;\n  }\n\n  // convert to decimal and change luminosity\n  let result = \"#\";\n  let hexSegment: number;\n  let strSegment: string;\n  let idx: number;\n  for (idx = 0; idx < 3; idx++) {\n    hexSegment = parseInt(hex.substr(idx * 2, 2), 16);\n\n    strSegment = Math.round(Math.min(Math.max(0, hexSegment + (255 - hexSegment) * (change / 100)), 255)).toString(16);\n\n    result += (\"00\" + strSegment).substr(strSegment.length);\n  }\n\n  return result.toUpperCase();\n};\n","import { IJobResponse, IJobResource, IJob } from \"app/src/Models/Job\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IHeaderShowArgs, IHeaderSearchArgs } from \"app/src/Header/HeaderCtrl\";\nimport * as angulartics from \"angulartics\";\nimport { UserPrefConfigType } from \"app/src/Models/UserPreference\";\nimport { IFlash, FlashLevels } from \"app/src/Common/FlashService\";\nimport { lighten } from \"app2/src/services/color.service\";\nimport { IJobStateInfo } from \"app2/src/records/Job\";\nimport { useSelector, dispatch } from \"app2/src/storeRegistry\";\nimport { jobQuery } from \"app2/src/selectors/job.selectors\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { loadStatistics } from \"app2/src/api/statistics.service\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentUserOrg } from \"app2/src/selectors/user.selectors\";\nimport { fromJSON as reactSelectFromJSON } from \"@tberrysoln/rsf-form\";\nimport { calculateUpdatedSince } from \"app2/src/components/JobList/JobQuery\";\nimport { OrgRecord, orgNameAddress } from \"app2/src/records/OrgRecord\";\n\nexport class JobListCtrl {\n  public loading = false;\n  public promise: ng.IPromise<any>;\n  public jobResponse: IJobResponse;\n  public stateFilters: string[] = [];\n  public search: string = null;\n  public selectedJob: IJob;\n  public states: any;\n  public jobTypeId: any;\n  public stateInfo: { [k: string]: IJobStateInfo };\n  public jobListCardView: boolean;\n  public showAds = false;\n  public archived = false;\n  public adUrl: string;\n  public throttledScroll: any;\n  public page: any = {\n    current: 1,\n  };\n  public sort: any = {\n    by: \"jobs.updated_at\",\n    order: \"desc\",\n  };\n\n  public panelBarOptions = {\n    expandMode: \"single\",\n  };\n\n  public static $inject = [\n    \"$stateParams\",\n    \"Job\",\n    \"Session\",\n    \"$scope\",\n    \"$timeout\",\n    \"EstimatorService\",\n    \"Flash\",\n    \"$analytics\",\n  ];\n  constructor(\n    public $stateParams: ng.ui.IStateParamsService,\n    public Job: IJobResource,\n    public Session: ISession,\n    public $scope: ng.IScope,\n    public $timeout: ng.ITimeoutService,\n    public EstimatorService: EstimatorService,\n    public Flash: IFlash,\n    public $analytics: angulartics.IAnalyticsService,\n  ) {\n    this.throttledScroll = _.throttle(this.scroll, 1000, { trailing: false });\n\n    if ($stateParams[\"status\"]) {\n      this.stateFilters.push($stateParams[\"status\"]);\n    }\n\n    const userOrg: OrgRecord = useSelector((state: RootState) => currentUserOrg(state));\n    if (userOrg) {\n      dispatch(\n        jobActions.Actions.setJobQuery({\n          name: \"org\",\n          value: reactSelectFromJSON({ id: userOrg.id, name: orgNameAddress(userOrg) }),\n        }),\n      );\n    }\n\n    dispatch(\n      jobActions.Actions.setJobQuery({ name: \"user\", value: reactSelectFromJSON({ id: -1, name: \"All assignees\" }) }),\n    );\n\n    this.Session.fetchUserPref(UserPrefConfigType.job_list_card_view).then((card_view: boolean) => {\n      this.jobListCardView = card_view;\n    });\n\n    this.query().then(() => {\n      this.states = this.jobResponse.meta.states;\n      this.stateInfo = this.jobResponse.meta.state_info;\n      dispatch(jobActions.Actions.setJobStates(this.stateInfo));\n    });\n\n    $scope.$emit(\"header:search\", <IHeaderShowArgs>{ show: true });\n    $scope.$on(\"header:search_change\", (e: ng.IAngularEvent, args: IHeaderSearchArgs) => {\n      this.$analytics.eventTrack(\"search\", { category: \"Job List\" });\n      //TODO: action to set query?\n      this.search = args.searchString;\n      this.refreshQuery();\n    });\n    $scope.$on(\"updateJobList\", (e: ng.IAngularEvent) => {\n      this.refreshQuery();\n    });\n\n    $scope.$on(\"filters:trigger_search\", () => {\n      this.page.current = 1;\n      this.jobResponse = null;\n      this.refreshQuery();\n    });\n\n    this.refreshQuery = this.refreshQuery.bind(this);\n  }\n\n  public jobListPartialUrl(settings_acl) {\n    let view_type = \"card_view\";\n    if (!this.jobListCardView) {\n      view_type = \"list_view\";\n    }\n\n    return `src/Jobs/partials/${view_type}/${settings_acl.sort().join(\"_\")}_list.html`;\n  }\n\n  public jobTypes(job_types) {\n    return job_types.map((jt) => jt.name).join(\", \");\n  }\n\n  public cardViewChanged() {\n    this.$analytics.eventTrack(\"toggle display\", {\n      category: \"Job List\",\n      jobListCardView: this.jobListCardView,\n    });\n    this.jobListCardView = !this.jobListCardView;\n  }\n\n  public scroll() {\n    if (!this.morePages()) {\n      return;\n    }\n\n    if (this.loading) {\n      this.promise = this.promise.then(() => {\n        this.$analytics.eventTrack(\"infinite scroll\", { category: \"Job List\" });\n        this.query();\n      });\n    } else {\n      this.$analytics.eventTrack(\"infinite scroll\", { category: \"Job List\" });\n      this.query();\n    }\n  }\n\n  public toggleStateFilter(filter: string) {\n    if (_.indexOf(this.stateFilters, filter) >= 0) {\n      this.$analytics.eventTrack(\"filter added\", { category: \"Job List\", value: filter });\n      this.stateFilters = _.filter(this.stateFilters, (s) => {\n        return s !== filter;\n      });\n    } else {\n      this.$analytics.eventTrack(\"filter removed\", { category: \"Job List\", value: filter });\n      this.stateFilters.push(filter);\n    }\n\n    this.refreshQuery();\n  }\n\n  public stateSelected(state: string) {\n    return _.indexOf(this.stateFilters, state) >= 0;\n  }\n\n  public sortBy(column: string) {\n    if (this.sort.by === column) {\n      this.sort.order = this.sort.order === \"asc\" ? \"desc\" : \"asc\";\n    } else {\n      this.sort.by = column;\n      this.sort.order = \"asc\";\n    }\n    this.refreshQuery();\n  }\n\n  public jobTypeNames(job: IJob) {\n    return job.job_types.map((j) => j.name).join(\", \");\n  }\n\n  public jobTypeTooltip(job: IJob) {\n    return `<ul>${job.job_types.map((j) => `<li>${j.name}</li>`).join(\" \")}</ul>`;\n  }\n\n  public nameFromRawState(state: string) {\n    if (this.stateInfo && this.stateInfo[state] && this.stateInfo[state].pretty_name) {\n      return this.stateInfo[state].pretty_name;\n    }\n\n    return this.states[state];\n  }\n\n  public colorFromRawState(state: string, change = 0) {\n    if (this.stateInfo && this.stateInfo[state] && this.stateInfo[state].color) {\n      return lighten(this.stateInfo[state].color, change);\n    }\n\n    switch (state) {\n      case \"new\":\n        return lighten(\"#7ACC5A\", change);\n      case \"followup\":\n        return lighten(\"#FFC539\", change);\n      case \"scheduled\":\n        return lighten(\"#FE7328\", change);\n      case \"scheduled_second\":\n        return lighten(\"#4FBDF4\", change);\n      case \"closed_sold\":\n        return lighten(\"#7460EE\", change);\n      case \"lost\":\n        return lighten(\"#FF5F5D\", change);\n      default:\n        return lighten(\"#4FBDF4\", change);\n    }\n  }\n\n  /**\n   * this.page.current is set to the 'next' page. so it's less than or equal to.\n   */\n  public morePages(): boolean {\n    if (!this.jobResponse || !this.jobResponse.meta || !this.jobResponse.meta.pagination) {\n      return true;\n    }\n\n    return !this.jobResponse.meta.pagination.last_page;\n  }\n\n  public sync() {\n    this.Session.currentUser.org.$processSf({ process: \"SyncJob\" }).then(() => {\n      this.Flash.addMessage(FlashLevels.success, \"Job successfully enqueued\");\n    });\n  }\n\n  public refreshQuery(): ng.IPromise<any> {\n    this.page.current = 1;\n    this.jobResponse = null;\n    return this.query();\n  }\n\n  private query(): ng.IPromise<any> {\n    if (this.loading) {\n      return this.promise;\n    }\n\n    if (!this.morePages()) {\n      return this.promise;\n    }\n\n    this.loading = true;\n\n    const defaultParams: any = {\n      \"include[]\": [\"address\", \"assignments\", \"appointments\", \"job_types\"],\n    };\n\n    const jobQueryParams = useSelector((state) => jobQuery(state)).toJS();\n\n    if (this.page.current === 1) {\n      defaultParams[\"include[]\"].push(\"stats\");\n    }\n\n    defaultParams.page = this.page.current;\n\n    if (this.stateFilters.length > 0) {\n      defaultParams[\"state[]\"] = this.stateFilters;\n    }\n\n    if (jobQueryParams.state.length > 0) {\n      defaultParams[\"state[]\"] = jobQueryParams.state.map((state) => state.id);\n    }\n\n    if (this.search !== null && this.search !== \"\") {\n      defaultParams[\"query\"] = this.search;\n    }\n\n    if (jobQueryParams.job_type) {\n      defaultParams[\"job_type\"] = jobQueryParams.job_type;\n    }\n\n    if (jobQueryParams.user.id > -1) {\n      defaultParams[\"user_id\"] = jobQueryParams.user.id;\n    }\n\n    const orgId =\n      jobQueryParams.org.id > -1 ? jobQueryParams.org.id : useSelector((state) => currentUserOrg(state))?.id;\n    if (orgId) {\n      defaultParams[\"org_id\"] = orgId;\n    }\n\n    if (jobQueryParams.updated_since || jobQueryParams.filter_by_updated_since) {\n      defaultParams[\"updated_since\"] = calculateUpdatedSince(jobQueryParams);\n    }\n\n    if (jobQueryParams.filter_by_updated_before) {\n      defaultParams[\"updated_before\"] = jobQueryParams.filter_by_updated_before;\n    }\n\n    if (jobQueryParams.lead_source !== \"_allleads_\") {\n      defaultParams[\"lead_source\"] = jobQueryParams.lead_source;\n    }\n\n    defaultParams[\"sort_by\"] = jobQueryParams.sort_by;\n    defaultParams[\"sort_order\"] = jobQueryParams.sort_order;\n    defaultParams[\"archived\"] = jobQueryParams.archived;\n\n    this.promise = this.Job.query(\n      defaultParams,\n      (response) => {\n        if (this.jobResponse && this.jobResponse.jobs) {\n          this.jobResponse.jobs = this.jobResponse.jobs.concat(response.jobs);\n          this.jobResponse.meta.pagination = response.meta.pagination;\n        } else {\n          this.jobResponse = response;\n        }\n\n        if (response.stats) {\n          loadStatistics(response);\n        }\n        this.page.current += 1;\n        this.loading = false;\n        //hit\n      },\n      (error) => {\n        console.error(\"Error loading jobs\", error);\n        this.loading = false;\n      },\n    ).$promise;\n\n    return this.promise;\n  }\n}\n","import { dispatch } from \"../storeRegistry\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { IJobData } from \"../records/Job\";\n\nexport interface JobIndexResponse {\n  jobs: IJobData[];\n  meta: {\n    state_info: Record<string, { pretty_name: string; color: string }>;\n  };\n  stats: Record<string, number>;\n}\n\n/**\n * Currently getting called in the JobListCtrl when loading jobs.\n * Sets up the statistics data and stores it in Redux.\n */\nexport const loadStatistics = (response: JobIndexResponse): void => {\n  const states = Object.keys(response.meta?.state_info || {});\n  const stats = states.map((state) => ({\n    name: response.meta.state_info[state].pretty_name,\n    color: response.meta.state_info[state].color,\n    count: response.stats[state] || 0,\n  }));\n  const statistics = {\n    stats,\n    total: response.stats.total,\n  };\n  dispatch(jobActions.Actions.receiveStats(statistics));\n};\n","export interface IEmbeddedEvent {\n  event: string;\n  payload: any;\n}\n\nclass EmbeddedService {\n  protected _listeners = [];\n  protected _webViewProp?: string;\n\n  public get listenerCount() {\n    return this._listeners.length;\n  }\n\n  constructor() {\n    this.postToParent = this.postToParent.bind(this);\n\n    window.RSF =\n      window.RSF ||\n      ({\n        postMessage: this.postToParent,\n      } as RsfWindow);\n  }\n\n  public reset() {\n    this._listeners = [];\n  }\n\n  public addListener(func: (event: IEmbeddedEvent) => void) {\n    this._listeners.push(func);\n  }\n\n  public removeListener(func: (event: IEmbeddedEvent) => void) {\n    this._listeners = this._listeners.filter((a) => a !== func);\n  }\n\n  public sendEvent(event: string, payload: any = {}) {\n    const msg = { event, payload };\n\n    this.postMessage(escape(JSON.stringify(msg)));\n  }\n\n  public postMessage(msg: string) {\n    this._webViewProp = Object.keys(window).find((a) => a.endsWith(\"NativeWebView\"));\n    if (this._webViewProp && this._webViewProp !== \"\") {\n      window[this._webViewProp].postMessage(msg);\n    }\n  }\n\n  protected postToParent(msg: string) {\n    const event: IEmbeddedEvent = JSON.parse(unescape(msg));\n    try {\n      this._listeners.forEach((func) => func(event));\n    } catch (e) {\n      console.error(e);\n    }\n  }\n}\n\nexport const embeddedService = new EmbeddedService();\n","import * as uuid from \"uuid/v4\";\nimport { IJobResource, IJob } from \"app/src/Models/Job\";\nimport { IJobEstimateAddedEvent } from \"app/src/Estimator/EstimatorEvents\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IOrg, IOrgResource } from \"app/src/Models/Org\";\nimport { IEventResource } from \"app/src/Models/Event\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IVisualizationResource } from \"app/src/Models/Visualization\";\nimport { embeddedService } from \"app2/src/services/embedded.service\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport { fromJSON } from \"app2/src/records/Job\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { orgService } from \"app2/src/api/org.service\";\nimport { includes } from \"app2/src/api/job.service\";\n\nexport interface IJobFetcherService {\n  includes: string[];\n  Job: IJobResource;\n  get(id: number, includes?: string[]): IJob;\n  set(job: IJob): void;\n  refresh(id: number): IJob;\n\n  getOrg(id: number): IOrg;\n\n  setPresentationState(state: boolean): void;\n  observePresentationState(func: (state: boolean) => void): string;\n  removePresentationStateObserver(id): boolean;\n  currentPresentationState(): boolean;\n  isObservingPresentationState(key: string): boolean;\n}\n\nexport class JobFetcherService implements IJobFetcherService {\n  public includes: string[] = includes;\n  public navDisplay = true;\n\n  private _presentationStateObservers: { string: (state: boolean) => void } = {} as {\n    string: (state: boolean) => void;\n  };\n  private _presentationState = true;\n  private jobs: { [key: number]: IJob } = {} as { [key: number]: IJob };\n  private orgs: { [key: number]: IOrg } = {} as { [key: number]: IOrg };\n\n  public static $inject = [\"Job\", \"Org\", \"Event\", \"Visualization\", \"$rootScope\"];\n  constructor(\n    public Job: IJobResource,\n    public Org: IOrgResource,\n    public Event: IEventResource,\n    public Visualization: IVisualizationResource,\n    public $rootScope: RsfRootScope,\n  ) {\n    $rootScope.$on(\"job:estimate_added\", (event: ng.IAngularEvent, args: IJobEstimateAddedEvent) => {\n      if (this.jobs[args.id]) {\n        this.jobs[args.id].estimates.push(args.estimate);\n      }\n\n      embeddedService.sendEvent(\"RSF.estimateOverview\", args.estimate.decycleToJSON());\n    });\n    $rootScope.$on(\"job:estimate_updated\", (event: ng.IAngularEvent, args: IJobEstimateAddedEvent) => {\n      if (this.jobs[args.id]) {\n        const estimate: IEstimate = _.find(this.jobs[args.id].estimates, (e: IEstimate) => {\n          return e.id === args.estimate.id;\n        });\n\n        estimate.name = args.estimate.name;\n        estimate.total = args.estimate.total;\n        estimate.line_items_count = args.estimate.line_items_count;\n        //noinspection TypeScriptValidateTypes\n        estimate.updated_at = args.estimate.updated_at.toISOString() as any as Date;\n      }\n\n      embeddedService.sendEvent(\"RSF.estimateOverview\", args.estimate.decycleToJSON());\n    });\n  }\n\n  public get(id: number, includes?: string[]): IJob {\n    if (typeof id === \"string\") {\n      id = parseInt(id);\n    }\n    dispatch(jobActions.Actions.setCurrentJobId(id));\n    dispatch(jobActions.Actions.fetchJob(id));\n    const mergedIncludes = includes ? includes : this.includes;\n    if (!this.jobs[id]) {\n      this.jobs[id] = this.Job.get({ id: id, \"include[]\": mergedIncludes });\n      this.jobs[id].$promise.catch((e) => {\n        delete this.jobs[id];\n      });\n    } else {\n      // noinspection TypeScriptUnresolvedVariable\n      if ((<any>this.jobs[id].$promise).$$state.status === 1) {\n        this.jobs[id].$promise = this.jobs[id].$get({ \"include[]\": mergedIncludes });\n      }\n    }\n\n    this.jobs[id].$promise.then(() => {\n      orgService.setCurrentOrgId(this.jobs[id].org_id);\n      dispatch(jobActions.Actions.receiveJob(JSON.decycle(this.jobs[id])));\n      const job_data = JSON.parse(JSON.stringify(this.jobs[id]));\n      dispatch(commonActions.Actions.setJob(fromJSON(job_data)));\n      embeddedService.sendEvent(\"RSF.job\", JSON.parse(angular.toJson(this.jobs[id])));\n    });\n\n    return this.jobs[id];\n  }\n\n  public set(job: IJob): void {\n    this.jobs[job.id] = job;\n  }\n\n  public refresh(id: number): IJob {\n    this.get(id);\n\n    return this.jobs[id];\n  }\n\n  public getOrg(id: number): IOrg {\n    if (!this.orgs[id]) {\n      this.orgs[id] = this.Org.get({ id: id, \"include[]\": [\"brand\", \"settings\", \"preferences\", \"lead_sources\"] });\n    }\n\n    return this.orgs[id];\n  }\n\n  public setPresentationState(state: boolean) {\n    if (this._presentationState === state) {\n      return;\n    }\n\n    this._presentationState = state;\n\n    _.each(this._presentationStateObservers, (func) => {\n      func(this._presentationState);\n    });\n  }\n\n  public observePresentationState(func: (state: boolean) => void): string {\n    const key = uuid();\n\n    this._presentationStateObservers[key] = func;\n\n    return key;\n  }\n\n  public currentPresentationState() {\n    return this._presentationState;\n  }\n\n  public removePresentationStateObserver(id): boolean {\n    if (_.has(this._presentationStateObservers, id)) {\n      delete this._presentationStateObservers[id];\n      return true;\n    }\n\n    return false;\n  }\n\n  public isObservingPresentationState(key: string) {\n    return _.has(this._presentationStateObservers, key);\n  }\n}\n","import { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { IJob } from \"app/src/Models/Job\";\nimport * as angulartics from \"angulartics\";\nimport { useState, dispatch } from \"app2/src/storeRegistry\";\nimport { PaymentAuthorizationRecord } from \"app2/src/records/PaymentAuthorizationRecord\";\nimport * as paymentActions from \"app2/src/reducers/payment.actions\";\nimport * as toolActions from \"app2/src/reducers/org/tool.actions\";\n\nexport class BaseTabCtrl {\n  public job: IJob;\n  public spinnerPromise: ng.IPromise<any>;\n  public navDisplay = true;\n  public paymentAuthorizations: PaymentAuthorizationRecord;\n\n  protected _stateObserverKey: string;\n\n  constructor(\n    JobFetcher: IJobFetcherService,\n    $scope: ng.IScope,\n    protected $analytics: angulartics.IAnalyticsService,\n    $window: ng.IWindowService,\n    jobId?: number,\n  ) {\n    $window.scrollTo(0, 0);\n\n    this.navDisplay = JobFetcher.currentPresentationState();\n\n    this._stateObserverKey = JobFetcher.observePresentationState((state: boolean) => {\n      this.navDisplay = state;\n    });\n\n    $scope.$on(\"$destroy\", () => {\n      JobFetcher.removePresentationStateObserver(this._stateObserverKey);\n    });\n\n    if (jobId >= 0) {\n      this.job = JobFetcher.get(jobId);\n\n      this.spinnerPromise = this.job.$promise;\n      this.job.$promise.then(() => {\n        if (useState().getIn([\"payments\", \"authByOrgId\", this.job.org_id], null) === null) {\n          dispatch(paymentActions.AsyncActions.getAuthorized(this.job.org_id));\n        }\n      });\n    }\n  }\n\n  public loadTools() {\n    return dispatch(toolActions.AsyncActions.listTools(this.job.org_id, this.job.id));\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        job: this.job.id,\n        org: this.job.org_id,\n        navDisplay: !this.navDisplay,\n      }),\n    );\n  }\n}\n","import { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { BaseTabCtrl } from \"app/src/Jobs/tabs/BaseTabCtrl\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport * as angulartics from \"angulartics\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { IToolInfo } from \"app/src/Common/ToolInfoService\";\nimport { IBaseConfig } from \"../../Common/IBaseConfig\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport { dispatch } from \"app2/src/storeRegistry\";\n\nexport class ToolTabCtrl extends BaseTabCtrl {\n  public toolsLoaded = false;\n\n  public static $inject = [\n    \"JobFetcher\",\n    \"$state\",\n    \"$stateParams\",\n    \"$scope\",\n    \"$rootScope\",\n    \"$analytics\",\n    \"$window\",\n    \"BaseConfig\",\n    \"Pretty\",\n    \"ToolInfo\",\n  ];\n  constructor(\n    public JobFetcher: IJobFetcherService,\n    protected $state: ng.ui.IStateService,\n    public $stateParams: ng.ui.IStateParamsService,\n    public $scope: ng.IScope,\n    public $rootScope: RsfRootScope,\n    protected $analytics: angulartics.IAnalyticsService,\n    public $window: ng.IWindowService,\n    public BaseConfig: IBaseConfig,\n    public Pretty: IPretty,\n    public ToolInfo: IToolInfo,\n  ) {\n    super(JobFetcher, $scope, $analytics, $window, $stateParams[\"id\"]);\n\n    this.job.$promise.then(() => {\n      this.loadTools().then(() => {\n        this.toolsLoaded = true;\n        this.$scope.$digest();\n      });\n      dispatch(tokenActions.AsyncActions.getToken(this.job.org.id, \"provia\"));\n    });\n  }\n\n  public goToAddress(): void {\n    this.$state.go(\"job_header.job_show.info\", { id: this.job.id });\n  }\n}\n","import { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IJobEstimateAddedEvent } from \"app/src/Estimator/EstimatorEvents\";\nimport * as angulartics from \"angulartics\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IFlash } from \"app/src/Common/FlashService\";\nimport { IEstimateResource } from \"../../Models/Estimate\";\nimport { IBaseConfig } from \"../../Common/IBaseConfig\";\nimport { BaseTabCtrl } from \"app/src/Jobs/tabs/BaseTabCtrl\";\nimport { IPromise } from \"angular\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\n\nexport class EstimateTabCtrl extends BaseTabCtrl {\n  public spinnerPromise: IPromise<any>;\n  public static $inject = [\n    \"JobFetcher\",\n    \"$stateParams\",\n    \"$state\",\n    \"$scope\",\n    \"$rootScope\",\n    \"$analytics\",\n    \"EstimatorService\",\n    \"$window\",\n    \"$uibModal\",\n    \"Flash\",\n    \"Estimate\",\n    \"$http\",\n    \"$timeout\",\n    \"BaseConfig\",\n  ];\n\n  constructor(\n    public JobFetcher: IJobFetcherService,\n    public $stateParams: ng.ui.IStateParamsService,\n    protected $state: ng.ui.IStateService,\n    protected $scope: ng.IScope,\n    public $rootScope: RsfRootScope,\n    protected $analytics: angulartics.IAnalyticsService,\n    public EstimatorService: EstimatorService,\n    public $window: ng.IWindowService,\n    public $uibModal: ng.ui.bootstrap.IModalService,\n    public Flash: IFlash,\n    public Estimate: IEstimateResource,\n    public $http: ng.IHttpService,\n    public $timeout: ng.ITimeoutService,\n    public BaseConfig: IBaseConfig,\n  ) {\n    super(JobFetcher, $scope, $analytics, $window, $stateParams[\"id\"]);\n\n    if ($stateParams[\"estimate_id\"] === \"new\") {\n      this.spinnerPromise = this.EstimatorService.createEstimate(parseInt($stateParams[\"id\"])).$promise;\n    } else {\n      const estimateId = parseInt($stateParams[\"estimate_id\"]);\n      dispatch(jobActions.Actions.setSelectedEstimateId(estimateId));\n      this.spinnerPromise = EstimatorService.reloadEstimate(estimateId).$promise;\n    }\n\n    const listener = $rootScope.$on(\"job:estimate_added\", (event: ng.IAngularEvent, args: IJobEstimateAddedEvent) => {\n      dispatch(jobActions.Actions.setSelectedEstimateId(args.estimate.id));\n      this.$state.go(\n        \"job_header.job_show.estimate\",\n        { id: this.job.id, estimate_id: args.estimate.id },\n        { notify: false, location: \"replace\" },\n      );\n    });\n\n    $scope.$on(\"$destroy\", () => {\n      listener();\n    });\n  }\n}\n","import { BaseTabCtrl } from \"app/src/Jobs/tabs/BaseTabCtrl\";\nimport { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEstimate, IEstimateResource } from \"app/src/Models/Estimate\";\nimport * as angulartics from \"angulartics\";\nimport { IFlash } from \"app/src/Common/FlashService\";\nimport { dispatch, useSelector } from \"app2/src/storeRegistry\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\n\nexport class BaseEstimateTabCtrl extends BaseTabCtrl {\n  public selectedEstimateId: number;\n  public addingEstimate = false;\n  public modalOpen = false;\n\n  constructor(\n    protected JobFetcher: IJobFetcherService,\n    protected EstimatorService: EstimatorService,\n    protected $scope: ng.IScope,\n    protected $stateParams: ng.ui.IStateParamsService,\n    protected $state: ng.ui.IStateService,\n    protected $analytics: angulartics.IAnalyticsService,\n    protected $window: ng.IWindowService,\n    protected resource: string,\n    protected $uibModal: ng.ui.bootstrap.IModalService,\n    protected Flash: IFlash,\n    protected Estimate: IEstimateResource,\n    protected $http: ng.IHttpService,\n    protected $timeout: ng.ITimeoutService,\n    protected jobId?: number,\n  ) {\n    super(JobFetcher, $scope, $analytics, $window, jobId);\n\n    const estimateId = $stateParams[\"estimate_id\"];\n    if (estimateId && estimateId !== \"new\") {\n      dispatch(jobActions.Actions.setSelectedEstimateId(parseInt(estimateId)));\n    }\n    this.selectedEstimateId = useSelector((state) => selectedEstimateId(state));\n    this.job.$promise.then(() => {\n      this.setupParams();\n    });\n\n    $scope.$on(\"$destroy\", () => {\n      if (\n        !this.addingEstimate &&\n        this.selectedEstimateId &&\n        (!_.isNumber(this.selectedEstimateId) || this.selectedEstimateId < 0)\n      ) {\n        this.clearEstimate();\n      }\n    });\n  }\n\n  public selectEstimate(estimate: IEstimate): void {\n    if (!estimate) {\n      this.selectedEstimateId = null;\n      dispatch(jobActions.Actions.setSelectedEstimateId(null));\n      return;\n    }\n\n    this.selectedEstimateId = estimate.id;\n    dispatch(jobActions.Actions.setSelectedEstimateId(estimate.id));\n    this.trackEvent(\"selected\", {\n      category: \"Estimate\",\n      estimate: estimate.id,\n    });\n    this.setupParams();\n  }\n\n  public setupParams() {\n    if (!this.selectedEstimateId || this.$stateParams[\"estimate_id\"]) {\n      return;\n    }\n\n    this.$state.go(\"job_header.job_show.\" + this.resource.slice(0, -1), {\n      id: this.job.id,\n      estimate_id: this.selectedEstimateId,\n    });\n  }\n\n  public clearEstimate() {\n    this.selectedEstimateId = null;\n    dispatch(jobActions.Actions.setSelectedEstimateId(null));\n    this.trackEvent(\"cleared\", {\n      category: \"Estimate\",\n    });\n    this.$state.go(`job_header.job_show.${this.resource}`, {\n      id: this.job.id,\n      estimate_id: null,\n    });\n  }\n\n  public sendPdf(docType) {\n    this.trackEvent(`email ${docType}`, {\n      category: toTitleCase(docType),\n      estimate: this.selectedEstimateId,\n    });\n\n    this.modalOpen = true;\n    const modalInstance: ng.ui.bootstrap.IModalServiceInstance = this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n      animation: true,\n      ariaLabelledBy: \"modal-title\",\n      ariaDescribedBy: \"modal-body\",\n      templateUrl: \"src/Jobs/tabs/email_modal.html\",\n      controller: \"EmailModal\",\n      backdrop: \"static\",\n      controllerAs: \"$ctrl\",\n      size: \"md\",\n      resolve: {\n        job_email: { email: this.job.email },\n        options: {},\n      },\n    });\n\n    modalInstance.result\n      .then((returnObject: any) => {\n        this.spinnerPromise = this.EstimatorService.emailPdf(this.selectedEstimateId, docType, returnObject);\n      })\n      .catch(() => {\n        this.trackEvent(`email ${docType} canceled`, {\n          category: toTitleCase(docType),\n          estimate: this.selectedEstimateId,\n        });\n      })\n      .finally(() => {\n        this.modalOpen = false;\n      });\n  }\n}\n","import { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport * as angulartics from \"angulartics\";\nimport { FlashLevels, IFlash } from \"app/src/Common/FlashService\";\nimport { IEstimate, IEstimateResource } from \"../../Models/Estimate\";\nimport { IBaseConfig } from \"../../Common/IBaseConfig\";\nimport { BaseEstimateTabCtrl } from \"app/src/Jobs/tabs/BaseEstimateTabCtrl\";\n\nexport class EstimatesTabCtrl extends BaseEstimateTabCtrl {\n  public estimateids: number[] = [];\n  public showPricePresentation = false;\n\n  public static $inject = [\n    \"JobFetcher\",\n    \"$stateParams\",\n    \"$state\",\n    \"$scope\",\n    \"$rootScope\",\n    \"$analytics\",\n    \"EstimatorService\",\n    \"$window\",\n    \"$uibModal\",\n    \"Flash\",\n    \"Estimate\",\n    \"$http\",\n    \"$timeout\",\n    \"BaseConfig\",\n  ];\n\n  constructor(\n    JobFetcher: IJobFetcherService,\n    $stateParams: ng.ui.IStateParamsService,\n    $state: ng.ui.IStateService,\n    $scope: ng.IScope,\n    $rootScope: RsfRootScope,\n    $analytics: angulartics.IAnalyticsService,\n    EstimatorService: EstimatorService,\n    $window: ng.IWindowService,\n    $uibModal: ng.ui.bootstrap.IModalService,\n    Flash: IFlash,\n    Estimate: IEstimateResource,\n    $http: ng.IHttpService,\n    $timeout: ng.ITimeoutService,\n    BaseConfig: IBaseConfig,\n  ) {\n    super(\n      JobFetcher,\n      EstimatorService,\n      $scope,\n      $stateParams,\n      $state,\n      $analytics,\n      $window,\n      \"estimates\",\n      $uibModal,\n      Flash,\n      Estimate,\n      $http,\n      $timeout,\n      $stateParams[\"id\"],\n    );\n\n    this.job.$promise.then(() => {\n      this.showPricePresentation = this.job.org.showPricePresentation();\n      if (this.job.estimates.length === 0) {\n        this.addEstimate();\n      }\n    });\n  }\n\n  public disablePresent() {\n    let disable = true;\n    _.each(this.job.estimates, (est: IEstimate) => {\n      if (est.compare === true) {\n        disable = false;\n      }\n    });\n    return disable;\n  }\n\n  public toggleCompare(estimate) {\n    if (this.estimateids.length === 3 && estimate.compare) {\n      estimate.compare = false;\n      this.Flash.addMessage(FlashLevels.warning, \"Estimate Comparison is limited to 3.\");\n      return;\n    }\n    if (estimate.compare) {\n      this.estimateids.push(estimate.id);\n    } else {\n      this.estimateids = _.filter(this.estimateids, (id) => {\n        return id !== estimate.id;\n      });\n    }\n  }\n\n  public presentation() {\n    this.$state.go(\"job_header.job_show.price\", { estimateids: this.estimateids, orgid: this.job.org_id });\n  }\n\n  public pdf(estimate, doc_type) {\n    if (!doc_type) {\n      doc_type = \"estimate\";\n    }\n    estimate.job = this.job;\n    this.spinnerPromise = this.EstimatorService.savePdf(estimate, doc_type);\n    this.trackEvent(doc_type + \" pdf downloaded\", {\n      category: \"Estimate\",\n      pdfType: doc_type,\n      estimate: estimate.id,\n    });\n  }\n\n  public csv(estimate, csv_type) {\n    if (!csv_type) {\n      csv_type = \"product\";\n    }\n    estimate.job = this.job;\n    this.spinnerPromise = this.EstimatorService.saveCsv(estimate, csv_type);\n    this.trackEvent(csv_type + \" csv downloaded\", {\n      category: \"Estimate\",\n      estimate: estimate.id,\n    });\n  }\n\n  public addEstimate() {\n    this.trackEvent(\"add\", {\n      category: \"Estimate\",\n    });\n    this.addingEstimate = true;\n    this.selectEstimate({ id: \"new\" } as unknown as IEstimate);\n  }\n}\n","import { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { IMeasurement } from \"app/src/Models/Measurement\";\nimport * as angulartics from \"angulartics\";\nimport { IBaseConfig } from \"../../Common/IBaseConfig\";\nimport * as ng from \"angular\";\nimport { AddressRecord } from \"app2/src/records/Address\";\nimport { dispatch, useSelector } from \"app2/src/storeRegistry\";\nimport * as integrationsViewActions from \"app2/src/reducers/components/integrationsView.actions\";\nimport { currentJob, currentJobAddress, currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { currentMeasurement, rootKey } from \"app2/src/selectors/measurement.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { AsyncActions, Actions } from \"app2/src/reducers/measurement.actions\";\nimport { IElevation } from \"app/src/Models/Elevation\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { RootState } from \"app2/src/reducers\";\nimport { IOpeningData } from \"app2/src/records/Opening\";\nimport { IAnnotation } from \"app/src/Models/Annotation\";\nimport { IWallFacadeData } from \"app2/src/records/WallFacade\";\nimport { windows } from \"app2/src/selectors/window.selectors\";\nimport { doors } from \"app2/src/selectors/door.selectors\";\n\nexport class MeasurementTabCtrl {\n  public spinnerPromise: ng.IPromise<any>;\n  public addressRecord: AddressRecord;\n  public fencing: number;\n  public gafEnvironment = false;\n\n  public static $inject = [\n    \"Upload\",\n    \"BaseConfig\",\n    \"$rootScope\",\n    \"$scope\",\n    \"Repository\",\n    \"$analytics\",\n    \"$uibModal\",\n    \"$q\",\n  ];\n  constructor(\n    public Upload: ng.angularFileUpload.IUploadService,\n    public BaseConfig: IBaseConfig,\n    public $rootScope: RsfRootScope,\n    public $scope: ng.IScope,\n    public Repository: IRepository,\n    protected $analytics: angulartics.IAnalyticsService,\n    private $uibModal: ng.ui.bootstrap.IModalService,\n    private $q: ng.IQService,\n  ) {\n    this.gafEnvironment = BaseConfig.ENVIRONMENT === \"gaf\";\n    const listeners = [];\n    listeners.push(\n      this.$rootScope.$on(\"order_quick_measure:open\", () => {\n        this.openQuickMeasureModal();\n      }),\n    );\n    listeners.push(\n      this.$rootScope.$on(\"measurement_import:open\", () => {\n        this.showImportScreen();\n      }),\n    );\n    listeners.push(\n      this.$rootScope.$on(\"annotator:open\", () => {\n        this.showAnnotator();\n      }),\n    );\n    listeners.push(\n      this.$rootScope.$on(\"pool_tool:open\", () => {\n        this.openPoolTool();\n      }),\n    );\n    listeners.push(\n      this.$rootScope.$on(\"rapid_area:open\", () => {\n        this.openRapidArea();\n      }),\n    );\n    listeners.push(\n      this.$rootScope.$on(\"satellite_measure:open\", () => {\n        this.openSatelliteMeasure();\n      }),\n    );\n    listeners.push(\n      this.$rootScope.$on(\"deck_tool:open\", () => {\n        this.openDeckWizard();\n      }),\n    );\n\n    this.$scope.$on(\"$destroy\", () => {\n      listeners.forEach((listener) => {\n        listener();\n      });\n    });\n  }\n\n  public showImportScreen() {\n    this.trackEvent(\"show import measurements\", {\n      category: \"Job\",\n    });\n    const job: IJob = this.Repository.Job.fromJSON(useSelector(currentJob).toJS());\n    const modalInstance: ng.ui.bootstrap.IModalServiceInstance = this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n      animation: true,\n      ariaLabelledBy: \"modal-title\",\n      ariaDescribedBy: \"modal-body\",\n      templateUrl: \"src/Jobs/tabs/import_measurements.html\",\n      controller: \"ImportMeasurementsCtrl\",\n      backdrop: \"static\",\n      controllerAs: \"$ctrl\",\n      size: \"lg\",\n      windowClass: \"import-modal\",\n      resolve: {\n        job: job,\n      },\n    });\n\n    modalInstance.result\n      .then((returned) => {\n        if (returned.type === \"upload\") {\n          this.spinnerPromise = returned.object.then(() => {\n            this.loadMeasurement();\n          });\n        } else if (returned.type === \"hover_modal\") {\n          returned.object.result.then(() => {\n            this.loadMeasurement();\n          });\n        } else if (returned.type === \"order_modal\") {\n          this.loadMeasurement();\n        } else if (!this.gafEnvironment && returned.type === \"quick_measure_modal\") {\n          this.openQuickMeasureModal();\n        } else if (returned.type === \"roof_scope_modal\") {\n          this.openRoofScopeModal();\n        } else if (returned.type === \"plnar_modal\") {\n          this.openPlnarModal();\n        }\n      })\n      .catch(() => {\n        this.trackEvent(\"cancel import measurements\", {\n          category: \"Job\",\n        });\n      });\n  }\n\n  public loadMeasurement() {\n    dispatch(AsyncActions.loadMeasurement([\"elevations\"]));\n  }\n\n  public openQuickMeasureModal() {\n    this.addressRecord = useSelector(currentJobAddress);\n    dispatch(integrationsViewActions.Actions.openQuickMeasureModal());\n  }\n\n  public openRoofScopeModal() {\n    this.addressRecord = useSelector(currentJobAddress);\n    dispatch(integrationsViewActions.Actions.openRoofScopeModal());\n  }\n\n  public openPlnarModal() {\n    this.addressRecord = useSelector(currentJobAddress);\n    dispatch(integrationsViewActions.Actions.openPlnarModal());\n  }\n\n  public showAnnotator() {\n    const job: IJob = useSelector(currentJob).toJS();\n    this.$uibModal\n      .open(<ng.ui.bootstrap.IModalSettings>{\n        size: \"xl\",\n        windowClass: \"window-annotator\",\n        component: \"windowAnnotator\",\n        backdrop: \"static\",\n        resolve: {\n          job,\n          org: null,\n        },\n      })\n      .result.then((result: { measurement: IMeasurement }) => {\n        const measurement = result.measurement;\n\n        _.each(result.measurement.elevations, (e: IElevation) => {\n          e.merge(result.measurement);\n        });\n\n        const promises: ng.IPromise<any>[] = [];\n\n        const elevations: IElevation[] = measurement.elevations;\n        measurement.job_id = job.id;\n        _.each(elevations, (e: IElevation, idx: number) => {\n          if (e.$hasChanged) {\n            e.measurement = { job_id: measurement.job_id } as IMeasurement;\n            promises.push(e.saveRendered(this.BaseConfig, this.Upload, job.images.length + idx));\n          }\n        });\n\n        this.spinnerPromise = this.$q.all(promises).then((async () => {\n          const rootPath = [rootKey, \"byId\", measurement.id];\n          dispatch(Actions.updateForm({ rootPath, name: \"siding_total_area\", value: measurement.siding_total_area }));\n          dispatch(Actions.updateWindows(measurement.windows as any as IOpeningData[]));\n          dispatch(Actions.updateDoors(measurement.doors as any as IOpeningData[]));\n          dispatch(Actions.updateWallFacades(measurement.wall_facades as any as IWallFacadeData[]));\n          await dispatch(AsyncActions.updateMeasurement([\"elevations\"]));\n          const measurementRecord = useSelector((state: RootState) => currentMeasurement(state, {}));\n          const ePromises: any[] = [];\n\n          _.each(elevations, (e: IElevation) => {\n            e.measurement = null;\n            e.measurement_id = result.measurement.id;\n            _.each(e.annotations, (a: IAnnotation) => {\n              a.decycleToJSON();\n              delete a.elevation;\n              if (!a.opening_id) {\n                const openingIds = measurementRecord.get(`${a.opening_type}_ids`);\n                if (a.opening_type === \"window\") {\n                  const windowRecords = useSelector((state) => windows(state, { windowIds: openingIds }));\n                  a.opening_id = windowRecords.find((w) => w.sort_order === a.sort_order).id;\n                } else if (a.opening_type === \"door\") {\n                  const doorRecords = useSelector((state) => doors(state, { doorIds: openingIds }));\n                  a.opening_id = doorRecords.find((d) => d.sort_order === a.sort_order).id;\n                }\n\n                delete a.sort_order;\n              }\n            });\n            ePromises.push(e.$saveOrCreate());\n          });\n          return this.$q.all(ePromises).then((elevations) => {\n            dispatch(Actions.updateElevations(elevations));\n          });\n        }) as () => ng.IPromise<any>);\n      });\n  }\n\n  public openRapidArea() {\n    const address = useSelector(currentJobAddress).toJS();\n    const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n    this.$uibModal\n      .open(<ng.ui.bootstrap.IModalSettings>{\n        size: \"xl\",\n        component: \"rapidArea\",\n        backdrop: \"static\",\n        animation: false,\n        resolve: {\n          address,\n          measurement,\n        },\n      })\n      .result.then((data) => {\n        dispatch(Actions.updateRapidAreaTool(data.rapid_area));\n        dispatch(AsyncActions.updateMeasurement([\"elevations\"]));\n      });\n  }\n\n  public openDeckWizard() {\n    const address = useSelector(currentJobAddress).toJS();\n    const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n    this.$uibModal\n      .open(<ng.ui.bootstrap.IModalSettings>{\n        size: \"xl\",\n        component: \"deckWizard\",\n        backdrop: \"static\",\n        animation: false,\n        resolve: {\n          measurement,\n          address,\n        },\n      })\n      .result.then((data) => {\n        dispatch(Actions.updateDecks(data.decks));\n        dispatch(AsyncActions.updateMeasurement([\"elevations\"]));\n      });\n  }\n\n  public openPoolTool() {\n    const address = useSelector(currentJobAddress).toJS();\n    const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n    this.$uibModal\n      .open(<ng.ui.bootstrap.IModalSettings>{\n        size: \"xl\",\n        component: \"poolTool\",\n        backdrop: \"static\",\n        animation: false,\n        resolve: {\n          measurement: measurement,\n          address: address,\n        },\n      })\n      .result.then((data) => {\n        dispatch(Actions.updatePools(data.pools));\n        dispatch(AsyncActions.updateMeasurement([\"elevations\"]));\n      });\n  }\n\n  public openSatelliteMeasure() {\n    const address = useSelector(currentJobAddress).toJS();\n    const measurement = useSelector((state: RootState) => currentMeasurement(state, {})).toJS();\n    this.$uibModal\n      .open(<ng.ui.bootstrap.IModalSettings>{\n        size: \"xl\",\n        component: \"satelliteMeasure\",\n        backdrop: \"static\",\n        animation: false,\n        resolve: {\n          measurement,\n          address,\n        },\n      })\n      .result.then((data) => {\n        dispatch(Actions.updateSatelliteMeasurementTool(data.leaflet, data.leafletZoom));\n        dispatch(AsyncActions.updateMeasurement([\"elevations\"]));\n      });\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        job: useSelector(currentJobId),\n        org: useSelector(currentOrgId),\n        navDisplay: true,\n      }),\n    );\n  }\n}\n","import * as moment from \"moment\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { BaseTabCtrl } from \"app/src/Jobs/tabs/BaseTabCtrl\";\nimport * as angulartics from \"angulartics\";\nimport { IUser, IUserResource } from \"app/src/Models/User\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IPresentation } from \"app/src/Models/Presentation\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IEvent } from \"app/src/Models/Event\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IOrgFetcherService } from \"app/src/Orgs/OrgFetcherService\";\nimport { IPretty } from \"../../Common/PrettyNameService\";\nimport { IEmailResource, IEmailResponse } from \"../../Models/Email\";\nimport { IBaseConfig } from \"../../Common/IBaseConfig\";\n\nexport class HistoryTabCtrl extends BaseTabCtrl {\n  public emailResponse: IEmailResponse;\n  public totalCount = 0;\n  public analytics: { data: any[] };\n  public reports: any;\n  public org: IOrg;\n  public params: any = {\n    perPage: 25,\n    currentPage: 1,\n    totalCount: 0,\n  };\n  public metadata: any = {\n    \"page-number\": 1,\n  };\n  protected users: { number: IUser } = {} as { number: IUser };\n  protected durations: { number: any } = {} as { number: any };\n  private _inactiveUser = {\n    name: () => \"Inactive User\",\n  };\n\n  public static $inject = [\n    \"JobFetcher\",\n    \"User\",\n    \"OrgFetcher\",\n    \"Session\",\n    \"$stateParams\",\n    \"$scope\",\n    \"$rootScope\",\n    \"$http\",\n    \"$analytics\",\n    \"BaseConfig\",\n    \"$window\",\n    \"Pretty\",\n    \"Email\",\n  ];\n  constructor(\n    public JobFetcher: IJobFetcherService,\n    public User: IUserResource,\n    public OrgFetcher: IOrgFetcherService,\n    public Session: ISession,\n    public $stateParams: ng.ui.IStateParamsService,\n    public $scope: ng.IScope,\n    public $rootScope: RsfRootScope,\n    private $http: ng.IHttpService,\n    protected $analytics: angulartics.IAnalyticsService,\n    public BaseConfig: IBaseConfig,\n    public $window: ng.IWindowService,\n    public Pretty: IPretty,\n    public Email: IEmailResource,\n  ) {\n    super(JobFetcher, $scope, $analytics, $window, $stateParams[\"id\"]);\n\n    this.job.$promise.then(() => {\n      this.OrgFetcher.loadOrg(this.job.org_id).then((org: IOrg) => {\n        this.org = org;\n        this.query();\n        this.queryEmails();\n\n        this.Session.can(\"events\", \"Job\").then((permission) => {\n          if (!permission) {\n            return;\n          }\n          this.$http\n            .post(this.BaseConfig.RSF_ANALYTICS_URL + \"/api/v1/reports/job\", {\n              code: BaseConfig.RSF_ANALYTICS_KEY,\n              job_id: this.job.id,\n              user_id: this.job.assignedUser().id,\n              org_id: this.job.org_id,\n              appointments: _.map(this.job.appointments, (a: IEvent) => {\n                return { id: a.id, date: moment(a.start_time).format() };\n              }),\n            })\n            .then((result: any) => {\n              this.reports = result.data.data;\n            });\n        });\n      });\n    });\n  }\n\n  public toggleEventDisplay(email) {\n    if (email.events.length > 0) {\n      email._display = !email._display;\n    }\n  }\n\n  public fetchUser(userId: number) {\n    if (!this.users[userId]) {\n      this.users[userId] = this.User.get({ id: userId, catchAuth: false });\n\n      this.users[userId].$promise.then(\n        (user) => user,\n        () => {\n          const assignment = this.job.assignments.find((assignment) => assignment.user.id === userId);\n          if (assignment) {\n            const assignmentUser = new this.User({ ...assignment.user });\n\n            if (!assignmentUser.last_name.endsWith(\"INACTIVE\")) {\n              assignmentUser.last_name += \" INACTIVE\";\n            }\n\n            this.users[userId] = assignmentUser;\n          } else {\n            this.users[userId] = this._inactiveUser;\n          }\n        },\n      );\n    }\n\n    return this.users[userId];\n  }\n\n  public formatData(event: any) {\n    switch (event.data.category) {\n      case \"Tools\":\n      case \"Estimate\":\n      case \"LineItemEditor\":\n      case \"Proposals\":\n        return this[\"handle\" + event.data.category](event);\n      case \"Presentation\":\n      case \"Presentations\":\n        return this.handlePresentation(event);\n      case \"Signatures\":\n        return this.handleSignatures(event);\n      default:\n        return \"\";\n    }\n  }\n\n  public duration(index) {\n    if (index === this.analytics.data.length - 1) {\n      return \"\";\n    }\n\n    if (!this.durations[index]) {\n      const previous = moment(this.analytics.data[index].inserted_at + \"+0000\", \"YYYY-MM-DDTHH:mm:ssZ\");\n      const current = moment(this.analytics.data[index + 1].inserted_at + \"+0000\", \"YYYY-MM-DDTHH:mm:ssZ\");\n\n      this.durations[index] = moment.duration(current.diff(previous));\n    }\n\n    const duration = this.durations[index];\n\n    return (\n      this.padWithZeros(Math.round(Math.abs(duration.asHours())), 2) +\n      \":\" +\n      this.padWithZeros(Math.abs(duration.minutes()), 2) +\n      \":\" +\n      this.padWithZeros(Math.abs(duration.seconds()), 2)\n    );\n  }\n\n  public humanDuration(index) {\n    if (index === this.analytics.data.length - 1) {\n      return \"\";\n    }\n\n    if (!this.durations[index]) {\n      const previous = moment(this.analytics.data[index].inserted_at + \"+0000\");\n      const current = moment(this.analytics.data[index + 1].inserted_at + \"+0000\");\n\n      this.durations[index] = moment.duration(current.diff(previous));\n    }\n\n    return this.durations[index].humanize();\n  }\n\n  public apptSummary(id) {\n    const appt = _.find(this.job.appointments, (appt) => {\n      return appt.id === id;\n    });\n\n    if (appt) {\n      return appt.summary;\n    }\n\n    return \"No Appointment\";\n  }\n\n  public reportName(testName) {\n    switch (testName) {\n      case \"start_time\":\n        return \"On Time\";\n      case \"screen_share_used\":\n        return \"Used Screen Share\";\n      case \"visualization_used\":\n        return \"Used Visualization\";\n      case \"estimate_created\":\n        return this.org.estimateTitle() + \" Created\";\n      case \"estimate_emailed\":\n        return this.org.estimateTitle() + \" Emailed\";\n      case \"contract_signature_sent\":\n        return this.org.contractTitle() + \" Emailed\";\n      case \"contract_signature_signed\":\n        return this.org.contractTitle() + \" Signed\";\n      case \"presentation_duration\":\n        return \"Presentation Duration\";\n    }\n  }\n\n  public sanitizeMessage(message) {\n    let regex = new RegExp(\"(estimate)\", \"gi\");\n    message = message.replace(regex, (match) => {\n      return this.matchCase(this.org.estimateTitle(), match);\n    });\n\n    regex = new RegExp(\"(contract)\", \"gi\");\n    return message.replace(regex, (match) => {\n      return this.matchCase(this.org.contractTitle(), match);\n    });\n  }\n\n  public queryEmails(): ng.IPromise<any> {\n    const queryParams = {\n      page: this.params.currentPage,\n      per_page: this.params.perPage,\n      emailable_type_url: \"jobs\",\n      emailable_id: this.job.id,\n    };\n    const query = this.Email.query(queryParams);\n    query.$promise.then((data: any) => {\n      this.emailResponse = data;\n      this.params.totalCount = this.emailResponse.meta.pagination.total_count;\n    });\n\n    return query.$promise;\n  }\n\n  public query(): ng.IPromise<any> {\n    return this.Session.can(\"job\", \"Global\").then((global_permission) => {\n      return this.Session.can(\"events\", \"Job\").then((permission) => {\n        if (!permission && !global_permission) {\n          return;\n        }\n        const params = {\n          code: this.BaseConfig.RSF_ANALYTICS_KEY,\n          job_id: this.job.id,\n          page: this.metadata[\"page-number\"],\n        };\n        if (!global_permission) {\n          params[\"org_id\"] = this.Session.currentUser.org_id;\n        }\n        return this.$http\n          .get(this.BaseConfig.RSF_ANALYTICS_URL + \"/api/v1/events\", { params: params })\n          .then((data: any) => {\n            this.analytics = data.data as { data: any[] };\n            this.metadata = data.headers();\n          });\n      });\n    });\n  }\n\n  protected matchCase(newStr, oldStr) {\n    if (!newStr) {\n      return newStr;\n    }\n    const p = oldStr.charCodeAt(0);\n    if (p >= 65 && p < 91) {\n      return newStr.charAt(0).toUpperCase() + newStr.slice(1);\n    } else {\n      return newStr.toLowerCase();\n    }\n  }\n\n  protected handleTools(event) {\n    return \"\";\n  }\n\n  protected handleEstimate(event) {\n    if (event.data.estimate === \"new\" || event.data.estimate === \"Unsaved\" || !event.data.estimate) {\n      return \"Estimate: New\";\n    }\n\n    const id = parseInt(event.data.estimate);\n    return \"Estimate: \" + _.find(this.job.estimates, (e: IEstimate) => e.id === id).name;\n  }\n\n  protected handleSignatures(event) {\n    switch (event.data.action) {\n      case \"viewed\":\n      case \"recipient_signed\":\n        return \"by \" + event.data.recipient_name;\n      case \"signed\":\n        return \"fully signed\";\n      default:\n        return event.data.action;\n    }\n  }\n\n  protected handleLineItemEditor(event) {\n    const estimate = this.handleEstimate(event);\n    if (event.data.measurement_name) {\n      const measurement = event.data.measurement_name.split(\".\").join(\" - \").split(\"_\").join(\" \");\n\n      return estimate + \"\\nMeasurement: \" + measurement;\n    } else {\n      return estimate;\n    }\n  }\n\n  protected handlePresentation(event) {\n    let presentation = \"\";\n\n    if (event.data.action === \"Slide Changed\") {\n      if (!event.data.presentation) {\n        presentation = \"Presentation: Unknown\";\n      } else {\n        const id = parseInt(event.data.presentation);\n        presentation = \"Presentation: \" + _.find(this.job.org.presentations, (p: IPresentation) => p.id === id).name;\n      }\n      presentation = presentation + \"\\nPage: \" + event.data.page;\n    }\n\n    return presentation;\n  }\n\n  protected handleProposals(event) {\n    return this.handleEstimate(event);\n  }\n\n  private padWithZeros(input, length) {\n    // Cast input to string\n    input = \"\" + input;\n\n    const paddingSize = Math.max(0, length - input.length);\n    return new Array(paddingSize > 0 ? paddingSize + 1 : 0).join(\"0\") + input;\n  }\n}\n","import { Nullable } from \"app2/src/records\";\nimport * as EmailValidator from \"email-validator\";\n\n/**\n * Validates a single email address.\n * Legacy code for Angular `ng-pattern` validation. Use `validateEmail` for new code.\n **/\nexport const emailRegex = /^[^.\\s]+[^@\\s]*@[^\\s]+\\.[A-Za-z]{2,}$/;\n\n/**\n * Validates a list of email addresses.\n * Legacy code for Angular `ng-pattern` validation. Use `validateEmail` for new code.\n **/\nexport const emailListRegex = /^((?!\\.)[\\w+-.%]+@[\\w.-]+\\.[A-Za-z]{2,})(,(?!\\.)[\\w+-.%]+@[\\w.-]+\\.[A-Za-z]{2,})*$/;\n\nexport function validatePhoneNumber(phone: string): boolean {\n  if (phone === \"\") {\n    return true;\n  }\n  return /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/.test(phone);\n}\n\nexport function validateEmail(email: string): boolean {\n  if (email === \"\") {\n    return true;\n  }\n  let valid = true;\n  email.split(\",\").forEach((e) => {\n    if (!EmailValidator.validate(e)) valid = false;\n  });\n\n  return valid;\n}\n\n/**\n * Returns true on invalid inputs. Invalid inputs are null, undefined, or empty string\n *\n * @param {data: Nullable<string>} input\n * @returns {boolean}\n */\nexport const validateInputs = (data: Nullable<string>): boolean => {\n  const badValues = [null, undefined, \"\"];\n  return badValues.includes(data?.trim());\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { List } from \"immutable\";\nimport { currentUserId } from \"app2/src/selectors/user.selectors\";\nimport { emptyOrgValue, OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { currentUserAccesses } from \"app2/src/selectors/access.selectors\";\nimport { AccessRecord } from \"../records/UserRecord\";\n\nexport const currentAccessUid = (state: RootState) => state.getIn([\"auth\", \"accessUid\"]);\n\nexport const currentOrgFromAccessUid = createSelector(\n  [currentUserId, currentAccessUid, currentUserAccesses],\n  (currentUserId: number, accessUid: string, accesses: List<AccessRecord>): OrgRecord => {\n    if (!currentUserId || accesses.count() <= 0) {\n      return emptyOrgValue;\n    }\n\n    if (!accessUid) {\n      return accesses.first<AccessRecord>({ org: emptyOrgValue } as any).org;\n    }\n\n    const match = accesses.find((a) => a.uid === accessUid);\n\n    if (match) {\n      return match.org;\n    }\n\n    return emptyOrgValue;\n  },\n);\n\nexport const authToken = (state: RootState) => state.getIn([\"auth\", \"token\"]);\n\nexport const accessUid = (state: RootState) => state.getIn([\"auth\", \"accessUid\"]);\n","import { IJob, IJobAssignment } from \"app/src/Models/Job\";\nimport { IAddress } from \"app/src/Models/Address\";\nimport { IUserResponse, IUser } from \"app/src/Models/User\";\nimport { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IFlash, FlashLevels } from \"app/src/Common/FlashService\";\nimport { BaseTabCtrl } from \"app/src/Jobs/tabs/BaseTabCtrl\";\nimport * as angulartics from \"angulartics\";\nimport { IDirtyMerge, IDirtyWatcher } from \"app/src/Common/DirtyWatcher\";\nimport { IPhoneNumber } from \"../../Models/PhoneNumber\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { IPretty } from \"../../Common/PrettyNameService\";\nimport { JobInfoTourService } from \"../../Common/Tours/JobInfoTourService\";\nimport { RsfRootScope } from \"../../Common/RsfRootScope\";\nimport { INavDisplayArgs } from \"../JobShowCtrl\";\nimport { IEventingFactory } from \"../../Common/EventingFactory\";\nimport { IJobStateMetadata } from \"app/src/Models/Org\";\nimport { subscriber } from \"app2/src/helpers/Subscribe\";\nimport { dispatch, useSelector } from \"app2/src/storeRegistry\";\nimport { JobObjectRecord, JobAttributeRecordType } from \"app2/src/records/JobAttribute\";\nimport { JobAttributeState } from \"app2/src/reducers/jobAttribute.reducer\";\nimport * as JobAttributeActions from \"app2/src/reducers/jobAttribute.actions\";\nimport { List } from \"immutable\";\nimport { getActiveJobAttributesList } from \"app2/src/selectors/jobAttribute.selectors\";\nimport * as jobService from \"app2/src/api/job.service\";\nimport { IOrgData, JobAttributeTypes } from \"app2/src/records/OrgRecord\";\nimport * as orgActions from \"app2/src/reducers/org.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { emailListRegex } from \"app2/src/helpers/InputValidator\";\nimport { currentAccessUid } from \"app2/src/selectors/auth.selectors\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\nimport { push } from \"connected-react-router/immutable\";\n\nexport class InfoTabCtrl extends BaseTabCtrl implements IDirtyMerge {\n  public form: { ctrl: ng.IFormController } = { ctrl: null };\n  public stateAction: string = null;\n  public state = \"new\";\n  public assignedUser: IUser;\n  public additionalAssignedUser: IUser;\n  public orgUsers: { [id: number]: IUserResponse } = {};\n  public phoneNames: string[] = [\"Home\", \"Mobile\", \"Office\", \"Other\"];\n  public userResult: IUserResponse;\n  public leadSources: string[] = [\"Manual\"];\n  public addLeadSource = false;\n  public newPhoneNumber: IPhoneNumber = <IPhoneNumber>{ name: \"\", number: \"\" };\n  public stateInfo: IJobStateMetadata;\n  public jobTypes: List<JobAttributeRecordType> = List();\n  public useJobAddress = true;\n  public emailListPattern = emailListRegex;\n  public authUser = useSelector(currentAccessUid);\n\n  private _isSaveable = true;\n  private _defaultLeadSources: string[] = [\"Manual\"];\n  private _jobNameChanged = false;\n  private _originalState: any;\n  private _originalUser: number;\n  private _currentJobtypes: JobAttributeRecordType[];\n\n  public static $inject = [\n    \"JobFetcher\",\n    \"Repository\",\n    \"Flash\",\n    \"NgMap\",\n    \"Session\",\n    \"US_STATES\",\n    \"$q\",\n    \"$timeout\",\n    \"DirtyWatcher\",\n    \"$scope\",\n    \"$state\",\n    \"$stateParams\",\n    \"$window\",\n    \"$analytics\",\n    \"COUNTRIES\",\n    \"Pretty\",\n    \"GeoCoder\",\n    \"JobInfoTourService\",\n    \"$rootScope\",\n    \"EventingFactory\",\n  ];\n  constructor(\n    public JobFetcher: IJobFetcherService,\n    public Repository: IRepository,\n    public Flash: IFlash,\n    public ngMap: angular.map.INgMap,\n    public Session: ISession,\n    public US_STATES: string[],\n    public $q: ng.IQService,\n    public $timeout: ng.ITimeoutService,\n    public DirtyWatcher: IDirtyWatcher,\n    public $scope: ng.IScope,\n    public $state: ng.ui.IStateService,\n    public $stateParams: ng.ui.IStateParamsService,\n    public $window: ng.IWindowService,\n    protected $analytics: angulartics.IAnalyticsService,\n    public COUNTRIES: string[],\n    public Pretty: IPretty,\n    public GeoCoder: any,\n    public JobInfoTourService: JobInfoTourService,\n    public $rootScope: RsfRootScope,\n    public EventingFactory: IEventingFactory,\n  ) {\n    super(JobFetcher, $scope, $analytics, $window, $stateParams[\"id\"]);\n\n    const unsubscribe = subscriber.subscribe<JobAttributeState>(\"jobAttributes\", (data) => {\n      this.jobTypes = useSelector((state) =>\n        getActiveJobAttributesList(state, { orgId: this.job.org_id, jobAttrType: JobAttributeTypes.job_type } as any),\n      );\n    });\n\n    if ($stateParams[\"id\"] && $stateParams[\"id\"] !== \"new\") {\n      this.spinnerPromise = this.job.$promise.then(() => {\n        this.initPhoneNumber();\n        this.initUseJobAddress();\n        this.analyticsInit();\n\n        dispatch(\n          JobAttributeActions.Actions.receiveJobAttributes(\n            this.job.org.id,\n            this.job.org.job_types,\n            JobAttributeTypes.job_type,\n          ),\n        );\n\n        return this.orgChanged().then(() => {\n          this.reset();\n          DirtyWatcher.setup($scope, this);\n        });\n      });\n\n      this.state = \"edit\";\n    } else {\n      this.job = Repository.Job.fromJSON({\n        state: \"New\",\n        name: \"\",\n        customer_name: \"\",\n        email: \"\",\n        lead_source: \"Manual\",\n        phone_numbers: [],\n        job_types: [],\n        address: Repository.Address.fromJSON({\n          line_1: \"\",\n          line_2: \"\",\n          city: \"\",\n          state: \"\",\n          postal_code: \"\",\n          zip: \"\",\n          country: \"\",\n        }),\n        customer_address: Repository.Address.fromJSON({\n          line_1: \"\",\n          line_2: \"\",\n          city: \"\",\n          state: \"\",\n          postal_code: \"\",\n          zip: \"\",\n          country: \"\",\n        }),\n        use_job_address: \"yes\",\n      });\n      this.useJobAddress = true;\n      this.initPhoneNumber();\n\n      Session.currentUser.$promise.then(() => {\n        this.job.org = Repository.Org.get({\n          id: Session.currentUser.org_id,\n          \"include[]\": [\"settings\", \"lead_sources\", \"job_states\", \"job_types\"],\n        });\n        this.job.org.$promise.then(() => {\n          this.job.org_id = this.job.org.id;\n\n          dispatch(\n            JobAttributeActions.Actions.receiveJobAttributes(\n              this.job.org.id,\n              this.job.org.job_types,\n              JobAttributeTypes.job_type,\n            ),\n          );\n\n          this.analyticsInit();\n          this.orgChanged().then(() => {\n            this.reset();\n            DirtyWatcher.setup($scope, this);\n          });\n        });\n      });\n\n      this.state = \"new\";\n    }\n\n    const helperListener = $rootScope.$on(\"header:help:job_info\", (event: ng.IAngularEvent, args: INavDisplayArgs) => {\n      this.tourInit();\n    });\n    this.tourInit();\n\n    $scope.$on(\"$destroy\", () => {\n      helperListener();\n      unsubscribe();\n    });\n\n    this.updateJobTypes = this.updateJobTypes.bind(this);\n    this.updateMetadata = this.updateMetadata.bind(this);\n  }\n\n  public tourInit(): void {\n    this.JobInfoTourService.init({\n      jobInfoCtrl: this,\n    });\n  }\n\n  public analyticsInit(): void {\n    this.EventingFactory.init({\n      category: \"Job\",\n      job: this.job.id,\n      org: this.job.org_id,\n      navDisplay: !this.navDisplay,\n    });\n  }\n\n  public initPhoneNumber() {\n    if (this.job.phone_numbers.length > 0) {\n      return;\n    }\n    this.addPhoneNumber();\n  }\n\n  public addPhoneNumber() {\n    // ensure that a new number gets a value less than 0, but an already used one\n    this.newPhoneNumber.id =\n      _.chain(this.job.phone_numbers)\n        .pluck(\"id\")\n        .tap((value) => {\n          value.push(0);\n        })\n        .min()\n        .value() - 1;\n\n    this.job.phone_numbers.push(this.newPhoneNumber);\n    this.newPhoneNumber = <IPhoneNumber>{ name: \"\", number: \"\" };\n    this.trackEvent(\"phone added\", {\n      category: \"Job\",\n    });\n  }\n\n  public removePhoneNumber(phoneNumber: any) {\n    if (phoneNumber.id <= 0) {\n      this.job.phone_numbers = _.filter(this.job.phone_numbers, (pn) => {\n        return pn.id !== phoneNumber.id;\n      });\n    } else {\n      phoneNumber._destroy = true;\n    }\n\n    this.trackEvent(\"phone removed\", {\n      category: \"Job\",\n    });\n  }\n\n  public async unarchiveJob() {\n    const { org_id, id } = this.job;\n    try {\n      await jobService.unarchive({ org_id, id });\n      this.Flash.addMessage(FlashLevels.success, \"Job Unarchived\");\n      this.trackEvent(\"job unarchived\", {\n        category: \"Job\",\n      });\n      this.$state.reload();\n    } catch (error) {\n      this.Flash.addMessage(FlashLevels.danger, \"Unable to unarchive Job\");\n    }\n  }\n\n  public enableLeadSourceAdd() {\n    this.addLeadSource = true;\n    this.job.lead_source = \"\";\n  }\n\n  public addNewLeadSource() {\n    if (this.job.lead_source !== \"\") {\n      this.leadSources = _.uniq(this._defaultLeadSources.concat(this.job.org.lead_sources || []));\n      this.leadSources.push(this.job.lead_source);\n    } else {\n      this.job.lead_source = \"Manual\";\n    }\n\n    this.addLeadSource = false;\n\n    this.trackEvent(\"lead_source added\", {\n      category: \"Job\",\n      leadSource: this.job.lead_source,\n    });\n  }\n\n  public jobJobTypes() {\n    if (this._currentJobtypes) {\n      return this._currentJobtypes;\n    }\n\n    if (!this.job || !this.job.job_types || (this.jobTypes.size <= 0 && this.$stateParams[\"id\"] !== \"new\")) {\n      return;\n    }\n\n    this._currentJobtypes = this.job.job_types.map((jt) => this.jobTypes.find((record) => record.id === jt.id));\n    return this._currentJobtypes;\n  }\n\n  public updateJobTypes(jobTypes: JobObjectRecord[]) {\n    this.$scope.$apply(() => {\n      this.job.job_types = jobTypes.map((jt) => jt.toJS()) as any;\n      this._currentJobtypes = undefined;\n    });\n  }\n\n  public addressChanged() {\n    this._isSaveable = false;\n    this.debouncedAddressChanged();\n  }\n\n  public locationUpdated(address: IAddress) {\n    this.job.address.lat = Math.round(address.lat * Math.pow(10, 6)) / Math.pow(10, 6);\n    this.job.address.lon = Math.round(address.lon * Math.pow(10, 6)) / Math.pow(10, 6);\n    this.$scope.$digest();\n  }\n\n  public updateMetadata(key: string, value: string) {\n    const keys = key.split(\".\");\n    if (keys.length === 1) {\n      this.job.metadata[key] = value;\n    } else {\n      this.job.metadata[keys[0]][keys[1]] = value;\n    }\n    this.$scope.$digest();\n  }\n\n  public deleteJob() {\n    this.job\n      .$delete()\n      .then(() => {\n        this.Flash.addMessage(FlashLevels.success, \"Job Archived\");\n        this.trackEvent(\"job deleted\", {\n          category: \"Job\",\n        });\n        this.$state.go(\"root.job_list\");\n      })\n      .catch(() => {\n        this.Flash.addMessage(FlashLevels.danger, \"Problems archiving Job!!\");\n      });\n  }\n\n  public save() {\n    let assignment: IUser;\n\n    // if it\"s not new and the currently selected is not already assigned, we\"ll have to assign it\n    if (this.job.id) {\n      if (!this.job.assigned_to(this.assignedUser)) {\n        assignment = this.assignedUser;\n        this.trackEvent(\"assigned\", {\n          category: \"Job\",\n          assignedTo: this.assignedUser.id,\n        });\n      }\n    } else {\n      // else we need to setup the \"built in\" assignment stuff up to assign on creation so the current user\n      // definitely has permissions\n      this.job.assignments = [\n        {\n          user_id: this.assignedUser.id,\n        } as any as IJobAssignment,\n      ];\n    }\n\n    this.spinnerPromise = this.job\n      .$saveOrCreate({ \"include[]\": this.JobFetcher.includes })\n      .then(() => {\n        dispatch(jobActions.Actions.receiveJob(JSON.decycle(this.job)));\n        const promises: ng.IPromise<any>[] = [];\n        if (assignment) {\n          promises.push(this.job.$assign({ user_id: assignment.id, \"include[]\": this.JobFetcher.includes }));\n        }\n        if (this.stateAction !== null && this.stateAction !== \"\") {\n          this.trackEvent(\"state changed\", {\n            category: \"Job\",\n            jobState: this.stateAction,\n          });\n          promises.push(this.performSelectedAction());\n        }\n\n        return this.$q.all(promises).then(() => {\n          dispatch(orgActions.Actions.setOrg(this.job.org as any as IOrgData));\n          this.userResult.users = _.clone(this.orgUsers[this.job.org_id].users);\n          this.setAssignedUser(this.job.org_id, this.job.assignments[0].user.id);\n          if (this.$stateParams[\"id\"] === \"new\") {\n            this.job.$promise = this.spinnerPromise;\n            this.JobFetcher.set(this.job);\n            this.reset();\n            this.trackEvent(\"created\", {\n              category: \"Job\",\n            });\n            this.$state.go(\"job_header.job_show.info\", { id: this.job.id }, { notify: false });\n          } else {\n            this.initPhoneNumber();\n            this.reset();\n            this.trackEvent(\"updated\", {\n              category: \"Job\",\n            });\n          }\n\n          this.Flash.addMessage(FlashLevels.success, \"Job Saved\");\n        });\n      })\n      .catch(() => {\n        this.Flash.addMessage(FlashLevels.danger, \"Problems saving Job.\");\n      });\n  }\n\n  public saveable() {\n    return this._isSaveable;\n  }\n\n  public customerNameChanged() {\n    if (this.state === \"edit\") {\n      return;\n    }\n\n    if (this._jobNameChanged) {\n      return;\n    }\n\n    this.job.name = this.job.customer_name;\n  }\n\n  public jobNameChanged() {\n    this._jobNameChanged = true;\n  }\n\n  public orgChanged(): ng.IPromise<any> {\n    this.job.org_id = this.job.org.id;\n    this.leadSources = _.uniq(this._defaultLeadSources.concat(this.job.org.lead_sources || []));\n\n    this.stateInfo = this.job.org.job_states;\n\n    return this.loadOrgUsers(this.job.org_id);\n  }\n\n  public reset(): ng.IPromise<any> {\n    this._originalState = angular.toJson(this.Repository.Job.transformRequest(this.job.cloneMin()));\n    this._originalUser = this.assignedUser.id;\n    this.stateAction = null;\n    this.form.ctrl.$rollbackViewValue();\n    const deferred = this.$q.defer();\n    this.spinnerPromise = deferred.promise;\n    deferred.resolve();\n    return deferred.promise;\n  }\n\n  public check(): boolean {\n    if (!this.job) {\n      return false;\n    }\n\n    return (\n      (this._originalState !== \"\" &&\n        this._originalState !== angular.toJson(this.Repository.Job.transformRequest(this.job.cloneMin()))) ||\n      (this.stateAction !== null && this.stateAction !== \"\") ||\n      this._originalUser !== this.assignedUser.id\n    );\n  }\n\n  public nameFromRawState() {\n    if (!this.stateInfo) {\n      return \"\";\n    }\n\n    const state = this.job.raw_state;\n    if (this.stateInfo && this.stateInfo.state_info[state] && this.stateInfo.state_info[state].pretty_name) {\n      return this.stateInfo.state_info[state].pretty_name;\n    }\n\n    return this.stateInfo.states[state];\n  }\n\n  public toggleUseJobAddress(): void {\n    if (this.useJobAddress) {\n      this.job.use_job_address = \"yes\";\n    } else {\n      this.job.use_job_address = \"no\";\n    }\n  }\n\n  public initUseJobAddress() {\n    this.useJobAddress = this.job.use_job_address === \"yes\" ? true : false;\n  }\n\n  private loadOrgUsers(orgId: number): ng.IPromise<any> {\n    const deferred = this.$q.defer();\n    const promises = [];\n    promises.push(deferred.promise);\n    if (!this.orgUsers[orgId]) {\n      this.orgUsers[orgId] = <IUserResponse>this.Repository.User.query({\n        org_id: this.job.org_id,\n        version: \"v2\",\n      });\n      promises.push(this.orgUsers[orgId].$promise);\n    }\n\n    deferred.resolve();\n    return this.$q.all(promises).then(() => {\n      this.userResult = <IUserResponse>{};\n      this.userResult.users = _.clone(this.orgUsers[orgId].users);\n\n      if (this.job.additional_assignment) {\n        this.additionalAssignedUser = _.find(this.orgUsers[orgId].users, (user: IUser) => {\n          return user.id === this.job.additional_assignment.user.id;\n        });\n      }\n\n      if (this.job && _.isArray(this.job.assignments) && this.job.assignments.length > 0) {\n        this.setAssignedUser(orgId, this.job.assignments[0].user.id);\n      } else {\n        this.setAssignedUser(orgId, this.Session.currentUser.id);\n      }\n    });\n  }\n\n  /* eslint-disable @typescript-eslint/member-ordering */\n  public debouncedAddressChanged = _.debounce(() => {\n    this.GeoCoder.geocode({ address: this.job.address.fullAddress() })\n      .then((results: any) => {\n        const geoLocation = results[0].geometry.location;\n\n        this.job.address.lat = roundToDecimals(geoLocation.lat(), -6);\n        this.job.address.lon = roundToDecimals(geoLocation.lng(), -6);\n\n        const area_2 = _.find(results[0].address_components, function (ac: any) {\n          return _.contains(ac[\"types\"], \"administrative_area_level_2\");\n        });\n\n        const area_3 = _.find(results[0].address_components, function (ac: any) {\n          return _.contains(ac[\"types\"], \"administrative_area_level_3\");\n        });\n\n        if (_.isUndefined(area_2[\"short_name\"])) {\n          this.job.address.administrative_area_level_2 = \"\";\n        } else {\n          this.job.address.administrative_area_level_2 = area_2[\"short_name\"];\n        }\n\n        if (_.isUndefined(area_3[\"short_name\"])) {\n          this.job.address.administrative_area_level_3 = \"\";\n        } else {\n          this.job.address.administrative_area_level_3 = area_3[\"short_name\"];\n        }\n      })\n      .finally(() => {\n        this._isSaveable = true;\n      });\n  }, 500);\n  /* tslint:enable:member-ordering */\n\n  private setAssignedUser(orgId, userId) {\n    this.assignedUser = _.find(this.orgUsers[orgId].users, (user: IUser) => {\n      return user.id === userId;\n    });\n\n    if (!this.assignedUser && _.isArray(this.job.assignments) && this.job.assignments.length > 0) {\n      this.job.assignments[0].user.last_name += \" INACTIVE\";\n      this.assignedUser = this.job.assignments[0].user;\n      this.userResult.users.push(this.assignedUser);\n    } else if (!this.assignedUser) {\n      this.assignedUser = this.orgUsers[orgId].users[0];\n    }\n  }\n\n  private performSelectedAction(): ng.IPromise<any> {\n    return this.job\n      .$change_state({\n        event: this.stateAction,\n        test: true,\n        \"include[]\": this.JobFetcher.includes,\n      })\n      .then(() => {\n        this.stateAction = null;\n      });\n  }\n}\n","import { BaseTabCtrl } from \"app/src/Jobs/tabs/BaseTabCtrl\";\nimport { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport * as angulartics from \"angulartics\";\nimport { IDirtyWatcher } from \"app/src/Common/DirtyWatcher\";\nimport { IFileQueueInit } from \"app/src/Common/FileQueueFactory\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\n\nexport class InspectionTabCtrl extends BaseTabCtrl {\n  public fileQueue: IFileQueueFactory;\n\n  public static $inject = [\n    \"JobFetcher\",\n    \"DirtyWatcher\",\n    \"FileQueueFactory\",\n    \"$scope\",\n    \"$stateParams\",\n    \"$window\",\n    \"$uibModal\",\n    \"EstimatorService\",\n    \"ConfirmDialog\",\n    \"$analytics\",\n  ];\n  constructor(\n    public JobFetcher: IJobFetcherService,\n    public DirtyWatcher: IDirtyWatcher,\n    protected FileQueueFactory: IFileQueueInit,\n    public $scope: ng.IScope,\n    public $stateParams: ng.ui.IStateParamsService,\n    public $window: ng.IWindowService,\n    public $uibModal: ng.ui.bootstrap.IModalService,\n    public EstimatorService: EstimatorService,\n    public ConfirmDialog: IConfirmDialog,\n    protected $analytics: angulartics.IAnalyticsService,\n  ) {\n    super(JobFetcher, $scope, $analytics, $window, $stateParams[\"id\"]);\n\n    this.fileQueue = FileQueueFactory.getInstance();\n\n    this.emailPdf = this.emailPdf.bind(this);\n    this.downloadPdf = this.downloadPdf.bind(this);\n  }\n\n  public downloadPdf(estimate: IEstimate) {\n    this.trackEvent(\"download inspection\", {\n      category: \"Inspections\",\n      estimate: estimate.id,\n    });\n\n    let include_all_items;\n    this.ConfirmDialog.confirm(\"Include All Inspection Items?\")\n      .then(() => {\n        include_all_items = true;\n      })\n      .catch(() => {\n        include_all_items = false;\n      })\n      .finally(() => {\n        this.spinnerPromise = this.EstimatorService.savePdf(estimate, \"inspection\", {\n          inspection_include_all_items: include_all_items,\n        });\n      });\n  }\n\n  public emailPdf(estimate: IEstimate) {\n    this.trackEvent(\"email inspection\", {\n      category: \"Inspections\",\n      estimate: estimate.id,\n    });\n\n    const modalInstance: ng.ui.bootstrap.IModalServiceInstance = this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n      animation: true,\n      ariaLabelledBy: \"modal-title\",\n      ariaDescribedBy: \"modal-body\",\n      templateUrl: \"src/Jobs/tabs/email_modal.html\",\n      controller: \"EmailModal\",\n      backdrop: \"static\",\n      controllerAs: \"$ctrl\",\n      size: \"md\",\n      resolve: {\n        job_email: { email: this.job.email },\n        options: {\n          inspection_include_all_items: false,\n        },\n      },\n    });\n\n    modalInstance.result\n      .then((returnObject: any) => {\n        this.spinnerPromise = this.EstimatorService.emailPdf(estimate.id, \"inspection\", returnObject);\n      })\n      .catch(() => {\n        this.trackEvent(\"email inspection canceled\", {\n          category: \"Inspections\",\n          estimate: estimate.id,\n        });\n      });\n  }\n}\n","import { IEstimate } from \"app/src/Models/Estimate\";\nimport { IOrgBaseConfig } from \"./Org\";\n\nexport interface ISignatureSettings extends IOrgBaseConfig {\n  signers: ISignerSettings[];\n  recipients: IDocumentRecipient[];\n  signature_platform: string;\n\n  buildRecipients(estimate: IEstimate): IDocumentRecipient[];\n}\n\nexport interface ISignerSettings {\n  signer: string;\n  title: string;\n  role: string;\n  required: boolean;\n  pricing: boolean;\n}\n\nexport interface ISigner {\n  title: string;\n  name: string;\n  email: string;\n  status: string;\n  required: boolean;\n  include: boolean;\n  pricing: boolean;\n}\n\nexport interface IDocumentRecipient {\n  title: string;\n  name: string;\n  email: string;\n  required: boolean;\n  include: boolean;\n}\n\nexport class SignatureSettings implements ISignatureSettings {\n  public acl: string[] = [];\n  public signers: ISignerSettings[];\n  public recipients: IDocumentRecipient[];\n  public signature_platform: string;\n  constructor(data: any) {\n    if (data.signers) {\n      this.signers = data.signers.map((signer: ISignerSettings) => {\n        if (!signer.role) signer.role = \"\";\n        return signer;\n      });\n    } else {\n      this.signers = [];\n    }\n    if (data.signature_platform) {\n      this.signature_platform = data.signature_platform;\n    }\n  }\n\n  public buildRecipients(estimate: IEstimate): ISigner[] {\n    const signers: ISigner[] = [];\n    _.each(this.signers, (signerConfig: any) => {\n      const signer: ISigner = <ISigner>{};\n\n      signer.title = signerConfig.title;\n      signer.required = signerConfig.required;\n      signer.pricing = signerConfig.pricing;\n      switch (signerConfig.signer) {\n        case \"job\":\n          signer.name = estimate.job.customer_name;\n          signer.email = estimate.job.email;\n          break;\n        case \"salesrep\":\n          if (estimate.job.assignments && estimate.job.assignments.length > 0) {\n            const assignee = estimate.job.assignments[0];\n            // signer.name = assignee.user.first_name + \" \" + assignee.user.last_name;\n            signer.name = assignee.user.name();\n            signer.email = assignee.user.email;\n          }\n          break;\n      }\n\n      signer.status = \"created\";\n\n      signers.push(signer);\n    });\n\n    this.recipients = signers;\n    return signers;\n  }\n\n  public static fromJSON = (data: any): ISignatureSettings => {\n    const signatureSettings = new SignatureSettings(data);\n    return signatureSettings;\n  };\n}\n","import { ISideBarMenu } from \"../JobMenu/JobMenuOrderService\";\nimport { IOrgBaseConfig } from \"./Org\";\n\nexport interface IOrgPreference {\n  acl: IOrgPrefAcl;\n  config: IOrgPrefConfig;\n}\n\nexport interface IOrgPrefAcl {\n  tools: string[];\n  design_tools: string[];\n  document: string[];\n  profile: string[];\n  visualizations: string[];\n  measurements: string[];\n  reports: string[];\n}\n\nexport interface IOrgPrefConfig {\n  notes: IOrgPrefNotes;\n  billing: IOrgPrefBilling;\n  cover_page: IOrgPrefCoverPage;\n  cronofy: IOrgPrefCronofy;\n  document_order: IOrgPrefDocumentOrder;\n  document_signed_notification: IOrgPrefDocumentSigned;\n  estimator: IOrgPrefEstimator;\n  integrations: IOrgPrefIntegrations;\n  job_menu: ISideBarMenu;\n  layout: IOrgPrefLayout;\n  marketsharp: IOrgPrefMarketSharpPreference;\n  measurement: IOrgPrefMeasurementPreference;\n  photos: IOrgPrefPhotos;\n  report_emails: IOrgPrefReportEmails;\n  screen_share: IOrgPrefScreenShare;\n  sales_tax: IOrgPrefSalesTax;\n  send_email: IOrgPrefSendEmail;\n  titles: IOrgPrefTitles;\n  price_presentation: IOrgPrefPricePresentation;\n  markup: IOrgPrefMarkup;\n  link_expiration: IOrgPrefLinkExpiration;\n  signed_documents: IOrgPrefSignedDocuments;\n}\n\nexport interface IOrgPrefLinkExpiration {\n  proposal: number;\n  agreement: number;\n  signed_agreement: number;\n}\n\nexport interface IOrgPrefSignedDocuments {\n  expiration_in_days: number;\n}\n\nexport interface IOrgPrefMarkup extends IOrgBaseConfig {\n  enabled: boolean;\n  product_min: number;\n  product_default: number;\n  product_max: number;\n  labor_min: number;\n  labor_default: number;\n  labor_max: number;\n}\n\nexport interface IOrgPrefPricePresentation extends IOrgBaseConfig {\n  enable: boolean;\n  finance_type: string;\n  finance_range: string;\n}\n\nexport interface IOrgPrefBilling extends IOrgBaseConfig {\n  notification_emails: string;\n}\n\nexport interface IOrgPrefCoverPage extends IOrgBaseConfig {\n  show_customer_phone: string;\n  show_customer_email: string;\n}\n\nexport interface IOrgPrefCronofy extends IOrgBaseConfig {\n  invite_attendees: string;\n}\n\nexport interface IOrgPrefDocumentSigned extends IOrgBaseConfig {\n  emails: string;\n  signable_document_emails: string;\n}\n\nexport interface IOrgPrefEstimator extends IOrgBaseConfig {\n  add_products: string;\n  show_estimate_list_pricing: string;\n  show_detailed_measurements: string;\n  show_detailed_pricing: string;\n  show_detailed_unit_price: string;\n  show_discount_detail: string;\n  show_option_total: string;\n  show_included_total: string;\n  show_estimated_dates: string;\n  show_product_selector: string;\n  show_included_text: string;\n  calc_method: \"standard\" | \"estimate_group\";\n}\n\nexport interface IOrgPrefIntegrations extends IOrgBaseConfig {\n  houzz: IOrgBaseIntegration;\n  wells_fargo: IOrgBaseIntegration;\n  angies_list: IOrgBaseIntegration;\n  home_advisor: IOrgBaseIntegration;\n}\n\nexport interface IOrgBaseIntegration {\n  url: string;\n}\n\nexport interface IOrgPrefLayout extends IOrgBaseConfig {\n  estimate: string;\n  image_pdf: string;\n  cover_page: string;\n  show_opt_group_on_contract: string;\n  page_break_options: string;\n}\n\nexport interface IOrgPrefPhotos extends IOrgBaseConfig {\n  show_image_uploader: string;\n}\n\nexport interface IOrgPrefReportEmails extends IOrgBaseConfig {\n  send_report_ordered: string;\n  show_report_files: string;\n}\n\nexport interface IOrgPrefScreenShare extends IOrgBaseConfig {\n  survey_url: string;\n  screenleap_share: string;\n}\n\nexport interface IOrgPrefSalesTax extends IOrgBaseConfig {\n  default_rate: number;\n  default_taxable_amount: string;\n  use_sales_tax: string;\n}\n\nexport interface IOrgPrefTitles extends IOrgBaseConfig {\n  contract: string;\n  contract_short: string;\n  estimate: string;\n  estimate_short: string;\n  salesrep: string;\n  opening_name: string;\n  estimator: string;\n  inspection: string;\n  inspection_short: string;\n}\n\nexport interface IOrgPrefMarketSharpPreference {\n  contract: string[];\n  estimate: string[];\n  signable: string[];\n}\n\nexport interface IOrgPrefNotes {\n  enable_editing: boolean;\n}\n\nexport type MeasurementSystem = \"imperial\" | \"metric\";\n\nexport interface IOrgPrefMeasurementPreference extends IOrgBaseConfig {\n  job_tab: string[];\n  line_item_editor: string[];\n  system: MeasurementSystem;\n}\n\nexport interface IOrgPrefSendEmail {\n  notify: string[];\n}\n\nexport interface IPatternSelection {\n  id: number;\n}\n\nexport interface IPatternPreferences {\n  cover_page: IPatternSelection;\n  job_photos: IPatternSelection;\n  product_images: IPatternSelection;\n  estimate: IPatternSelection;\n  presentation: IPatternSelection;\n  slides: IPatternSelection;\n  inspection: IPatternSelection;\n  inspecetion_pdf: IPatternSelection;\n  commission: IPatternSelection;\n}\n\nexport type IOrgPrefDocumentOrder = DocumentOrder;\n\nexport class DocumentOrder {\n  public estimate: any;\n  public contract: any;\n  public inspection: any;\n  public patterns: IPatternPreferences;\n\n  constructor(data: any) {\n    this.estimate = data.estimate;\n    this.contract = data.contract;\n    this.inspection = data.inspection || [];\n    this.patterns = data.patterns;\n  }\n\n  public static fromJSON = (data: any) => {\n    const documentOrder = new DocumentOrder(data);\n    return documentOrder;\n  };\n}\n","import { List } from \"immutable\";\n\nexport const sleep = (milliseconds: number) => {\n  return new Promise((resolve) => setTimeout(resolve, milliseconds));\n};\n\nexport const SupportedTimeZones = List([\n  \"Hawaii\",\n  \"Alaska\",\n  \"Pacific Time (US & Canada)\",\n  \"Arizona\",\n  \"Mountain Time (US & Canada)\",\n  \"Central Time (US & Canada)\",\n  \"Eastern Time (US & Canada)\",\n  \"Indiana (East)\",\n  \"Atlanta (Canada)\",\n  \"Puerto Rico\",\n]);\n","import * as ng from \"angular\";\nimport { IAddress } from \"app/src/Models/Address\";\nimport { IActivatedPriceList } from \"app/src/Models/ActivatedPriceList\";\nimport { IPaymentTerm } from \"app/src/Models/PaymentTerm\";\nimport { IUser } from \"app/src/Models/User\";\nimport { IImage } from \"app/src/Models/Image\";\nimport { IPresentation } from \"app/src/Models/Presentation\";\nimport { IDoc } from \"app/src/Models/Doc\";\nimport { ISignatureSettings, SignatureSettings } from \"./SignatureSettings\";\nimport { IOrgPreference, DocumentOrder, IOrgPrefTitles } from \"./OrgPreference\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IContractLanguage, IOrgSetting, IOrgSettingIntegrations } from \"./OrgSetting\";\nimport { Actions } from \"../Common/SessionService\";\nimport { IJobStateEventInfo, IJobStateInfo } from \"app2/src/records/Job\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\nimport { IJobObjectData } from \"app2/src/records/JobAttribute\";\nimport { SupportedTimeZones } from \"app2/src/helpers/Time\";\nimport { useSelector, dispatch } from \"app2/src/storeRegistry\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { TokenRecord } from \"app2/src/records/Token\";\n\nconst emptyValue = [];\n\nexport interface IOrg extends ng.resource.IResource<IOrg>, OrgPrototype {\n  payment_terms?: IPaymentTerm[];\n  images: IImage[];\n  presentations: IPresentation[];\n  documents: IDoc[];\n  cover_pages: any;\n  can(kind: \"layered\" | \"setting\" | \"preference\", name: OrgAclType, action: Actions | string): boolean;\n  $save(...args: any[]): ng.IPromise<IOrg>;\n  $invitePayMe(...args: any[]): ng.IPromise<IOrg>;\n  $processMs?(data: any): ng.IPromise<IOrg>;\n  $processSf?(data: any): ng.IPromise<IOrg>;\n  $processI360?(data: any): ng.IPromise<IOrg>;\n  $processJn?(data: any): ng.IPromise<IOrg>;\n  $processLp?(data: any): ng.IPromise<IOrg>;\n  $tree(data: any): ng.IPromise<IOrg>;\n  $stats(): ng.IPromise<IOrg>;\n  $csvStats(): ng.IPromise<IOrg>;\n}\n\nexport interface IOrgResource extends ng.resource.IResourceClass<IOrg>, IRsfResource {\n  presentationStrings: string[];\n  stateFilters: string[];\n  inject(injected: IRepository): void;\n  fromJSON?(data: any): IOrg;\n\n  update?(params: any, data: any, success?: Function, error?: Function): IOrg;\n  update?(params: any, success?: Function, error?: Function): IOrg;\n  byUuid?(data: any): IOrg;\n  processMs?(data: any): IOrg;\n  processSf?(data: any): IOrg;\n  processI360?(data: any): IOrg;\n  processJn?(data: any): IOrg;\n  processLp?(data: any): IOrg;\n  tree?(data: any): IOrg;\n  stats?(data: any): any;\n  csvStats?(data: any): any;\n  globalStats?(data: any): any;\n  globalCsvStats?(data: any): any;\n}\n\nexport interface IOrgResponse extends ng.resource.IResourceArray<IOrg> {\n  orgs: IOrg[];\n  meta: any;\n}\n\nexport interface IOrgBaseConfig {\n  acl: string[];\n}\n\nexport interface IJobStateMetadata {\n  states: Array<string>;\n  state_events: Array<IJobStateEventInfo>;\n  state_info: { [key: string]: IJobStateInfo };\n}\n\nexport enum OrgAclType {\n  tools = \"tools\",\n  design_tools = \"design_tools\",\n  document = \"document\",\n  visualizations = \"visualizations\",\n  profile = \"profile\",\n  measurements = \"measurements\",\n  reports = \"reports\",\n  estimator = \"estimator\",\n  sales_tax = \"sales_tax\",\n  job_list = \"job_list\",\n  modules = \"modules\",\n}\n\nexport enum OrgPrefType {\n  billing = \"billing\",\n  estimator = \"estimator\",\n  email = \"email\",\n  integrations = \"integrations\",\n  job_menu = \"job_menu\",\n  screen_share = \"screen_share\",\n  signature_settings = \"signature_settings\",\n  visualization = \"visualization\",\n  cover_page = \"cover_page\",\n  cronofy = \"cronofy\",\n  document_order = \"document_order\",\n  document_signed_notification = \"document_signed_notification\",\n  layout = \"layout\",\n  marketsharp = \"marketsharp\",\n  measurement = \"measurement\",\n  photos = \"photos\",\n  report_emails = \"report_emails\",\n  sales_tax = \"sales_tax\",\n  send_email = \"send_email\",\n  signatures = \"signatures\",\n  titles = \"titles\",\n  price_presentation = \"price_presentation\",\n  markup = \"markup\",\n  link_expiration = \"link_expiration\",\n  signed_documents = \"signed_documents\",\n}\n\nclass OrgPrototype {\n  public id: number;\n  public parent_id: number;\n  public org_count: number;\n  public parent: IOrg;\n  public children: IOrg[];\n  public name: string;\n  public phone_number: string;\n  public website: string;\n  public address: IAddress;\n  public settings?: IOrgSetting;\n  public preferences?: IOrgPreference;\n  public activated_price_list: IActivatedPriceList;\n  public activated_inspection_list: IActivatedPriceList;\n  public activated_survey_list: IActivatedPriceList;\n  public lead_sources?: string[];\n  public job_types?: IJobObjectData[];\n  public users?: IUser[];\n  public contract_languages?: IContractLanguage[];\n  public images: IImage[];\n  public presentations?: IPresentation[];\n  public presentation_count: number;\n  public documents: IDoc[];\n  public base36_id: string;\n  public job_count: number;\n  public user_count: number;\n  public salesforce_token_id: number;\n  public salesforce_authorized: boolean;\n  public improveit360_token_id: number;\n  public improveit360_authorized: boolean;\n  public job_nimbus_token_id: number;\n  public job_nimbus_authorized: boolean;\n  public status: string;\n  public events: string[];\n  public job_states: IJobStateMetadata;\n  public metadata: any;\n\n  private _savedSetAcl: { string: string[] };\n  private _savedPrefAcl: { string: string[] };\n\n  public $save(params?, callback?): ng.IPromise<IOrg> {\n    if (this.id && this.id > 0) {\n      return (this as any).$update(params, callback);\n    }\n  }\n\n  public measurementTypes() {\n    const types = [];\n    if (_.include(this.preferences.config.measurement.job_tab, \"windows\")) {\n      types.push(\"Window\");\n    }\n    if (_.include(this.preferences.config.measurement.job_tab, \"doors\")) {\n      types.push(\"Door\");\n    }\n    if (_.include(this.preferences.config.measurement.job_tab, \"rooms\")) {\n      types.push(\"Room\");\n    }\n    if (_.include(this.preferences.config.measurement.job_tab, \"decks\")) {\n      types.push(\"Deck\");\n    }\n    return types;\n  }\n\n  public showAddMeasurement(where: string) {\n    switch (where) {\n      case \"job_tab\":\n        return (\n          _.include(this.preferences.config.measurement.job_tab, \"windows\") ||\n          _.include(this.preferences.config.measurement.job_tab, \"doors\") ||\n          _.include(this.preferences.config.measurement.job_tab, \"rooms\")\n        );\n      case \"line_item_editor\":\n        return (\n          _.include(this.preferences.config.measurement.line_item_editor, \"windows\") ||\n          _.include(this.preferences.config.measurement.line_item_editor, \"doors\") ||\n          _.include(this.preferences.config.measurement.line_item_editor, \"rooms\")\n        );\n    }\n  }\n\n  public showMeasurementSection(what: string, where: string) {\n    switch (where) {\n      case \"job_tab\":\n        return _.include(this.preferences.config.measurement.job_tab, what);\n      case \"line_item_editor\":\n        return _.include(this.preferences.config.measurement.line_item_editor, what);\n    }\n  }\n\n  public showTotals(presentationMode = false, included = true) {\n    // included\n    if (included) {\n      return this.showIncludedTotal(presentationMode);\n    } else {\n      return this.showOptionTotal(presentationMode);\n    }\n  }\n\n  public showIncludedText(presentation_mode = false) {\n    if (presentation_mode) {\n      return _.include([\"always\", \"customer_only\"], this.preferences.config.estimator.show_included_text);\n    }\n    return _.include([\"always\", \"company_only\"], this.preferences.config.estimator.show_included_text);\n  }\n\n  public showOptionTotal(presentation_mode = false) {\n    if (presentation_mode) {\n      return _.include([\"always\", \"customer_only\"], this.preferences.config.estimator.show_option_total);\n    }\n    return _.include([\"always\", \"company_only\"], this.preferences.config.estimator.show_option_total);\n  }\n\n  public showIncludedTotal(presentation_mode = false) {\n    if (presentation_mode) {\n      return _.include([\"always\", \"customer_only\"], this.preferences.config.estimator.show_included_total);\n    }\n    return _.include([\"always\", \"company_only\"], this.preferences.config.estimator.show_included_total);\n  }\n\n  public showEstimateListPricing(presentation_mode = false) {\n    if (presentation_mode) {\n      return _.include([\"always\", \"customer_only\"], this.preferences.config.estimator.show_estimate_list_pricing);\n    }\n    return _.include([\"always\", \"company_only\"], this.preferences.config.estimator.show_estimate_list_pricing);\n  }\n\n  public showDiscountDetail(presentation_mode = false, total: number, subtotal: number) {\n    if (subtotal !== total) {\n      if (presentation_mode) {\n        return _.include([\"always\", \"customer_only\"], this.preferences.config.estimator.show_discount_detail);\n      }\n      return _.include([\"always\", \"company_only\"], this.preferences.config.estimator.show_discount_detail);\n    }\n    return false;\n  }\n\n  public showDetailedUnitPrice(presentation_mode = false, mode = \"\", hidden_line_items = false) {\n    // never, always, customer_only, company_only, customer_main_only\n    // customer_option_only, company_main_only, company_option_only\n    // company_customer_main, company_customer_option\n    if (presentation_mode) {\n      switch (mode) {\n        case \"option\":\n          if (!this.activated_price_list.hidden_products && !hidden_line_items) {\n            return _.include(\n              [\"always\", \"customer_only\", \"company_customer_option\", \"customer_option_only\"],\n              this.preferences.config.estimator.show_detailed_unit_price,\n            );\n          }\n          return false;\n        case \"main\":\n          if (!this.activated_price_list.hidden_products && !hidden_line_items) {\n            return _.include(\n              [\"always\", \"customer_only\", \"company_customer_main\", \"customer_main_only\"],\n              this.preferences.config.estimator.show_detailed_unit_price,\n            );\n          }\n          return false;\n        default:\n          return false;\n      }\n    } else {\n      switch (mode) {\n        case \"option\":\n          return _.include(\n            [\"always\", \"company_only\", \"company_option_only\", \"company_customer_main\", \"company_customer_option\"],\n            this.preferences.config.estimator.show_detailed_unit_price,\n          );\n        case \"main\":\n          return _.include(\n            [\"always\", \"company_only\", \"company_main_only\", \"company_customer_main\", \"company_customer_option\"],\n            this.preferences.config.estimator.show_detailed_unit_price,\n          );\n        default:\n          return false;\n      }\n    }\n  }\n\n  public showDetailedPricing(presentation_mode = false, mode = \"\", hidden_line_items = false) {\n    // never, always, customer_only, company_only, customer_main_only\n    // customer_option_only, company_main_only, company_option_only\n    // company_customer_main, company_customer_option\n\n    if (presentation_mode) {\n      switch (mode) {\n        case \"option\":\n          if (!this.activated_price_list.hidden_products && !hidden_line_items) {\n            return _.include(\n              [\"always\", \"customer_only\", \"company_customer_option\", \"customer_option_only\"],\n              this.preferences.config.estimator.show_detailed_pricing,\n            );\n          }\n          return false;\n        case \"main\":\n          if (!this.activated_price_list.hidden_products && !hidden_line_items) {\n            return _.include(\n              [\"always\", \"customer_only\", \"company_customer_main\", \"customer_main_only\"],\n              this.preferences.config.estimator.show_detailed_pricing,\n            );\n          }\n          return false;\n        default:\n          return false;\n      }\n    } else {\n      switch (mode) {\n        case \"option\":\n          return _.include(\n            [\"always\", \"company_only\", \"company_option_only\", \"company_customer_main\", \"company_customer_option\"],\n            this.preferences.config.estimator.show_detailed_pricing,\n          );\n        case \"main\":\n          return _.include(\n            [\"always\", \"company_only\", \"company_main_only\", \"company_customer_main\", \"company_customer_option\"],\n            this.preferences.config.estimator.show_detailed_pricing,\n          );\n        default:\n          return false;\n      }\n    }\n  }\n\n  public showDetailedMeasurements(presentation_mode = false) {\n    // never, always, customer_only, company_only\n    if (presentation_mode) {\n      return _.include([\"always\", \"customer_only\"], this.preferences.config.estimator.show_detailed_measurements);\n    } else {\n      return _.include([\"always\", \"company_only\"], this.preferences.config.estimator.show_detailed_measurements);\n    }\n  }\n\n  public showSalesTax(tax_total: number) {\n    if (tax_total > 0) {\n      return true;\n    }\n\n    return _.include([\"enabled\"], this.preferences.config.sales_tax.use_sales_tax);\n  }\n\n  public showPricePresentation() {\n    if (_.isUndefined(this.settings) || _.isUndefined(this.preferences)) {\n      return false;\n    }\n    const set_enable = this.settings.config.price_presentation.enable;\n    const pp_pref = this.preferences.config.price_presentation;\n\n    if (_.isUndefined(pp_pref) || _.isUndefined(pp_pref.enable)) {\n      return false;\n    }\n\n    return set_enable && pp_pref.enable;\n  }\n\n  public showImageUploader(presentation_mode = false) {\n    if (presentation_mode) {\n      return false;\n    }\n\n    return _.include([\"always\"], this.preferences.config.photos.show_image_uploader);\n  }\n\n  public estimatorTitle(plural = false) {\n    return this.getTitle(\"estimator\", plural);\n  }\n\n  public openingNameTitle(plural = false) {\n    return this.getTitle(\"opening_name\", plural);\n  }\n\n  public estimateTitle(plural = false) {\n    return this.getTitle(\"estimate\", plural);\n  }\n\n  public contractTitle(plural = false) {\n    return this.getTitle(\"contract\", plural);\n  }\n\n  // the view won\"t wait for a promise to resolve, so this can be called before data fully loaded\n  public getTitle(document_type: string, plural = false) {\n    let val = \"\";\n\n    const config = this.fetchPref<IOrgPrefTitles>(OrgPrefType.titles);\n\n    switch (document_type) {\n      case \"contract\":\n        val = !config.contract_short ? \"Agreement\" : config.contract_short;\n        break;\n      case \"estimate\":\n        val = !config.estimate_short ? \"Proposal\" : config.estimate_short;\n        break;\n      case \"opening_name\":\n        val = !config.opening_name ? \"Name\" : config.opening_name;\n        break;\n      case \"estimator\":\n        val = !config.estimator ? \"Estimate\" : config.estimator;\n        break;\n      case \"inspection\":\n        val = !config.inspection_short ? \"Inspection\" : config.inspection_short;\n        break;\n    }\n\n    if (plural) {\n      val = val + \"s\";\n    }\n    return val;\n  }\n\n  public showEstimatedDates() {\n    return _.contains([\"always\"], this.preferences.config.estimator.show_estimated_dates);\n  }\n\n  public canSign() {\n    if (!this.settings) {\n      return false;\n    } else {\n      const config = this.fetchPref<ISignatureSettings>(OrgPrefType.signature_settings);\n      if (!config || _.isEmpty(config)) {\n        return false;\n      } else {\n        return config.signers.length > 0;\n      }\n    }\n  }\n\n  public reportsEnabled(value) {\n    return (\n      _.contains(this.fetchPreferencesAcl(OrgAclType.reports), value) &&\n      _.contains(this.fetchSettingsAcl(OrgAclType.reports), value)\n    );\n  }\n\n  public hasMs() {\n    const marketSharpToken = useSelector((state: RootState) => token(state, { kind: \"marketsharp\" }) as TokenRecord);\n    if (!marketSharpToken) {\n      return false;\n    }\n    const marketSharpCompanyId: any = marketSharpToken?.getIn([\"data\", \"company_id\"]);\n\n    return !!marketSharpCompanyId;\n  }\n\n  public partialUrl(type: string) {\n    return \"src/Orgs/partials/\" + type + \".html\";\n  }\n\n  public resourceDocuments() {\n    return _.filter(this.documents, (doc) => {\n      return doc.displayInResource;\n    });\n  }\n\n  public fetchPref<T extends IOrgBaseConfig>(key: OrgPrefType): T {\n    if (!this.preferences || !this.settings) {\n      return {} as any as T;\n    }\n\n    const pref: IOrgBaseConfig = this.preferences.config[key.toString()];\n    const set: IOrgBaseConfig = this.settings.config[key.toString()];\n\n    if (!pref) {\n      return (set || {}) as T;\n    }\n\n    if (!set) {\n      return (pref || {}) as T;\n    }\n\n    const merged: IOrgBaseConfig = _.extend({}, pref, set);\n\n    if (!pref.acl) {\n      merged.acl = set.acl || [];\n    } else if (!set.acl) {\n      merged.acl = pref.acl || [];\n    } else {\n      merged.acl = _.intersection(pref.acl, set.acl);\n    }\n\n    return merged as T;\n  }\n\n  public fetchPreferencesAcl(key: OrgAclType): string[] {\n    if (!this.preferences) {\n      return emptyValue;\n    }\n    if (!this.preferences.acl[key]) {\n      this.preferences.acl[key] = [];\n    }\n\n    return this.preferences.acl[key];\n  }\n\n  public fetchSettingsAcl(key: OrgAclType): string[] {\n    if (!this.settings) {\n      return emptyValue;\n    }\n    if (!this.settings.acl[key]) {\n      this.settings.acl[key] = [];\n    }\n    return this.settings.acl[key];\n  }\n\n  public setSettingsAcl(key: OrgAclType, values: string[]): void {\n    this.settings.acl[key] = values;\n  }\n\n  public setPreferencesAcl(key: OrgAclType, value: string[]): void {\n    this.preferences.acl[key] = value;\n  }\n\n  public fetchAcl(key: OrgAclType): string[] {\n    if (!this.preferences || !this.settings) {\n      return [];\n    }\n\n    this._savedPrefAcl = this._savedPrefAcl || this.pluckAcl(this.preferences.config);\n    this._savedSetAcl = this._savedSetAcl || this.pluckAcl(this.settings.config);\n\n    let pref: string[] = this.preferences.acl[key.toString()];\n    if (!pref) {\n      pref = this._savedPrefAcl[key.toString()];\n    }\n\n    let set: string[] = this.settings.acl[key.toString()];\n    if (!set) {\n      set = this._savedSetAcl[key.toString()];\n    }\n\n    if (!pref) {\n      return set || [];\n    }\n\n    if (!set) {\n      return pref || [];\n    }\n\n    const merged = _.intersection(pref, set);\n    return merged;\n  }\n\n  public can(kind: \"setting\" | \"preference\" | \"layered\", key: OrgAclType, action: Actions | string): boolean {\n    let acl, permission;\n    switch (kind) {\n      case \"setting\":\n        acl = (this.settings || { acl: {} }).acl || {};\n        permission = acl[key.toString()] || [];\n        break;\n      case \"preference\":\n        acl = (this.preferences || { acl: {} }).acl || {};\n        permission = acl[key.toString()] || [];\n        break;\n      case \"layered\":\n        permission = this.fetchAcl(key);\n        break;\n    }\n    return _.include(permission, action);\n  }\n\n  public defaultUserAcl(): string {\n    if (this.settings.config && this.settings.config.user_acl && this.settings.config.user_acl.default) {\n      return this.settings.config.user_acl.default;\n    }\n\n    return \"salesrep\";\n  }\n\n  public getMeasurementSystem(): string {\n    if (this.preferences.config && this.preferences.config.measurement && this.preferences.config.measurement.system) {\n      return this.preferences.config.measurement.system;\n    }\n\n    return \"imperial\";\n  }\n\n  protected pluckAcl(config: any): { string: string[] } {\n    const keys = Object.keys(config);\n    const result: { string: string[] } = {} as { string: string[] };\n\n    _.each(keys, (key) => {\n      result[key] = config[key].acl;\n    });\n\n    return result;\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:id\";\n\n  const transformSingleResponse = (response: string, headers: ng.IHttpHeadersGetter, status: number): IOrg => {\n    if (status < 200 || status > 299) {\n      return new Org({});\n    }\n\n    const data: any = JSON.parse(response).org;\n\n    return Org.fromJSON(data);\n  };\n\n  const transformRequest = (org: IOrg): string => {\n    const data = JSON.parse(angular.toJson(org));\n\n    if (data.address) {\n      data.address_attributes = data.address;\n      delete data.address;\n    }\n\n    if (data.settings) {\n      data.settings_attributes = data.settings;\n      delete data.settings;\n    }\n\n    if (data.preferences) {\n      data.preferences_attributes = data.preferences;\n      delete data.preferences;\n    }\n\n    if (data.activated_price_list) {\n      delete data.activated_price_list;\n    }\n    if (data.activated_inspection_list) {\n      delete data.activated_inspection_list;\n    }\n    if (data.activated_survey_list) {\n      delete data.activated_survey_list;\n    }\n\n    if (data.contract_languages) {\n      data.contract_languages_attributes = data.contract_languages;\n      delete data.contract_languages;\n    }\n\n    return angular.toJson({ id: org.id, org: data });\n  };\n\n  const Org: IOrgResource = <IOrgResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const data: any = JSON.parse(response);\n\n          _.each(data.orgs, (org, index) => {\n            data.orgs[index] = Org.fromJSON(org);\n          });\n\n          return data;\n        },\n        isArray: false,\n      },\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      tree: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/tree\",\n        transformResponse: (response: string) => {\n          return JSON.parse(response);\n        },\n        isArray: false,\n      },\n      stats: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/stats\",\n        transformResponse: (response: string) => {\n          return JSON.parse(response);\n        },\n        isArray: false,\n      },\n      csvStats: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/stats.csv\",\n        headers: {\n          accept: \"text/csv\",\n        },\n        responseType: \"arraybuffer\",\n        transformResponse: function (data: string, headers: ng.IHttpHeadersGetter, status: number) {\n          if (status < 200 || status > 299) {\n            return { response: null };\n          }\n\n          let csv;\n          if (data) {\n            csv = new Blob([data], {\n              type: \"text/csv\",\n            });\n            return {\n              response: csv,\n            };\n          }\n        },\n      },\n      globalStats: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/global_stats\",\n        transformResponse: (response: string) => {\n          return JSON.parse(response);\n        },\n        isArray: false,\n      },\n      globalCsvStats: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/global_stats.csv\",\n        headers: {\n          accept: \"text/csv\",\n        },\n        responseType: \"arraybuffer\",\n        transformResponse: function (data: string, headers: ng.IHttpHeadersGetter, status: number) {\n          if (status < 200 || status > 299) {\n            return { response: null };\n          }\n\n          let csv;\n          if (data) {\n            csv = new Blob([data], {\n              type: \"text/csv\",\n            });\n            return {\n              response: csv,\n            };\n          }\n        },\n      },\n      invitePayMe: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/invite_payment\",\n        transformResponse: [],\n        isArray: false,\n      },\n      byUuid: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: BaseConfig.BASE_URL + \"/api/v1/orgs/uuid/:uuid\",\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      processMs: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/sync/market_sharp\",\n        transformRequest: () => {\n          return \"{}\";\n        },\n        isArray: false,\n      },\n      processSf: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/sync/salesforce\",\n        transformRequest: () => {\n          return \"{}\";\n        },\n        isArray: false,\n      },\n      processI360: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/sync/improveit360\",\n        transformRequest: () => {\n          return \"{}\";\n        },\n        isArray: false,\n      },\n      processJn: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/sync/job_nimbus\",\n        transformRequest: () => {\n          return \"{}\";\n        },\n        isArray: false,\n      },\n      processLp: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/sync/lead_perfection\",\n        transformRequest: () => {\n          return \"{}\";\n        },\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformResponse: transformSingleResponse,\n        transformRequest: transformRequest,\n        isArray: false,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingleResponse,\n        transformRequest: transformRequest,\n        isArray: false,\n      },\n    },\n  );\n\n  hiddenExtend(Org.prototype, OrgPrototype.prototype);\n\n  Org.fromJSON = (data: any): IOrg => {\n    if (data.parent) {\n      data.parent = Org.fromJSON(data.parent);\n    }\n\n    if (data.children && _.isArray(data.children)) {\n      _.each(data.children, (e, idx) => {\n        data.children[idx] = Org.fromJSON(e);\n      });\n    } else {\n      data.children = [];\n    }\n\n    if (_.isArray(data.images)) {\n      _.each(data.images, (image, index) => {\n        data.images[index] = resources.Image.fromJSON(image);\n      });\n    }\n\n    if (Array.isArray(data.presentations)) {\n      _.each(data.presentations, (presentation, index) => {\n        data.presentations[index] = resources.Presentation.fromJSON(presentation);\n      });\n    }\n    if (Array.isArray(data.documents)) {\n      _.each(data.documents, (doc, index) => {\n        data.documents[index] = resources.Doc.fromJSON(doc);\n      });\n    }\n\n    if (data.settings && data.settings.config) {\n      if (data.settings.config.signature_settings) {\n        data.settings.config.signature_settings = SignatureSettings.fromJSON(data.settings.config.signature_settings);\n      }\n\n      if (data.settings.config.integrations) {\n        if (data.settings.config.integrations.market_sharp) {\n          if (data.settings.config.integrations.market_sharp.default_duration) {\n            data.settings.config.integrations.market_sharp.default_duration = parseFloat(\n              data.settings.config.integrations.market_sharp.default_duration,\n            );\n          }\n        }\n      }\n\n      if (!data.settings.config.price_presentation) {\n        data.settings.config.price_presentation = { enable: false };\n      } else if (!data.settings.config.price_presentation.enable) {\n        data.settings.config.price_presentation.enable = false;\n      }\n      if (!data.settings.config?.link_expiration) {\n        data.settings.config.link_expiration = { disabled: true };\n      }\n    } else {\n      data.settings = data.settings || {\n        config: { price_presentation: { enable: false } },\n      };\n    }\n\n    data.settings.acl = data.settings.acl || {};\n    data.settings.config = data.settings.config || {};\n\n    if (data.preferences && data.preferences.config) {\n      if (data.preferences.config.document_order) {\n        data.preferences.config.document_order = DocumentOrder.fromJSON(data.preferences.config.document_order);\n      }\n\n      if (!data.preferences.config?.signed_documents) {\n        data.preferences.config.signed_documents = {\n          expiration_in_days: 60,\n        };\n      }\n\n      if (data.preferences.config.sales_tax) {\n        if (data.preferences.config.sales_tax.default_rate) {\n          data.preferences.config.sales_tax.default_rate = parseFloat(data.preferences.config.sales_tax.default_rate);\n        }\n      }\n      if (!data.preferences.config?.link_expiration || data.settings.config?.link_expiration?.disabled) {\n        data.preferences.config.link_expiration = {\n          proposal: 7,\n          agreement: 7,\n          signed_agreement: 7,\n        };\n      }\n      if (!data.preferences.config?.timezone) {\n        data.preferences.config.timezone = SupportedTimeZones.get(0);\n      }\n    } else {\n      data.preferences = { config: {}, acl: {} };\n    }\n\n    data.preferences.acl = data.preferences.acl || {};\n    data.preferences.config = data.preferences.config || {};\n\n    if (data.address) {\n      data.address = resources.Address.fromJSON(data.address);\n    }\n\n    if (data.payment_terms) {\n      _.each(data.payment_terms, (pt: any, index: number) => {\n        data.payment_terms[index] = resources.PaymentTerm.fromJSON(pt);\n      });\n    }\n\n    if (_.isArray(data.users)) {\n      data.users = _.map(data.users, (u: any) => {\n        return resources.User.fromJSON(u);\n      });\n    } else {\n      data.users = [];\n    }\n\n    return new Org(data);\n  };\n\n  Org.stateFilters = [\n    \"created\",\n    \"paid\",\n    \"waiting_on_materials\",\n    \"build_in_progress\",\n    \"build_completed\",\n    \"ongoing_support\",\n    \"unclaimed\",\n    \"suspended\",\n    \"canceled\",\n    \"freemium\",\n  ];\n\n  Org.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Org;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IChameleonEvent } from \"app/src/Visualization/Chameleon/ChameleonEvent\";\nimport { IVisualization, IVisualizationResource } from \"app/src/Models/Visualization\";\nimport { IJob } from \"app/src/Models/Job\";\nexport class ChameleonService {\n  public baseChameleon = \"https://remotesfcontractor-v1.chameleonpower.com\";\n  public _chameleonCode = \"?ccode=\";\n\n  constructor(\n    public Visualization: IVisualizationResource,\n    public $q: ng.IQService,\n  ) {}\n\n  public handleEvents(job: IJob, event: any, vis: IVisualization): ng.IPromise<IVisualization> {\n    const deferred: ng.IDeferred<IVisualization> = this.$q.defer();\n\n    if (event.origin.indexOf(this.baseChameleon) !== 0) {\n      deferred.resolve();\n      return deferred.promise;\n    }\n    //\"{\"specifier\":\"RemoteSF_USER_318d7474c01846eb9a0e3e101215f736\",\"sel\":\"363318\",\"title\":\"Test\",\"email\":\"\",\"action\":\"save\",\"ccode\":\"678498\"}\"\n\n    const e: IChameleonEvent = JSON.parse(event.data);\n    switch (e.action) {\n      case \"save\":\n        if (vis) {\n          vis.data = e;\n          return vis.$save();\n        } else {\n          return this._createVisualization(job, \"chameleon\", e.projectname, e);\n        }\n    }\n\n    deferred.resolve();\n    return deferred.promise;\n  }\n\n  private _createVisualization(job, type: string, name: string, data: any): ng.IPromise<IVisualization> {\n    return this.Visualization.create({ job_id: job.id, name: name, kind: type, data: data }).$promise.then(\n      (vis: IVisualization) => {\n        job.visualizations.unshift(vis);\n        return vis;\n      },\n    );\n  }\n}\n","import { IChameleonEvent } from \"app/src/Visualization/Chameleon/ChameleonEvent\";\nimport { IVisualization, IVisualizationResource } from \"app/src/Models/Visualization\";\nimport { IJob } from \"app/src/Models/Job\";\nexport class ChameleonV2Service {\n  public baseChameleon = \"https://remodelvision2.chameleonpower.com\";\n\n  constructor(\n    public Visualization: IVisualizationResource,\n    public $q: ng.IQService,\n  ) {}\n\n  public handleEvents(job: IJob, event: any, vis: IVisualization): ng.IPromise<IVisualization> {\n    const deferred: ng.IDeferred<IVisualization> = this.$q.defer();\n\n    if (event.origin.indexOf(this.baseChameleon) !== 0) {\n      deferred.resolve();\n      return deferred.promise;\n    }\n\n    const e: IChameleonEvent = JSON.parse(event.data);\n    switch (e.action) {\n      case \"save\":\n        if (vis) {\n          vis.data = e;\n          return vis.$save();\n        } else {\n          return this._createVisualization(job, \"chameleon_v2\", e.title, e);\n        }\n    }\n\n    deferred.resolve();\n    return deferred.promise;\n  }\n\n  private _createVisualization(job, type: string, name: string, data: any): ng.IPromise<IVisualization> {\n    return this.Visualization.create({ job_id: job.id, name: name, kind: type, data: data }).$promise.then(\n      (vis: IVisualization) => {\n        job.visualizations.unshift(vis);\n        return vis;\n      },\n    );\n  }\n}\n","import { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { IOrg, OrgPrefType } from \"app/src/Models/Org\";\nimport { BaseTabCtrl } from \"app/src/Jobs/tabs/BaseTabCtrl\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IVisualization, IVisualizationResource } from \"app/src/Models/Visualization\";\nimport { ChameleonService } from \"app/src/Visualization/Chameleon/ChameleonService\";\nimport { ChameleonV2Service } from \"app/src/Visualization/Chameleon/ChameleonV2Service\";\nimport { FlashLevels, IFlash } from \"app/src/Common/FlashService\";\nimport * as angulartics from \"angulartics\";\nimport { IToolInfo } from \"app/src/Common/ToolInfoService\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { IBaseConfig } from \"../../Common/IBaseConfig\";\nimport { IVisualizationConfig } from \"../../Models/OrgSetting\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport { getNextSortOrder } from \"app2/src/helpers/Utility\";\n\nexport class DesignToolTabCtrl extends BaseTabCtrl {\n  public selectedVisualization: IVisualization;\n  public org: IOrg;\n  public visualizationUrl: any;\n  public showVisualizationIFrame = false;\n  public showRenoworksIFrame = false;\n  public fullscreen = false;\n  public jobLoaded = false;\n  public toolIFrameUrl: any;\n  public showToolIFrame = false;\n  public sortableOptions = {\n    placeholder: \"card-placeholder col-md-4\",\n    helper: \"clone\",\n    items: \"> .sortable-card\",\n    distance: 15,\n    start: (e, ui) => {\n      ui.placeholder.height(ui.item.height());\n    },\n    stop: () => {\n      this.orderVisualizations();\n    },\n  };\n  public toolsLoaded = false;\n\n  private _chameleonService;\n  private _chameleonV2Service;\n  private _eventListener;\n\n  public static $inject = [\n    \"JobFetcher\",\n    \"Visualization\",\n    \"Flash\",\n    \"$sce\",\n    \"$stateParams\",\n    \"$q\",\n    \"BaseConfig\",\n    \"$scope\",\n    \"$rootScope\",\n    \"$window\",\n    \"$analytics\",\n    \"ToolInfo\",\n    \"Pretty\",\n    \"$uibModal\",\n  ];\n  constructor(\n    public JobFetcher: IJobFetcherService,\n    public Visualization: IVisualizationResource,\n    public Flash: IFlash,\n    public $sce: ng.ISCEService,\n    public $stateParams: ng.ui.IStateParamsService,\n    public $q: ng.IQService,\n    public BaseConfig: IBaseConfig,\n    private $scope: ng.IScope,\n    public $rootScope: RsfRootScope,\n    public $window: ng.IWindowService,\n    protected $analytics: angulartics.IAnalyticsService,\n    public ToolInfo: IToolInfo,\n    public Pretty: IPretty,\n    public $uibModal: ng.ui.bootstrap.IModalService,\n  ) {\n    super(JobFetcher, $scope, $analytics, $window, $stateParams[\"id\"]);\n\n    // Chameleon V1 - GAF\n    this._chameleonService = new ChameleonService(Visualization, $q);\n    this._eventListener = (e) => {\n      this._chameleonService.handleEvents(this.job, e, this.selectedVisualization).then((result: IVisualization) => {\n        if (!result) {\n          return;\n        }\n\n        this.spinnerPromise = result.$promise;\n        this.showVisualization(result);\n      });\n    };\n\n    // Chameleon V2 - OCC\n    this._chameleonV2Service = new ChameleonV2Service(Visualization, $q);\n    this._eventListener = (e) => {\n      this._chameleonV2Service.handleEvents(this.job, e, this.selectedVisualization).then((result: IVisualization) => {\n        if (!result) {\n          return;\n        }\n\n        this.spinnerPromise = result.$promise;\n        this.showVisualization(result);\n      });\n    };\n\n    // Global Items\n    $window.addEventListener(\"message\", this._eventListener);\n\n    $scope.$on(\"$destroy\", () => {\n      $window.removeEventListener(\"message\", this._eventListener);\n    });\n\n    this.job.$promise.then(() => {\n      this.org = this.job.org;\n      this.jobLoaded = true;\n      this.loadTools().then(() => {\n        this.toolsLoaded = true;\n        this.$scope.$digest();\n      });\n      dispatch(tokenActions.AsyncActions.getToken(this.org.id, \"provia\"));\n      dispatch(tokenActions.AsyncActions.getToken(this.org.id, \"renoworks\"));\n    });\n  }\n\n  public showIFrame(name: string) {\n    if (name === \"renoworks\") {\n      this.showRenoworksIFrame = true;\n      return true;\n    }\n\n    this.toolIFrameUrl = this.$sce.trustAsResourceUrl(this.ToolInfo.tools(name).link(this.job));\n    this.showToolIFrame = true;\n  }\n\n  public close() {\n    this.selectedVisualization = null;\n\n    this.showRenoworksIFrame = false;\n    this.showVisualizationIFrame = false;\n    this.showToolIFrame = false;\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public showingIFrame() {\n    return this.showToolIFrame || this.showRenoworksIFrame || this.showVisualizationIFrame;\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public fullScreen() {\n    this.fullscreen = !this.fullscreen;\n  }\n\n  public startNewVisualization(kind: string) {\n    this.selectedVisualization = null;\n\n    switch (kind) {\n      case \"chameleon\":\n        this.visualizationUrl = this.$sce.trustAsResourceUrl(\n          this.Visualization.buildNewProjectUrl(\n            kind,\n            this.org.fetchPref<IVisualizationConfig>(OrgPrefType.visualization).chameleon.code,\n            this.job.address.postal_code,\n            \"\",\n            \"\",\n          ),\n        );\n        break;\n      case \"chameleon_v2\":\n        this.visualizationUrl = this.$sce.trustAsResourceUrl(\n          this.Visualization.buildNewProjectUrl(\n            kind,\n            \"\",\n            this.job.address.postal_code,\n            this.org.fetchPref<IVisualizationConfig>(OrgPrefType.visualization).chameleon.url,\n            this.job.assignedUser().email,\n          ),\n        );\n        break;\n    }\n\n    this.showVisualizationIFrame = true;\n  }\n\n  public showVisualization(vis: IVisualization) {\n    this.selectedVisualization = vis;\n\n    this.visualizationUrl = this.$sce.trustAsResourceUrl(this.ToolInfo.tools(vis.kind).visualization(this.job, vis));\n\n    if (vis.kind === \"renoworks\") {\n      this.showRenoworksIFrame = true;\n    } else {\n      this.showVisualizationIFrame = true;\n    }\n\n    // Event category & action used for analytics job reporting - do not rename and keep upon refactor\n    this.trackEvent(\"Show Visualization\", {\n      category: \"Design Tools\",\n      visualization: vis.id,\n    });\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public deleteVisualization(vis: IVisualization) {\n    vis\n      .$delete()\n      .then(() => {\n        this.job.visualizations = _.select(this.job.visualizations, (v: IVisualization) => {\n          return vis.id !== v.id;\n        });\n        this.Flash.addMessage(FlashLevels.success, \"Visualization successfully deleted.\");\n        this.trackEvent(\"Deleted Visualization\", {\n          category: \"Design Tools\",\n          visualization: vis.id,\n        });\n      })\n      .catch(() => {\n        this.Flash.addMessage(FlashLevels.danger, \"There were problems deleting the visualization.\");\n        this.trackEvent(\"Visualization Deleted Successfully\", {\n          category: \"Design Tools\",\n          visualization: vis.id,\n        });\n      });\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public addVisualization() {\n    const newVis = this.Visualization.fromJSON({\n      job_id: this.job.id,\n      sort_order: getNextSortOrder(this.job.visualizations),\n    });\n    this.visualizationModal(newVis).result.then((vis) => {\n      if (this.ToolInfo.tools(vis.kind).api) {\n        this.startNewVisualization(vis.kind);\n      } else {\n        this.spinnerPromise = vis\n          .$create()\n          .then(() => {\n            this.JobFetcher.refresh(this.job.id);\n            this.Flash.addMessage(FlashLevels.success, \"Visualization successfully added.\");\n            this.trackEvent(\"Added Visualization Successfully\", {\n              category: \"Design Tools\",\n              visualization: vis.id,\n            });\n            return this.job.$promise;\n          })\n          .catch(() => {\n            this.Flash.addMessage(FlashLevels.danger, \"There were problems adding the visualization.\");\n            this.trackEvent(\"Visualization Add Failed\", {\n              category: \"Design Tools\",\n              visualization: vis.id,\n            });\n          });\n      }\n    });\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public editVisualization(vis: IVisualization) {\n    const editVis = this.Visualization.fromJSON(vis);\n    this.visualizationModal(editVis).result.then((edited_vis) => {\n      this.spinnerPromise = edited_vis\n        .$save()\n        .then(() => {\n          vis.name = edited_vis.name;\n          if (!this.ToolInfo.tools(vis.kind).api) {\n            vis.data.id = edited_vis.data.id;\n          }\n          this.Flash.addMessage(FlashLevels.success, \"Visualization successfully edited.\");\n          this.trackEvent(\"Edited Visualization Successfully\", {\n            category: \"Design Tools\",\n            visualization: vis.id,\n          });\n        })\n        .catch(() => {\n          this.Flash.addMessage(FlashLevels.danger, \"There were problems editing the visualization.\");\n          this.trackEvent(\"Visualization Edit Failed\", {\n            category: \"Design Tools\",\n            visualization: vis.id,\n          });\n        });\n    });\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public emailVisualization(vis: IVisualization) {\n    vis\n      .$email()\n      .then(() => {\n        this.Flash.addMessage(FlashLevels.success, \"Visualization successfully emailed.\");\n        this.trackEvent(\"Emailed Visualization Successfully\", {\n          category: \"Design Tools\",\n          visualization: vis.id,\n        });\n      })\n      .catch(() => {\n        this.Flash.addMessage(FlashLevels.danger, \"There were problems emailing the visualization.\");\n        this.trackEvent(\"Email Visualization Failed\", {\n          category: \"Design Tools\",\n          visualization: vis.id,\n        });\n      });\n  }\n\n  public visualizationModal(vis: IVisualization) {\n    return this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n      animation: true,\n      ariaLabelledBy: \"modal-title\",\n      ariaDescribedBy: \"modal-body\",\n      templateUrl: \"src/Jobs/tabs/visualization_modal.html\",\n      controller: \"VisualizationModalCtrl\",\n      backdrop: \"static\",\n      controllerAs: \"$ctrl\",\n      size: \"md\",\n      resolve: {\n        job: this.job,\n        visualization: vis,\n      },\n    });\n  }\n\n  public orderVisualizations() {\n    this.job.visualizations.map((v, index) => {\n      if (v.sort_order !== index) {\n        v.sort_order = index;\n        v.$save();\n      }\n    });\n    this.job.visualizations = _.sortBy(this.job.visualizations, \"sort_order\");\n  }\n}\n","import { IJob } from \"app/src/Models/Job\";\nimport { IMeasurement } from \"app/src/Models/Measurement\";\n\nexport class AreaCalculatorCtrl {\n  public measurements = [];\n  public newMeasurement = {\n    area: 0,\n    pitch: 0,\n    degrees: 0,\n  };\n\n  private deg2rad = Math.PI / 180;\n\n  public static $inject = [\"$uibModalInstance\", \"job\", \"measurement\"];\n  constructor(\n    public $uibModalInstance: ng.ui.bootstrap.IModalServiceInstance,\n    public job: IJob,\n    public measurement: IMeasurement,\n  ) {\n    this.newMeasurement.area = this.measurement[\"roof_flat_area\"];\n  }\n\n  public calculate(measurement) {\n    if (measurement.area <= 0 || measurement.pitch <= 0) {\n      return \"Unknown\";\n    }\n\n    const newLength = Math.sqrt(Math.pow(measurement.pitch, 2) + Math.pow(12, 2));\n    const factor = newLength / 12;\n    const newValue = Math.round(measurement.area * factor);\n\n    return {\n      flat_area: this.newMeasurement.area,\n      roof_area: newValue,\n    };\n  }\n\n  public setPitch(measurement) {\n    measurement.degrees = 0;\n  }\n\n  public isSavable(measurement) {\n    return measurement.area <= 0 || measurement.pitch <= 0;\n  }\n\n  public convert(measurement) {\n    const inRadians = Math.tan(measurement.degrees * this.deg2rad);\n    const unrounded = inRadians * 12;\n\n    measurement.pitch = parseFloat((Math.round(unrounded * 2) / 2).toFixed(1));\n  }\n}\n","import { IMeasurement } from \"app/src/Models/Measurement\";\nimport { IAnnotation } from \"./Annotation\";\nimport { IOpeningEstimation } from \"./OpeningEstimation\";\nimport { IWindow } from \"./Window\";\nimport { IDoor } from \"./Door\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport interface IOpeningMetadata extends IOpening {\n  quantity: number;\n}\n\nexport interface IOpening {\n  id: number;\n  name: string;\n  /**\n   * The assumption is that an designator would only be set by an importer\n   * Anything with a designator will be dropped during imports\n   */\n  designator: string;\n  location: string;\n  level: string;\n  height: number;\n  width: number;\n  area: number;\n  ui: number;\n  kind: string;\n  sort_order: number;\n\n  opening_estimations?: IOpeningEstimation[];\n\n  annotation_id?: number;\n  annotation?: IAnnotation;\n\n  _destroy?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport abstract class Opening implements IOpening {\n  public id: number;\n  public name: string;\n  public designator: string;\n  public location: string;\n  public level: string;\n  public height: number;\n  public width: number;\n  public area: number;\n  public ui: number;\n  public kind: string;\n  public sort_order: number;\n  public created_at: Date;\n  public updated_at: Date;\n\n  public opening_estimations?: IOpeningEstimation[];\n\n  constructor() {}\n\n  public static addOpenings(measurement: IMeasurement, opening: IOpeningMetadata) {\n    if (!opening.quantity || opening.quantity <= 1) {\n      this._addOpenings(measurement, opening);\n    } else {\n      const type = opening.kind.toLowerCase() + \"s\";\n\n      for (let i = 0; i < opening.quantity; i++) {\n        let index = i + 1;\n        while (_.any(measurement[type], (o: IOpening) => o.name === opening.name + \"-\" + index)) {\n          index += 1;\n        }\n        const clone = JSON.parse(JSON.stringify(opening));\n        clone.name = opening.name + \"-\" + index;\n        this._addOpenings(measurement, clone);\n      }\n    }\n  }\n\n  public static copyValues(opening: IOpening, data: any) {\n    for (const key in data) {\n      if (data.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        switch (key) {\n          case \"id\":\n            data[key] = parseInt(data[key]);\n            break;\n          case \"area\":\n          case \"height\":\n          case \"width\":\n          case \"ui\":\n            data[key] = parseFloat(data[key]);\n            break;\n          case \"updated_at\":\n          case \"created_at\":\n            data[key] = new Date(data[key]);\n            break;\n        }\n\n        opening[key] = data[key];\n      }\n    }\n  }\n\n  private static _addOpenings(measurement: IMeasurement, opening: IOpeningMetadata) {\n    opening.area = roundToDecimals((opening.width * opening.height) / 144, -2);\n    opening.ui = opening.width + opening.height;\n\n    switch (opening.kind) {\n      case \"Door\":\n        if (opening.id) {\n          const index = _.findIndex(measurement.doors, (d: IDoor) => {\n            return d.id === opening.id;\n          });\n          measurement.doors[index] = opening as any as IDoor;\n        } else {\n          opening.id = measurement.getId();\n          measurement.doors.push(opening as any as IDoor);\n        }\n        break;\n      case \"Window\":\n        if (opening.id) {\n          const index = _.findIndex(measurement.windows, (w: IWindow) => {\n            return w.id === opening.id;\n          });\n          measurement.windows[index] = opening as any as IWindow;\n        } else {\n          opening.id = measurement.getId();\n          measurement.windows.push(opening as any as IWindow);\n        }\n        break;\n    }\n  }\n}\n","import { IMeasurement } from \"app/src/Models/Measurement\";\n\nexport interface IRoomMetadata extends IRoom {\n  quantity: number;\n}\n\nexport interface IRoom {\n  id: number;\n  name: string;\n  designator: string;\n  location: string;\n  level: string;\n  area: number;\n  perimeter: number;\n  inside_corner: number;\n  outside_corner: number;\n  threshold: number;\n  ceiling_area: number;\n  ceiling_area_less_structures: number;\n  ceiling_perimeter: number;\n  ceiling_perimeter_less_structures: number;\n  door_area: number;\n  door_count: number;\n  door_total_width: number;\n  exposed_structure_perimeter: number;\n  floor_area_less_structures: number;\n  floor_opening_total_width: number;\n  floor_plan_area: number;\n  floor_plan_perimeter: number;\n  floor_plan_perimeter_less_structures: number;\n  floor_plan_perimeter_without_openings: number;\n  object_count: number;\n  opening_count: number;\n  opening_total_area: number;\n  opening_total_width: number;\n  structure_total_ceiling_area: number;\n  structure_total_ceiling_width: number;\n  structure_total_floor_area: number;\n  structure_total_floor_width: number;\n  structure_total_wall_area: number;\n  volume: number;\n  wall_count: number;\n  wall_total_area: number;\n  wall_total_area_without_openings: number;\n  window_count: number;\n  window_total_area: number;\n  measurement_id: number;\n  ref_id: number;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport class Room implements IRoom {\n  public id: number;\n  public name: string;\n  public designator: string;\n  public location: string;\n  public level: string;\n  public area: number;\n  public perimeter: number;\n  public inside_corner: number;\n  public outside_corner: number;\n  public threshold: number;\n  public ceiling_area: number;\n  public ceiling_area_less_structures: number;\n  public ceiling_perimeter: number;\n  public ceiling_perimeter_less_structures: number;\n  public door_area: number;\n  public door_count: number;\n  public door_total_width: number;\n  public exposed_structure_perimeter: number;\n  public floor_area_less_structures: number;\n  public floor_opening_total_width: number;\n  public floor_plan_area: number;\n  public floor_plan_perimeter: number;\n  public floor_plan_perimeter_less_structures: number;\n  public floor_plan_perimeter_without_openings: number;\n  public object_count: number;\n  public opening_count: number;\n  public opening_total_area: number;\n  public opening_total_width: number;\n  public structure_total_ceiling_area: number;\n  public structure_total_ceiling_width: number;\n  public structure_total_floor_area: number;\n  public structure_total_floor_width: number;\n  public structure_total_wall_area: number;\n  public volume: number;\n  public wall_count: number;\n  public wall_total_area: number;\n  public wall_total_area_without_openings: number;\n  public window_count: number;\n  public window_total_area: number;\n  public measurement_id: number;\n  public ref_id: number;\n  public created_at: Date;\n  public updated_at: Date;\n\n  constructor() {}\n\n  public static fromJSON = (data: any): IRoom => {\n    const room = new Room();\n\n    Room.copyValues(room, data);\n    room[\"kind\"] = \"Room\";\n    return room;\n  };\n\n  public static addRooms(measurement: IMeasurement, room: IRoomMetadata) {\n    if (!room.quantity || room.quantity <= 1) {\n      this._addRooms(measurement, room);\n    } else {\n      for (let i = 0; i < room.quantity; i++) {\n        let index = i + 1;\n        while (_.any(measurement[\"room\"], (r: IRoom) => r.name === room.name + \"-\" + index)) {\n          index += 1;\n        }\n        const clone = JSON.parse(JSON.stringify(room));\n        clone.name = room.name + \"-\" + index;\n        this._addRooms(measurement, clone);\n      }\n    }\n  }\n\n  public static copyValues(room: IRoom, data: any) {\n    for (const key in data) {\n      if (data.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        switch (key) {\n          case \"id\":\n            data[key] = parseInt(data[key]);\n            break;\n          case \"area\":\n            data[key] = parseFloat(data[key]);\n            break;\n          case \"perimeter\":\n            data[key] = parseFloat(data[key]);\n            break;\n          case \"inside_corner\":\n            data[key] = parseInt(data[key]);\n            break;\n          case \"outside_corner\":\n            data[key] = parseInt(data[key]);\n            break;\n          case \"updated_at\":\n            data[key] = new Date(data[key]);\n            break;\n          case \"created_at\":\n            data[key] = new Date(data[key]);\n            break;\n        }\n\n        room[key] = data[key];\n      }\n    }\n  }\n\n  private static _addRooms(measurement: IMeasurement, room: IRoom) {\n    if (room.id) {\n      const index = _.findIndex(measurement.rooms, (r) => {\n        return r.id === room.id;\n      });\n      measurement.rooms[index] = room;\n    } else {\n      room.id = measurement.getId();\n      measurement.rooms.push(room);\n    }\n  }\n}\n","import { IMeasurement } from \"app/src/Models/Measurement\";\nimport { Opening } from \"app/src/Models/Opening\";\nimport { Room } from \"app/src/Models/Room\";\nimport { IOrg } from \"app/src/Models/Org\";\n\nexport class MeasurementEditorCtrl {\n  private _originalState = \"\";\n  public static $inject = [\"$uibModalInstance\", \"measurement\", \"org\", \"opening\"];\n\n  constructor(\n    public $uibModalInstance: ng.ui.bootstrap.IModalServiceInstance,\n    public measurement: IMeasurement,\n    public org: IOrg,\n    public opening: any,\n  ) {\n    if (!opening.area) {\n      opening.area = 0;\n    }\n\n    if (!opening.ui) {\n      opening.ui = 0;\n    }\n\n    if (opening.kind === \"Room\") {\n      if (!opening.threshold) {\n        opening.threshold = 0;\n      }\n      if (!opening.perimeter) {\n        opening.perimeter = 0;\n      }\n      if (!opening.inside_corner) {\n        opening.inside_corner = 0;\n      }\n      if (!opening.outside_corner) {\n        opening.outside_corner = 0;\n      }\n    }\n    this._originalState = JSON.stringify(JSON.decycle(opening));\n  }\n\n  public cancel() {\n    this.$uibModalInstance.dismiss();\n  }\n\n  public save() {\n    if (this.opening.kind === \"Room\") {\n      Room.addRooms(this.measurement, this.opening);\n    } else {\n      Opening.addOpenings(this.measurement, this.opening);\n    }\n\n    this.$uibModalInstance.close(this.opening);\n  }\n}\n","import * as angulartics from \"angulartics\";\nimport { IMeasurement, IMeasurementResource } from \"app/src/Models/Measurement\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport class MeasurementEditorComponentCtrl implements ng.IComponentController {\n  public types: string[] = [];\n  public addLocation = false;\n  public addLevel = false;\n  public measurement: IMeasurement;\n  public opening: any;\n  public org: IOrg;\n\n  constructor(\n    public $analytics: angulartics.IAnalyticsService,\n    protected Measurement: IMeasurementResource,\n  ) {}\n\n  public $onChanges() {\n    if (this.measurement.locations) {\n      this.measurement.locations = _.uniq(this.measurement.locations.concat(this.Measurement.defaultLocations));\n    } else {\n      this.measurement.locations = _.uniq(this.Measurement.defaultLocations);\n    }\n    if (this.measurement.levels) {\n      this.measurement.levels = _.uniq(this.measurement.levels.concat(this.Measurement.defaultLevels));\n    } else {\n      this.measurement.levels = _.uniq(this.Measurement.defaultLevels);\n    }\n\n    this.measurement.levels = _.sortBy(this.measurement.levels, function (n) {\n      return n.toLowerCase();\n    });\n    this.measurement.locations = _.sortBy(this.measurement.locations, function (n) {\n      return n.toLowerCase();\n    });\n\n    if (this.org) {\n      this.types = this.org.measurementTypes();\n    }\n  }\n\n  public enableLocationAdd() {\n    this.addLocation = true;\n    this.opening.location = \"\";\n  }\n\n  public addNewLocation() {\n    if (this.opening.location !== \"\") {\n      if (!this.measurement.locations) {\n        this.measurement.locations = [];\n      }\n      this.measurement.locations.unshift(this.opening.location);\n      this.measurement.locations = _.sortBy(_.uniq(this.measurement.locations), function (n) {\n        return n.toLowerCase();\n      });\n    }\n\n    this.addLocation = false;\n  }\n\n  public enableLevelAdd() {\n    this.addLevel = true;\n    this.opening.level = \"\";\n  }\n\n  public addNewLevel() {\n    if (this.opening.level !== \"\") {\n      if (!this.measurement.levels) {\n        this.measurement.levels = [];\n      }\n      this.measurement.levels.unshift(this.opening.level);\n      this.measurement.levels = _.sortBy(_.uniq(this.measurement.levels), function (n) {\n        return n.toLowerCase();\n      });\n    }\n\n    this.addLevel = false;\n  }\n\n  public cleanUi() {\n    if (!this.opening.height || !this.opening.width) {\n      return 0;\n    }\n    return roundToDecimals(this.opening.height + this.opening.width, 0);\n  }\n\n  public cleanSqft() {\n    if (!this.opening.height || !this.opening.width) {\n      return 0;\n    }\n    return (this.opening.height * this.opening.width) / 144;\n  }\n}\n\nexport class MeasurementEditorComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/Jobs/measurement_editor_component.html\";\n  public bindings: any = {\n    measurement: \"<\",\n    opening: \"<\",\n    org: \"<\",\n  };\n  public replace = true;\n\n  constructor() {\n    this.controller = MeasurementEditorComponentCtrl;\n    this.controller.$inject = [\"$analytics\", \"Measurement\"];\n  }\n}\n","import { IJobResource } from \"app/src/Models/Job\";\nimport { IOrg, IOrgResource } from \"app/src/Models/Org\";\nimport { FlashLevels, IFlash } from \"app/src/Common/FlashService\";\nimport { IBaseConfig } from \"../../Common/IBaseConfig\";\n\nexport class UploaderCtrl {\n  public invalid = false;\n  public imageTotal: number;\n  public imageSuccess: number;\n  public org: IOrg;\n  public spinnerPromise: ng.IPromise<any>;\n\n  public static $inject = [\"$stateParams\", \"Flash\", \"Upload\", \"Job\", \"Org\", \"BaseConfig\", \"$q\"];\n  constructor(\n    public $stateParams: ng.ui.IStateParamsService,\n    public Flash: IFlash,\n    public Upload: ng.angularFileUpload.IUploadService,\n    public Job: IJobResource,\n    public Org: IOrgResource,\n    public BaseConfig: IBaseConfig,\n    public $q: ng.IQService,\n  ) {\n    if (\n      !$stateParams[\"key\"] ||\n      $stateParams[\"key\"].split(\"-\").length !== 2 ||\n      !$stateParams[\"token\"] ||\n      $stateParams[\"token\"].length <= 0\n    ) {\n      this.invalid = true;\n    } else {\n      this.org = this.Org.byUuid({ uuid: $stateParams.key.slice(0, $stateParams.key.indexOf(\"-\")) });\n    }\n  }\n\n  public upload(files: any, invalidFiles: any) {\n    if (!files) {\n      if (invalidFiles.length > 0) {\n        this.Flash.addMessage(\n          FlashLevels.warning,\n          \"Invalid file: \" +\n            _.map(invalidFiles, (file: File) => {\n              return file.name;\n            }).join(\", \") +\n            \".  Only image file types are allowed.\",\n        );\n      }\n      return;\n    }\n\n    this.imageTotal = files.length;\n    this.imageSuccess = 0;\n\n    let promises = [];\n    _.each(files, (file) => {\n      promises = promises.concat(\n        this.Upload.upload(<ng.angularFileUpload.IFileUploadConfigFile>{\n          url: this.BaseConfig.BASE_URL + \"/api/v1/images/\" + this.$stateParams[\"key\"],\n          data: {\n            image: { file: file, folder_id: this.$stateParams[\"folder_id\"] },\n            token: this.$stateParams[\"token\"],\n          },\n        }).then((resp) => {\n          this.imageSuccess += 1;\n        }),\n      );\n    });\n  }\n}\n","import { IJob } from \"app/src/Models/Job\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { FlashLevels, IFlash } from \"app/src/Common/FlashService\";\nimport { IMeasurementImporterFactory } from \"app/src/Common/MeasurementImporterFactory\";\nimport { IReportResource } from \"app/src/Models/Report\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { IBaseConfig } from \"../../Common/IBaseConfig\";\nimport { useState, dispatch } from \"app2/src/storeRegistry\";\nimport * as hoverActions from \"app2/src/reducers/integrations/hover.actions\";\n\nexport class ImportMeasurementsCtrl {\n  public spinnerPromise: ng.IPromise<any>;\n  public gafEnvironment = false;\n\n  public canOrderEagleview = false;\n  public canImportHover = false;\n  public canOrderQuickMeasure = false;\n  public canOrderRoofScope = false;\n  public canOrderPlnar = false;\n\n  public get canOrderMultiple(): boolean {\n    return (\n      _.chain([\n        this.canOrderEagleview,\n        this.canImportHover,\n        this.canOrderQuickMeasure,\n        this.canOrderPlnar,\n        this.canOrderRoofScope,\n      ])\n        .groupBy((v) => v.toString())\n        .value()[\"true\"].length > 1\n    );\n  }\n\n  public static $inject = [\n    \"$uibModalInstance\",\n    \"job\",\n    \"Flash\",\n    \"$stateParams\",\n    \"BaseConfig\",\n    \"$rootScope\",\n    \"MeasurementImporterFactory\",\n    \"Report\",\n    \"$uibModal\",\n    \"Session\",\n    \"Pretty\",\n  ];\n\n  constructor(\n    public $uibModalInstance: ng.ui.bootstrap.IModalServiceInstance,\n    public job: IJob,\n    public Flash: IFlash,\n    public $stateParams: ng.ui.IStateParamsService,\n    public BaseConfig: IBaseConfig,\n    public $rootScope: RsfRootScope,\n    public MeasurementImporterFactory: IMeasurementImporterFactory,\n    public Report: IReportResource,\n    public $uibModal: ng.ui.bootstrap.IModalService,\n    public Session: ISession,\n    public Pretty: IPretty,\n  ) {\n    this.gafEnvironment = BaseConfig.ENVIRONMENT === \"gaf\";\n    MeasurementImporterFactory.init(job, true, \"Measurements\");\n\n    Session.canReport(\"eagleview\", [\"order\", \"import\"]).then((result: boolean) => (this.canOrderEagleview = result));\n    Session.canReport(\"hover\", [\"import\"]).then((result: boolean) => (this.canImportHover = result));\n    Session.canReport(\"quick_measure\", [\"order\"]).then(\n      (result: boolean) => (this.canOrderQuickMeasure = !this.gafEnvironment && result),\n    );\n    Session.canReport(\"roof_scope\", [\"order\"]).then((result: boolean) => (this.canOrderRoofScope = result));\n    Session.canReport(\"plnar\", [\"order\"]).then((result: boolean) => (this.canOrderPlnar = result));\n\n    dispatch(hoverActions.Actions.setCurrentJob(this.job.id));\n  }\n\n  public importHover() {\n    if (useState().getIn([\"integrations\", \"hover\", \"authorized\"])) {\n      const order_modal = this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n        size: \"lg\",\n        component: \"hoverImport\",\n        backdrop: \"static\",\n        resolve: {\n          jobId: this.job.id,\n        },\n      });\n      this.$uibModalInstance.close({ type: \"hover_modal\", object: order_modal });\n    } else {\n      this.Flash.addMessage(\n        FlashLevels.danger,\n        \"HOVER Measurement importing is not authorized. Contact your Organization Administrator to enable importing HOVER Measurements directly from \" +\n          this.BaseConfig.APP_NAME +\n          \".\",\n      );\n    }\n  }\n\n  public orderQuickMeasure() {\n    this.$uibModalInstance.close({ type: \"quick_measure_modal\" });\n  }\n\n  public orderEv() {\n    const billing_ok = this.Report.check({ provider: \"eagleview\" });\n    this.spinnerPromise = billing_ok.$promise\n      .then(() => {\n        const order_modal = this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n          size: \"lg\",\n          component: \"eagleviewOrderingModal\",\n          resolve: {\n            org: this.job.org,\n            user: this.Session.currentUser,\n            job: this.job,\n          },\n        });\n        this.$uibModalInstance.close({ type: \"order_modal\", object: order_modal });\n      })\n      .catch(() => {\n        this.Flash.addMessage(\n          FlashLevels.danger,\n          \"EagleView Report ordering is not available. Contact your Organization Administrator to enable ordering an EagleView Report directly from \" +\n            this.BaseConfig.APP_NAME +\n            \".\",\n        );\n      });\n  }\n\n  public orderRoofScope() {\n    this.$uibModalInstance.close({ type: \"roof_scope_modal\" });\n  }\n\n  public orderPlnar() {\n    this.$uibModalInstance.close({ type: \"plnar_modal\" });\n  }\n\n  public upload(files, invalidFiles) {\n    this.$uibModalInstance.close({\n      type: \"upload\",\n      object: this.MeasurementImporterFactory.upload(files, invalidFiles),\n    });\n  }\n\n  public cancel() {\n    this.$uibModalInstance.dismiss();\n  }\n}\n","import { IJob } from \"app/src/Models/Job\";\nimport * as angulartics from \"angulartics\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { IVisualization } from \"app/src/Models/Visualization\";\nimport { IToolInfo } from \"app/src/Common/ToolInfoService\";\n\nexport class VisualizationModalCtrl {\n  public editing = false;\n\n  public static $inject = [\"$uibModalInstance\", \"job\", \"visualization\", \"$analytics\", \"Pretty\", \"ToolInfo\"];\n\n  constructor(\n    public $uibModalInstance: ng.ui.bootstrap.IModalServiceInstance,\n    public job: IJob,\n    public visualization: IVisualization,\n    public $analytics: angulartics.IAnalyticsService,\n    public Pretty: IPretty,\n    public ToolInfo: IToolInfo,\n  ) {\n    if (this.visualization.id) {\n      this.editing = true;\n    }\n  }\n\n  public cancel() {\n    this.trackEvent(\"cancel button\", {\n      Category: \"VisualizationModal\",\n    });\n    this.$uibModalInstance.dismiss();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public checkKind() {\n    if (this.ToolInfo.tools(this.visualization.kind).api) {\n      this.$uibModalInstance.close(this.visualization);\n    }\n  }\n\n  public save() {\n    this.$uibModalInstance.close(this.visualization);\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        job: this.job.id,\n        org: this.job.org_id,\n      }),\n    );\n  }\n}\n","import { emailListRegex } from \"app2/src/helpers/InputValidator\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\n\nexport class EmailModal {\n  public emails: string;\n  public message = \"\";\n  public pdf_options: any;\n  public emailListPattern = emailListRegex;\n\n  public static $inject = [\"$uibModalInstance\", \"Pretty\", \"job_email\", \"options\"];\n\n  constructor(\n    public $uibModalInstance: ng.ui.bootstrap.IModalServiceInstance,\n    public Pretty: IPretty,\n    public job_email: any,\n    public options: any,\n  ) {\n    this.emails = job_email.email;\n    this.pdf_options = options;\n  }\n\n  public send() {\n    this.$uibModalInstance.close({\n      emails: this.emails,\n      message: this.message,\n      options: this.pdf_options,\n    });\n  }\n}\n","import { LatLngLiteral } from \"leaflet\";\nimport { IAddress, IAddressResource } from \"../../Models/Address\";\n\nclass PinDropCtrl implements ng.IComponentController {\n  public address: IAddress;\n  public update: (params: any) => void;\n  public addressClone: IAddress;\n  public tilt: boolean;\n\n  protected mapPromise: ng.IPromise<any>;\n\n  private _last: any;\n  private _debouncedChange;\n\n  public static $inject = [\"NgMap\", \"$timeout\", \"Address\"];\n  constructor(\n    public ngMap: angular.map.INgMap,\n    protected $timeout: ng.ITimeoutService,\n    protected Address: IAddressResource,\n  ) {}\n\n  public $onInit() {\n    this.mapPromise = this.ngMap\n      .getMap(<angular.map.IGetMapOptions>{ id: \"addressMap\" })\n      .then((map: google.maps.Map) => {\n        map.addListener(\"center_changed\", () => {\n          const center = map.getCenter();\n          let updated = false;\n\n          if (this.addressClone.lat !== center.lat()) {\n            this.addressClone.lat = center.lat();\n            updated = true;\n          }\n          if (this.addressClone.lon !== center.lng()) {\n            this.addressClone.lon = center.lng();\n            updated = true;\n          }\n\n          if (updated && this.update) {\n            this._debouncedChange({ address: this.addressClone });\n          }\n        });\n\n        if (!this.tilt) {\n          map.setTilt(0);\n        }\n\n        google.maps.event.trigger(map, \"resize\");\n        return map;\n      });\n\n    this._debouncedChange = _.debounce(this.update, 300);\n  }\n\n  public $doCheck() {\n    if (!this.address) {\n      return;\n    }\n\n    if (angular.equals(this.address.location(true), this._last)) {\n      return true;\n    }\n\n    if (!this.address.isValidLatLon()) {\n      return true;\n    }\n\n    this.addressClone = this.address.clone();\n\n    this._last = this.addressClone.location(true);\n\n    this.mapPromise.then((map: google.maps.Map) => {\n      map.setCenter(this.addressClone.location(true) as any as LatLngLiteral);\n    });\n  }\n}\n\nexport class PinDropComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/Jobs/Components/pin_drop.html\";\n  public bindings: any = {\n    address: \"<\",\n    update: \"&\",\n    tilt: \"<\",\n  };\n\n  constructor() {\n    this.controller = PinDropCtrl;\n  }\n}\n","import * as ng from \"angular\";\nimport { IScreenShareResource } from \"app/src/Models/ScreenShare\";\nimport { RootStoreType } from \"app2/src/store\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport { subscriber } from \"app2/src/helpers/Subscribe\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as screenShareActions from \"app2/src/reducers/screenShare.actions\";\nimport { FlashLevels, IFlash } from \"app/src/Common/FlashService\";\nimport * as angulartics from \"angulartics\";\nimport { ScreenShareRecord } from \"app2/src/records/ScreenShare\";\n\nexport class ScreenShareService {\n  public activeScreenShare: ScreenShareRecord;\n  public $scope: ng.IScope;\n  public job: JobRecord;\n  private store: RootStoreType;\n  private _currentJob: () => void;\n  private _unloadBinding: () => void;\n\n  public static $inject = [\"ScreenShare\", \"Flash\", \"$analytics\"];\n\n  constructor(\n    public ScreenShare: IScreenShareResource,\n    public Flash: IFlash,\n    public $analytics: angulartics.IAnalyticsService,\n  ) {\n    this._currentJob = subscriber.subscribe<JobRecord>(\"components.common.currentJob\", (job: JobRecord) => {\n      if (!this.job || this.job.id !== job.id) {\n        this.job = job;\n      }\n    });\n  }\n\n  public setup($scope) {\n    this.$scope = $scope;\n    this.setupDirtyWatcher();\n  }\n\n  public setupDirtyWatcher() {\n    this._unloadBinding = this.$scope.$on(\"onBeforeUnload\", (event: ng.IAngularEvent, args: any) => {\n      if (this.currentScreenShare()) {\n        args[\"message\"] = \"You have a Screen Share active. Please stop the screen share, then refresh.\";\n        event.preventDefault();\n      }\n    });\n\n    this.$scope.$on(\"$destroy\", () => {\n      this.cleanup();\n    });\n  }\n\n  public async create(job_id) {\n    const screen_share = await dispatch(screenShareActions.AsyncActions.addScreenShare(job_id, \"basic\"));\n    return screen_share;\n  }\n\n  public stop() {\n    //noinspection TypeScriptUnresolvedVariable\n    screenleap.stopSharing();\n    this.cleanup();\n  }\n\n  public currentScreenShare() {\n    if (\n      this.activeScreenShare &&\n      (_.isUndefined(this.activeScreenShare.ended) || _.isNull(this.activeScreenShare.ended))\n    ) {\n      return this.activeScreenShare;\n    } else {\n      return undefined;\n    }\n  }\n\n  public startSharing() {\n    if (!this.job) {\n      this.Flash.addMessage(FlashLevels.danger, \"No Job Available for Screen Share!\");\n      return;\n    }\n    if (this.currentScreenShare()) {\n      this.stop();\n    }\n    this.create(this.job.id).then((screenShare: ScreenShareRecord) => {\n      this.activeScreenShare = screenShare;\n      this.connectScreenShare(this.activeScreenShare);\n      // Event category & action used for analytics job reporting - do not rename and keep upon refactor\n      this.$analytics.eventTrack(\"screenshare started\", {\n        category: \"Job Header\",\n        kind: \"basic\",\n        job: this.job.id,\n        org: this.job.org_id,\n      });\n    });\n  }\n\n  public connectScreenShare(screenShare) {\n    const callbacks = {\n      appConnectionFailed: [\n        () => {\n          dispatch(screenShareActions.Actions.setScreenShareStatus(this.job.id, \"stop_requested\"));\n          this.Flash.addMessage(FlashLevels.danger, \"Screen Sharing Connection Failed\");\n        },\n      ],\n      screenShareStartError: [\n        () => {\n          dispatch(screenShareActions.Actions.setScreenShareStatus(this.job.id, \"stop_requested\"));\n          this.Flash.addMessage(FlashLevels.danger, \"Screen Sharing Start Error\");\n        },\n      ],\n    };\n\n    //noinspection TypeScriptUnresolvedVariable,TypeScriptValidateJSTypes\n    screenleap.startSharing(screenShare.metadata.presenterAppType, screenShare.metadata, callbacks);\n    const started = _.debounce(() => {\n      dispatch(screenShareActions.AsyncActions.setRemoteScreenShareStatus(this.job.id, \"active\"));\n      dispatch(commonActions.Actions.notifierAddMessage(\"Screen Sharing Started\"));\n    }, 500);\n    //noinspection TypeScriptUnresolvedVariable\n    screenleap.onScreenShareStart = () => {\n      started();\n    };\n    //noinspection TypeScriptUnresolvedVariable\n    screenleap.onScreenShareEnd = async () => {\n      if (!_.isUndefined(this.activeScreenShare) || (this.activeScreenShare && this.activeScreenShare.id !== 0)) {\n        dispatch(commonActions.Actions.notifierAddMessage(\"Screen Sharing Stopped\"));\n        dispatch(\n          screenShareActions.AsyncActions.saveScreenShareStop(this.activeScreenShare.job_id, this.activeScreenShare.id),\n        );\n        dispatch(screenShareActions.AsyncActions.setRemoteScreenShareStatus(this.activeScreenShare.job_id, \"off\"));\n        this.activeScreenShare = undefined;\n      }\n    };\n    //noinspection TypeScriptUnresolvedVariable,JSUnusedLocalSymbols\n    screenleap.onViewerConnect = (participantId, externalId) => {\n      // Event category & action used for analytics job reporting - do not rename and keep upon refactor\n      this.$analytics.eventTrack(\"screenshare viewer connected\", {\n        category: \"Job Header\",\n        kind: \"basic\",\n        job: this.activeScreenShare.job_id,\n        org: this.job.org_id,\n      });\n      dispatch(commonActions.Actions.notifierAddMessage(\"Viewer Connected: \" + participantId));\n    };\n    //noinspection TypeScriptUnresolvedVariable,JSUnusedLocalSymbols\n    screenleap.onViewerDisconnect = (participantId, externalId) => {\n      this.$analytics.eventTrack(\"screenshare viewer disconnected\", {\n        category: \"Job Header\",\n        kind: \"basic\",\n        job: this.activeScreenShare.job_id,\n        org: this.job.org_id,\n      });\n      dispatch(commonActions.Actions.notifierAddMessage(\"Viewer Disconnected: \" + participantId));\n    };\n  }\n\n  public cleanup() {\n    if (this._unloadBinding) {\n      this._unloadBinding();\n    }\n  }\n}\n","import { IProductOptionGroup } from \"app/src/Models/ProductOptionGroup\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IProductOption } from \"app/src/Models/ProductOption\";\nimport { IEstimateMarkups } from \"app/src/Models/Estimate\";\nimport { markupMultiplier } from \"app2/src/records/Estimate\";\nimport { isMarkupable } from \"app2/src/records/EstimateLineItem\";\nimport { dispatchException } from \"app2/src/helpers/Analytics\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport interface IEstimateLineItemOption {\n  id: number;\n  quantity: number;\n  name: string;\n  description: string;\n  ext_price: number;\n  uom: string;\n  price: number;\n  product_option_uuid: string;\n  product_option_match_id: string;\n  estimate_line_item_id: number;\n  estimate_line_item: IEstimateLineItem;\n  product_option_group_id: number;\n  product_option_group_name: string;\n  product_option_id: number;\n  product_option_image_ids: number[];\n  cost: number;\n  labor_price: number;\n  product_price: number;\n  labor_factor: number;\n  product_factor: number;\n  base_product_price: number;\n  base_labor_price: number;\n  created_at: Date;\n  updated_at: Date;\n  charge_type: string;\n  pog_type: string;\n  msrp: number;\n  _destroy: boolean;\n\n  calculate(estimate: IEstimateMarkups): number;\n  calculateLaborPrice(): number;\n  calculateProductPrice(): number;\n}\n\nexport class EstimateLineItemOption implements IEstimateLineItemOption {\n  public id: number;\n  public quantity: number;\n  public name: string;\n  public description: string;\n  public ext_price: number;\n  public uom: string;\n  public price: number;\n  public product_option_uuid: string;\n  public product_option_match_id: string;\n  public estimate_line_item_id: number;\n  public estimate_line_item: IEstimateLineItem;\n  public product_option_group_id: number;\n  public product_option_group_name: string;\n  public product_option_group: IProductOptionGroup;\n  public product_option_id: number;\n  public product_option_image_ids: number[] = [];\n  public product_option: IProductOption;\n  public cost = 0;\n  public labor_price = 0;\n  public product_price = 0;\n  public base_product_price = 0;\n  public base_labor_price = 0;\n  public labor_factor = 0;\n  public product_factor = 0;\n  public msrp = 0;\n  public created_at: Date;\n  public updated_at: Date;\n  public charge_type: string;\n  public pog_type: string;\n  public _destroy: boolean;\n\n  constructor(data: any) {\n    if (data.id) {\n      this.id = data.id;\n    }\n    if (data.quantity) {\n      this.quantity = parseFloat(data.quantity);\n    } else {\n      this.quantity = 1;\n    }\n    if (data.estimate_line_item_id) {\n      this.estimate_line_item_id = data.estimate_line_item_id;\n    }\n    if (data.estimate_line_item) {\n      this.estimate_line_item = data.estimate_line_item;\n    }\n    if (data.product_option_group_id) {\n      this.product_option_group_id = data.product_option_group_id;\n    }\n    if (data.product_option_group_name) {\n      this.product_option_group_name = data.product_option_group_name;\n    }\n    if (data.product_option_group) {\n      this.product_option_group = data.product_option_group;\n      this.product_option_group_id = data.product_option_group.id;\n    }\n    if (data.product_option_id) {\n      this.product_option_id = data.product_option_id;\n    }\n    if (data.product_option_image_ids) {\n      this.product_option_image_ids = data.product_option_image_ids;\n    }\n    if (data.product_option) {\n      this.product_option = data.product_option;\n      this.product_option_id = this.product_option.id;\n    }\n    if (data.cost) {\n      this.cost = parseFloat(data.cost);\n    }\n    if (data.labor_price) {\n      this.labor_price = parseFloat(data.labor_price);\n    }\n    if (data.product_price) {\n      this.product_price = parseFloat(data.product_price);\n    }\n    if (data.base_product_price) {\n      this.base_product_price = parseFloat(data.base_product_price);\n    }\n    if (data.base_labor_price) {\n      this.base_labor_price = parseFloat(data.base_labor_price);\n    }\n    if (data.labor_factor) {\n      this.labor_factor = parseFloat(data.labor_factor);\n    }\n    if (data.product_factor) {\n      this.product_factor = parseFloat(data.product_factor);\n    }\n    if (data.msrp) {\n      this.msrp = parseFloat(data.msrp);\n    }\n    if (data.price) {\n      this.price = data.price;\n    } else {\n      this.price = 0;\n    }\n    if (data.name) {\n      this.name = data.name;\n    }\n    if (data.description) {\n      this.description = data.description;\n    }\n    if (data.ext_price) {\n      this.ext_price = data.ext_price;\n    } else {\n      this.ext_price = 0;\n    }\n\n    if (data.product_option_uuid) {\n      this.product_option_uuid = data.product_option_uuid;\n    }\n    if (data.product_option_match_id) {\n      this.product_option_match_id = data.product_option_match_id;\n    }\n    if (data.uom) {\n      this.uom = data.uom;\n    }\n    if (data.charge_type) {\n      this.charge_type = data.charge_type;\n    }\n    if (data.pog_type) {\n      this.pog_type = data.pog_type;\n    }\n    if (data.created_at) {\n      this.created_at = data.created_at;\n    }\n    if (data.updated_at) {\n      this.updated_at = data.updated_at;\n    }\n\n    if (data._destroy) {\n      this._destroy = data._destroy;\n    }\n  }\n\n  public calculate(estimate: IEstimateMarkups): number {\n    if (!this.estimate_line_item) {\n      this.ext_price = 0;\n      this.labor_price = 0;\n      this.product_price = 0;\n      this.price = 0;\n      const error = \"estimate line item not setup on option\";\n      console.error(error);\n      dispatchException(new Error(error));\n      return this.ext_price;\n    }\n\n    if (this.uom === \"percent\") {\n      this.base_product_price = roundToDecimals(\n        this.estimate_line_item.base_product_price * (this.product_factor / 100),\n        -2,\n      );\n      this.base_labor_price = roundToDecimals(this.estimate_line_item.base_labor_price * (this.labor_factor / 100), -2);\n    }\n\n    if (isMarkupable(this.estimate_line_item)) {\n      this.product_price = roundToDecimals(\n        (this.base_product_price || 0) * markupMultiplier(estimate.product_markup),\n        -2,\n      );\n      this.labor_price = roundToDecimals((this.base_labor_price || 0) * markupMultiplier(estimate.labor_markup), -2);\n    } else {\n      this.product_price = this.base_product_price || 0;\n      this.labor_price = this.base_labor_price || 0;\n    }\n\n    this.price = this.product_price + this.labor_price;\n\n    this.ext_price = roundToDecimals((this.price || 0) * (this.calculateQuantity() || 0), -2);\n\n    return this.ext_price;\n  }\n\n  public calculateLaborPrice(): number {\n    if (!this.estimate_line_item) {\n      return 0;\n    }\n    return roundToDecimals(this.labor_price * this.calculateQuantity(), -2);\n  }\n\n  public calculateProductPrice(): number {\n    if (!this.estimate_line_item) {\n      return 0;\n    }\n    return roundToDecimals(this.product_price * this.calculateQuantity(), -2);\n  }\n\n  public calculateQuantity(): number {\n    if (!this.estimate_line_item) {\n      return 0;\n    }\n    if (this.charge_type === \"per\") {\n      return roundToDecimals(this.quantity, -2);\n    } else {\n      return roundToDecimals(this.quantity * this.estimate_line_item.quantity, -2);\n    }\n  }\n}\n","import { ICommand } from \"app/src/Commands/Command\";\nimport { IEstimateLineItemOption, EstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { ProductOptionGroupRecord } from \"app2/src/records/ProductOptionGroup\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\n\nexport class AddEstimateLineItemOptionCmd implements ICommand {\n  public lineItemOption: IEstimateLineItemOption;\n  constructor(\n    public productOption: ProductOptionRecord,\n    public productOptionGroup: ProductOptionGroupRecord,\n    public lineItem: IEstimateLineItem,\n    public estimate: IEstimate,\n  ) {}\n\n  public execute(quantity = 0): boolean {\n    const product_option_image_ids = [];\n\n    this.productOption.images.forEach((img) => {\n      product_option_image_ids.push(img.id);\n    });\n    this.lineItemOption = new EstimateLineItemOption({\n      id: this.lineItem.getOptionId(),\n      quantity: quantity,\n      product_option_id: this.productOption.id,\n      estimate_line_item_id: this.lineItem.id,\n      estimate_line_item: this.lineItem,\n      product_option_group_id: this.productOptionGroup.id,\n      product_option_group_name: this.productOptionGroup.name,\n      cost: this.productOption.cost,\n      base_labor_price: this.productOption.labor_price,\n      base_product_price: this.productOption.product_price,\n      uom: this.productOption.uom,\n      charge_type: this.productOption.charge_type,\n      pog_type: this.productOption.pog_type,\n      price: this.productOption.price,\n      product_option_uuid: this.productOption.uuid,\n      product_option_match_id: this.productOption.match_id,\n      name: this.productOption.name,\n      description: this.productOption.description,\n      msrp: this.productOption.msrp,\n      product_option_image_ids: product_option_image_ids,\n    });\n    if (this.lineItemOption.uom === \"percent\") {\n      this.lineItemOption.labor_factor = this.productOption.labor_price;\n      this.lineItemOption.product_factor = this.productOption.product_price;\n    }\n    this.lineItemOption.calculate(this.estimate);\n    this.lineItem.options.push(this.lineItemOption);\n    return true;\n  }\n}\n","import { ActivatedPriceListRecord } from \"app2/src/records/ActivatedPriceList\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { ProductOptionGroupRecord } from \"app2/src/records/ProductOptionGroup\";\nimport { RootState } from \"app2/src/reducers\";\nimport { activatedPriceList } from \"app2/src/selectors/activatedPriceList.selectors\";\nimport { cachedProduct } from \"app2/src/selectors/product.selectors\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\n\nexport const productOptionGroup = (state: RootState | ActivatedPriceListRecord, props: any) =>\n  state.getIn([\"productOptionGroups\", \"byId\", props.productOptionGroupId]);\nexport const productOptionGroupsById = (state: RootState | ActivatedPriceListRecord) =>\n  state.getIn([\"productOptionGroups\", \"byId\"]);\n\nexport const productOptionGroups = createSelector(\n  [(state, props) => ({ state, props })],\n  (stateProps: any): List<ProductOptionGroupRecord> => {\n    const { state, props } = stateProps;\n    const { productOptionGroupIds } = props;\n    return productOptionGroupIds.map((id: number) => productOptionGroup(state, { productOptionGroupId: id }));\n  },\n);\n\nexport const productOptionGroupByMatchId = createSelector(\n  [productOptionGroups, (state, props) => ({ state, props })],\n  (productOptionGroups: List<ProductOptionGroupRecord>, stateProps: any): ProductOptionGroupRecord => {\n    const { props } = stateProps;\n    const { productOptionGroupMatchId } = props;\n    return productOptionGroups.find(\n      (productOptionGroup: ProductOptionGroupRecord) => productOptionGroup.match_id === productOptionGroupMatchId,\n    );\n  },\n);\n\nexport const cachedProductOptionGroups = createSelector(\n  [activatedPriceList, cachedProduct, (_: RootState, props: any) => props],\n  (\n    activatedPriceList: ActivatedPriceListRecord,\n    cachedProduct: ProductRecord,\n    props: any,\n  ): List<ProductOptionGroupRecord> => {\n    const { type } = props;\n    const removeTypeFilter = !type;\n    const productOptionGroupIds = cachedProduct.option_group_ids;\n    const groups = productOptionGroups(activatedPriceList, {\n      productOptionGroupIds,\n    });\n    return groups.filter((group: ProductOptionGroupRecord) => {\n      return removeTypeFilter || group.pog_type === type || (!group.pog_type && type === \"default\");\n    });\n  },\n);\n\nexport const cachedProductOptionGroup = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): ProductOptionGroupRecord => {\n    return productOptionGroup(activatedPriceList, props);\n  },\n);\n\nexport const cachedProductOptionGroupsById = createSelector(\n  [activatedPriceList],\n  (activatedPriceList: ActivatedPriceListRecord): Map<number, ProductOptionGroupRecord> => {\n    return productOptionGroupsById(activatedPriceList);\n  },\n);\n","import { ActivatedPriceListRecord } from \"app2/src/records/ActivatedPriceList\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { RootState } from \"app2/src/reducers\";\nimport { activatedPriceList } from \"app2/src/selectors/activatedPriceList.selectors\";\nimport { product } from \"app2/src/selectors/product.selectors\";\nimport { productOptionGroupByMatchId, productOptionGroups } from \"app2/src/selectors/productOptionGroup.selectors\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const productOption = (state: RootState | ActivatedPriceListRecord, props: any) =>\n  state.getIn([\"productOptions\", \"byId\", props.productOptionId]);\n\nexport const cachedProductOption = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): ProductOptionRecord => {\n    return productOption(activatedPriceList, props);\n  },\n);\n\nexport const cachedProductOptions = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): List<ProductOptionRecord> => {\n    return productOptions(activatedPriceList, props);\n  },\n);\n\nexport const productOptions = createSelector(\n  [(state, props) => ({ state, props })],\n  (stateProps: any): List<ProductOptionRecord> => {\n    const { state, props } = stateProps;\n    const { productOptionIds } = props;\n    return productOptionIds.map((id: number) => productOption(state, { productOptionId: id }));\n  },\n);\n\nexport const cachedProductOptionByMatchId = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): ProductOptionRecord => {\n    const { productId, productOptionGroupMatchId, productOptionMatchId } = props;\n    const prod = product(activatedPriceList, { productId });\n    const group = productOptionGroupByMatchId(activatedPriceList, {\n      productOptionGroupMatchId,\n      productOptionGroupIds: prod.option_group_ids,\n    });\n    if (isNullOrUndefined(group)) {\n      return;\n    }\n    return productOptions(activatedPriceList, { productOptionIds: group.option_ids }).find(\n      (opt) => opt.match_id === productOptionMatchId,\n    );\n  },\n);\n\nexport const cachedProductOptionByMatchIdWithIds = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): ProductOptionRecord => {\n    const { productOptionIds, productOptionMatchId } = props;\n    return productOptions(activatedPriceList, { productOptionIds }).find(\n      (opt) => opt.match_id === productOptionMatchId,\n    );\n  },\n);\n\nexport const cachedProductOptionsByUuid = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): List<ProductOptionRecord> => {\n    const { productId, optionUuids } = props;\n    const prod = product(activatedPriceList, { productId });\n    const groups = productOptionGroups(activatedPriceList, {\n      productOptionGroupIds: prod.option_group_ids,\n    });\n    const productOptionIds = groups.map((group) => group.option_ids).flatten();\n    return productOptions(activatedPriceList, { productOptionIds }).filter((opt) => optionUuids.includes(opt.uuid));\n  },\n);\n","import * as ng from \"angular\";\nimport * as angulartics from \"angulartics\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IProductOptionGroup } from \"app/src/Models/ProductOptionGroup\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport { IProductOption } from \"app/src/Models/ProductOption\";\nimport { AddEstimateLineItemOptionCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemOptionCmd\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { ProductOptionGroupRecord } from \"app2/src/records/ProductOptionGroup\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { cachedProductOptionGroups } from \"app2/src/selectors/productOptionGroup.selectors\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { cachedProductOptions } from \"app2/src/selectors/productOption.selectors\";\n\nclass ProductOptionSelector implements ng.IComponentController {\n  [s: string]: any;\n  public estimate: IEstimate;\n  public lineItem: IEstimateLineItem;\n  public selectedOptionGroup: ProductOptionGroupRecord;\n  public addingOption = false;\n  public changingElio: IEstimateLineItemOption = null;\n  public newOptionQuantity: number;\n  public type: string;\n\n  constructor(\n    public $uibModal: ng.ui.bootstrap.IModalService,\n    public $scope: ng.IScope,\n    public EstimatorService: EstimatorService,\n    private $analytics: angulartics.IAnalyticsService,\n  ) {}\n\n  public $onChanges() {}\n\n  public productOptionGroupsByType(): ProductOptionGroupRecord[] {\n    if (this.estimateLineItem && this.estimateLineItem.product_id) {\n      return useSelector((state) =>\n        cachedProductOptionGroups(state, {\n          activatedPriceListId: this.estimate.activated_price_list_id,\n          productId: this.estimateLineItem.product_id,\n          type: this.type,\n        }),\n      ).toArray();\n    } else {\n      return [];\n    }\n  }\n\n  public productOptions(): ProductOptionRecord[] {\n    return useSelector((state) =>\n      cachedProductOptions(state, {\n        activatedPriceListId: this.estimate.activated_price_list_id,\n        productOptionIds: this.selectedOptionGroup.option_ids,\n      }),\n    ).toArray();\n  }\n\n  public canAdd(pog: IProductOptionGroup): boolean {\n    if (pog.selection_mode === \"multi\") {\n      return true;\n    }\n\n    return !_.any(this.lineItem.existingOptions(), (opt: IEstimateLineItemOption) => {\n      return opt.product_option_group_id === pog.id;\n    });\n  }\n\n  public alreadyAdded(po: IProductOption): boolean {\n    if (!this.lineItem) {\n      return false;\n    }\n    return _.any(this.lineItem.existingOptions(), (opt: IEstimateLineItemOption) => {\n      return opt.product_option_id === po.id;\n    });\n  }\n\n  public addOptionGroup(optionGroup: ProductOptionGroupRecord) {\n    this.selectedOptionGroup = optionGroup;\n    this.addingOption = true;\n  }\n\n  public changeOptionGroup(pog: ProductOptionGroupRecord) {\n    this.changingElio = _.find(this.lineItem.options, (opt: IEstimateLineItemOption) => {\n      return opt.product_option_group_id === pog.id;\n    });\n\n    this.selectedOptionGroup = pog;\n    this.addingOption = true;\n  }\n\n  public cancelAddingOptionGroup() {\n    this.selectedOptionGroup = null;\n    this.changingElio = null;\n    this.addingOption = false;\n  }\n\n  public addProductOption(po: ProductOptionRecord) {\n    if (this.changingElio) {\n      this.changingElio.product_option_id = po.id;\n      this.changingElio.quantity = this.newOptionQuantity;\n      this.trackEvent(\"product option changed\", {\n        product_option: po.id,\n      });\n    } else {\n      const cmd_po = new AddEstimateLineItemOptionCmd(po, this.selectedOptionGroup, this.lineItem, this.estimate);\n      cmd_po.execute();\n      this.trackEvent(\"product option added\", {\n        product_option: po.id,\n      });\n    }\n\n    this.addingOption = false;\n    this.selectedOptionGroup = null;\n    this.changingElio = null;\n    this.newOptionQuantity = 1;\n  }\n\n  public removeOption(elio: IEstimateLineItemOption) {\n    if (elio.id < 0) {\n      this.lineItem.options = _.filter(this.lineItem.options, (option: IEstimateLineItemOption) => {\n        return elio.id !== option.id;\n      });\n    } else {\n      elio._destroy = true;\n    }\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        category: \"ProductOptionSelector\",\n        estimate: this.estimate.id,\n        job: this.estimate.job_id,\n        org: this.EstimatorService.org.id,\n        lineItem: this.lineItem.id,\n      }),\n    );\n  }\n}\n\nexport class ProductOptionSelectorComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/ProductOptionSelector/product_option_selector_component.html\";\n  public bindings: any = {\n    estimate: \"<\",\n    lineItem: \"<\",\n    type: \"<\",\n  };\n\n  constructor() {\n    this.controller = ProductOptionSelector;\n    this.controller.$inject = [\"$uibModal\", \"$scope\", \"EstimatorService\", \"$analytics\"];\n  }\n}\n","import { FlashLevels, IFlash } from \"../../Common/FlashService\";\nimport { IImage, IImageResource } from \"../../Models/Image\";\nimport { IJob } from \"../../Models/Job\";\nimport { IBaseConfig } from \"../../Common/IBaseConfig\";\n\nclass ImageUploadController implements ng.IComponentController {\n  public spinnerPromise: ng.IPromise<any>;\n  public job: IJob;\n  public analyticsCategory: string;\n  public analyticsEvent: string;\n  public classes: string;\n\n  public static $inject = [\"BaseConfig\", \"Flash\", \"Image\", \"$analytics\", \"Upload\", \"$q\"];\n  constructor(\n    protected BaseConfig: IBaseConfig,\n    protected Flash: IFlash,\n    protected Image: IImageResource,\n    protected $analytics: angulartics.IAnalyticsService,\n    protected Upload: ng.angularFileUpload.IUploadService,\n    protected $q: ng.IQService,\n  ) {}\n\n  public $onInit() {\n    if (!this.analyticsCategory) {\n      this.analyticsCategory = \"Photos\";\n    }\n\n    if (!this.analyticsEvent) {\n      this.analyticsEvent = \"add photo\";\n    }\n\n    if (!this.classes) {\n      this.classes = \"btn btn-default\";\n    }\n  }\n\n  public upload(files: any, invalidFiles: any) {\n    if (!files) {\n      if (invalidFiles.length > 0) {\n        this.trackEvent(\"invalid files\", {\n          category: this.analyticsCategory,\n          files: _.map(invalidFiles, (file: File) => {\n            return file.name;\n          }),\n        });\n        this.Flash.addMessage(\n          FlashLevels.warning,\n          \"Invalid file: \" +\n            _.map(invalidFiles, (file: File) => {\n              return file.name;\n            }).join(\", \") +\n            \".  Only image file types are allowed.\",\n        );\n      }\n      return;\n    }\n\n    let imageSuccess = 0;\n    let promises = [];\n    let sort_order = this.job.images.length;\n    _.each(files, (file) => {\n      promises = promises.concat(\n        this.Upload.upload(<ng.angularFileUpload.IFileUploadConfigFile>{\n          url: this.BaseConfig.BASE_URL + \"/api/v1/jobs/\" + this.job.id + \"/images\",\n          data: { image: { file: file, sort_order: sort_order } },\n        }).then((resp: any) => {\n          const img: IImage = this.Image.fromJSON(resp.data.image);\n          this.job.images.push(img);\n          this.trackEvent(\"photo uploaded\", {\n            category: this.analyticsCategory,\n            file: img.id,\n          });\n          imageSuccess += 1;\n        }),\n      );\n      sort_order += 1;\n    });\n    this.spinnerPromise = this.$q.all(promises).finally(() => {\n      if (imageSuccess === 0 && files.length === 0) {\n        return;\n      }\n      this.job.images = _.sortBy(this.job.images, \"sort_order\");\n      let flashLevel = FlashLevels.warning;\n      if (imageSuccess === files.length) {\n        flashLevel = FlashLevels.success;\n      }\n      this.Flash.addMessage(flashLevel, imageSuccess + \"/\" + files.length + \" Images successfully uploaded\");\n    });\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        job: this.job.id,\n        org: this.job.org_id,\n      }),\n    );\n  }\n}\n\nexport class ImageUploadComponent implements ng.IComponentOptions {\n  public controller = ImageUploadController;\n  public templateUrl = \"src/Jobs/Components/image_upload.html\";\n  public bindings: any = {\n    job: \"<\",\n    analyticsCategory: \"<\",\n    analyticsEvent: \"<\",\n    classes: \"<\",\n  };\n}\n","import * as ng from \"angular\";\nimport * as angulartics from \"angulartics\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { IFlash } from \"app/src/Common/FlashService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IBaseConfig } from \"app/src/Common/IBaseConfig\";\nimport { IAddress } from \"app/src/Models/Address\";\nimport { MeasurementRecord } from \"app2/src/records/Measurement\";\nimport { IMeasurement } from \"app/src/Models/Measurement\";\n\nclass RapidAreaCtrl implements ng.IComponentController {\n  [s: string]: any;\n  public close: (value: any) => void;\n  public dismiss: () => void;\n  public resolve: { address: IAddress; measurement: MeasurementRecord };\n  public measurement: IMeasurement;\n  public address: IAddress;\n  public activeTab = 0;\n  public activeImage: any;\n  public new_geojson: any = {};\n  public newMeasurement = {\n    area: 0,\n    pitch: 0,\n    degrees: 0,\n    pitched_area: 0,\n  };\n  private deg2rad = Math.PI / 180;\n\n  public static $inject = [\"$scope\", \"Repository\", \"Session\", \"Flash\", \"BaseConfig\", \"$analytics\", \"$sce\"];\n\n  constructor(\n    public $scope: ng.IScope,\n    public Repository: IRepository,\n    public Session: ISession,\n    public Flash: IFlash,\n    public BaseConfig: IBaseConfig,\n    public $analytics: angulartics.IAnalyticsService,\n    public $sce: ng.ISCEService,\n  ) {}\n\n  public $onInit() {\n    this.measurement = this.Repository.Measurement.fromJSON(this.resolve.measurement.toJS());\n    this.address = this.Repository.Address.fromJSON(this.resolve.address);\n    if (this.measurement.geojson.rapid_area) {\n      this.new_geojson.rapid_area = this.measurement.geojson.rapid_area;\n      if (this.new_geojson.rapid_area[0] && this.new_geojson.rapid_area[0].properties.measurements) {\n        this.newMeasurement = _.clone(this.new_geojson.rapid_area[0].properties.measurements);\n      }\n    } else {\n      this.new_geojson.rapid_area = [];\n    }\n  }\n\n  public save() {\n    if (this.new_geojson.rapid_area[0]) {\n      this.new_geojson.rapid_area[0].properties.measurements = this.newMeasurement;\n    }\n    this.close({ $value: this.new_geojson });\n  }\n\n  public cancelBtn() {\n    this.trackEvent(\"cancel button\", {\n      Category: \"RapidAreaComponent\",\n    });\n    this.dismiss();\n  }\n\n  public calculate(measurement) {\n    if (measurement.area <= 0 || measurement.pitch <= 0) {\n      this.newMeasurement.pitched_area = this.newMeasurement.area;\n      return {\n        flat_area: this.newMeasurement.area,\n        roof_area: this.newMeasurement.pitched_area,\n      };\n    }\n\n    const newLength = Math.sqrt(Math.pow(measurement.pitch, 2) + Math.pow(12, 2));\n    const factor = newLength / 12;\n    this.newMeasurement.pitched_area = Math.round(measurement.area * factor);\n\n    return {\n      flat_area: this.newMeasurement.area,\n      roof_area: this.newMeasurement.pitched_area,\n    };\n  }\n\n  public measureFinished(data) {\n    this.newMeasurement.area = data.area;\n    this.new_geojson.rapid_area = data.points;\n    if (data.points.length > 0) {\n      this.new_geojson.rapid_area[0].properties.measurements = this.newMeasurement;\n    }\n  }\n\n  public setPitch(measurement) {\n    measurement.degrees = 0;\n  }\n\n  public isSavable(measurement) {\n    return measurement.area <= 0 || measurement.pitch <= 0;\n  }\n\n  public convert(measurement) {\n    const inRadians = Math.tan(measurement.degrees * this.deg2rad);\n    const unrounded = inRadians * 12;\n\n    measurement.pitch = parseFloat((Math.round(unrounded * 2) / 2).toFixed(1));\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        measurement: this.measurement.id,\n      }),\n    );\n  }\n}\n\nexport class RapidAreaComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/RsfMap/rapid_area_component.html\";\n  public bindings: any = {\n    resolve: \"<\",\n    close: \"&\",\n    dismiss: \"&\",\n  };\n\n  constructor() {\n    this.controller = RapidAreaCtrl;\n  }\n}\n","import * as ng from \"angular\";\nimport * as angulartics from \"angulartics\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { IFlash } from \"app/src/Common/FlashService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IBaseConfig } from \"app/src/Common/IBaseConfig\";\nimport { IMeasurement } from \"app/src/Models/Measurement\";\nimport { IAddress } from \"app/src/Models/Address\";\nimport { toLatLng, fromJSON } from \"app2/src/records/Address\";\nclass SatelliteMeasureCtrl implements ng.IComponentController {\n  [s: string]: any;\n  public close: (params: any) => void;\n  public dismiss: () => void;\n  public resolve: { measurement: IMeasurement; address: IAddress };\n  public measurement: IMeasurement;\n  public new_geojson: any = {};\n  public address: IAddress;\n  public activeTab = 0;\n\n  public static $inject = [\"$scope\", \"Repository\", \"Session\", \"Flash\", \"BaseConfig\", \"$analytics\", \"$sce\"];\n\n  constructor(\n    public $scope: ng.IScope,\n    public Repository: IRepository,\n    public Session: ISession,\n    public Flash: IFlash,\n    public BaseConfig: IBaseConfig,\n    public $analytics: angulartics.IAnalyticsService,\n    public $sce: ng.ISCEService,\n  ) {}\n\n  public $onInit() {\n    this.measurement = this.Repository.Measurement.fromJSON(this.resolve.measurement);\n    this.address = this.resolve.address;\n    this.new_geojson.leaflet = this.measurement.geojson.leaflet;\n    this.new_geojson.leafletZoom = this.measurement.geojson.leafletZoom;\n  }\n\n  public save() {\n    this.close({ $value: this.new_geojson });\n  }\n\n  public cancelBtn() {\n    this.trackEvent(\"cancel button\", {\n      Category: \"SatelliteMeasureComponent\",\n    });\n    this.dismiss();\n  }\n\n  public exportData(data) {\n    this.new_geojson.leaflet = data.points;\n    this.new_geojson.leafletZoom = data.zoom;\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        measurement: this.measurement.id,\n      }),\n    );\n  }\n\n  public isValidAddress(address: IAddress): boolean {\n    const addressRecord = fromJSON(address);\n    return !_.isNull(toLatLng(addressRecord));\n  }\n}\n\nexport class SatelliteMeasureComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/RsfMap/satellite_measure_component.html\";\n  public bindings: any = {\n    resolve: \"<\",\n    close: \"&\",\n    dismiss: \"&\",\n  };\n\n  constructor() {\n    this.controller = SatelliteMeasureCtrl;\n  }\n}\n","import { IMeasurement } from \"app/src/Models/Measurement\";\n\nexport interface IDeckMetadata extends IDeck {\n  quantity: number;\n}\n\nexport interface IDeck {\n  id: number;\n  name: string;\n  designator: string;\n  area: number;\n  perimeter: number;\n  wall_length: number;\n  railing_length: number;\n  railing_area: number;\n  metadata: any;\n  created_at: Date;\n  updated_at: Date;\n\n  _destroy?: boolean;\n}\n\nexport class Deck implements IDeck {\n  public id: number;\n  public name: string;\n  public designator: string;\n  public area: number;\n  public perimeter: number;\n  public wall_length: number;\n  public railing_length: number;\n  public railing_area: number;\n  public metadata: any;\n  public created_at: Date;\n  public updated_at: Date;\n\n  constructor() {}\n\n  public static fromJSON = (data: any): IDeck => {\n    const deck = new Deck();\n\n    Deck.copyValues(deck, data);\n    deck[\"kind\"] = \"Deck\";\n    return deck;\n  };\n\n  public static clone(deck: IDeck): IDeck {\n    const clone = new Deck();\n    Deck.copyValues(clone, deck);\n    return clone;\n  }\n\n  public static addDecks(measurement: IMeasurement, deck: IDeckMetadata) {\n    if (!deck.quantity || deck.quantity <= 1) {\n      this._addDecks(measurement, deck);\n    } else {\n      for (let i = 0; i < deck.quantity; i++) {\n        let index = i + 1;\n        while (_.any(measurement[\"deck\"], (r: IDeck) => r.name === deck.name + \"-\" + index)) {\n          index += 1;\n        }\n        const clone = JSON.parse(JSON.stringify(deck));\n        clone.name = deck.name + \"-\" + index;\n        this._addDecks(measurement, clone);\n      }\n    }\n  }\n\n  public static copyValues(deck: IDeck, data: any) {\n    for (const key in data) {\n      if (data.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        switch (key) {\n          case \"id\":\n            deck[key] = !_.isNaN(parseInt(data[key])) ? parseInt(data[key]) : data[key];\n            break;\n          case \"area\":\n          case \"perimeter\":\n          case \"railing_area\":\n          case \"railing_length\":\n          case \"wall_length\":\n            deck[key] = parseFloat(data[key]);\n            break;\n          case \"updated_at\":\n          case \"created_at\":\n            deck[key] = new Date(data[key]);\n            break;\n          default:\n            deck[key] = data[key];\n            break;\n        }\n      }\n    }\n  }\n\n  private static _addDecks(measurement: IMeasurement, deck: IDeck) {\n    if (deck.id) {\n      const index = _.findIndex(measurement.decks, (r) => {\n        return r.id === deck.id;\n      });\n      measurement.decks[index] = deck;\n    } else {\n      deck.id = measurement.getId();\n      measurement.decks.push(deck);\n    }\n  }\n}\n","import * as ng from \"angular\";\nimport * as angulartics from \"angulartics\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { IFlash } from \"app/src/Common/FlashService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IBaseConfig } from \"app/src/Common/IBaseConfig\";\nimport { IAddress } from \"app/src/Models/Address\";\nimport { Deck, IDeck } from \"app/src/Models/Deck\";\nimport { decks } from \"app2/src/selectors/deck.selectors\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { MeasurementRecord } from \"app2/src/records/Measurement\";\nimport { toLatLng, fromJSON } from \"app2/src/records/Address\";\n\nclass DeckWizardCtrl implements ng.IComponentController {\n  [s: string]: any;\n  public close: (params: any) => void;\n  public dismiss: () => void;\n  public resolve: { measurement: MeasurementRecord; address: IAddress };\n  public measurement: MeasurementRecord;\n  public new_geojson: any = {};\n  public geojson: any = {};\n  public address: IAddress;\n  public decks: Deck[];\n  public activeTab = 0;\n\n  public static $inject = [\"$scope\", \"Repository\", \"Session\", \"Flash\", \"BaseConfig\", \"$analytics\", \"$sce\"];\n\n  constructor(\n    public $scope: ng.IScope,\n    public Repository: IRepository,\n    public Session: ISession,\n    public Flash: IFlash,\n    public BaseConfig: IBaseConfig,\n    public $analytics: angulartics.IAnalyticsService,\n    public $sce: ng.ISCEService,\n  ) {}\n\n  public $onInit() {\n    this.measurement = this.resolve.measurement;\n    const deckIds = this.measurement.get(\"deck_ids\");\n    this.decks = useSelector((state) => decks(state, { deckIds })).toJS();\n    this.address = this.resolve.address;\n    this.geojson = this.decks.map((d) => {\n      d.metadata.properties.id = d.id;\n      return d.metadata;\n    });\n  }\n\n  public save() {\n    this.close({ $value: { decks: this.decks } });\n  }\n\n  public cancelBtn() {\n    this.trackEvent(\"cancel button\", {\n      Category: \"SatelliteMeasureComponent\",\n    });\n    this.dismiss();\n  }\n\n  public measurementAdded(data: { area: number; perimeter: number; points: Array<any> }) {\n    const deck = Deck.fromJSON({\n      area: Math.ceil(data.area),\n      perimeter: Math.ceil(data.perimeter),\n      railing_length: Math.ceil(data.perimeter),\n      railing_area: Math.ceil(data.perimeter * 4),\n    });\n\n    const newPoints = _.find(data.points, (geojson: any) => {\n      return _.every(this.decks, (d) => d.id !== geojson.properties.id);\n    });\n\n    deck.id = newPoints.properties.id;\n    deck.name = newPoints.properties.name;\n    deck.designator = deck.name;\n    deck.metadata = newPoints;\n    this.decks.push(deck);\n  }\n\n  public railingChanged(deck: IDeck) {\n    deck.wall_length = Math.ceil(deck.perimeter - (deck.railing_length || 0));\n    deck.railing_area = Math.ceil((deck.railing_length || 0) * 4);\n  }\n\n  public wallChanged(deck: IDeck) {\n    deck.railing_length = Math.ceil(deck.perimeter - (deck.wall_length || 0));\n    deck.railing_area = Math.ceil(deck.railing_length * 4);\n  }\n\n  public exportData(data) {\n    _.each(data.points, (geojson: any) => {\n      const deck = _.find(this.decks, (d) => d.id === geojson.properties.id);\n      if (!deck) {\n        return;\n      }\n      deck.name = geojson.properties.name;\n      deck.designator = deck.name;\n      deck.metadata = geojson;\n    });\n\n    const ids = _.pluck(this.decks, \"id\");\n\n    _.each(ids, (id) => {\n      // if none of the existing geojsons match this id, it needs deleted;\n      if (_.every(data.points, (geojson: any) => geojson.properties.id !== id)) {\n        // if it's not a number, it's a temp id and we can just remove;\n        if (_.isNaN(parseInt(id as any))) {\n          this.decks = _.select(this.decks, (d) => d.id !== id);\n        } else {\n          // else it's a real id and we need to mark _destroy\n          const deck = _.find(this.decks, (d) => d.id === id);\n          (deck as IDeck)._destroy = true;\n        }\n      }\n    });\n    this.$scope.$digest();\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        measurement: this.measurement.id,\n      }),\n    );\n  }\n\n  public isValidAddress(address: IAddress): boolean {\n    const addressRecord = fromJSON(address);\n    return !_.isNull(toLatLng(addressRecord));\n  }\n\n  private _addDeck(points: any) {}\n}\n\nexport class DeckWizardComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/RsfMap/deck_wizard_component.html\";\n  public bindings: any = {\n    resolve: \"<\",\n    close: \"&\",\n    dismiss: \"&\",\n  };\n\n  constructor() {\n    this.controller = DeckWizardCtrl;\n  }\n}\n","import { IMeasurement } from \"app/src/Models/Measurement\";\n\nexport interface IPoolMetadata extends IPool {\n  quantity: number;\n}\n\nexport interface IPool {\n  id: number;\n  name: string;\n  designator: string;\n  area: number;\n  perimeter: number;\n  volume: number;\n  average_depth: number;\n  metadata: any;\n  created_at: Date;\n  updated_at: Date;\n\n  _destroy?: boolean;\n}\n\nexport class Pool implements IPool {\n  public id: number;\n  public name: string;\n  public designator: string;\n  public area: number;\n  public perimeter: number;\n  public volume: number;\n  public average_depth: number;\n  public metadata: any;\n  public created_at: Date;\n  public updated_at: Date;\n\n  constructor() {}\n\n  public static fromJSON = (data: any): IPool => {\n    const pool = new Pool();\n\n    Pool.copyValues(pool, data);\n    pool[\"kind\"] = \"Pool\";\n    return pool;\n  };\n\n  public static clone(pool: IPool): IPool {\n    const clone = new Pool();\n    Pool.copyValues(clone, pool);\n    return clone;\n  }\n\n  public static addPools(measurement: IMeasurement, pool: IPoolMetadata) {\n    if (!pool.quantity || pool.quantity <= 1) {\n      this._addPools(measurement, pool);\n    } else {\n      for (let i = 0; i < pool.quantity; i++) {\n        let index = i + 1;\n        while (_.any(measurement[\"pool\"], (r: IPool) => r.name === pool.name + \"-\" + index)) {\n          index += 1;\n        }\n        const clone = JSON.parse(JSON.stringify(pool));\n        clone.name = pool.name + \"-\" + index;\n        this._addPools(measurement, clone);\n      }\n    }\n  }\n\n  public static copyValues(pool: IPool, data: any) {\n    for (const key in data) {\n      if (data.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        switch (key) {\n          case \"id\":\n            pool[key] = !_.isNaN(parseInt(data[key])) ? parseInt(data[key]) : data[key];\n            break;\n          case \"area\":\n          case \"perimeter\":\n          case \"volume\":\n          case \"average_depth\":\n            pool[key] = parseFloat(data[key]);\n            break;\n          case \"updated_at\":\n          case \"created_at\":\n            pool[key] = new Date(data[key]);\n            break;\n          default:\n            pool[key] = data[key];\n            break;\n        }\n      }\n    }\n  }\n\n  private static _addPools(measurement: IMeasurement, pool: IPool) {\n    if (pool.id) {\n      const index = _.findIndex(measurement.pools, (r) => {\n        return r.id === pool.id;\n      });\n      measurement.pools[index] = pool;\n    } else {\n      pool.id = measurement.getId();\n      measurement.pools.push(pool);\n    }\n  }\n}\n","import * as ng from \"angular\";\nimport * as angulartics from \"angulartics\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { IFlash } from \"app/src/Common/FlashService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IBaseConfig } from \"app/src/Common/IBaseConfig\";\nimport { IAddress } from \"app/src/Models/Address\";\nimport { Pool, IPool } from \"app/src/Models/Pool\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { pools } from \"app2/src/selectors/pool.selectors\";\nimport { MeasurementRecord } from \"app2/src/records/Measurement\";\nimport { toLatLng, fromJSON } from \"app2/src/records/Address\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nclass PoolToolCtrl implements ng.IComponentController {\n  [s: string]: any;\n  public close: (params: any) => void;\n  public dismiss: () => void;\n  public resolve: { measurement: MeasurementRecord; address: IAddress };\n  public measurement: MeasurementRecord;\n  public new_geojson: any = {};\n  public geojson: any = {};\n  public address: IAddress;\n  public pools: Pool[];\n  public activeTab = 0;\n\n  public static $inject = [\"$scope\", \"Repository\", \"Session\", \"Flash\", \"BaseConfig\", \"$analytics\", \"$sce\"];\n\n  constructor(\n    public $scope: ng.IScope,\n    public Repository: IRepository,\n    public Session: ISession,\n    public Flash: IFlash,\n    public BaseConfig: IBaseConfig,\n    public $analytics: angulartics.IAnalyticsService,\n    public $sce: ng.ISCEService,\n  ) {}\n\n  public $onInit() {\n    this.measurement = this.resolve.measurement;\n    const poolIds = this.measurement.get(\"pool_ids\");\n    this.pools = useSelector((state) => pools(state, { poolIds })).toJS();\n    this.address = this.resolve.address;\n    this.geojson = this.pools.map((d) => {\n      d.metadata.properties.id = d.id;\n      return d.metadata;\n    });\n  }\n\n  public save() {\n    this.close({ $value: { pools: this.pools } });\n  }\n\n  public cancelBtn() {\n    this.trackEvent(\"cancel button\", {\n      Category: \"PoolToolComponent\",\n    });\n    this.dismiss();\n  }\n\n  public measurementAdded(data: { area: number; perimeter: number; points: Array<any> }) {\n    const pool = Pool.fromJSON({\n      area: Math.ceil(data.area),\n      perimeter: Math.ceil(data.perimeter),\n      average_depth: 0,\n    });\n\n    const newPoints = _.find(data.points, (geojson: any) => {\n      return _.every(this.pools, (d) => d.id !== geojson.properties.id);\n    });\n\n    pool.id = newPoints.properties.id;\n    pool.name = newPoints.properties.name;\n    pool.designator = pool.name;\n    pool.metadata = newPoints;\n    this.pools.push(pool);\n  }\n\n  public averageDepthChanges(pool: IPool) {\n    pool.volume = roundToDecimals(Math.ceil((pool.average_depth || 0) * pool.area) * 7.48, 0);\n  }\n\n  public exportData(data) {\n    _.each(data.points, (geojson: any) => {\n      const pool = _.find(this.pools, (d) => d.id === geojson.properties.id);\n      if (!pool) {\n        return;\n      }\n      pool.name = geojson.properties.name;\n      pool.designator = pool.name;\n      pool.metadata = geojson;\n    });\n\n    const ids = _.pluck(this.pools, \"id\");\n\n    _.each(ids, (id) => {\n      // if none of the existing geojsons match this id, it needs deleted;\n      if (_.every(data.points, (geojson: any) => geojson.properties.id !== id)) {\n        // if it's not a number, it's a temp id and we can just remove;\n        if (_.isNaN(parseInt(id as any))) {\n          this.pools = _.select(this.pools, (d) => d.id !== id);\n        } else {\n          // else it's a real id and we need to mark _destroy\n          const pool = _.find(this.pools, (d) => d.id === id);\n          (pool as IPool)._destroy = true;\n        }\n      }\n    });\n    this.$scope.$digest();\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        measurement: this.measurement.id,\n      }),\n    );\n  }\n\n  public isValidAddress(address: IAddress): boolean {\n    const addressRecord = fromJSON(address);\n    return !_.isNull(toLatLng(addressRecord));\n  }\n\n  private _addPool(points: any) {}\n}\n\nexport class PoolToolComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/RsfMap/pool_tool_component.html\";\n  public bindings: any = {\n    resolve: \"<\",\n    close: \"&\",\n    dismiss: \"&\",\n  };\n\n  constructor() {\n    this.controller = PoolToolCtrl;\n  }\n}\n","import { Nullable } from \"app2/src/records\";\nimport * as React from \"react\";\nimport { Row, Col, Card, Accordion } from \"react-bootstrap\";\n\nexport interface UnhandledExceptionProps {\n  error: Nullable<Error>;\n  errorInfo: Nullable<React.ErrorInfo>;\n}\n\nexport const UnhandledException: React.FunctionComponent<UnhandledExceptionProps> = ({ error, errorInfo }) => {\n  return (\n    <Row>\n      <Col>\n        <Card>\n          <Card.Header>\n            <h2 className=\"mb-0\">Something went wrong!</h2>\n          </Card.Header>\n          <Card.Body>\n            <Row>\n              <Col xs={12}>\n                <p>\n                  Something went wrong in the processing of your requests. Please refresh the page and try again. If\n                  this problem persists contact support.\n                </p>\n              </Col>\n            </Row>\n            <Row>\n              <Col xs={12}>\n                <Accordion>\n                  <Card style={{ borderBottom: \"1px\" }}>\n                    <Accordion.Toggle as={Card.Header} eventKey=\"0\">\n                      <h4 className=\"mb-0\">More Detail</h4>\n                    </Accordion.Toggle>\n                    <Accordion.Collapse eventKey=\"0\">\n                      <Card.Body>\n                        <Row>\n                          <Col xs={12}>\n                            <p>\n                              {error?.name}: {error?.message}\n                            </p>\n                          </Col>\n                        </Row>\n                        <Row>\n                          <Col xs={12}>\n                            <h4>Component Stacktrace: </h4>\n                            <p className=\"description\">{errorInfo?.componentStack}</p>\n                          </Col>\n                        </Row>\n                        <Row>\n                          <Col xs={12}>\n                            <h4>Stacktrace: </h4>\n                            <p className=\"description\">{error?.stack}</p>\n                          </Col>\n                        </Row>\n                      </Card.Body>\n                    </Accordion.Collapse>\n                  </Card>\n                </Accordion>\n              </Col>\n            </Row>\n          </Card.Body>\n        </Card>\n      </Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { UnhandledException } from \"./UnhandledException\";\nimport { Nullable } from \"app2/src/records\";\nimport { dispatchException } from \"app2/src/helpers/Analytics\";\n\nexport interface ErrorBoundaryState {\n  hasError: boolean;\n  error: Nullable<Error>;\n  errorInfo: Nullable<React.ErrorInfo>;\n}\n\ninterface ErrorBoundaryProps {}\n\nexport class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {\n  public constructor(props: ErrorBoundaryProps) {\n    super(props);\n\n    this.state = {\n      hasError: false,\n      error: null,\n      errorInfo: null,\n    };\n  }\n\n  public componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void {\n    this.setState({\n      hasError: true,\n      error,\n      errorInfo,\n    });\n    console.error(error);\n    console.error(errorInfo?.componentStack);\n    dispatchException(error);\n  }\n\n  public render(): React.ReactNode {\n    const { hasError, ...args } = this.state;\n    if (hasError) {\n      return <UnhandledException {...args} />;\n    }\n\n    return this.props.children;\n  }\n}\n","import * as React from \"react\";\nimport { Component } from \"react\";\nimport { store } from \"./store\";\nimport { connect as baseConnect, Connect, Provider, ReactReduxContext } from \"react-redux\";\nimport { ErrorBoundary } from \"app2/src/components/ErrorBoundary\";\n\nexport type { ConnectedProps } from \"react-redux\";\n\nexport const createConnect =\n  (store) => (mapStateToProps?, mapDispatchToProps?, mergeProps?, options?) => (WrappedComponent) => {\n    const ConnectedComponent = baseConnect(mapStateToProps, mapDispatchToProps, mergeProps, options)(WrappedComponent);\n\n    class ConnectWrapper extends Component {\n      static contextType = ReactReduxContext as any;\n      public render() {\n        if (this.context && this.context.store) {\n          return <ConnectedComponent {...this.props} />;\n        }\n\n        return (\n          <Provider store={store}>\n            <ErrorBoundary>\n              <ConnectedComponent {...this.props} />\n            </ErrorBoundary>\n          </Provider>\n        );\n      }\n    }\n\n    return ConnectWrapper;\n  };\n\nexport const connectFC = (Component) => (props) => {\n  const context = React.useContext(ReactReduxContext);\n\n  if (context) {\n    return <Component {...props} />;\n  }\n\n  return (\n    <Provider store={store}>\n      <ErrorBoundary>\n        <Component {...props} />\n      </ErrorBoundary>\n    </Provider>\n  );\n};\n\nexport const connect = createConnect(store) as any as Connect;\n","import * as React from \"react\";\nimport { connectFC } from \"app2/src/connect\";\nimport { RootState } from \"../reducers\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useSelector } from \"react-redux\";\n\ninterface SpinnerProps {\n  stateProperty?: any[];\n  localProperty?: boolean;\n  inline?: boolean;\n  localInline?: boolean;\n  children?: React.ReactNode;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({ stateProperty, children, localProperty, inline, localInline }) => {\n  const loading = useSelector((state: RootState) => {\n    if (stateProperty && _.isArray(stateProperty) && stateProperty.length > 0) {\n      return state.getIn(stateProperty, true);\n    } else return false;\n  });\n\n  const spinner = () => {\n    return React.createElement(\n      \"rsf-spinner\",\n      { key: 1 },\n      <div id=\"spinner-overlay\" className=\"spinner-overlay\">\n        <div id=\"spinner\" className=\"spinner\">\n          <img className=\"graphic\" data-testid=\"overlay-spinner\" />\n        </div>\n      </div>,\n    );\n  };\n\n  const spinnerInline = () => {\n    if (localInline) {\n      return React.createElement(\n        \"rsf-spinner-local-inline\",\n        { key: 1 },\n        <FontAwesome name=\"spinner\" className=\"fa-pulse\" data-testid=\"button-spinner\" />,\n      );\n    } else {\n      return React.createElement(\"rsf-spinner-inline\", { key: 1 }, <img className=\"spinner-graphic\" />);\n    }\n  };\n\n  const components = [children];\n  if (loading || localProperty) {\n    components.unshift(inline || localInline ? spinnerInline() : spinner());\n  }\n\n  return <>{components}</>;\n};\n\nexport default connectFC(Spinner);\n","import * as React from \"react\";\nimport { Modal, Button } from \"react-bootstrap\";\nimport track from \"react-tracking\";\n\ninterface ConfirmDialogState {\n  open: boolean;\n  callback: () => void;\n}\n\ninterface ConfirmDialogProps {\n  title: string;\n  description?: string;\n  openDialog?: number;\n  onConfirm?: () => void;\n  tracking?: any;\n  hideCancel?: boolean;\n}\n\n@track((props) => {\n  return {\n    component: \"ConfirmDialog\",\n    title: props.title,\n    description: props.description,\n  };\n})\nexport class ConfirmDialog extends React.Component<ConfirmDialogProps, ConfirmDialogState> {\n  public constructor(props: ConfirmDialogProps) {\n    super(props);\n\n    this.state = {\n      open: false,\n      callback: props.onConfirm || null,\n    };\n\n    this.show = this.show.bind(this);\n    this.hide = this.hide.bind(this);\n    this.confirm = this.confirm.bind(this);\n    this.cancel = this.cancel.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: ConfirmDialogProps): void {\n    const { openDialog, onConfirm } = this.props;\n    if (openDialog > prevProps.openDialog) {\n      this.setState({\n        open: true,\n        callback: onConfirm,\n      });\n    }\n  }\n\n  public show(callback) {\n    return (event) => {\n      this.props.tracking.trackEvent({ action: \"shown\" });\n      event.preventDefault();\n\n      event = {\n        ...event,\n        target: { ...event.target, value: event.target?.value },\n      };\n\n      this.setState({\n        open: true,\n        callback: () => callback(event),\n      });\n    };\n  }\n\n  public hide(): void {\n    this.setState({ open: false, callback: null });\n  }\n\n  @track(() => ({\n    action: \"confirm\",\n  }))\n  public confirm(): void {\n    this.state.callback();\n    this.hide();\n  }\n\n  @track(() => ({\n    action: \"cancel\",\n  }))\n  public cancel(): void {\n    this.hide();\n  }\n\n  public render() {\n    let body = null;\n    if (this.props.description && this.props.description !== \"\") {\n      body = (\n        <Modal.Body>\n          <p className=\"break-word\">{this.props.description}</p>\n        </Modal.Body>\n      );\n    }\n\n    return (\n      <React.Fragment>\n        {this.props.children &&\n          //@ts-ignore\n          this.props.children(this.show)}\n\n        <Modal\n          show={this.state.open}\n          onHide={this.cancel}\n          size=\"sm\"\n          backdropClassName=\"confirm-dialog-backdrop\"\n          className=\"confirm-dialog\">\n          <Modal.Header closeButton>\n            <h3 className=\"break-word\">{this.props.title}</h3>\n          </Modal.Header>\n          {body}\n          <Modal.Footer>\n            <Button data-testid=\"ok-button\" variant=\"ok\" onClick={this.confirm}>\n              OK\n            </Button>\n            {this.props.hideCancel ? null : (\n              <Button data-testid=\"cancel-button\" variant=\"cancel\" onClick={this.cancel}>\n                Cancel\n              </Button>\n            )}\n          </Modal.Footer>\n        </Modal>\n      </React.Fragment>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { formatBreakdown } from \"app2/src/records/DiscountRecord\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { EstimateDiscountRecord } from \"app2/src/records/EstimateDiscount\";\n\nexport interface EstimateDisplayProps {\n  discount: EstimateDiscountRecord;\n  destroy: (discount: EstimateDiscountRecord) => void;\n}\n\nexport function EstimateDisplay(props: EstimateDisplayProps) {\n  const { discount, destroy } = props;\n  return (\n    <div>\n      <Row>\n        <Col md={3} className=\"discount-col\">\n          {discount.name}\n        </Col>\n        <Col md={4} className=\"discount-col\">\n          {formatBreakdown(discount as any)}\n        </Col>\n        <Col md={3} className=\"discount-col\">\n          {discount.calculated ? CurrencyFormat(discount.calculated) : \"$0.00\"}\n        </Col>\n        <Col md={2}>\n          <ConfirmDialog title={`Are you sure you want to delete discount: ${discount.name}?`} description={\"\"}>\n            {(confirm) => (\n              <i\n                id=\"delete-estimate-discount\"\n                className=\"rsf-delete-link rsf-base-66 action-button\"\n                onClick={confirm(() => destroy(discount))}\n              />\n            )}\n          </ConfirmDialog>\n        </Col>\n      </Row>\n    </div>\n  );\n}\n","import * as React from \"react\";\nimport { FormControl } from \"react-bootstrap\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport interface IDecimalInputComponentProps {\n  value: number;\n  onNumberChange: (value: number, name: string) => void;\n  type?: string;\n  name?: string;\n  min?: string;\n  max?: string;\n}\n\nexport interface IDecimalInputComponentState {\n  display: string;\n  value: number;\n  isDecimal: boolean;\n  decimalPlaces: number;\n}\n\ntype Props = IDecimalInputComponentProps & React.InputHTMLAttributes<HTMLInputElement>;\n\nexport class DecimalInputComponent extends React.Component<Props, IDecimalInputComponentState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = this.split(props.value?.toString(), true);\n\n    this.handleOnChange = this.handleOnChange.bind(this);\n  }\n\n  public componentDidUpdate(_prevState, prevProps) {\n    const { value, onNumberChange, name } = this.props;\n    if (isNullOrUndefined(value)) {\n      return;\n    }\n\n    if (prevProps && +prevProps.value !== +value && value !== this.state.value) {\n      const newState = this.split(value.toString() || \"0\");\n      if (newState.value !== value) {\n        onNumberChange(newState.value, name);\n      } else {\n        this.setState(newState);\n      }\n    }\n  }\n\n  public split(value: string, initial = false): IDecimalInputComponentState {\n    const parts = (value || 0).toString().split(\".\");\n    const isDecimal = parts.length > 1;\n    let decimalPlaces = parts.length > 1 ? Math.min(parts[1].length, 2) : 0;\n    // So that something that was saved as 3.3 shows up as\n    // 3.30, I'm going with the fact that chances are that's what was typed\n    // originally AND that's what looks 'better'\n    if (initial && isDecimal) {\n      decimalPlaces = 2;\n    }\n\n    // Make sure to use round, toFixed has an issue rounding with 1.335 = 1.33\n    const roundedValue = roundToDecimals(+value, -2);\n\n    let display = isDecimal ? roundedValue.toFixed(decimalPlaces) : value;\n    // Currently this case doesn't happen.  For a 'number' input the onChange doesn't fire on entering\n    // the period. It'll fire for '3', won't fire for '3.', then fire for '3.1'.  This does handle it\n    // in tests though.\n    if (isDecimal && decimalPlaces <= 0) {\n      display = `${display}.`;\n    }\n\n    return {\n      isDecimal: isDecimal,\n      decimalPlaces: decimalPlaces,\n      value: roundedValue,\n      display: display,\n    };\n  }\n\n  public handleOnChange(event: any) {\n    const { onNumberChange, name } = this.props;\n    const value = event.target.value;\n\n    this.setState(this.split(value), () => {\n      onNumberChange(this.state.value, name);\n    });\n  }\n\n  public render() {\n    const { value, onNumberChange, ...props } = this.props;\n    const { display } = this.state;\n    return <FormControl value={display} onChange={this.handleOnChange as any} {...(props as any)} />;\n  }\n}\n","import * as React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { DiscountKinds, formatKind } from \"app2/src/records/DiscountRecord\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { EstimateDiscountRecord } from \"app2/src/records/EstimateDiscount\";\nimport { DecimalInputComponent } from \"../../Common/DecimalInputComponent\";\n\nexport interface EditorProps {\n  discount: EstimateDiscountRecord;\n  update: (discount: EstimateDiscountRecord) => void;\n  destroy: (discount: EstimateDiscountRecord) => void;\n}\n\nexport interface EditorState {\n  discount: EstimateDiscountRecord;\n}\n\nexport class EstimateEditor extends React.Component<EditorProps, EditorState> {\n  protected debouncedUpdate: (discount: EstimateDiscountRecord) => void;\n  constructor(props: EditorProps) {\n    super(props);\n\n    this.state = {\n      discount: props.discount,\n    };\n\n    this.debouncedUpdate = _.debounce(props.update, 1000);\n    this.handleDiscountInput = this.handleDiscountInput.bind(this);\n    this.canSave = this.canSave.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: EditorProps): void {\n    const prev = prevProps.discount ? JSON.stringify(prevProps.discount) : \"\";\n    const current = this.props.discount ? JSON.stringify(this.props.discount) : \"\";\n\n    if (prev === current) {\n      return;\n    }\n\n    if (current === \"\") {\n      this.setState({\n        discount: null,\n      });\n      return;\n    }\n\n    const discount = this.props.discount;\n\n    this.setState({\n      discount: discount,\n    });\n  }\n\n  public canSave(): boolean {\n    return !_.isEqual(this.props.discount, this.state.discount);\n  }\n\n  public handleDiscountInput(e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>): void {\n    const value = e.target.value;\n\n    const name = e.target.name;\n\n    let parsedValue: any;\n    switch (name) {\n      case \"amount\":\n      case \"limit\":\n        parsedValue = parseFloat(value);\n        if (Number.isNaN(parsedValue)) {\n          parsedValue = 0;\n        }\n        if (parsedValue < 0) {\n          parsedValue = 0;\n        }\n        break;\n      default:\n        parsedValue = value;\n        break;\n    }\n\n    const prevDiscount = this.state.discount.set(name as any, parsedValue);\n    this.debouncedUpdate(prevDiscount);\n    this.setState({\n      discount: prevDiscount,\n    });\n  }\n\n  public render(): React.ReactNode {\n    const { destroy } = this.props;\n    const { discount } = this.state;\n\n    if (!discount) {\n      return (\n        <Row>\n          <Col md={12}>Loading...</Col>\n        </Row>\n      );\n    }\n\n    return (\n      <div>\n        <Row>\n          <Col md={12}>\n            <label className=\"control-label\">Name</label>\n            <input\n              className=\"form-control\"\n              type=\"text\"\n              name=\"name\"\n              value={discount.name}\n              onChange={this.handleDiscountInput}\n            />\n          </Col>\n        </Row>\n        <br />\n        <Row>\n          <Col md={4}>\n            <label className=\"control-label\">Discount</label>\n            <DecimalInputComponent\n              className=\"form-control\"\n              type=\"number\"\n              name=\"amount\"\n              min=\"0\"\n              max=\"9999999\"\n              value={discount.amount}\n              onNumberChange={(value, name) => this.handleDiscountInput({ target: { name, value } } as any)}\n            />\n            <br />\n            {discount.kind === \"percent_limit\" ? (\n              <DecimalInputComponent\n                className=\"form-control\"\n                type=\"number\"\n                name=\"limit\"\n                min=\"0\"\n                max=\"9999999\"\n                value={discount.limit}\n                onNumberChange={(value, name) => this.handleDiscountInput({ target: { name, value } } as any)}\n              />\n            ) : null}\n          </Col>\n          <Col md={4}>\n            <label className=\"control-label\">Type</label>\n            <select\n              className=\"form-control\"\n              name=\"kind\"\n              onChange={this.handleDiscountInput}\n              value={discount.kind}\n              required>\n              {DiscountKinds.map((kind, idx) => {\n                return (\n                  <option key={idx} value={kind}>\n                    {formatKind(kind)}\n                  </option>\n                );\n              })}\n            </select>\n          </Col>\n          <Col md={3}>\n            <label className=\"control-label\">Amount</label>\n            <p className=\"discount-amount\">{discount.calculated ? CurrencyFormat(discount.calculated) : \"$0.00\"}</p>\n          </Col>\n          <Col md={1} className=\"align-middle\">\n            <ConfirmDialog title={`Are you sure you want to delete discount: ${discount.name}?`}>\n              {(confirm) => (\n                <i className=\"rsf-delete-link rsf-base-66 action-button\" onClick={confirm(() => destroy(discount))} />\n              )}\n            </ConfirmDialog>\n          </Col>\n        </Row>\n        <hr />\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { List } from \"immutable\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { EstimateDiscountRecord } from \"app2/src/records/EstimateDiscount\";\nimport * as FontAwesome from \"react-fontawesome\";\n\nexport interface PresentAltDisplayProps {\n  discount: EstimateDiscountRecord;\n  index: number;\n  existing: List<EstimateDiscountRecord>;\n  destroy(discount: EstimateDiscountRecord): void;\n}\n\nexport class PresentAltDisplay extends React.Component<PresentAltDisplayProps> {\n  constructor(props: PresentAltDisplayProps) {\n    super(props);\n  }\n\n  public presentExistingDiscount() {\n    const { index, discount, destroy } = this.props;\n    return (\n      <Row key={index}>\n        <Col sm={6}>\n          <h3 className=\"pull-right\">{discount.name}</h3>\n        </Col>\n        <Col sm={6}>\n          <h3>\n            <span className=\"red-text\">\n              <FontAwesome id={discount.uuid} onClick={destroy} className=\"link\" name=\"minus\" />\n              &nbsp;{CurrencyFormat(discount.calculated)}\n            </span>\n          </h3>\n        </Col>\n      </Row>\n    );\n  }\n\n  public presentDiscountTotal() {\n    const { existing, index, discount } = this.props;\n    let offset = 0;\n    switch (index) {\n      case 0:\n        offset = 0;\n        break;\n      case 1:\n        offset = 6;\n        break;\n      default:\n        offset = 6;\n    }\n    return (\n      <React.Fragment>\n        <Row>\n          <Col md={{ span: 6, offset: offset }}>{this.presentExistingDiscount()}</Col>\n        </Row>\n        {index === 0 ? (\n          <Row>\n            <Col md={{ span: 6, offset: offset }} className=\"text-center\">\n              <h3>{CurrencyFormat(discount.totalAfter)}</h3>\n            </Col>\n            {existing.count() > 1 ? <Col md={6}>{this.presentExistingDiscount()}</Col> : null}\n          </Row>\n        ) : null}\n      </React.Fragment>\n    );\n  }\n\n  public render() {\n    return this.presentDiscountTotal();\n  }\n}\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { Row, Col, Button } from \"react-bootstrap\";\nimport { getOrgDiscounts } from \"app2/src/selectors/discount.selectors\";\nimport { DiscountRecord } from \"app2/src/records/DiscountRecord\";\nimport { List } from \"immutable\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { EstimateDisplay } from \"./components/EstimateDisplay\";\nimport { EstimateEditor } from \"./components/EstimateEditor\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { EstimateDiscountRecord, IEstimateDiscountData } from \"app2/src/records/EstimateDiscount\";\nimport { UserRecord } from \"app2/src/records/UserRecord\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { PresentAltDisplay } from \"./components/PresentAltDisplay\";\nimport { getPrefConfig, OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\nimport { currentOrg } from \"app2/src/selectors/org.selectors\";\nimport track from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\n\nconst mapStateToProps = (state: RootState) => {\n  const org = currentOrg(state);\n  const discounts = getOrgDiscounts(state, { orgId: org?.id }) as List<DiscountRecord>;\n  return {\n    currentUser: denormalizedReduxUser(state),\n    discounts: discounts,\n    org: org,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ChooserProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface ChooserParams {\n  type: string;\n}\n\ninterface ChooserProps {\n  existing: List<EstimateDiscountRecord>;\n  total: number;\n  params: ChooserParams;\n  showHeaderText?: boolean; // this is not watched for continually.  Current workflow says this is static once set.\n  onSelect(breakdown: Partial<IEstimateDiscountData>): void;\n  update(discount: EstimateDiscountRecord): void;\n  destroy(discount: EstimateDiscountRecord): void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ChooserProps;\n\ninterface ChooserState {\n  selected: DiscountRecord;\n  manual: boolean;\n  manualOnly: boolean;\n  dropdown: boolean;\n  showHeaderText: boolean;\n}\n\n@track(\n  () => {\n    return {\n      component: \"DiscountChooser\",\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n  },\n)\nexport class Chooser extends React.Component<Props, ChooserState> {\n  public constructor(props) {\n    super(props);\n\n    this.state = {\n      selected: null,\n      manual: false,\n      manualOnly: true,\n      dropdown: false,\n      showHeaderText: true,\n    };\n\n    this.discountSelected = this.discountSelected.bind(this);\n    this.addSelected = this.addSelected.bind(this);\n    this.toggleDiscount = this.toggleDiscount.bind(this);\n  }\n\n  public componentDidMount() {\n    const { showHeaderText } = this.props;\n\n    if (showHeaderText === false) {\n      this.setState({ showHeaderText });\n    }\n\n    this.componentDidUpdate();\n  }\n\n  public componentDidUpdate() {\n    if (this.props.discounts.size <= 0 && this.state.manualOnly === false) {\n      this.setState({\n        manualOnly: true,\n      });\n    }\n    if (this.props.discounts.size > 0 && this.state.manualOnly === true) {\n      this.setState({\n        manualOnly: false,\n      });\n    }\n  }\n\n  @track((_props, _state, [event]) => ({ action: \"discount selected\", selected: event.target.value }))\n  public discountSelected(event: React.ChangeEvent<HTMLSelectElement>) {\n    const { discounts } = this.props;\n\n    if (event.target.value === \"manual\") {\n      this.setState({\n        manual: true,\n        selected: null,\n      });\n      return;\n    }\n\n    if (event.target.value === \"\") {\n      this.setState({\n        selected: null,\n        manual: false,\n      });\n      return;\n    }\n\n    const selected = discounts.find((d) => d.id === parseInt(event.target.value));\n    this.setState({\n      selected: selected,\n      manual: false,\n    });\n  }\n\n  public addSelected() {\n    const { selected, manual, manualOnly } = this.state;\n    const { onSelect } = this.props;\n\n    if (manual || manualOnly) {\n      onSelect({ kind: \"percent\" });\n      this.setState({\n        selected: null,\n        manual: false,\n      });\n      return;\n    }\n\n    if (!selected) {\n      return;\n    }\n\n    const newDisc: any = selected.breakdown.toJSON();\n    newDisc.name = selected.name;\n    newDisc.discountId = selected.id;\n    newDisc.discountRev = selected.updated_at;\n    onSelect(newDisc);\n    this.setState({\n      selected: null,\n      dropdown: false,\n    });\n  }\n\n  public canAdd() {\n    const { selected, manual, manualOnly } = this.state;\n\n    return !_.isNull(selected) || manual || (manualOnly && Acl.can(\"custom\", \"discount\"));\n  }\n\n  public toggleDiscount() {\n    this.setState((state) => {\n      return { dropdown: !state.dropdown };\n    });\n  }\n\n  public render() {\n    const { params } = this.props;\n\n    switch (params.type) {\n      case \"view\":\n        return this.estimateView();\n      case \"present\":\n        return this.presentView();\n    }\n  }\n\n  public presentView() {\n    const { manualOnly, dropdown, selected } = this.state;\n    const { existing, destroy, org } = this.props;\n\n    return (\n      <React.Fragment>\n        {existing.map((discount: EstimateDiscountRecord, idx) => {\n          if (getPrefConfig(org, [\"price_presentation\", \"discount_view\"]) === \"side_by_side\") {\n            return (\n              <PresentAltDisplay key={idx} existing={existing} destroy={destroy} index={idx} discount={discount} />\n            );\n          }\n          return this.presentExistingDiscount(discount, idx);\n        })}\n        <Row>\n          <Col md={1}>\n            <h3 onClick={this.toggleDiscount} className=\"link\">\n              {dropdown ? (\n                <FontAwesome name=\"minus fa-gray\" title=\"Close Discounts\" size=\"lg\" />\n              ) : (\n                <FontAwesome name=\"plus fa-gray\" title=\"Edit Discounts\" size=\"lg\" />\n              )}\n            </h3>\n          </Col>\n          {dropdown ? (\n            <React.Fragment>\n              <Col md={8}>{manualOnly ? this.renderSelector(true) : this.renderSelector(true)}</Col>\n              <Col md={3}>\n                <Button variant=\"add\" onClick={this.addSelected} disabled={!this.canAdd() || !selected}>\n                  Add\n                </Button>\n              </Col>\n            </React.Fragment>\n          ) : null}\n        </Row>\n      </React.Fragment>\n    );\n  }\n\n  public presentExistingDiscount(discount: EstimateDiscountRecord, idx: number) {\n    const { destroy } = this.props;\n    return (\n      <Row key={idx}>\n        <Col sm={6}>\n          <h3 className=\"pull-right\">\n            <span>\n              <FontAwesome id={discount.uuid} onClick={() => destroy(discount)} className=\"link\" name=\"minus\" />\n              &nbsp;{CurrencyFormat(discount.calculated)}\n            </span>\n          </h3>\n        </Col>\n        <Col sm={6}>\n          <h3>{discount.name}</h3>\n        </Col>\n      </Row>\n    );\n  }\n\n  public estimateView() {\n    const { manualOnly, showHeaderText } = this.state;\n\n    return (\n      <Row>\n        <Col md={12}>\n          <Row>\n            <Col md={12}>\n              <div className=\"form-section\">\n                <div className=\"form-section-heading\">\n                  <Row>\n                    {showHeaderText && (\n                      <Col md={4}>\n                        <h3>Discounts</h3>\n                      </Col>\n                    )}\n                    <Col md={showHeaderText ? 8 : 12}>\n                      {manualOnly ? this.renderManualPicker() : this.renderFullPicker()}\n                    </Col>\n                  </Row>\n                </div>\n                <br />\n                <div className=\"form-section-content\">{this.renderList()}</div>\n              </div>\n            </Col>\n          </Row>\n        </Col>\n      </Row>\n    );\n  }\n\n  public renderList() {\n    const { existing, update, destroy } = this.props;\n    if (existing.count() === 0) {\n      return <span></span>;\n    }\n    let count = 0;\n    return (\n      <React.Fragment>\n        {existing.map((d: EstimateDiscountRecord, idx: number) => {\n          if (d.discountId) {\n            count += 1;\n            let labels = null;\n            if (count === 1) {\n              labels = (\n                <Row>\n                  <Col md={3}>\n                    <label className=\"control-label\">Name</label>\n                  </Col>\n                  <Col md={4}>\n                    <label className=\"control-label\">Discount</label>\n                  </Col>\n                  <Col md={3}>\n                    <label className=\"control-label\">Amount</label>\n                  </Col>\n                </Row>\n              );\n            }\n            return (\n              <div key={idx}>\n                {labels}\n                <EstimateDisplay discount={d} destroy={destroy} />\n              </div>\n            );\n          }\n          return <EstimateEditor key={idx} discount={d} update={update} destroy={destroy} />;\n        })}\n      </React.Fragment>\n    );\n  }\n\n  public renderManualPicker() {\n    return (\n      <Row>\n        <Col md={12}>\n          {Acl.can(\"custom\", \"discount\") && (\n            <Button variant=\"add\" className=\"pull-right\" onClick={this.addSelected}>\n              <FontAwesome name=\"plus\" />\n              &nbsp; Add Discount\n            </Button>\n          )}\n        </Col>\n      </Row>\n    );\n  }\n\n  public renderFullPicker() {\n    return (\n      <Row>\n        <Col md={8}>{this.renderSelector(false)}</Col>\n        <Col md={4}>\n          <Button id=\"estimate-add-discount\" variant=\"add\" onClick={this.addSelected} disabled={!this.canAdd()}>\n            <FontAwesome name=\"plus\" />\n            &nbsp;\n          </Button>\n        </Col>\n      </Row>\n    );\n  }\n\n  public renderSelector(hideCustom: boolean) {\n    const { discounts } = this.props;\n    const { selected, manual } = this.state;\n    return (\n      <select\n        className=\"form-control\"\n        value={manual ? \"manual\" : selected ? selected.id : \"\"}\n        onChange={this.discountSelected}>\n        <option value=\"\">Choose a Discount</option>\n        {discounts.map((d, idx) => {\n          return (\n            <option key={idx} value={d.id}>\n              {d.name}\n            </option>\n          );\n        })}\n        {hideCustom || !Acl.can(\"custom\", \"discount\") ? null : <option value=\"manual\">Add Custom</option>}\n      </select>\n    );\n  }\n}\n\nexport default connector(Chooser);\n","import * as React from \"react\";\nimport Chooser from \"app2/src/components/Discount/Chooser\";\nimport { ChooserParams } from \"app2/src/components/Discount/Chooser\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { EstimateDiscountRecord, IEstimateDiscountData } from \"app2/src/records/EstimateDiscount\";\nimport track from \"react-tracking\";\n\nconst mapStateToProps = () => {\n  return {};\n};\n\nconst mapDispatchToProps = (\n  dispatch: ThunkDispatch<RootState, {}, RootActions>,\n  ownProps: IDiscountChooserWrapperProps,\n) => {\n  const { estimate } = ownProps;\n  return {\n    removeDiscount: (discount) => dispatch(estimateActions.AsyncActions.removeDiscount(estimate.id, discount)),\n    addDiscount: (discount) => dispatch(estimateActions.AsyncActions.addDiscount(estimate.id, discount)),\n    updateDiscount: (discount) => dispatch(estimateActions.AsyncActions.updateDiscount(estimate.id, discount)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IDiscountChooserWrapperProps {\n  orgId: number;\n  estimate: EstimateRecord;\n  params: ChooserParams;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IDiscountChooserWrapperProps;\n\n@track(() => {\n  return {\n    component: \"DiscountChooserWrapper\",\n  };\n})\nclass DiscountChooserWrapper extends React.Component<Props> {\n  constructor(props) {\n    super(props);\n\n    this.add = this.add.bind(this);\n    this.update = this.update.bind(this);\n    this.remove = this.remove.bind(this);\n  }\n\n  @track((_props, _state, [discount]) => ({ action: \"discount added\", discount }))\n  public add(discount: IEstimateDiscountData) {\n    this.props.addDiscount(discount);\n  }\n\n  @track((_props, _state, [discount]) => ({ action: \"discount updated\", discount: discount.toJS() }))\n  public update(discount: EstimateDiscountRecord) {\n    this.props.updateDiscount(discount);\n  }\n\n  @track((_props, _state, [discount]) => ({ action: \"discount removed\", discount: discount.toJS() }))\n  public remove(discount: EstimateDiscountRecord) {\n    this.props.removeDiscount(discount);\n  }\n\n  public render() {\n    const { estimate, params } = this.props;\n\n    return (\n      <Chooser\n        total={estimate.total}\n        onSelect={this.add}\n        params={params}\n        existing={estimate.discounts}\n        update={this.update}\n        destroy={this.remove}\n      />\n    );\n  }\n}\n\nexport default connector(DiscountChooserWrapper);\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { Row, Col, Image } from \"react-bootstrap\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport {\n  getDescriptionName,\n  getFinanceName,\n  getPrefConfig,\n  getSubtotalName,\n  getTotalName,\n  OrgRecord,\n} from \"app2/src/records/OrgRecord\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport { FinanceOptionRecord, range, rate } from \"app2/src/records/FinanceOption\";\nimport { estimate } from \"app2/src/selectors/estimate.selectors\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport DiscountChooserWrapper from \"app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/DiscountChooserWrapper\";\n\nconst mapStateToProps = (state: RootState, ownProps: EstimateProps) => {\n  return {\n    estimate: estimate(state, ownProps),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: EstimateProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface EstimateProps {\n  estimateId: number;\n  financeOptionsById: { number: FinanceOptionRecord };\n  org: OrgRecord;\n  params: any;\n}\n\nexport interface EstimateState {\n  show_finance: boolean;\n  financeOption: FinanceOptionRecord;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & EstimateProps;\n\nclass EstimatePresentationView extends React.Component<Props, EstimateState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      show_finance: false,\n      financeOption: null,\n    };\n\n    this.toggleFinalFinance = this.toggleFinalFinance.bind(this);\n    this.selectFinanceOption = this.selectFinanceOption.bind(this);\n  }\n\n  public toggleFinalFinance() {\n    this.setState((state) => {\n      return { show_finance: !state.show_finance };\n    });\n  }\n\n  public selectFinanceOption(event) {\n    const { financeOptionsById } = this.props;\n    if (event.target.value === \"\") {\n      this.setState({\n        financeOption: null,\n      });\n      return;\n    }\n\n    const financeOption = financeOptionsById[event.target.value];\n    this.setState({\n      financeOption: financeOption,\n    });\n  }\n\n  public render() {\n    const { estimate, org } = this.props;\n    const { width } = this.props.params;\n    const { show_finance } = this.state;\n    const params = { type: \"present\" };\n\n    if (!estimate) {\n      return <SpinnerComponent localProperty={true} inline={true} />;\n    }\n\n    return (\n      <Col md={width} className=\"present-estimate\">\n        <Row className=\"description-header\">\n          <Col md={12}>\n            <h3 className=\"text-center description-name\">{getDescriptionName(org)}:</h3>\n          </Col>\n        </Row>\n        <Row className=\"estimate-header\">\n          <Col md={12}>\n            <h3 className=\"text-center estimate-name\">{estimate.name}</h3>\n          </Col>\n        </Row>\n        {this.renderFinanceRange()}\n        <Row className=\"padding-top\">\n          <Col md={12} className=\"text-center\">\n            <Image src={getUrl(org.images.first(), \"medium\")} className=\"max-250-250\" />\n          </Col>\n        </Row>\n        <Row className=\"padding-top\">\n          <Col md={6}>\n            <h3 className=\"pull-right link subtotal-value\" onClick={this.toggleFinalFinance}>\n              {CurrencyFormat(estimate.subtotal)}\n            </h3>\n          </Col>\n          <Col md={6}>\n            <h3 className=\"subtotal-name link\" onClick={this.toggleFinalFinance}>\n              {getSubtotalName(org)}\n            </h3>\n          </Col>\n        </Row>\n        <DiscountChooserWrapper estimate={estimate} orgId={estimate.job.org_id} params={params} />\n        <Row className=\"border-pricing padding-top\">\n          {this.estimateTotalView()}\n          {show_finance ? this.renderFinalFinance() : null}\n        </Row>\n      </Col>\n    );\n  }\n\n  public estimateTotalView() {\n    const { org, estimate } = this.props;\n    const pref = getPrefConfig(org, [\"price_presentation\", \"estimate_total\"]);\n    let showTotal = false;\n    if (pref === \"always\") {\n      showTotal = true;\n    } else if (estimate.discounts.count() > 0) {\n      showTotal = true;\n    }\n\n    if (!showTotal) {\n      return <span></span>;\n    }\n\n    return (\n      <React.Fragment>\n        <Col md={6}>\n          <h3 className=\"pull-right bold-text link total-value\" onClick={this.toggleFinalFinance}>\n            {CurrencyFormat(estimate.total)}\n          </h3>\n        </Col>\n        <Col md={6}>\n          <h3 className=\"bold-text link total-name\" onClick={this.toggleFinalFinance}>\n            {getTotalName(org)}\n          </h3>\n        </Col>\n      </React.Fragment>\n    );\n  }\n\n  public renderFinalFinance() {\n    const { financeOption } = this.state;\n    const { estimate, financeOptionsById } = this.props;\n\n    const financeOptions = [];\n    _.each(Object.keys(financeOptionsById), (key) => {\n      const fo = financeOptionsById[key];\n      if (fo.status === \"active\") {\n        financeOptions.push(fo);\n      }\n    });\n\n    if (financeOptions.length === 0) {\n      return null;\n    }\n\n    return (\n      <React.Fragment>\n        {financeOption ? (\n          <React.Fragment>\n            <Col md={6} className=\"finance-option-payment-container\">\n              <h3 className=\"pull-right bold-text finance-option-payment-name\">{rate(financeOption, estimate)}</h3>\n            </Col>\n            <Col md={6} className=\"finance-option-term-container\">\n              <h3 className=\"bold-text finance-option-term\">per Month</h3>\n            </Col>\n          </React.Fragment>\n        ) : null}\n        <Col md={12} className=\"padding-bottom select-finance-option-container\">\n          <select className=\"form-control finance-option-selector\" onChange={this.selectFinanceOption}>\n            <option value=\"\" className=\"finance-option\">\n              Choose a Finance Option\n            </option>\n            {financeOptions.map((fo, idx) => {\n              return (\n                <option className=\"finance-option\" key={idx} value={fo.id}>\n                  {fo.name}\n                </option>\n              );\n            })}\n          </select>\n        </Col>\n      </React.Fragment>\n    );\n  }\n\n  public renderFinanceRange() {\n    const { estimate, financeOptionsById, org } = this.props;\n    const finance_type = getPrefConfig(org, [\"price_presentation\", \"finance_type\"]);\n\n    let type = \"active\";\n\n    if (finance_type === \"active_range\") {\n      type = finance_type;\n    }\n\n    const financeOptions = [];\n    _.each(Object.keys(financeOptionsById), (key) => {\n      const fo = financeOptionsById[key];\n      if (fo.status === type) {\n        financeOptions.push(fo);\n      }\n    });\n\n    if (financeOptions.length === 0) {\n      return null;\n    }\n\n    return (\n      <Row className=\"border-pricing padding-top\">\n        <Col md={12} className=\"text-center finance-range-container\">\n          <h3 className=\"finance-name\">{getFinanceName(org)}</h3>\n          <h2 className=\"finance-value bold-text\">{range(financeOptions, estimate)}</h2>\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(EstimatePresentationView);\n","import { IJob } from \"app/src/Models/Job\";\nimport { IVisualization } from \"app/src/Models/Visualization\";\nimport { IVisualizationConfig } from \"../Models/OrgSetting\";\nimport { OrgPrefType } from \"../Models/Org\";\nimport { IOrgPrefIntegrations } from \"../Models/OrgPreference\";\nimport { useState } from \"app2/src/storeRegistry\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport { ToolRecord } from \"app2/src/records/Tool\";\nimport { HandlebarsHelperService } from \"app/src/Patterns/HandlebarsHelperService\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { TokenRecord } from \"app2/src/records/Token\";\n\nexport interface IToolInfo {\n  tools: any;\n  getRenoworksUrl: any;\n  getHoverUrl: any;\n}\n\nexport class ToolInfoService implements IToolInfo {\n  public linkCache: any = {};\n  // noinspection JSUnusedLocalSymbols\n  public toolConfigs: any = {\n    renoworks_masking: {\n      title: \"Order Renoworks Design\",\n      image: \"/assets/images/image-tools/renoworks.b4f1f801.jpg\",\n      link: (job: IJob, base_url: string) => {\n        const state = useState();\n        const renoworksToken = token(state, { kind: \"renoworks\" });\n        if (!renoworksToken?.size) return false;\n\n        const renoworks_url = renoworksToken.getIn([\"data\", \"renoworks_url\"]);\n        return (\n          \"https://www.renoworkspro.com/designrequest?job_id=\" +\n          job.id +\n          \"&email=\" +\n          job.assignments[0].user.email +\n          \"&rw_site_id=\" +\n          renoworks_url +\n          \"&mode=\" +\n          base_url\n        );\n      },\n      paid: true,\n      visible: (job: IJob, presentation_mode: boolean) => {\n        const state = useState();\n        const renoworksToken = token(state, { kind: \"renoworks\" });\n        if (!renoworksToken?.size) return false;\n\n        const renoworks_url = renoworksToken.getIn([\"data\", \"renoworks_url\"]);\n        return !_.isEmpty(renoworks_url) && renoworks_url.indexOf(\"http\") > -1 && job.address.isValid();\n      },\n    },\n    eagleview_order: {\n      title: \"Order EagleView\",\n      image: \"/assets/images/image-tools/eagleview.7264a419.png\",\n      action: (job: IJob) => {\n        /* tslint:disable:quotemark */\n        const form: any = angular.element(\n          '<form action=\"https://my.eagleview.com/Order.aspx\" target=\"_blank\" method=\"POST\" style=\"display: none;\"></form>',\n        );\n\n        const address: any = angular.element('<input type=\"text\" name=\"address\" value=\"' + job.address.line_1 + '\">');\n        const city: any = angular.element('<input type=\"text\" name=\"city\" value=\"' + job.address.city + '\">');\n        const state: any = angular.element('<input type=\"text\" name=\"state\" value=\"' + job.address.state + '\">');\n        const zip: any = angular.element('<input type=\"text\" name=\"zip\" value=\"' + job.address.postal_code + '\">');\n        const submit: any = angular.element('<input type=\"submit\" id=\"submit\" value=\"Submit\">');\n        /* tslint:enable:quotemark */\n\n        form.append(address);\n        form.append(city);\n        form.append(state);\n        form.append(zip);\n        form.append(submit);\n        angular.element(document.body).append(form);\n\n        submit.trigger(\"click\");\n\n        form.remove();\n      },\n      paid: true,\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return presentation_mode && job.address.isValidLatLon();\n      },\n    },\n    eagleview_order_decra: {\n      title: \"Order EagleView: Decra\",\n      image: \"/assets/images/image-tools/eagleview-decra.f196df2e.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.eagleview.com/decra/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    google_maps: {\n      title: \"Google Maps\",\n      image: \"/assets/images/image-tools/google-maps.77fc6ed8.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return (\n          \"http://maps.google.com/maps?f=q&source=s_q&hl=en&q=\" + job.address.lat + \",+\" + job.address.lon + \"&t=h\"\n        );\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValidLatLon();\n      },\n    },\n    bing_ortho: {\n      title: \"Bing Ortho\",\n      image: \"/assets/images/image-tools/bing-maps.736170f1.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return (\n          \"http://maps.live.com/default.aspx?v=2&cp=\" +\n          job.address.lat +\n          \"~\" +\n          job.address.lon +\n          \"&sp=point.\" +\n          job.address.lat +\n          \"_\" +\n          job.address.lon +\n          \"_Location&style=a&lvl=19\"\n        );\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValidLatLon();\n      },\n    },\n    bing_birdseye: {\n      title: \"Bing Birdseye\",\n      image: \"/assets/images/image-tools/bing-maps.736170f1.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return (\n          \"http://maps.live.com/default.aspx?v=2&cp=\" +\n          job.address.lat +\n          \"~\" +\n          job.address.lon +\n          \"&sp=point.\" +\n          job.address.lat +\n          \"_\" +\n          job.address.lon +\n          \"_Location&style=o&lvl=19\"\n        );\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValidLatLon();\n      },\n    },\n    zoom_earth: {\n      title: \"Zoom Earth\",\n      image: \"/assets/images/image-tools/zoom-earth.5fd286a4.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"http://www.flashearth.com/?lat=\" + job.address.lat + \"&lon=\" + job.address.lon + \"&z=18&r=0&src=msl\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValidLatLon();\n      },\n    },\n    terra_server: {\n      title: \"Terra Server\",\n      image: \"/assets/images/image-tools/terraserver.ebabb553.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return (\n          \"https://www.terraserver.com/view?utf8=%E2%9C%93&search_text=&searchLat=&searchLng=&lat=\" +\n          job.address.lat +\n          \"&lng=\" +\n          job.address.lon +\n          \"&bbox=&center=\"\n        );\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValidLatLon();\n      },\n    },\n    pictometry_online: {\n      title: \"Pictometry Online\",\n      image: \"/assets/images/image-tools/pictometry.ba413df1.jpg\",\n      paid: true,\n      link: (job: IJob, base_url: string) => {\n        return (\n          \"http://pol.pictometry.com/en-us/app/default.php?lat=\" +\n          job.address.lat +\n          \"&lon=\" +\n          job.address.lon +\n          \"&v=p&o=n&type=ob&level=n\"\n        );\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValidLatLon();\n      },\n    },\n    pictometry_connect: {\n      title: \"Pictometry Connect\",\n      image: \"/assets/images/image-tools/pictometry.ba413df1.jpg\",\n      paid: true,\n      link: (job: IJob, base_url: string) => {\n        return (\n          \"http://explorer.pictometry.com/index.php?lat=\" +\n          job.address.lat +\n          \"&lon=\" +\n          job.address.lon +\n          \"&angle=Ob&zoom=18\"\n        );\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValidLatLon();\n      },\n    },\n    chi_overhead_door: {\n      title: \"C.H.I. Overhead Door\",\n      image: \"/assets/images/image-tools/chi.2ee188c1.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://doorvisions.chiohd.com\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    map_developers_area: {\n      title: \"Map Developers Area Tool\",\n      image: \"/assets/images/image-tools/measure-area.d8345cee.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return (\n          \"https://www.mapdevelopers.com/area_calculator_adv.php?zoom=19&lat=\" +\n          job.address.lat +\n          \"&lng=\" +\n          job.address.lon +\n          \"&height=600&width=600&square_meter=true&acres=true&square_mile=true&square_km=true\"\n        );\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValidLatLon();\n      },\n    },\n    ca_3d_demo: {\n      title: \"Chief Architect 3D Demo\",\n      image: \"/assets/images/image-tools/chief-architect.3be4717b.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://accounts.chiefarchitect.com/viewer-uploads/embed/919911640610451?autoplay=true\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    daltile_demo: {\n      title: \"daltile 3D Demo\",\n      image: \"/assets/images/image-tools/daltile-3d.b0358778.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://visualize.daltile.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    alside_renoworks: {\n      title: \"Alside Visualizer\",\n      image: \"/assets/images/image-tools/alside-renoworks.abfa27b1.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://alside.renoworks.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    abbeycarpet_demo: {\n      title: \"Abbey Carpet Demo\",\n      image: \"/assets/images/image-tools/abbey-carpet.d1f97bcd.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://abbeycarpet.chameleonpower.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    renuit_cabinet_demo: {\n      title: \"Renuit Cabinet Refacing Demo\",\n      image: \"/assets/images/image-tools/renuit-cabinet.1e1567ba.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://renuit.renoworks.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    zillow: {\n      title: \"Zillow\",\n      image: \"/assets/images/image-tools/zillow.2004fc7a.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.zillow.com/homes/\" + job.address.zillowAddress();\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValid();\n      },\n    },\n    trulia: {\n      title: \"Trulia\",\n      image: \"/assets/images/image-tools/trulia.d59c3c65.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return (\n          \"https://www.trulia.com/submit_search/?display_select=for_sale&search=\" +\n          job.address.fullAddress() +\n          \"&locationType=address&tst=h&ac_entered_query=\" +\n          job.address.fullAddress() +\n          \"&ac_index=0&propertyIndex=sold&bedFilter=&bathFilter=&propertyFilter=&display=for+sale&maxPrice=\"\n        );\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return job.address.isValid();\n      },\n    },\n    houzz_link: {\n      title: \"Houzz\",\n      image: \"/assets/images/image-tools/houzz.090177e8.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://houzz.com/\" + job.org.preferences.config.integrations.houzz.url;\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return !_.isEmpty(job.org.preferences.config.integrations.houzz.url);\n      },\n    },\n    home_advisor_link: {\n      title: \"Home Advisor\",\n      image: \"/assets/images/image-tools/home-advisor.cef530c8.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return job.org.preferences.config.integrations.home_advisor.url;\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return !_.isEmpty(job.org.preferences.config.integrations.home_advisor.url);\n      },\n    },\n    angies_list_link: {\n      title: \"Angie's List\",\n      image: \"/assets/images/image-tools/angies-list.d9d503d0.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return job.org.preferences.config.integrations.angies_list.url;\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return !_.isEmpty(job.org.preferences.config.integrations.angies_list.url);\n      },\n    },\n    gaf_quick_measure_link: {\n      title: \"GAF QuickMeasure\",\n      image: \"/assets/images/image-tools/gaf-quickmeasure.1cce6eec.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://eave.us\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    gaf_smart_money_link: {\n      title: \"GAF SmartMoney\",\n      image: \"/assets/images/image-tools/gaf-smart-money.6fee8391.png\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.payzer.com/Entry/Login\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    gaf_vhr_link: {\n      title: \"GAF Virtual Remodeler\",\n      image: \"/assets/images/image-tools/gaf-vhr.8e7970e9.png\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://virtualremodeler.gaf.com\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    gaf_vent_calc_link: {\n      title: \"GAF Attic Ventilation Calculator\",\n      image: \"/assets/images/image-tools/gaf-vent-calc.307968a7.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.gaf.com/en-us/for-professionals/tools/ventilation-calculator\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    greensky_link: {\n      title: \"GreenSky Financing\",\n      image: \"/assets/images/image-tools/greensky-tool.b944e2e1.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://portal.greenskycredit.com/MerchantLogin#stay\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    wellsfargo_link: {\n      title: \"Wells Fargo\",\n      image: \"/assets/images/image-tools/wellsfargo-link.add16f5c.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return job.org.fetchPref<IOrgPrefIntegrations>(OrgPrefType.integrations).wells_fargo.url;\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return (\n          !_.isUndefined(job.org.fetchPref<IOrgPrefIntegrations>(OrgPrefType.integrations).wells_fargo) &&\n          !_.isUndefined(job.org.fetchPref<IOrgPrefIntegrations>(OrgPrefType.integrations).wells_fargo.url) &&\n          !_.isEmpty(job.org.fetchPref<IOrgPrefIntegrations>(OrgPrefType.integrations).wells_fargo.url)\n        );\n      },\n    },\n    homeguard: {\n      title: \"HomeGuard Windows & Doors\",\n      image: \"/assets/images/image-tools/homeguard-tool.f6cb5a7c.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"http://homeguard.renoworks.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    plygem_visualizer: {\n      title: \"PlyGem Visualizer\",\n      image: \"/assets/images/image-tools/plygem-visualizer.07457cdb.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://plygemcorp.chameleonpower.com/Visualizer.aspx\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    oc_design_eyeq: {\n      title: \"Owens Corning DESIGN EyeQ\",\n      image: \"/assets/images/image-tools/oc-design-eyeq.d1ba2eb1.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://roofvisualizer.owenscorning.com\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    gaf_vhr: {\n      title: \"GAF Virtual Remodeler\",\n      image: \"/assets/images/image-tools/gaf-vhr.8e7970e9.png\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://virtualremodeler.gaf.com\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    colorview: {\n      title: \"CertainTeed Colorview\",\n      image: \"/assets/images/image-tools/colorview.2ff6449d.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://colorview.certainteed.com\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    provia: {\n      title: \"ProVia EntryLink\",\n      image: \"/assets/images/image-tools/provia.d881f989.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        const state = useState();\n        const proviaToken = token(state, { kind: \"provia\" }) as TokenRecord;\n\n        const portalID = proviaToken?.getIn([\"data\", \"portal_id\"]);\n        return `https://entrylink.provia.com/PortalLogin.aspx?PortalID=${portalID}`;\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        const state = useState();\n        const proviaToken = token(state, { kind: \"provia\" }) as TokenRecord;\n\n        if (proviaToken && proviaToken.getIn([\"data\", \"portal\"])) return true;\n\n        return false;\n      },\n    },\n    provia_non_portal: {\n      title: \"ProVia EntryLink (Non-Portal)\",\n      image: \"/assets/images/image-tools/provia.d881f989.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://entrylink.provia.com/login.aspx\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        const state = useState();\n        const proviaToken = token(state, { kind: \"provia\" }) as TokenRecord;\n\n        if (proviaToken && proviaToken.getIn([\"data\", \"non_portal\"])) return true;\n\n        return false;\n      },\n    },\n    renoworks: {\n      title: \"Renoworks Project\",\n      api: false,\n      image: \"/assets/images/image-tools/renoworks.b4f1f801.jpg\",\n      visualization: (job: IJob, vis: IVisualization) => {\n        return this.getRenoworksUrl(job, vis);\n      },\n    },\n    hover: {\n      title: \"HOVER Project\",\n      api: false,\n      image: \"/assets/images/image-tools/hover.f5fc5132.png\",\n      visualization: (job: IJob, vis: IVisualization) => {\n        return this.getHoverUrl(vis);\n      },\n    },\n    quick_measure: {\n      title: \"GAF QuickMeasure Project\",\n      api: false,\n      image: \"/assets/images/image-tools/quick-measure-logo.e12d25c8.png\",\n      visualization: (job: IJob, vis: IVisualization) => {\n        return this.getHoverUrl(vis);\n      },\n    },\n    plnar: {\n      title: \"SmartInteriors\",\n      api: false,\n      image: \"/assets/images/image-tools/smart_interiores_powered_plnar.ddb8f997.png\",\n      visualization: (job: IJob, vis: IVisualization) => {\n        return this.getHoverUrl(vis);\n      },\n    },\n    chameleon: {\n      title: \"GAF Chameleon Project\",\n      api: true,\n      image: \"/assets/images/image-tools/chameleon-placeholder.360837e0.jpg\",\n      visualization: (job: IJob, vis: IVisualization) => {\n        return vis.getUrl(\"\");\n      },\n    },\n    chameleon_v2: {\n      api: true,\n      title: \"OCC Chameleon Project\",\n      image: \"/assets/images/image-tools/chameleon-v2-placeholder.2a67d0b3.jpg\",\n      visualization: (job: IJob, vis: IVisualization) => {\n        return vis.getUrl(job.org.fetchPref<IVisualizationConfig>(OrgPrefType.visualization).chameleon.url);\n      },\n    },\n    sketchup: {\n      title: \"Sketchup\",\n      image: \"/assets/images/image-tools/sketchup.b207b481.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://app.sketchup.com/app?hl=en\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    global_transport_link: {\n      title: \"Global Transport VT\",\n      image: \"/assets/images/image-tools/global-transport.29f79afc.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://vt.globalpay.com/admin/login.aspx\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    sigler_online_link: {\n      title: \"Sigler Online\",\n      image: \"/assets/images/image-tools/sigler-online.72b50bc7.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.siglers.com/store/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    service_finance_link: {\n      title: \"Service Finance\",\n      image: \"/assets/images/image-tools/service-finance.9aff4bc2.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.svcfin.com\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    ami_design_showcase_siding: {\n      title: \"AMI Design Showcase: Preservation Siding\",\n      image: \"/assets/images/image-tools/ami-design-showcase.e5d2aced.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://sdspr.amidesignshowcases.com/app\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    ami_design_showcase_alside_window: {\n      title: \"AMI Design Showcase: Alside Windows\",\n      image: \"/assets/images/image-tools/ami-design-showcase.e5d2aced.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://wdsal.amidesignshowcases.com/app\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    ami_design_showcase_pres_window: {\n      title: \"AMI Design Showcase: Preservation Windows\",\n      image: \"/assets/images/image-tools/ami-design-showcase.e5d2aced.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://wdspr.amidesignshowcases.com/app\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    foundation_finance_dealer_link: {\n      title: \"Foundation Finance Company Dealer\",\n      image: \"/assets/images/image-tools/foundation-finance-company.6b85ed63.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://foundationfinance.com/dealer-login/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    foundation_finance_link: {\n      title: \"Foundation Finance Company\",\n      image: \"/assets/images/image-tools/foundation-finance-company.6b85ed63.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://sb7.compass-technologies.com:8158/k_dealer/f/104.html\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    advisar_link: {\n      title: \"Advisar\",\n      image: \"/assets/images/image-tools/advisar-link.eeae2a05.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.advisar.com/residential/login\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    square_d_link: {\n      title: \"Square D\",\n      image: \"/assets/images/image-tools/square-d-link.6eda3aa8.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://partner.schneider-electric.com/partners/Menu/Login\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    lp_smartside_visualizer: {\n      title: \"LP SmartSide Visualizer\",\n      image: \"/assets/images/image-tools/lp-smartside-link.bb300452.png\",\n      api: false,\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://lp2.renoworks.com/#projectId=&userId=&open=samples&share=https://www.upsidetosmartside.com/explore-ideas/visualize-home/samples&planner=https://www.upsidetosmartside.com/explore-ideas/visualize-home&login=https://www.upsidetosmartside.com/wishlist/?lpwaction=visualizer&api=https://www.upsidetosmartside.com/sfs-webservice&whereToBuy=https://www.upsidetosmartside.com\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    lp_smartside_link: {\n      title: \"LP BuildSmart\",\n      image: \"/assets/images/image-tools/lp-smartside-link.bb300452.png\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://lpcorp.com/buildsmart\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    square_d_ezsel: {\n      title: \"Square D EZ Selector\",\n      image: \"/assets/images/image-tools/square-d-ez-selector.b7db522b.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://ezlist.schneider-electric.com/?prod=E2.D01A&subset=LC&lang=en_US&apiKey=dbfs1df383\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    hearth_financing_link: {\n      title: \"Hearth Financing\",\n      image: \"/assets/images/image-tools/hearth-financing-link.364c467f.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.gethearth.com/contractors/login\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    york_hvac_link: {\n      title: \"York HVAC\",\n      image: \"/assets/images/image-tools/york-link.a75a1604.png\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.upgnet.com/Site/_mem_bin/FormsLogin.asp\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    sighten_solar: {\n      title: \"Sighten Solar\",\n      image: \"/assets/images/image-tools/sighten-solar.3ef37e5d.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"https://engine.sighten.io/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    enerbank_link: {\n      title: \"EnerBank\",\n      image: \"/assets/images/image-tools/enerbank.12483ec2.jpg\",\n      link: (job: IJob, base_url: string) => {\n        return \"http://www.enerbank.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    pella_portal: {\n      title: \"Contractor Program Portal Login\",\n      image: \"/assets/images/image-tools/pella-platinum.c06b8f5f.png\",\n      link: (job: IJob, base_url: string) => {\n        return \"http://professional.pella.com/support/contractors\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    sunrise_configurator: {\n      title: \"Sunrise Windows\",\n      image: \"/assets/images/image-tools/sunrise-configurator.bc624e33.png\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.sunrisewindows.com/visualizer/sunrise_ui.html\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    royal_homeplay: {\n      title: \"HomePlay by Royal\",\n      image: \"/assets/images/image-tools/royal-homeplay.193e7c4d.png\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://homeplay.renoworks.com/#\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    sherwin_williams_colorsnap: {\n      title: \"Sherwin Williams COLORSNAP\",\n      image: \"/assets/images/image-tools/sherwin-williams-colorsnap.08613b9b.png\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.sherwin-williams.com/visualizer\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    iko_roof_viewer: {\n      title: \"IKO Roof Viewer TM\",\n      image: \"/assets/images/image-tools/iko-roof-viewer.ec37bd65.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://iko.chameleonpower.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    paragon_visualizer: {\n      title: \"Paragon Visualizer\",\n      image: \"/assets/images/image-tools/paragon-door-visualizer.d4a1f5a1.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://sunrise.renoworks.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    timbertech_worry_less: {\n      title: \"TimberTech: Worry Less\",\n      image: \"/assets/images/image-tools/timbertech-worry-less.5c2429d9.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.timbertech.com/imagine/stories/worry-less-about-your-deck-weathering-with-timbertech-decking\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    timbertech_deck_designer: {\n      title: \"TimberTech Deck Designer\",\n      image: \"/assets/images/image-tools/timbertech-deck-designer.f7c1365b.jpg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://deckdesigner.timbertech.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    lowes_deck_designer: {\n      title: \"Lowe's Deck Designer\",\n      image: \"/assets/images/image-tools/lowes-deck-designer.a17840f6.png\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://deckdesigner.lowes.com/\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    thermatru_design_your_door: {\n      title: \"ThermaTru Design Your Door\",\n      image: \"/assets/images/image-tools/therma-tru-doors.f3115ad7.jpeg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.thermatru.com/explore-products/design-your-door\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n    pella_lowes_product_designer: {\n      title: \"Pella Lowe's Product Designer\",\n      image: \"/assets/images/image-tools/pella-at-lowes.d7a83ac3.jpeg\",\n      paid: false,\n      link: (job: IJob, base_url: string) => {\n        return \"https://www.pellaatlowes.com/product-designer\";\n      },\n      visible: (job: IJob, presentation_mode: boolean) => {\n        return true;\n      },\n    },\n  };\n  public static $inject = [\"HandlebarsHelperService\"];\n  constructor(public HandlebarsHelperService: HandlebarsHelperService) {}\n\n  public tools = (key: string): any => {\n    if (!isNaN(parseInt(key))) {\n      const tool: ToolRecord = useState().getIn([\"tools\", \"byId\", key]);\n      if (!tool) {\n        return {\n          visible: (job: IJob, presentation_mode: boolean) => {\n            return false;\n          },\n        };\n      }\n      return {\n        title: tool.name,\n        id: tool.id,\n        image: getUrl(tool.brand_image, \"medium\"),\n        paid: false,\n        link: (job: IJob, base_url: string) => {\n          const cacheKey = `${job.id}-${key}`;\n          let generated_link = \"\";\n          if (!this.linkCache[cacheKey]) {\n            this.linkCache[cacheKey] = this.HandlebarsHelperService.compile(tool.link, {\n              job: job,\n              org: job.org,\n            });\n          }\n          generated_link = this.linkCache[cacheKey];\n\n          return generated_link;\n        },\n        visible: (job: IJob, presentation_mode: boolean) => {\n          return !_.isUndefined(tool);\n        },\n      };\n    }\n    return this.toolConfigs[key];\n  };\n\n  public getRenoworksUrl(job: IJob, vis: IVisualization) {\n    const state = useState();\n\n    if (!job || !job.id) {\n      return \"\";\n    }\n\n    if (!vis.data.id) {\n      return \"\";\n    }\n\n    if (vis.data.id.indexOf(\"https\") === 0) {\n      return vis.data.id.toString() + \"&job_id=\" + job.id.toString();\n    }\n\n    if (vis.data.id.indexOf(\"http://\") === 0) {\n      return \"\";\n    }\n\n    const renoworksToken = token(state, { kind: \"renoworks\" }) as TokenRecord;\n    if (!renoworksToken) {\n      return \"\";\n    }\n\n    const renoworks_url = renoworksToken.getIn([\"data\", \"renoworks_url\"]);\n    if (!renoworks_url) {\n      return \"\";\n    }\n\n    if (renoworks_url.indexOf(\"http\") === 0) {\n      const joinChar = renoworks_url.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n\n      return renoworks_url + joinChar + \"project=\" + vis.data.id.toString() + \"&job_id=\" + job.id.toString();\n    }\n\n    return (\n      \"https://\" +\n      renoworks_url +\n      \".rsf.renoworks.com/?project=\" +\n      vis.data.id.toString() +\n      \"&job_id=\" +\n      job.id.toString()\n    );\n  }\n\n  public getHoverUrl(vis: IVisualization) {\n    if (vis.data.url) {\n      return vis.data.url.toString();\n    } else {\n      return \"\";\n    }\n  }\n}\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport EstimatePresentationView from \"app2/src/components/PricePresentation/components/EstimatePresentationView\";\nimport { Row, Col, Button } from \"react-bootstrap\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport * as orgActions from \"app2/src/reducers/org.actions\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { IOrgData, OrgRecord, getPricePresentationName, getSettingsAcl } from \"app2/src/records/OrgRecord\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { FinanceOptionRecord } from \"app2/src/records/FinanceOption\";\nimport { ToolInfoService } from \"app/src/Common/ToolInfoService\";\n\nconst mapStateToProps = (state: RootState, ownProps: PresentProps) => {\n  const estimateids = [];\n  if (_.isString(ownProps.estimateids)) {\n    estimateids.push(parseInt(ownProps.estimateids as string));\n  } else {\n    _.each(ownProps.estimateids, (id: string) => {\n      estimateids.push(parseInt(id));\n    });\n  }\n  const estimates = {} as { number: EstimateRecord };\n  _.map(estimateids, (id) => {\n    estimates[id] = state.getIn([\"estimates\", \"byId\", id]);\n  });\n\n  const org: OrgRecord = state.getIn([\"orgs\", \"orgsById\", parseInt(ownProps.orgid)]);\n  const financeList: any = state.getIn([\"orgs\", \"financeOptions\", \"byOrgId\", parseInt(ownProps.orgid)]);\n\n  const financeOptionsId = {} as { number: FinanceOptionRecord };\n  if (financeList) {\n    financeList.get(\"financeOptions\").map((fo) => {\n      financeOptionsId[fo] = state.getIn([\"orgs\", \"financeOptions\", \"byId\", fo]);\n    });\n  }\n  return {\n    estimatesByIdProp: estimates,\n    org: org,\n    financeList: financeList,\n    financeOptionsById: financeOptionsId,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: PresentProps) => {\n  const orgId = parseInt(ownProps.orgid);\n  return {\n    loadEstimate: (estId: number) => dispatch(estimateActions.AsyncActions.getEstimate(estId, orgId)),\n    loadOrg: (orgId: number) => dispatch(orgActions.AsyncActions.getOrg(orgId)),\n    updateEstimate: (id: number) => dispatch(estimateActions.AsyncActions.updateOrCreateEstimate(id)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface PresentProps {\n  estimateids: string[];\n  orgid: string;\n  $state: ng.ui.IStateService;\n}\n\nexport interface PresentState {\n  loading: boolean;\n  showFinancing: boolean;\n  estimatesById: { number: EstimateRecord };\n  estimate_ids: number[];\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & PresentProps;\n\nclass PresentationContainer extends React.Component<Props, PresentState> {\n  public toolInfoService: ToolInfoService;\n  constructor(props: Props) {\n    super(props);\n    this.toolInfoService = new ToolInfoService(null);\n    const ids = this.setupIds();\n    this.state = {\n      loading: true,\n      showFinancing: false,\n      estimatesById: {} as { number: EstimateRecord },\n      estimate_ids: ids,\n    };\n\n    this.saveEstimates = this.saveEstimates.bind(this);\n    this.close = this.close.bind(this);\n  }\n\n  public componentDidMount() {\n    this.setupEstimates();\n  }\n\n  public componentDidUpdate(_prevProps: PresentProps, prevState: PresentState) {\n    const { estimatesByIdProp, financeList, org } = this.props;\n\n    if (prevState.loading === true) {\n      if (\n        !_.any(\n          Object.keys(estimatesByIdProp),\n          (key) => _.isUndefined(estimatesByIdProp[key]) || estimatesByIdProp[key].loading,\n        ) &&\n        !_.isUndefined(financeList) &&\n        !financeList.loading &&\n        !_.isUndefined(org) &&\n        !org.loading\n      ) {\n        this.setState({\n          loading: false,\n          estimatesById: estimatesByIdProp,\n        });\n      }\n    } else {\n      if (\n        _.any(Object.keys(estimatesByIdProp), (key) => estimatesByIdProp[key].loading) ||\n        financeList.loading ||\n        org.loading\n      ) {\n        this.setState({\n          loading: true,\n        });\n      }\n    }\n  }\n\n  public close() {\n    this.props.$state.go(\"job_header.job_show.estimates\");\n  }\n\n  public setupEstimates() {\n    const { loadEstimate, loadOrg, orgid } = this.props;\n    const { estimate_ids } = this.state;\n\n    _.each(estimate_ids, (id: number) => {\n      loadEstimate(id);\n    });\n    const orgId = parseInt(orgid);\n    loadOrg(orgId);\n  }\n\n  public setupIds() {\n    const { estimateids } = this.props;\n    const ids: number[] = [];\n    if (_.isString(estimateids)) {\n      ids.push(parseInt(estimateids as string));\n    } else {\n      _.each(estimateids, (id: string) => {\n        ids.push(parseInt(id));\n      });\n    }\n    return ids;\n  }\n\n  public saveEstimates() {\n    const { estimatesById } = this.state;\n    Object.keys(estimatesById).forEach((key: string) => {\n      this.props.updateEstimate(parseInt(key));\n    });\n  }\n\n  public render() {\n    const { estimatesById, loading, estimate_ids } = this.state;\n    const { org, financeOptionsById } = this.props;\n\n    const params: any = { width: 4 };\n    if (Object.keys(estimatesById).length === 2) {\n      params.width = 6;\n    } else if (Object.keys(estimatesById).length === 1) {\n      params.width = 12;\n    }\n\n    if (loading) {\n      return <Spinner localProperty={loading} />;\n    }\n\n    return (\n      <React.Fragment>\n        <Row>\n          <Col md={4}>\n            <h1 className=\"price-presentation-title bold-header\">{getPricePresentationName(org)}</h1>\n          </Col>\n          <Col md={4} className=\"text-center\">\n            {getSettingsAcl(org, \"tools\").includes(\"gaf_smart_money_link\") ? (\n              <a\n                className=\"btn btn-default\"\n                role=\"button\"\n                target=\"_blank\"\n                href={this.toolInfoService.toolConfigs[\"gaf_smart_money_link\"].link(undefined, \"\")}>\n                GAF SmartMoney\n              </a>\n            ) : null}\n          </Col>\n          <Col md={4}>\n            <Button variant=\"cancel\" className=\"pull-right pp-close-btn\" type=\"button\" onClick={this.close}>\n              Close\n            </Button>\n            <Button variant=\"save\" className=\"pull-right pp-save-btn\" type=\"button\" onClick={this.saveEstimates}>\n              Save\n            </Button>\n          </Col>\n        </Row>\n        <Row className=\"view-height\">\n          {Object.keys(estimatesById).length > 0 ? (\n            <React.Fragment>\n              {estimate_ids.map((key, idx) => {\n                return (\n                  <EstimatePresentationView\n                    key={idx}\n                    estimateId={key}\n                    financeOptionsById={financeOptionsById}\n                    params={params}\n                    org={org}\n                  />\n                );\n              })}\n            </React.Fragment>\n          ) : null}\n        </Row>\n      </React.Fragment>\n    );\n  }\n}\n\nexport default connector(PresentationContainer);\n","import * as React from \"react\";\nimport { useRef, useEffect, useState } from \"react\";\nimport WebViewer, { WebViewerInstance } from \"@pdftron/webviewer\";\nimport pdfTronConfig from \"@pdftron/webviewer/package.json\";\nimport { useSelector } from \"react-redux\";\nimport { currentToken } from \"app2/src/reducers/auth.selectors\";\nimport { connectFC } from \"app2/src/connect\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const licenseKey =\n  \"Remote Sales Force LLC:OEM:One Click Contractor::B+:AMS(20290427):75A517ED04D7480AA360B13AC9A2537860612FA55C60E5A8BD22EE94347028BE4AB231F5C7\";\n\ninterface PdfDisplayProps {\n  pdfUrl: string;\n  additionalItems?: any[];\n  disabledFeatures?: any[];\n  disabledElements?: any[];\n  viewerBuiltCallback?: (instance: WebViewerInstance) => void;\n}\n\nconst bad = [\"searchButton\"];\n\nexport const PdfDisplay: React.FunctionComponent<PdfDisplayProps> = ({\n  pdfUrl,\n  additionalItems,\n  disabledFeatures,\n  disabledElements,\n  viewerBuiltCallback,\n}) => {\n  const token = useSelector(currentToken);\n  let instance: WebViewerInstance = null;\n  let defaultDisabledFeatures: string[] = [\"NotesPanel\", \"Redaction\", \"ThumbnailMerging\", \"ThumbnailReordering\"];\n  let defaultDisabledElements: string[] = [\n    \"toolbarGroup-FillAndSign\",\n    \"toolbarGroup-Insert\",\n    \"toolbarGroup-Edit\",\n    \"toolbarGroup-Forms\",\n    \"polygonCloudToolGroupButton\",\n    \"stickyToolGroupButton\",\n    \"themeChangeButton\",\n  ];\n  if (disabledFeatures) {\n    defaultDisabledFeatures = defaultDisabledFeatures.concat(disabledFeatures);\n  }\n  if (disabledElements) {\n    defaultDisabledElements = defaultDisabledElements.concat(disabledElements);\n  }\n  const viewer = useRef(null);\n\n  additionalItems = additionalItems || [];\n\n  const updateUrl = () => {\n    const options = fetcher.credentials({}, pdfUrl);\n    instance.UI.loadDocument(pdfUrl, { customHeaders: options.headers });\n  };\n\n  const initializeAnnotationTools = () => {\n    const { documentViewer, Annotations, Tools } = instance.Core;\n    const defaultsSet = localStorage.getItem(\"toolData-defaultsSet\");\n\n    [Tools.ToolNames.FREEHAND, Tools.ToolNames.FREEHAND_HIGHLIGHT].forEach((toolText) => {\n      const tool: any = documentViewer.getTool(toolText);\n      if (tool) {\n        tool.createDelay = 0;\n      }\n    });\n\n    if (isNullOrUndefined(defaultsSet)) {\n      const pdfTronBlue = new Annotations.Color(78, 125, 233, 1);\n      const pdfTronRed = new Annotations.Color(228, 66, 52, 1);\n      const pdfTronYellow = new Annotations.Color(255, 230, 162, 1);\n\n      const pdfTronAnnotationTools = {\n        AnnotationCreateRectangle: pdfTronBlue,\n        AnnotationCreateRectangle2: pdfTronRed,\n        AnnotationCreateEllipse: pdfTronBlue,\n        AnnotationCreateEllipse2: pdfTronRed,\n        AnnotationCreateLine: pdfTronBlue,\n        AnnotationCreateLine2: pdfTronRed,\n        AnnotationCreateArrow: pdfTronBlue,\n        AnnotationCreateArrow2: pdfTronRed,\n        AnnotationCreatePolyline: pdfTronBlue,\n        AnnotationCreatePolyline2: pdfTronRed,\n        AnnotationCreatePolygon: pdfTronBlue,\n        AnnotationCreatePolygon2: pdfTronRed,\n        AnnotationCreateTextUnderline: pdfTronBlue,\n        AnnotationCreateTextUnderline2: pdfTronRed,\n        AnnotationCreateTextSquiggly: pdfTronBlue,\n        AnnotationCreateTextSquiggly2: pdfTronRed,\n        AnnotationCreateTextStrikeout: pdfTronBlue,\n        AnnotationCreateTextStrikeout2: pdfTronRed,\n        AnnotationCreateFreeHand: pdfTronBlue,\n        AnnotationCreateFreeHand3: pdfTronRed,\n        AnnotationCreateFreeHandHighlight: pdfTronYellow,\n      };\n\n      Object.keys(pdfTronAnnotationTools).forEach((toolText) => {\n        const tool = documentViewer.getTool(toolText);\n\n        if (!isNullOrUndefined(tool)) {\n          tool.setStyles({\n            StrokeColor: pdfTronAnnotationTools[toolText],\n          });\n        }\n      });\n\n      const pdfTronTextTools = {\n        AnnotationCreateFreeText: pdfTronBlue,\n        AnnotationCreateFreeText3: pdfTronRed,\n      };\n\n      Object.keys(pdfTronTextTools).forEach((toolText) => {\n        const tool = documentViewer.getTool(toolText);\n        if (!isNullOrUndefined(tool)) {\n          tool.setStyles({\n            TextColor: pdfTronTextTools[toolText],\n          });\n        }\n      });\n\n      localStorage.setItem(\"toolData-defaultsSet\", \"true\");\n    }\n  };\n\n  const buildViewer = async () => {\n    try {\n      instance = await WebViewer(\n        {\n          path: `/webviewer/${pdfTronConfig.version}`,\n          extension: \"pdf\",\n          licenseKey,\n          useDownloader: false,\n        },\n        viewer.current,\n      );\n\n      const options = fetcher.credentials({}, pdfUrl);\n      instance.UI.loadDocument(pdfUrl, { customHeaders: options.headers });\n      const { Core, UI } = instance;\n      const { documentViewer, annotationManager } = Core;\n      UI.setPrintQuality(5);\n      UI.disableFeatures(defaultDisabledFeatures);\n      UI.disableElements(defaultDisabledElements);\n\n      if (!defaultDisabledFeatures.includes(\"Annotations\")) {\n        documentViewer.addEventListener(\"documentLoaded\", initializeAnnotationTools);\n      }\n\n      UI.setHeaderItems((header) => {\n        let items: any[] = header.getItems();\n        items = items.filter((item) => {\n          return bad.indexOf(item.toolGroup) < 0 && bad.indexOf(item.toolName) < 0 && bad.indexOf(item.dataElement) < 0;\n        });\n\n        items = items.concat(\n          additionalItems.map((item) => {\n            if (item.onClickHandler) {\n              item.onClick = () => {\n                item.onClickHandler(documentViewer, annotationManager);\n              };\n            }\n\n            return item;\n          }),\n        );\n\n        header.update(items);\n      });\n      UI.setFitMode(UI.FitMode.FitWidth);\n\n      if (viewerBuiltCallback) {\n        viewerBuiltCallback(instance);\n      }\n    } catch (err) {\n      console.error(err);\n    }\n  };\n\n  useEffect(() => {\n    if (!pdfUrl) {\n      return;\n    }\n    if (!instance) {\n      buildViewer();\n    } else {\n      updateUrl();\n    }\n  }, [pdfUrl]);\n\n  return <div ref={viewer} className=\"embed-pdf\"></div>;\n};\n\nexport default connectFC(PdfDisplay);\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { DocType } from \"app2/src/records/Estimate\";\nimport { Row, Col } from \"react-bootstrap\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { estimate as estimateSelector } from \"app2/src/selectors/estimate.selectors\";\nimport { PdfDisplay } from \"../Pdf/PdfDisplay\";\nimport { document } from \"app2/src/selectors/document.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: IPdfPageProps) => {\n  const estimate = estimateSelector(state, { estimateId: ownProps.estimateId });\n  return {\n    estimate,\n    document: document(state, { documentId: estimate?.get(\"tempDocumentId\") }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: IPdfPageProps) => {\n  return {\n    loadPdf: (estimateId: number, docType: DocType) =>\n      dispatch(estimateActions.AsyncActions.getEstimatePdf(estimateId, docType)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface IPdfPageProps {\n  estimateId: number;\n  docType: DocType;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IPdfPageProps;\n\nexport interface IPdfPageState {}\n\nclass PdfPageContainer extends React.Component<Props, IPdfPageState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      loading: true,\n    };\n  }\n\n  public componentDidMount() {\n    const { loadPdf, estimateId, docType } = this.props;\n    loadPdf(estimateId, docType);\n  }\n\n  public render() {\n    const { estimate, document } = this.props;\n\n    if (!estimate || estimate.loading || !document) {\n      return <Spinner localProperty={true} />;\n    }\n\n    return (\n      <Row style={{ marginTop: -80 }}>\n        <Col md={12}>\n          <PdfDisplay pdfUrl={document.get(\"base64\")} />\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(PdfPageContainer);\n","import * as React from \"react\";\nimport { Acl } from \"app2/src/helpers/Acl\";\n\nexport interface CanProps {\n  resource: string;\n  permission: string;\n  /**\n   * true - `read` does not match `read_assigned`\n   * false - `read` matches `read_assigned`\n   *\n   * example:\n   * allow 'read' to match 'read_assigned' defaults to `true`\n   */\n  exactMatch?: boolean;\n  object?: any;\n  inverse?: boolean;\n}\n\nexport class Can extends React.Component<CanProps, {}> {\n  protected _subscription: () => void;\n  constructor(props) {\n    super(props);\n  }\n\n  public componentDidMount() {\n    this._subscription = Acl.subscribe(() => {\n      this.forceUpdate();\n    });\n  }\n\n  public componentWillUnmount() {\n    if (this._subscription) {\n      this._subscription();\n      this._subscription = null;\n    }\n  }\n\n  public render() {\n    const { resource, permission, inverse, exactMatch } = this.props;\n\n    let inittedExactMatch = false;\n    if (exactMatch !== undefined) {\n      inittedExactMatch = exactMatch;\n    }\n\n    let decision = Acl.can(permission as any, resource as any, inittedExactMatch);\n    if (inverse) {\n      decision = !decision;\n    }\n    if (decision) {\n      return this.props.children;\n    } else {\n      return null;\n    }\n  }\n}\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { FormGroupProps, FormLabelProps } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { getPaginationByModel, isCurrentPageLoading } from \"app2/src/selectors/pagination.selectors\";\nimport { ReactSelect, FormContext, fromJSON as reactSelectFromJSON, ReactSelectRecord } from \"@tberrysoln/rsf-form\";\nimport { queryParamsFromJSON, QueryParamsRecord } from \"app2/src/records/Page\";\n\nexport interface RsfQueryableDropdownProps {\n  name: string;\n  label: string;\n  id?: string;\n  modelName: string;\n  modelPath: (string | number)[];\n  query: (queryParams: QueryParamsRecord, modelName: string) => void;\n  queryParams?: any;\n  formGroupProps?: FormGroupProps;\n  formLabelProps?: FormLabelProps;\n  queryOnLoad?: boolean;\n  closeMenuOnSelect?: boolean;\n  customStyles?: any;\n  selectProps?: any;\n  allOption?: ReactSelectRecord;\n  nameFn?: (item: any) => string;\n}\n\nexport const RsfQueryableDropdown: React.FC<RsfQueryableDropdownProps> = ({\n  name,\n  label,\n  id,\n  modelName,\n  formGroupProps,\n  formLabelProps,\n  modelPath,\n  query,\n  queryParams = {},\n  queryOnLoad = false,\n  closeMenuOnSelect = true,\n  customStyles = {},\n  selectProps = {},\n  allOption,\n  nameFn,\n}) => {\n  // Hooks\n  React.useEffect(() => {\n    if (queryOnLoad) {\n      onQuery(\"\");\n    }\n  }, []);\n  const { rootPath } = React.useContext(FormContext);\n\n  // Local State\n  const [lastInputValue, setLastInputValue] = React.useState(\"\");\n  const selected: ReactSelectRecord = useSelector((state: any) => state.getIn(rootPath.concat(name.split(\".\"))));\n\n  // Selectors\n  const options = useSelector((state: RootState) => {\n    let items = getPaginationByModel(state, { path: modelPath, modelName });\n    if (nameFn) {\n      items = items.map((item) => reactSelectFromJSON({ id: item.id, name: nameFn(item) }));\n    }\n    if (allOption) {\n      items = items.insert(0, allOption);\n    }\n    if (selected) {\n      items = items.filter((item) => item.id !== selected.id).insert(0, selected);\n    }\n    return items;\n  });\n\n  const loading = useSelector((state: RootState) => isCurrentPageLoading(state, { modelName }));\n\n  // Methods\n  const handleInputChange = _.debounce((term: string, { action }) => {\n    if (action === \"menu-close\") {\n      return;\n    }\n    if (lastInputValue !== term) {\n      onQuery(term);\n    }\n    setLastInputValue(term);\n  }, 500);\n\n  const onQuery = (term: string) => {\n    if (term === undefined) {\n      term = \"\";\n    }\n    const optns = queryParamsFromJSON({ query: term, parameters: queryParams });\n    query(optns, modelName);\n  };\n\n  const onMenuOpen = () => {\n    onQuery(\"\");\n  };\n\n  const filterOption = () => true;\n\n  return (\n    <ReactSelect\n      id={id}\n      label={label}\n      name={name}\n      options={options}\n      onInputChange={handleInputChange}\n      closeMenuOnSelect={closeMenuOnSelect}\n      selectProps={{\n        onMenuOpen,\n        filterOption,\n        styles: customStyles,\n        onSelectResetsInput: true,\n        ...selectProps,\n      }}\n      isLoading={loading}\n      formGroupProps={formGroupProps}\n      formLabelProps={formLabelProps}></ReactSelect>\n  );\n};\n","import { connectFC } from \"app2/src/connect\";\nimport * as React from \"react\";\nimport { useEffect } from \"react\";\nimport {\n  Check,\n  FormControlDate,\n  ReactSelect,\n  RsfForm,\n  Select,\n  fromJSON as reactSelectRecordFromJSON,\n} from \"@tberrysoln/rsf-form\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { JobAttributeTypes, orgNameAddress } from \"app2/src/records/OrgRecord\";\nimport { getFullName, UserRecord } from \"app2/src/records/UserRecord\";\nimport { leadSources as leadSourcesSelector } from \"app2/src/selectors/user.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Actions as JobActions } from \"app2/src/reducers/job.actions\";\nimport * as jobAttributeActions from \"app2/src/reducers/jobAttribute.actions\";\nimport { getActiveJobAttributesList } from \"app2/src/selectors/jobAttribute.selectors\";\nimport * as orgActions from \"app2/src/reducers/org.actions\";\nimport * as userActions from \"app2/src/reducers/user.actions\";\nimport { currentUser } from \"app2/src/selectors/user.selectors\";\nimport {\n  jobQuery as jobQuerySelector,\n  jobStates as jobStatesSelector,\n  jobQueryChanged,\n} from \"app2/src/selectors/job.selectors\";\nimport { Button, Col, FormControl, FormGroup, FormLabel, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { formatISO, subYears } from \"date-fns\";\nimport { RsfQueryableDropdown } from \"../RsfForms/RsfQueryableDropdown\";\nimport { org } from \"app2/src/selectors/org.selectors\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { JobObjectRecord } from \"app2/src/records/JobAttribute\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { lastChangesJobQuery as lastChangesJobQuerySelector } from \"app2/src/selectors/job.selectors\";\nimport { useTracking } from \"react-tracking\";\nimport { calculateUpdatedBefore, calculateUpdatedSince, getJobQueryChanges } from \"./JobQuery\";\nimport { List } from \"immutable\";\n\nexport interface JobQueryFormProps {\n  toggleJobQueryForm: () => void;\n  closeOnSubmit?: boolean;\n  onSubmit?: () => void;\n  columnSize?: number;\n}\n\nconst JobQueryForm: React.FC<JobQueryFormProps> = ({\n  toggleJobQueryForm,\n  onSubmit,\n  columnSize = 12,\n  closeOnSubmit = false,\n}) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking();\n\n  // Selectors\n  const user = useSelector((state: RootState) => currentUser(state));\n  const currentUserOrg = useSelector((state: RootState) => org(state, { orgId: user.org_id }));\n  const leadSources = useSelector((state: RootState) => leadSourcesSelector(state));\n  const jobStates = useSelector((state: RootState) => jobStatesSelector(state, {}));\n  const jobStatesReactSelectRecord = jobStates.map((state) =>\n    reactSelectRecordFromJSON({ id: state.id, name: state.label }),\n  );\n  const jobTypes = useSelector((state: RootState) =>\n    getActiveJobAttributesList(state, { orgId: user.org_id, jobAttrType: JobAttributeTypes.job_type }),\n  );\n  const jobQuery = useSelector((state: RootState) => jobQuerySelector(state));\n  const hasJobQueryChanged = useSelector(jobQueryChanged);\n  const pretty: IPretty = StoreRegistry.get(\"Pretty\");\n  const lastChangesJobQuery = useSelector((state: RootState) => lastChangesJobQuerySelector(state));\n\n  // Local State\n  const isUpdateFilterCustom: boolean = jobQuery?.updated_since === \"Custom\";\n  const rootPath = [\"jobs\", \"jobQuery\"];\n  const customStyles = {\n    option: (styles, { data }) => {\n      const state = jobStates.find((jobState) => jobState.id === data.id);\n      return {\n        ...styles,\n        borderLeft: `5px solid ${state.color}`,\n      };\n    },\n    multiValue: (styles, { data }) => {\n      const state = jobStates.find((jobState) => jobState.id === data.id);\n      return {\n        ...styles,\n        borderLeft: `5px solid ${state.color}`,\n      };\n    },\n  };\n  const allUsersOption = reactSelectRecordFromJSON({ name: \"All assignees\" });\n  const lastUpdatedOptions = () => {\n    const year = new Date().getFullYear();\n    const years = [year, year - 1, year - 2, year - 3].map((year) => year.toString());\n    const options = [\"7days\", \"14days\", \"1months\", \"3months\", \"6months\", \"1years\", ...years, \"Custom\"];\n    return options;\n  };\n\n  // Methods\n  const validateUpdatesDateRange = () => {\n    const errors = [];\n    let error = \"\";\n\n    if (jobQuery?.updated_since !== \"Custom\") {\n      errors.push({ name: \"filter_by_updated_before\", error });\n      return errors;\n    }\n\n    const limit = subYears(jobQuery.filter_by_updated_before, 1);\n    const invalidRange = jobQuery.filter_by_updated_since < limit;\n    if (invalidRange) {\n      error = \"Date range should be less or equal to 12 months\";\n    }\n    const invalidDateSelection = jobQuery.filter_by_updated_before <= jobQuery.filter_by_updated_since;\n    if (invalidDateSelection) {\n      error = \"End date cannot be before start date\";\n    }\n    errors.push({ name: \"filter_by_updated_before\", error });\n\n    return errors;\n  };\n\n  const onSubmitForm = () => {\n    dispatch(JobActions.setLastSavedJobQuery(jobQuery));\n    if (closeOnSubmit) {\n      toggleJobQueryForm();\n    }\n    const changes = getJobQueryChanges(jobQuery);\n    trackEvent({\n      action: \"submit\",\n      touched: lastChangesJobQuery,\n      filters: changes,\n    });\n    dispatch(JobActions.resetLastChangesJobQuery());\n    onSubmit();\n  };\n\n  const onResetForm = () => {\n    dispatch(JobActions.resetJobQuery());\n    dispatch(JobActions.setLastSavedJobQuery(jobQuery));\n\n    const changes = getJobQueryChanges(jobQuery);\n    trackEvent({\n      action: \"reset\",\n      touched: lastChangesJobQuery,\n      filters: changes,\n    });\n    dispatch(JobActions.resetLastChangesJobQuery());\n    toggleJobQueryForm();\n    onSubmit();\n  };\n  const queryOrgs = (params: QueryParamsRecord, modelName: string) => {\n    params = params.setIn([\"parameters\", \"include[]\"], List([\"address\"]));\n    dispatch(orgActions.AsyncActions.listOrgs(params, modelName));\n  };\n  const queryUsers = (params: QueryParamsRecord, modelName: string) => {\n    dispatch(userActions.AsyncActions.listUsers(params, modelName));\n  };\n  const loadJobTypes = () => {\n    if (!jobTypes.size) {\n      dispatch(jobAttributeActions.AsyncActions.getJobAttributes(user?.org_id, JobAttributeTypes.job_type));\n    }\n  };\n  const userNameFn = (user: UserRecord) => {\n    if (user.id === -1) {\n      return \"All assignees\";\n    }\n    return `${getFullName(user)} (${user.email})`;\n  };\n\n  // Lifecycle\n  useEffect(() => {\n    if (jobQuery.org.id === -1) {\n      dispatch(\n        JobActions.setJobQuery({\n          name: \"org\",\n          value: reactSelectRecordFromJSON({ id: currentUserOrg.id, name: orgNameAddress(currentUserOrg) }),\n        }),\n      );\n    }\n\n    dispatch(JobActions.setLastSavedJobQuery(jobQuery));\n  }, []);\n\n  return (\n    <RsfForm\n      onSubmit={onSubmitForm}\n      rootPath={rootPath}\n      updateFormReducer={JobActions.setJobQuery}\n      validate={validateUpdatesDateRange}>\n      <Row>\n        <Can resource=\"global\" permission=\"org\">\n          <Col sm={12} md={columnSize}>\n            <RsfQueryableDropdown\n              label=\"Company\"\n              name=\"org\"\n              modelName=\"jobQueryOrg\"\n              modelPath={[\"orgs\", \"orgsById\"]}\n              nameFn={orgNameAddress}\n              query={queryOrgs}></RsfQueryableDropdown>\n          </Col>\n        </Can>\n        <Can resource=\"job\" permission=\"read\" exactMatch={true}>\n          <Col sm={12} md={columnSize}>\n            <RsfQueryableDropdown\n              label=\"Assignee\"\n              name=\"user\"\n              modelName=\"jobQueryUser\"\n              modelPath={[\"users\", \"usersById\"]}\n              query={queryUsers}\n              queryParams={{ org_id: jobQuery?.org.id.toString() }}\n              nameFn={userNameFn}\n              allOption={allUsersOption}></RsfQueryableDropdown>\n          </Col>\n        </Can>\n      </Row>\n      <Row>\n        <Col sm={12} md={columnSize}>\n          <ReactSelect\n            label=\"Statuses\"\n            name=\"state\"\n            isMulti\n            options={jobStatesReactSelectRecord}\n            selectProps={{\n              styles: customStyles,\n            }}></ReactSelect>\n        </Col>\n        <Col sm={12} md={columnSize}>\n          <Select label=\"Job Type\" name=\"job_type\" formControlProps={{ onClick: loadJobTypes } as any}>\n            <option value={\"\"}>All Job Types</option>\n            {jobTypes.map((jobType: JobObjectRecord, idx) => (\n              <option key={idx} value={jobType.id} title={jobType.description}>\n                {jobType.name}\n              </option>\n            ))}\n          </Select>\n        </Col>\n      </Row>\n      <Row>\n        <Col sm={12} md={columnSize}>\n          <Select label=\"Lead Source\" name=\"lead_source\">\n            <option value={\"_allleads_\"}>All Lead Sources</option>\n            {leadSources.map((leadSource: string, idx: number) => (\n              <option key={idx} value={leadSource}>\n                {leadSource || \"Unset\"}\n              </option>\n            ))}\n          </Select>\n        </Col>\n        <Col sm={12} md={columnSize}>\n          <Select label=\"Last Updated\" name=\"updated_since\">\n            {lastUpdatedOptions().map((key) => (\n              <option key={key} value={key}>\n                {pretty.name[key] || key}\n              </option>\n            ))}\n          </Select>\n        </Col>\n      </Row>\n      <div style={{ opacity: isUpdateFilterCustom ? 1 : 0.5 }}>\n        <Row>\n          <Col sm={12} md={columnSize}>\n            {isUpdateFilterCustom ? (\n              <FormControlDate label=\"Start Date\" name=\"filter_by_updated_since\"></FormControlDate>\n            ) : (\n              <FormGroup>\n                <FormLabel htmlFor=\"start_date\">Start Date</FormLabel>\n                <FormControl\n                  id=\"start_date\"\n                  type=\"date\"\n                  value={formatISO(calculateUpdatedSince(jobQuery), { representation: \"date\" })}\n                  disabled\n                />\n              </FormGroup>\n            )}\n          </Col>\n          <Col sm={12} md={columnSize}>\n            {isUpdateFilterCustom ? (\n              <FormControlDate label=\"End Date\" name=\"filter_by_updated_before\"></FormControlDate>\n            ) : (\n              <FormGroup>\n                <FormLabel htmlFor=\"end_date\">End Date</FormLabel>\n                <FormControl\n                  id=\"end_date\"\n                  type=\"date\"\n                  value={formatISO(calculateUpdatedBefore(jobQuery), { representation: \"date\" })}\n                  disabled\n                />\n              </FormGroup>\n            )}\n          </Col>\n        </Row>\n      </div>\n      <Row>\n        <Col sm={12} md={columnSize}>\n          <Select label=\"Sort\" name=\"sort_order\">\n            <option value=\"desc\">Newest to Oldest</option>\n            <option value=\"asc\">Oldest to Newest</option>\n          </Select>\n        </Col>\n        <Col sm={12} md={columnSize}>\n          <Check label=\"Include Archived\" name=\"archived\"></Check>\n        </Col>\n      </Row>\n      <Row>\n        <Col className=\"text-center\"></Col>\n      </Row>\n      <br />\n      <Row>\n        <Col className=\"text-center\">\n          <Button id=\"jobs-filter-apply\" type=\"submit\" disabled={!hasJobQueryChanged}>\n            Apply Filters\n          </Button>\n        </Col>\n      </Row>\n      <br />\n      <Row>\n        <Col className=\"text-center\">\n          <Button id=\"jobs-filter-reset-close\" variant=\"link\" onClick={onResetForm}>\n            <FontAwesome name=\"angle-left\" />\n            &nbsp; Reset and Close\n          </Button>\n        </Col>\n      </Row>\n    </RsfForm>\n  );\n};\n\nexport default connectFC(JobQueryForm);\n","import { connectFC } from \"app2/src/connect\";\nimport { FC, useState } from \"react\";\nimport * as React from \"react\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { Button, Row, Col } from \"react-bootstrap\";\nimport JobQueryForm from \"app2/src/components/JobList/JobQueryForm\";\nimport { RootState } from \"app2/src/reducers\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { jobQuery as jobQuerySelector } from \"app2/src/selectors/job.selectors\";\nimport { Actions as JobActions } from \"app2/src/reducers/job.actions\";\nimport { useTracking } from \"react-tracking\";\nimport { lastChangesJobQuery as lastChangesJobQuerySelector } from \"app2/src/selectors/job.selectors\";\nimport { getJobQueryChanges } from \"./JobQuery\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { exportJobs } from \"app2/src/api/job.service\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { Spinner } from \"app2/src/components/SpinnerComponent\";\nexport interface FilterButtonProps {\n  $scope: ng.IScope;\n}\n\nconst FilterButton: FC<FilterButtonProps> = ({ $scope }) => {\n  // hooks\n  const [showForm, setShowForm] = useState(false);\n  const dispatch = useDispatch();\n  const { Track, trackEvent } = useTracking<any>({ component: \"Job Filter\" }, { dispatch: Dispatch.dispatch });\n  const [loading, setLoading] = useState(false);\n\n  // selectors\n  const jobQuery = useSelector((state: RootState) => jobQuerySelector(state));\n  const lastChangesJobQuery = useSelector((state: RootState) => lastChangesJobQuerySelector(state));\n\n  // methods\n  const toggleJobQueryForm = () => {\n    if (!showForm) {\n      trackEvent({\n        action: \"open\",\n      });\n    }\n    setShowForm((state) => !state);\n  };\n\n  const onSubmit = () => {\n    setShowForm(false);\n    $scope.$emit(\"filters:trigger_search\");\n  };\n\n  const onClose = () => {\n    dispatch(JobActions.revertJobQuery());\n    setShowForm(false);\n\n    const changes = getJobQueryChanges(jobQuery);\n    trackEvent({\n      action: \"close\",\n      touched: lastChangesJobQuery,\n      filters: changes,\n    });\n  };\n\n  const handleExport = async () => {\n    setLoading(true);\n    trackEvent({ action: \"export job csv\" });\n    await exportJobs(jobQuery);\n    setLoading(false);\n  };\n\n  return (\n    <Track>\n      <Button id=\"jobs-filter\" onClick={toggleJobQueryForm}>\n        <FontAwesome name=\"sliders\" />\n      </Button>\n      {showForm && (\n        <div className=\"job-filter-overlay\">\n          <Row className=\"job-filter\">\n            <Col className=\"d-flex flex-column\">\n              <Row className=\"job-filter-title\">\n                <Col md={10}>\n                  <h2>Filter By:</h2>\n                </Col>\n                <Col md={2} className=\"right-align\">\n                  <Button onClick={onClose} id=\"jobs_filter_close\">\n                    <FontAwesome name=\"times\" />\n                  </Button>\n                </Col>\n              </Row>\n              <JobQueryForm toggleJobQueryForm={toggleJobQueryForm} onSubmit={onSubmit} closeOnSubmit={true} />\n              <Can resource=\"job\" permission=\"csv_export\">\n                <div className=\"mt-auto pb-4\">\n                  <Button onClick={handleExport} variant=\"secondary\">\n                    Export\n                  </Button>\n                  <Spinner localProperty={loading} />\n                </div>\n              </Can>\n            </Col>\n          </Row>\n        </div>\n      )}\n    </Track>\n  );\n};\n\nexport default connectFC(FilterButton);\n","import * as React from \"react\";\nimport { Card, Col, Row } from \"react-bootstrap\";\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend, Title } from \"chart.js\";\nimport { Doughnut } from \"react-chartjs-2\";\nimport { useSelector } from \"react-redux\";\nimport { jobStats } from \"app2/src/selectors/job.selectors\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\n\nChartJS.register(ArcElement, Tooltip, Legend, Title);\n\nexport const Statistics: React.FC = () => {\n  const stats = useSelector(jobStats);\n  const data = {\n    labels: stats?.map((s) =>\n      s.name.length > 20 ? `${s.count}: - ${s.name.substring(0, 20)}...` : `${s.count}: ${s.name}`,\n    ),\n    datasets: [\n      {\n        data: stats?.map((s) => s.count),\n        backgroundColor: stats?.map((s) => s.color || \"#fc0303\"),\n      },\n    ],\n  };\n\n  return (\n    <Can resource=\"job\" permission=\"statistics\">\n      <Row className=\"mb-2 statistics\">\n        <Col>\n          <Card>\n            <Card.Body>\n              <h3 className=\"text-center mb-1\">Total Customers</h3>\n              <Row>\n                <Col xs={6}>\n                  <Doughnut\n                    data={data}\n                    options={{\n                      plugins: {\n                        tooltip: {\n                          callbacks: {\n                            label: (item) => `${stats[item.dataIndex].name}: ${stats[item.dataIndex].count}`,\n                          },\n                        },\n                        legend: {\n                          display: false,\n                        },\n                      },\n                      maintainAspectRatio: false,\n                    }}\n                  />\n                </Col>\n                <Col xs={6}>\n                  <div className=\"legend\">\n                    {stats?.map((s, index) => (\n                      <p key={index}>\n                        <span style={{ background: s.color }} className=\"number-circle\" title={s.name}>\n                          {s.count}\n                        </span>\n                        &nbsp;&nbsp;{s.name}\n                      </p>\n                    ))}\n                  </div>\n                </Col>\n              </Row>\n            </Card.Body>\n          </Card>\n        </Col>\n      </Row>\n    </Can>\n  );\n};\n","import { DateFormat } from \"app2/src/helpers/Format\";\nimport * as React from \"react\";\n\nexport type DateTimeVariant = \"vertical\";\n\nexport interface DateTimeProps {\n  date: Date;\n  variant: DateTimeVariant;\n}\n\ninterface DateTimeState {}\n\nexport default class DateTime extends React.Component<DateTimeProps, DateTimeState> {\n  constructor(props: DateTimeProps) {\n    super(props);\n  }\n\n  public render(): React.ReactNode {\n    const { date } = this.props;\n\n    return (\n      <>\n        <p style={{ marginBottom: \"0\" }}>{DateFormat(date, \"shortName\")}</p>\n        <small>{DateFormat(date, \"shortTime\")}</small>\n      </>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { connectFC } from \"app2/src/connect\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { RootState } from \"app2/src/reducers\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { AsyncActions } from \"app2/src/reducers/event.actions\";\nimport { queryParamsFromJSON, QueryParamsRecord } from \"app2/src/records/Page\";\nimport { getPaginationByModel, pageRecord } from \"app2/src/selectors/pagination.selectors\";\nimport DateTime from \"app2/src/components/Common/DateTime\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\nexport interface IAppointmentsProps {\n  count: number;\n}\n\nconst AppointmentsTable: React.FC<IAppointmentsProps> = ({ count = 5 }) => {\n  const modelName = \"events\";\n  const loading = useSelector((state: RootState) => pageRecord(state, { modelName, page: 1 })?.get(\"loading\"));\n  const appointments = useSelector((state: RootState) =>\n    getPaginationByModel(state, { modelName, path: [\"events\", \"byId\"] }),\n  );\n  const dispatch = useDispatch();\n  const queryParams: QueryParamsRecord = queryParamsFromJSON({\n    per_page: count,\n    parameters: {\n      start_time_after: new Date(),\n      jobs_only: \"true\",\n      sort_by: \"start_time\",\n      includes: [\"job_basic\"],\n    },\n  });\n\n  const clickCallback = React.useCallback((event) => {\n    const $state: ng.ui.IStateService = StoreRegistry.get(\"$state\");\n    const id = event.currentTarget.dataset.id;\n    $state.go(\"job_header.job_show.info\", { id });\n  }, []);\n\n  React.useEffect(() => {\n    dispatch(AsyncActions.loadEvents(queryParams));\n  }, []);\n\n  return (\n    <>\n      {!loading && (\n        <div className=\"sidebar-appointments mb-2 standard-rl-margin\">\n          <Row className=\"table-row\">\n            <Col>Upcoming Appointments</Col>\n          </Row>\n          {appointments.size === 0 ? (\n            <Row className=\"table-row\">\n              <Col>\n                <p className=\"mb-0\">No Appointments Scheduled</p>\n              </Col>\n            </Row>\n          ) : null}\n          {appointments.map((appointment, index) => (\n            <Row\n              key={index}\n              className=\"table-row link\"\n              data-id={appointment.job_id}\n              role=\"button\"\n              onClick={clickCallback}>\n              <Col>{appointment.job.customer_name}</Col>\n              <Col className=\"text-center\">\n                <DateTime date={appointment.start_time} variant=\"vertical\" />\n              </Col>\n            </Row>\n          ))}\n        </div>\n      )}\n    </>\n  );\n};\nexport const Appointments = connectFC(AppointmentsTable);\n","import { RootState } from \"app2/src/reducers\";\nimport { settingsConfig } from \"app2/src/selectors/org.selectors\";\nimport { currentUser } from \"app2/src/selectors/userCommon.selectors\";\nimport * as React from \"react\";\nimport { useSelector } from \"react-redux\";\n\nexport const SystemNotes: React.FC = () => {\n  const user = useSelector(currentUser);\n  const url = useSelector((state: RootState) =>\n    settingsConfig(state, { orgId: user?.org_id, path: [\"dashboard\", \"communication_url\"] }),\n  );\n\n  if (!url) {\n    return null;\n  }\n  return (\n    <div className=\"system-notes\">\n      <iframe src={url} title=\"SystemNotes component\"></iframe>\n    </div>\n  );\n};\n","import { connectFC } from \"app2/src/connect\";\nimport * as React from \"react\";\nimport { Statistics } from \"./Statistics\";\nimport { Appointments } from \"./Appointments\";\nimport { SystemNotes } from \"./SystemNotes\";\n\nexport const Sidebar: React.FC = () => {\n  return (\n    <div className=\"job-list-sidebar\">\n      <Statistics />\n      <Appointments count={3} />\n      <SystemNotes />\n    </div>\n  );\n};\n\nexport default connectFC(Sidebar);\n","import { RootState } from \"app2/src/reducers\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { document as documentSelector } from \"app2/src/selectors/document.selectors\";\nimport { connectFC } from \"app2/src/connect\";\nimport { AsyncActions } from \"app2/src/reducers/document.actions\";\nimport { Button } from \"react-bootstrap\";\nimport { useState } from \"react\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { sleep } from \"app2/src/helpers/Time\";\n\nexport interface DownloadDocumentButtonProps {\n  documentId: number;\n  signed?: boolean;\n  children?: React.ReactNode;\n}\n\n/**\n * Used in contracts.html and DocumentRow.tsx to download document files using proper authentication\n */\nexport const DownloadDocumentButton: React.FC<DownloadDocumentButtonProps> = ({ documentId, signed, children }) => {\n  const dispatch = useDispatch();\n  const document = useSelector((state: RootState) => documentSelector(state, { documentId }));\n  const [downloading, setDownloading] = useState(false);\n\n  const download = () => {\n    setDownloading(true);\n    (dispatch(AsyncActions.downloadDocument(document, signed)) as any as Promise<void>)\n      .then(() => {\n        sleep(2000).then(() => {\n          setDownloading(false);\n        });\n      })\n      .catch(() => {\n        setDownloading(false);\n      });\n  };\n\n  if (downloading) {\n    return (\n      <Button className=\"btn btn-borderless\">\n        <FontAwesome name=\"spinner\" className=\"fa-pulse\" data-testid=\"button-spinner\" />\n      </Button>\n    );\n  }\n\n  if (children) {\n    return (\n      <span title=\"Download Document\" onClick={() => download()}>\n        {children}\n      </span>\n    );\n  }\n\n  if (signed)\n    return (\n      <Button title=\"Download Signed Document\" onClick={() => download()} disabled={downloading}>\n        <i className=\"fa fa-file-pdf-o\"></i>\n      </Button>\n    );\n\n  return (\n    <Button variant=\"secondary\" title=\"Download File\" onClick={() => download()} disabled={downloading}>\n      <i className=\"fa fa-download\"></i>\n    </Button>\n  );\n};\n\nexport default connectFC(DownloadDocumentButton);\n","import { useDispatch, useSelector } from \"react-redux\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { replace, goBack as historyGoBack } from \"connected-react-router/immutable\";\nimport { useLocation } from \"react-router\";\n\nexport const usePreviousPath = (): {\n  goBack: (pathToRemove: string) => void;\n} => {\n  const dispatch = useDispatch();\n  const path = useSelector(pathname);\n  const location = useLocation();\n\n  const goBack = (pathToRemove: string) => {\n    // https://stackoverflow.com/questions/37385570/how-to-know-if-react-router-can-go-back-to-display-back-button-in-react-app\n    // location.key chosen for 2 reasons:\n    // 1. location.key is defined after a refresh in an existing browser tab (when OCC app routing has occurred)\n    //     a. any solution relying on redux would use 'replace' when `goBack` is available\n    // 2. location.key = 'default' or undefined when pasting a link into a new browser tab\n    if (![\"\", \"default\", undefined].includes(location.key)) {\n      dispatch(historyGoBack());\n    } else {\n      const newPath = path.split(pathToRemove)[0];\n      dispatch(replace(newPath));\n    }\n  };\n\n  return {\n    goBack,\n  };\n};\n","import { useCallback, useState, useEffect } from \"react\";\nimport fscreen from \"fscreen\";\n\nexport default function useFullScreenToggle(): [boolean, () => void] {\n  const [isFullScreen, setIsFullScreen] = useState<boolean>(!!fscreen.fullscreenElement);\n\n  useEffect(() => {\n    const onFullScreenChange = () => setIsFullScreen(!!fscreen.fullscreenElement);\n    fscreen.addEventListener(\"fullscreenchange\", onFullScreenChange);\n    return () => {\n      fscreen.removeEventListener(\"fullscreenchange\", onFullScreenChange);\n    };\n  }, []);\n\n  const toggleFullScreen = useCallback(() => {\n    isFullScreen ? fscreen.exitFullscreen() : fscreen.requestFullscreen(document.documentElement);\n  }, [isFullScreen]);\n\n  return [isFullScreen, toggleFullScreen];\n}\n","import { createSelector } from \"reselect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentJobId, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { estimate as estimateSelector } from \"app2/src/selectors/estimate.selectors\";\nimport { currentEstimateGroups } from \"app2/src/selectors/estimateGroup.selectors\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { EstimateGroupRecord } from \"app2/src/records/EstimateGroup\";\nimport { currentUser } from \"app2/src/selectors/userCommon.selectors\";\nimport { StylizedQuotesToSimpleQuotes } from \"app2/src/helpers/Format\";\n\nconst formatEstimateGroup = (group: EstimateGroupRecord) => ({\n  id: group.id,\n  name: group.name,\n  subtotal: group.subtotal,\n  line_items: [],\n});\n\nexport const payload = createSelector(\n  [\n    (state: RootState) => token(state, { kind: \"ingage\" }),\n    (state: RootState) =>\n      estimateSelector(state, { estimateId: selectedEstimateId(state), jobId: currentJobId(state) }),\n    (state: RootState) => currentEstimateGroups(state, { includeAll: true }),\n  ],\n  (ingageToken, estimate, estimateGroups) => {\n    if (!ingageToken || !estimate || !estimateGroups) return null;\n\n    const tokenData = ingageToken.get(\"data\").toJS();\n    const payload = {\n      config: {\n        packages: tokenData.packages,\n        discount: tokenData.discount,\n        finance_options: tokenData.finance_options,\n      },\n      estimate: {\n        id: estimate.id,\n        total: estimate.total,\n        groups: {\n          included: [\n            ...estimateGroups\n              .filter((group) => group.included)\n              .toJS()\n              .map((group) => formatEstimateGroup(group)),\n          ],\n          options: [\n            ...estimateGroups\n              .filter((group) => !group.included)\n              .toJS()\n              .map((group) => formatEstimateGroup(group)),\n          ],\n        },\n      },\n    };\n\n    return payload;\n  },\n);\n\nexport const urlSelector = createSelector(\n  [payload, (state: RootState) => token(state, { kind: \"ingage\" }), currentUser],\n  (payload, ingageToken, user) => {\n    const presentation_url = ingageToken?.getIn([\"data\", \"presentation_url\"]);\n    if (!payload || !presentation_url || !user) return null;\n\n    const btoaPayload = btoa(StylizedQuotesToSimpleQuotes(JSON.stringify(payload)));\n    return `${presentation_url}?pricing-calculator__data=${encodeURIComponent(\n      btoaPayload,\n    )}&pricing-calculator__hidenavbar=true&c=${encodeURIComponent(user.email)}`;\n  },\n);\n","import * as React from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\nimport { useSelector } from \"react-redux\";\nimport useFullScreenToggle from \"app2/src/hooks/useFullScreenToggle/useFullScreenToggle\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { urlSelector } from \"./PricePresentationModal.selectors\";\nimport { RootState } from \"app2/src/reducers\";\n\nexport const PricePresentationModal: React.FC = () => {\n  // Hooks\n  const { goBack } = usePreviousPath();\n  const [isFullScreen, toggleFullScreen] = useFullScreenToggle();\n\n  // Selectors\n  const url = useSelector((state: RootState) => urlSelector(state));\n\n  const close = () => {\n    if (isFullScreen) toggleFullScreen();\n    goBack(\"/price-presentation\");\n  };\n\n  return (\n    <Modal show={true} onHide={close} size=\"xl\" className={isFullScreen ? \"fullscreen\" : \"\"}>\n      <Modal.Header closeButton>\n        <Modal.Title>Price Presentation</Modal.Title>\n        <div onClick={toggleFullScreen} className=\"ml-auto\">\n          {isFullScreen ? (\n            <FontAwesome name=\"compress fa-gray link\" title=\"Exit Full Screen\" size=\"lg\" />\n          ) : (\n            <FontAwesome name=\"expand fa-gray link\" title=\"Full Screen\" size=\"lg\" />\n          )}\n        </div>\n      </Modal.Header>\n      <Modal.Body>\n        <iframe style={{ height: \"100%\" }} src={url}></iframe>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button onClick={close}>Close</Button>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n","import * as React from \"react\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { RootState } from \"app2/src/reducers\";\nimport { estimateMetadata } from \"app2/src/selectors/estimate.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { getAuthorization } from \"app2/src/selectors/token.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as config from \"react-global-configuration\";\nimport { useTracking } from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\n\nexport interface OneLookFinanceApplicationButtonProps {\n  isEstimateDirty: boolean;\n  estimate: IEstimate;\n}\n\nexport const OneLookFinanceApplicationButton: React.FC<OneLookFinanceApplicationButtonProps> = ({\n  isEstimateDirty,\n  estimate,\n}) => {\n  // Selectors\n  const orgId = useSelector(currentOrgId);\n  const authorized = useSelector((state: RootState) => getAuthorization(state, { integration: \"one_look\", orgId }));\n  const path = useSelector(pathname);\n  const metadata = useSelector((state: RootState) =>\n    estimateMetadata(state, { estimateId: estimate?.id, metadataName: \"one_look\" }),\n  );\n\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking(\n    {\n      component: \"OneLookFinanceApplicationButton\",\n      category: \"Estimate\",\n      org: orgId,\n    },\n    { dispatch: Dispatch.dispatch },\n  );\n\n  if (!authorized || (estimate?.id as any) === \"new\") return null;\n\n  const handleClick = () => {\n    if (metadata?.get(\"id\")) {\n      trackEvent({ action: \"open finance application\" });\n      const url = config.get(\"ONE_LOOK_API_URL\") + \"/ui/application/\" + metadata.get(\"id\");\n      window.open(url, \"_blank\");\n    } else {\n      trackEvent({ action: \"open finance application modal\" });\n      dispatch(push(`${path}/finance_application`));\n    }\n  };\n\n  return (\n    <Button className=\"float-right\" onClick={handleClick} disabled={isEstimateDirty} style={{ marginLeft: \"10px\" }}>\n      {metadata?.get(\"id\") ? \"Open in 1LOOK\" : \"1LOOK\"}\n    </Button>\n  );\n};\n","import * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport { currentOrgId, currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport { connectFC } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getAuthorization, token } from \"app2/src/selectors/token.selectors\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { ConnectedRouter } from \"connected-react-router/immutable\";\nimport { history } from \"app2/src/store\";\nimport { Route, Switch } from \"react-router\";\nimport { push } from \"connected-react-router/immutable\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { PricePresentationModal } from \"./PricePresentationModal\";\nimport { selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { OneLookFinanceApplicationButton } from \"app2/src/components/JobTabs/EstimateTab/OneLook/FinanceApplicationButton\";\n\nexport interface PricePresentationButtonProps {\n  isEstimateDirty: boolean;\n  estimate: IEstimate;\n}\n\nexport const PricePresentationButton: React.FC<PricePresentationButtonProps> = ({ isEstimateDirty, estimate }) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const path = useSelector(pathname);\n\n  // Selectors\n  const estimateId = useSelector(selectedEstimateId);\n  const orgId = useSelector(currentOrgId);\n  const authorized = useSelector((state: RootState) => getAuthorization(state, { integration: \"ingage\", orgId }));\n  const ingageToken = useSelector((state: RootState) => token(state, { kind: \"ingage\" }));\n  const enhancedPricePresentationEnabled = useSelector((state: RootState) =>\n    currentOrgPrefConfig(state, { path: [\"enhanced_price_presentation\", \"enabled\"] }),\n  );\n\n  // Lifecycle\n  React.useEffect(() => {\n    dispatch(tokenActions.AsyncActions.getToken(orgId, \"ingage\"));\n  }, []);\n\n  // Methods\n  const isTokenValid = () => {\n    const data = ingageToken?.get(\"data\");\n    if (!data) return false;\n\n    if (\n      !data.get(\"presentation_url\") ||\n      data.get(\"finance_options\")?.size < 1 ||\n      !data.get(\"discount\") ||\n      data.get(\"packages\")?.size < 1\n    )\n      return false;\n\n    return true;\n  };\n\n  const handleOnClick = () => {\n    if (!isTokenValid()) {\n      dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, \"Invalid Price Presentation Configuration\"));\n      return;\n    }\n\n    // open modal with url in iframe\n    dispatch(push(`${path}/price_presentation`));\n  };\n\n  if (estimateId === \"new\" || estimateId === null) return null;\n\n  return (\n    <>\n      <OneLookFinanceApplicationButton isEstimateDirty={isEstimateDirty} estimate={estimate} />\n\n      {enhancedPricePresentationEnabled && (\n        <Button className=\"float-right\" onClick={() => dispatch(push(`${path}/present`))} disabled={isEstimateDirty}>\n          $ Present\n        </Button>\n      )}\n      {authorized && (\n        <Button\n          className=\"float-right\"\n          onClick={handleOnClick}\n          disabled={isEstimateDirty}\n          title={\n            isEstimateDirty ? \"Please save your current changes to utilize Price Presentation\" : \"Price Presentation\"\n          }>\n          Price Presentation\n        </Button>\n      )}\n\n      <Switch>\n        <Route path=\"/jobs/:jobId/estimates/:estimateId/price_presentation\" component={PricePresentationModal} />\n      </Switch>\n    </>\n  );\n};\n\nexport default connectFC((props: PricePresentationButtonProps) => (\n  <ConnectedRouter history={history}>\n    <PricePresentationButton {...props} />\n  </ConnectedRouter>\n));\n","import { RootState } from \"app2/src/reducers\";\nimport { pageControlData } from \"app2/src/selectors/pagination.selectors\";\nimport * as React from \"react\";\nimport { Col, Pagination, Row } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"react-tracking\";\n\nexport interface PaginationControlProps {\n  pageChanged: (page: number) => void;\n  modelName: string;\n}\n\nexport const PaginationControl: React.FC<PaginationControlProps> = ({ pageChanged, modelName }) => {\n  const { trackEvent } = useTracking();\n  const metadata = useSelector((state: RootState) => pageControlData(state, { modelName }));\n\n  const handlePageChange = (page: number) => {\n    trackEvent({ action: \"pagination page changed\", page });\n    pageChanged(page);\n  };\n\n  if (!metadata || metadata?.total_pages === 1) {\n    return (\n      <Row>\n        <Col md={12}>\n          <Pagination className=\"justify-content-center\">\n            <Pagination.Ellipsis />\n          </Pagination>\n        </Col>\n      </Row>\n    );\n  }\n  const { total_pages, current_page } = metadata;\n\n  let preEllipsis = null,\n    preArrow = null;\n  let postEllipsis = null,\n    postArrow = null;\n  const pre = [],\n    post = [];\n\n  if (current_page > 1) {\n    const preNumber = Math.max(1, current_page - 2);\n\n    for (let i = preNumber; i < current_page; i++) {\n      pre.push(\n        <Pagination.Item key={i} onClick={() => handlePageChange(i)}>\n          {i}\n        </Pagination.Item>,\n      );\n    }\n\n    if (preNumber > 1) {\n      preEllipsis = <Pagination.Ellipsis />;\n    }\n\n    preArrow = <Pagination.Prev onClick={() => handlePageChange(current_page - 1)} />;\n  }\n\n  if (current_page < total_pages) {\n    const available = 4 - pre.length;\n    const postNumber = Math.min(total_pages, current_page + available);\n\n    for (let i = current_page + 1; i <= postNumber; i++) {\n      post.push(\n        <Pagination.Item key={i} onClick={() => handlePageChange(i)}>\n          {i}\n        </Pagination.Item>,\n      );\n    }\n\n    if (postNumber < total_pages) {\n      postEllipsis = <Pagination.Ellipsis />;\n    }\n\n    postArrow = <Pagination.Next onClick={() => handlePageChange(current_page + 1)} />;\n  }\n\n  return (\n    <Row>\n      <Col md={12}>\n        <Pagination className=\"justify-content-center\">\n          <Pagination.First disabled={current_page === 1} onClick={() => handlePageChange(1)} />\n          {preArrow}\n          {preEllipsis}\n          {pre}\n          <Pagination.Item active onClick={() => handlePageChange(current_page)}>\n            {current_page}\n          </Pagination.Item>\n          {post}\n          {postEllipsis}\n          {postArrow}\n          <Pagination.Last disabled={current_page === total_pages} onClick={() => handlePageChange(total_pages)} />\n        </Pagination>\n      </Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { isCurrentPageLoading, getPaginationByModel } from \"app2/src/selectors/pagination.selectors\";\nimport { Col, Row, Table } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as reportActions from \"app2/src/reducers/report.actions\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { queryParamsFromJSON } from \"app2/src/records/Page\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connectFC } from \"app2/src/connect\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { DateFormat } from \"app2/src/helpers/Format\";\nimport { PaginationControl } from \"app2/src/components/Common/PaginationControl\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\n\nconst ReportList: React.FC = () => {\n  // Constants\n  const modelName = \"reports\";\n  const pretty: IPretty = StoreRegistry.get(\"Pretty\");\n\n  // Hooks\n  const dispatch = useDispatch();\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n  const reports = useSelector((state: RootState) =>\n    getPaginationByModel(state, { path: [modelName, \"byId\"], modelName }),\n  );\n  const loading = useSelector((state: RootState) => isCurrentPageLoading(state, { modelName }));\n\n  // Methods\n  const load = async (page: number) => {\n    await dispatch(\n      reportActions.AsyncActions.listReports(\n        queryParamsFromJSON({ page, parameters: { reportable_id: jobId, reportable_type: \"Job\" } }),\n      ),\n    );\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    load(1);\n  }, []);\n\n  if (!loading && reports?.size === 0) return null;\n\n  return (\n    <Row>\n      <Col>\n        <SpinnerComponent localProperty={loading} />\n        <h4>Reports</h4>\n        <Row className=\"reports-scroll\">\n          <Col>\n            <Table striped>\n              <thead>\n                <tr>\n                  <th>Type</th>\n                  <th>Status</th>\n                  <th>Date</th>\n                </tr>\n              </thead>\n              <tbody>\n                {reports.map((report) => (\n                  <tr key={report.id}>\n                    <td>\n                      <p>\n                        {pretty.name[report.provider]} {pretty.name[report.kind]} Report\n                      </p>\n                    </td>\n                    <td>\n                      <p title={report.order_result?.error_message}>{toTitleCase(report.status)}</p>\n                    </td>\n                    <td>\n                      <p>{DateFormat(report.created_at, \"short\")}</p>\n                    </td>\n                  </tr>\n                ))}\n              </tbody>\n            </Table>\n            <PaginationControl modelName={modelName} pageChanged={load} />\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n\nexport default connectFC(ReportList);\n","import { IProduct, ICustomProduct, AbleProp } from \"app/src/Models/Product\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { IEstimateLineItemOption, EstimateLineItemOption } from \"./EstimateLineItemOption\";\nimport { IImage } from \"app/src/Models/Image\";\nimport { IDoc } from \"app/src/Models/Doc\";\nimport { IOpeningEstimation } from \"app/src/Models/OpeningEstimation\";\nimport { IOpening } from \"app/src/Models/Opening\";\nimport { Nullable } from \"app2/src/records\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { ProductOptionGroupRecord } from \"app2/src/records/ProductOptionGroup\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { List, Map } from \"immutable\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { cachedProductOption, cachedProductOptionByMatchIdWithIds } from \"app2/src/selectors/productOption.selectors\";\nimport { cachedProductOptionGroup } from \"app2/src/selectors/productOptionGroup.selectors\";\nimport { cachedAncestorDocuments } from \"app2/src/selectors/product.selectors\";\nimport { IEstimate, IEstimateMarkups } from \"app/src/Models/Estimate\";\nimport { markupMultiplier } from \"app2/src/records/Estimate\";\nimport { isMarkupable } from \"app2/src/records/EstimateLineItem\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport interface IEstimateLineItem {\n  classy: string;\n  id: number;\n  product_uuid: string;\n  estimate_id: number;\n  product_id: number;\n  estimate_group_id: number;\n  orig_estimate_group_id: number;\n  color_id: number;\n  sort_order: number;\n  estimateGroup: IEstimateGroup;\n  name: string;\n  description: string;\n  cost: number;\n  price: number;\n  product_price: number;\n  labor_price: number;\n  base_product_price: number;\n  base_labor_price: number;\n  visibility: string;\n  quantity: number;\n  discountable: AbleProp;\n  markupable: AbleProp;\n  uom: string;\n  ext_price: number;\n  msrp: number;\n  created_at: Date;\n  updated_at: Date;\n  _destroy: boolean;\n  options: IEstimateLineItemOption[];\n  documents: IDoc[];\n  images: IImage[];\n  opening_estimations: IOpeningEstimation[];\n  product_image_urls: string[];\n  estimate_doc_urls: string[];\n  contract_doc_urls: string[];\n  newly_added: boolean;\n  editing: boolean;\n  validated: boolean;\n  validation_results: any[];\n\n  optionsType(type: string): IEstimateLineItemOption[];\n  existingOptions(): IEstimateLineItemOption[];\n  existingSingleSelectOption(optionGroupId: number): Nullable<IEstimateLineItemOption>;\n  existingEliForProductOption(productOptionUuid: string): Nullable<IEstimateLineItemOption>;\n  existingImages(): IImage[];\n  calculate(estimate: IEstimateMarkups): void;\n  optionsTotal(): void;\n  isVisible(presentation_mode: boolean): boolean;\n  isCustom(): boolean;\n  clone(): IEstimateLineItem;\n  copyValues(from: IEstimateLineItem);\n  setProduct(activatedPriceListId: number, product: ProductRecord, setDescription?: boolean): void;\n  windowPriceAdjustment(product: ProductRecord): void;\n  setCustomProduct(product: ICustomProduct): void;\n  checkDescription(product: ProductRecord): boolean;\n  splitName(): string[];\n  leafName(): string;\n  getOptionId(): number;\n  decycleToJSON(): any;\n  openingEstimations(): IOpeningEstimation[];\n  openingEstimationMeasurement(charge_type: string, quantity: number): number;\n  forceToZero(): void;\n  compareOptions(activatedPriceListId: number, newProductOptionGroups: List<ProductOptionGroupRecord>): any;\n  transformRequest(): any;\n}\n\nexport class EstimateLineItem implements IEstimateLineItem {\n  public classy: string;\n  public id: number;\n  public product_uuid: string;\n  public estimate_id: number;\n  public product_id: number;\n  public estimate_group_id: number;\n  public orig_estimate_group_id: number;\n  public product: IProduct;\n  public color_id: number;\n  public sort_order: number;\n  public name: string;\n  public description: string;\n  public cost = 0;\n  public price = 0;\n  public product_price = 0;\n  public labor_price = 0;\n  public base_product_price = 0;\n  public base_labor_price = 0;\n  public visibility: string;\n  public quantity = 0;\n  public uom = \"ea\";\n  public discountable: AbleProp;\n  public markupable: AbleProp;\n  public ext_price = 0;\n  public msrp = 0;\n  public created_at: Date;\n  public updated_at: Date;\n  public estimateGroup: IEstimateGroup;\n  public _destroy: boolean;\n  public options: IEstimateLineItemOption[] = [];\n  public documents: IDoc[] = [];\n  public images: IImage[] = [];\n  public product_image_urls: string[] = [];\n  public estimate_doc_urls: string[] = [];\n  public contract_doc_urls: string[] = [];\n  public opening_estimations: IOpeningEstimation[] = [];\n  public newly_added: boolean;\n  public editing = false;\n  public validated = true;\n  public validation_results: any[] = [];\n\n  constructor(estimateGroup: IEstimateGroup) {\n    this.estimateGroup = estimateGroup;\n    this.classy = \"EstimateLineItem\";\n    this.newly_added = false;\n  }\n\n  public optionsType(type: string): IEstimateLineItemOption[] {\n    return _.filter(this.options, (opt) => {\n      let backwards = false;\n      if (type === \"default\") {\n        backwards = _.isUndefined(opt.pog_type);\n      }\n      return opt.pog_type === type || backwards;\n    });\n  }\n\n  public existingOptions(): IEstimateLineItemOption[] {\n    return _.filter(this.options, (g) => {\n      return g._destroy !== true;\n    });\n  }\n\n  public existingImages(): IImage[] {\n    return _.filter(this.images, (i) => {\n      return i._destroy !== true;\n    });\n  }\n\n  public existingSingleSelectOption(optionGroupId: number): Nullable<IEstimateLineItemOption> {\n    const r = _.find(this.existingOptions(), (e: IEstimateLineItemOption) => {\n      return e.product_option_group_id === optionGroupId;\n    });\n\n    return r || null;\n  }\n\n  public existingEliForProductOption(productOptionUuid: string): Nullable<IEstimateLineItemOption> {\n    const r = _.find(this.existingOptions(), (elio: IEstimateLineItemOption) => {\n      return elio.product_option_uuid === productOptionUuid;\n    });\n\n    return r || null;\n  }\n\n  public calculate(estimate: IEstimate): number {\n    if (isMarkupable(this)) {\n      if (estimate.calc_method === \"estimate_group\") {\n        this.product_price = roundToDecimals(\n          this.base_product_price * markupMultiplier(this.estimateGroup.product_markup),\n          -2,\n        );\n        this.labor_price = roundToDecimals(\n          this.base_labor_price * markupMultiplier(this.estimateGroup.labor_markup),\n          -2,\n        );\n      } else {\n        this.product_price = roundToDecimals(this.base_product_price * markupMultiplier(estimate.product_markup), -2);\n        this.labor_price = roundToDecimals(this.base_labor_price * markupMultiplier(estimate.labor_markup), -2);\n      }\n    } else {\n      this.product_price = this.base_product_price || 0;\n      this.labor_price = this.base_labor_price || 0;\n    }\n\n    this.price = this.product_price + this.labor_price;\n\n    this.ext_price = roundToDecimals((this.price || 0) * (this.quantity || 0), -2);\n\n    return this.ext_price;\n  }\n\n  public isVisible(presentation_mode = true): boolean {\n    // always, company_only\n    if (presentation_mode) {\n      return this.visibility === \"always\" || this.visibility === undefined;\n    } else {\n      return this.visibility === \"always\" || this.visibility === \"company_only\" || this.visibility === undefined;\n    }\n  }\n\n  public isCustom(): boolean {\n    return (this.name !== \"\" || this.description !== \"\") && _.isUndefined(this.product_id);\n  }\n\n  public optionsTotal() {\n    return _.reduce(\n      this.options || [],\n      (memo: number, option: IEstimateLineItemOption) => {\n        if (option._destroy) {\n          return memo;\n        }\n        return memo + option.ext_price;\n      },\n      0,\n    );\n  }\n\n  public clone() {\n    //noinspection TypeScriptUnresolvedFunction\n    const estimate_line_item = EstimateLineItem.fromJSON(this.estimateGroup, JSON.retrocycle(this.decycleToJSON()));\n    estimate_line_item.images = _.map(this.images, (i) => i.clone());\n    estimate_line_item.documents = _.map(this.documents, (d) => d.clone());\n    estimate_line_item.product_id = this.product_id;\n    estimate_line_item.opening_estimations = this.opening_estimations;\n\n    _.each(estimate_line_item.opening_estimations, (oe: IOpeningEstimation) => {\n      const blah = _.find(_.pluck(this.opening_estimations, \"openable\"), (o: IOpening) => oe.openable_id === o.id);\n      Object.defineProperty(oe, \"openable\", { value: blah });\n    });\n\n    return estimate_line_item;\n  }\n\n  public decycleToJSON(): any {\n    return angular.fromJson(angular.toJson(JSON.decycle(this)));\n  }\n\n  public copyValues(from: IEstimateLineItem) {\n    for (const key in from) {\n      if (key === \"editing\") {\n      } else if (from.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        this[key] = from[key];\n      }\n    }\n  }\n\n  public setProduct(activatedPriceListId: number, product: ProductRecord, setDescription = true) {\n    this.product_id = product.id;\n    this.name = product.ancestral_name;\n    this.price = product.price;\n    this.base_product_price = product.product_price;\n    this.base_labor_price = product.labor_price;\n    this.cost = product.cost;\n    this.msrp = product.msrp;\n    this.visibility = product.visibility;\n    this.product_uuid = product.uuid;\n    this.discountable = product.discountable || \"default\";\n    this.markupable = product.markupable || \"default\";\n    this.uom = product.uom;\n    this.product_image_urls = [];\n    product.images.forEach((i) => {\n      const url = i.file?.url;\n      if (url) this.product_image_urls.push(url);\n    });\n    this.images = [];\n    this.documents = [];\n    this.estimate_doc_urls = useSelector((state) =>\n      cachedAncestorDocuments(state, {\n        activatedPriceListId,\n        display: \"estimate\",\n        productId: product.id,\n      }),\n    )\n      .map((doc) => new URL(doc.url).pathname)\n      .toArray();\n    this.contract_doc_urls = useSelector((state) =>\n      cachedAncestorDocuments(state, {\n        activatedPriceListId,\n        display: \"contract\",\n        productId: product.id,\n      }),\n    )\n      .map((doc) => new URL(doc.url).pathname)\n      .toArray();\n\n    if (setDescription) {\n      this.description = product.description;\n    }\n  }\n\n  public windowPriceAdjustment(product: ProductRecord) {\n    switch (product.bracket_type) {\n      case \"per_ui\":\n        if (this.openingEstimations().length === 0) {\n          return;\n        }\n        const opening_ui = this.openingEstimations()[0].openable.ui;\n        const total_ui = roundToDecimals(opening_ui - product.base_measure, -2);\n        this.name = this.perName(`${opening_ui} UI`);\n        this.calculateWindowPrice(total_ui, product);\n        break;\n      case \"per_sqft\":\n        if (this.openingEstimations().length === 0) {\n          return;\n        }\n        const opening_area = this.openingEstimations()[0].openable.area;\n        const total_area = roundToDecimals(opening_area - product.base_measure, -2);\n        this.name = this.perName(`${opening_area} SQFT`);\n        this.calculateWindowPrice(total_area, product);\n        break;\n    }\n  }\n\n  public setCustomProduct(product: ICustomProduct) {\n    this.name = product.name;\n    this.product_uuid = product.uuid;\n    this.cost = 0;\n    this.price = product.price;\n    this.base_product_price = product.product_price;\n    this.base_labor_price = product.labor_price;\n    this.description = product.description;\n    this.uom = product.uom;\n    this.quantity = product.quantity;\n    this.visibility = product.visibility;\n  }\n\n  public checkDescription(product: IProduct | ProductRecord) {\n    return this.description === product.description;\n  }\n\n  public splitName() {\n    if (!this.name) {\n      return [\"\"];\n    }\n    let parts = this.name.split(\">\");\n    _.each(parts, (part: string, index: number) => {\n      parts[index] = part.trim();\n    });\n\n    if (parts.length > 1) {\n      parts.splice(-1, 1);\n    } else if (this.product && this.product.parent) {\n      parts = [];\n    }\n\n    return parts;\n  }\n\n  public leafName() {\n    if (!this.name) {\n      return \"\";\n    }\n    return this.name.split(\">\").pop().trim();\n  }\n\n  public getOptionId() {\n    const firstId = -1;\n\n    const currentMin = _.chain(this.options).pluck(\"id\").min().value();\n\n    return _.min([firstId, currentMin - 1]);\n  }\n\n  public openingEstimations() {\n    return _.select(this.opening_estimations, (oe: IOpeningEstimation) => !oe._destroy);\n  }\n\n  public openingEstimationMeasurement(charge_type: string, quantity: number) {\n    if (this.openingEstimations()[0]) {\n      switch (charge_type) {\n        case \"per_ui\":\n          return this.openingEstimations()[0].openable.ui;\n        case \"per_sqft\":\n          return this.openingEstimations()[0].openable.area;\n        default:\n          return quantity;\n      }\n    } else {\n      return quantity;\n    }\n  }\n\n  public forceToZero() {\n    if (!this.quantity) {\n      this.quantity = 0;\n    }\n    if (!this.price) {\n      this.price = 0;\n    }\n    if (!this.product_price) {\n      this.product_price = 0;\n    }\n    if (!this.labor_price) {\n      this.labor_price = 0;\n    }\n  }\n\n  public compareOptions(activatedPriceListId: number, newOptionGroups: List<ProductOptionGroupRecord>): any {\n    const matchedOptions = [];\n    const rejectedOptions = [];\n    let quantities = Map();\n    _.each(this.existingOptions(), (elio: IEstimateLineItemOption) => {\n      const elioProductOptionGroup = useSelector((state) =>\n        cachedProductOptionGroup(state, {\n          activatedPriceListId,\n          productOptionGroupId: elio.product_option_group_id,\n        }),\n      );\n      const elioProductOption = useSelector((state) =>\n        cachedProductOption(state, {\n          activatedPriceListId,\n          productOptionId: elio.product_option_id,\n        }),\n      );\n\n      const new_pog = newOptionGroups.find((nog: ProductOptionGroupRecord) => {\n        return nog.match_id === elioProductOptionGroup.match_id;\n      });\n      if (new_pog) {\n        const new_po = useSelector((state) =>\n          cachedProductOptionByMatchIdWithIds(state, {\n            activatedPriceListId,\n            productOptionIds: new_pog.option_ids,\n          }),\n        );\n        if (new_po) {\n          quantities = quantities.set(new_po.id, elio.quantity);\n          matchedOptions.push(new_po);\n        } else {\n          rejectedOptions.push(elioProductOptionGroup.name + \": \" + elioProductOption.name);\n        }\n      } else {\n        rejectedOptions.push(elioProductOptionGroup.name + \": \" + elioProductOption.name);\n      }\n    });\n    return [matchedOptions, quantities, rejectedOptions];\n  }\n\n  public transformRequest() {\n    const lineItem = JSON.parse(angular.toJson(this.decycleToJSON()));\n    delete lineItem.product;\n    delete lineItem.estimateGroup;\n    delete lineItem.orig_estimate_group_id;\n    delete lineItem.editing;\n    delete lineItem.validated;\n    delete lineItem.validation_results;\n    delete lineItem.newly_added;\n    delete lineItem.updated_at;\n    delete lineItem.created_at;\n    if (lineItem.estimate_group_id <= 0) {\n      delete lineItem.estimate_group_id;\n    }\n\n    (lineItem as any).options_attributes = lineItem.options;\n    _.each((lineItem as any).options_attributes, (option: IEstimateLineItemOption) => {\n      if (option.id <= 0) {\n        delete option.id;\n      }\n      delete option.estimate_line_item;\n    });\n\n    delete lineItem.options;\n\n    (lineItem as any).images_attributes = lineItem.images;\n    (lineItem as any).documents_attributes = lineItem.documents;\n    (lineItem as any).opening_estimations_attributes = lineItem.opening_estimations;\n    delete lineItem.images;\n    delete lineItem.documents;\n\n    return lineItem;\n  }\n\n  public static fromJSON = (estimateGroup: IEstimateGroup, data: any): IEstimateLineItem => {\n    const estimateLineItem = new EstimateLineItem(estimateGroup);\n    for (const key in data) {\n      if (data.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        switch (key) {\n          case \"updated_at\":\n          case \"created_at\":\n            estimateLineItem[key] = new Date(data[key]);\n            break;\n          case \"options\":\n            estimateLineItem[key] = _.map(data[key] || [], (opt) => {\n              return new EstimateLineItemOption(opt);\n            });\n            break;\n          case \"estimate_group_id\":\n            if (data[\"estimate_group_id\"] > 0 && estimateLineItem.orig_estimate_group_id === undefined) {\n              estimateLineItem[\"orig_estimate_group_id\"] = data[key];\n              estimateLineItem[key] = data[key];\n            }\n            break;\n          case \"documents\":\n            estimateLineItem[key] = Array.from(data[key]);\n            break;\n          case \"images\":\n            estimateLineItem[key] = Array.from(data[key]);\n            break;\n          default:\n            if (Array.isArray(data[key])) {\n              estimateLineItem[key] = Array.from(data[key]);\n            } else {\n              estimateLineItem[key] = data[key];\n            }\n            break;\n        }\n      }\n    }\n\n    return estimateLineItem;\n  };\n\n  private perName(name) {\n    return `${this.name.substring(0, this.name.lastIndexOf(\">\") + 1)} ${name}`.trim();\n  }\n\n  private calculateWindowPrice(factor: number, product: ProductRecord) {\n    this.uom = \"ea\";\n    this.base_product_price = roundToDecimals(product.base_product_price + product.product_price * factor, -2);\n    this.base_labor_price = roundToDecimals(product.base_labor_price + product.labor_price * factor, -2);\n  }\n}\n\nexport const IsOptionSelected = (lineItem: IEstimateLineItem, option: ProductOptionRecord): boolean => {\n  return _.chain(lineItem.existingOptions())\n    .select((elio: IEstimateLineItemOption) => !elio._destroy)\n    .any((elio: IEstimateLineItemOption) => {\n      return elio.product_option_uuid === option.uuid;\n    })\n    .value();\n};\n","import * as uuid from \"uuid/v4\";\nimport { parseFloatSafe, roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport type IDiscount = Discount;\n\nexport class Discount {\n  public uuid: string;\n  public discountId: number;\n  public discountRev: string;\n  public kind = \"percent\";\n  public name = \"\";\n  public amount = 0;\n  public calculated: number;\n  public totalAfter: number;\n  public limit = 0;\n\n  constructor(data: any) {\n    if (data) {\n      this.uuid = data.uuid;\n      this.discountId = data.discountId;\n      this.discountRev = data.discountRev;\n      this.kind = data.kind || \"percent\";\n      this.name = data.name || \"\";\n      this.amount = data.amount || 0;\n      this.calculated = data.calculated;\n      this.totalAfter = data.totalAfter;\n      this.limit = data.limit || 0;\n    }\n\n    if (!this.uuid) {\n      this.uuid = uuid();\n    }\n  }\n\n  public perform(total: number): number {\n    switch (this.kind) {\n      case \"percent\":\n        this.calculated = roundToDecimals(total * (this.amount / 100), -2);\n        break;\n      case \"percent_limit\":\n        this.calculated = roundToDecimals(total * (this.amount / 100), -2);\n        this.calculated = _.min([this.limit, this.calculated]);\n        break;\n      case \"flat\":\n        this.calculated = this.amount;\n        break;\n    }\n    this.totalAfter = total - this.calculated;\n\n    return this.totalAfter;\n  }\n\n  public clone() {\n    return Discount.fromJSON(JSON.parse(JSON.stringify(this.toJsonObj())));\n  }\n\n  public toJsonObj() {\n    return {\n      uuid: this.uuid,\n      kind: this.kind,\n      name: this.name,\n      amount: this.amount,\n      calculated: this.calculated,\n      totalAfter: this.totalAfter,\n      discountId: this.discountId,\n      discountRev: this.discountRev,\n      limit: this.limit,\n    };\n  }\n\n  public static fromJSON = (data: any) => {\n    data.amount = parseFloatSafe(data.amount);\n    data.calculated = parseFloatSafe(data.calculated);\n    data.limit = parseFloatSafe(data.limit);\n    data.totalAfter = parseFloatSafe(data.totalAfter);\n\n    return new Discount(data);\n  };\n}\n","import { IEstimate, ISalesTaxable } from \"app/src/Models/Estimate\";\nimport { Discount, IDiscount } from \"app/src/Models/Discount\";\nimport { IEstimateLineItem, EstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport { IRoomEstimation } from \"app/src/Models/RoomEstimation\";\nimport { getTimezoneString } from \"app2/src/records/Estimate\";\nimport {\n  fromJSON as paymentTermsFromJSON,\n  toJSON as paymentTermsToJSON,\n  memoizedCalculatePaymentTerms,\n  PaymentTermRecord,\n} from \"app2/src/records/PaymentTerm\";\nimport { isDiscountable } from \"app2/src/records/EstimateLineItem\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport interface IEstimateGroup {\n  id: number;\n  name: string;\n  included: boolean;\n  subtotal: number;\n  total: number;\n  labor_total: number;\n  product_total: number;\n  tax_total: number;\n  tax_rate: number;\n  taxable_amount: number;\n  default_taxable_amount: string;\n  line_items: IEstimateLineItem[];\n  room_estimations: IRoomEstimation[];\n  product_markup: number;\n  labor_markup: number;\n  payment_terms: PaymentTermRecord;\n  discounts: IDiscount[];\n  discount: number;\n  discountable_total: number;\n  running_discountable: number;\n  created_at: Date;\n  updated_at: Date;\n  sort_order: number;\n  _destroy: boolean;\n  $$hashKey: string;\n  estimated_start: Date;\n  estimated_end: Date;\n\n  getId(): number;\n  decycleToJSON(): any;\n  updateSalesTax(salesTax: ISalesTaxable): void;\n  cloneSalesTax(): ISalesTaxable;\n  updateTotal(): number;\n  existingLineItems(): IEstimateLineItem[];\n}\n\nexport class EstimateGroup implements IEstimateGroup {\n  public id: number;\n  public name: string;\n  public included: boolean;\n  public subtotal: number;\n  public total: number;\n  public labor_total: number;\n  public product_total: number;\n  public tax_total: number;\n  public tax_rate: number;\n  public taxable_amount: number;\n  public default_taxable_amount: string;\n  public line_items: IEstimateLineItem[] = [];\n  public room_estimations: IRoomEstimation[] = [];\n  public product_markup: number;\n  public labor_markup: number;\n  public payment_terms: PaymentTermRecord;\n  public discounts: IDiscount[];\n  public discount: number;\n  public discountable_total: number;\n  public running_discountable: number;\n  public created_at: Date;\n  public updated_at: Date;\n  public sort_order: number;\n  public _destroy: boolean;\n  public $$hashKey: string;\n  public estimated_start: Date;\n  public estimated_end: Date;\n\n  constructor(estimate: IEstimate, data?: any) {\n    if (data) {\n      if (!_.isUndefined(data.id)) {\n        this.id = data.id;\n      }\n      if (!_.isUndefined(data.name)) {\n        this.name = data.name;\n      }\n      if (!_.isUndefined(data.included)) {\n        this.included = data.included;\n      }\n      if (!_.isUndefined(data.sort_order)) {\n        this.sort_order = data.sort_order;\n      }\n      if (!_.isUndefined(data.line_items)) {\n        this.line_items = data.line_items;\n      }\n      if (!_.isUndefined(data.created_at)) {\n        this.created_at = data.created_at;\n      }\n      if (!_.isUndefined(data.updated_at)) {\n        this.updated_at = data.updated_at;\n      }\n      if (!_.isUndefined(data.subtotal)) {\n        this.subtotal = data.subtotal;\n      }\n      if (!_.isUndefined(data.total)) {\n        this.total = data.total;\n      }\n      if (!_.isUndefined(data.room_estimations)) {\n        this.room_estimations = data.room_estimations;\n      }\n      if (!_.isUndefined(data.tax_rate)) {\n        this.tax_rate = data.tax_rate;\n      }\n      if (!_.isUndefined(data.taxable_amount)) {\n        this.taxable_amount = data.taxable_amount;\n      }\n      if (!_.isUndefined(data.default_taxable_amount)) {\n        this.default_taxable_amount = data.default_taxable_amount;\n      }\n      if (!_.isUndefined(data.tax_total)) {\n        this.tax_total = data.tax_total;\n      }\n      if (!_.isUndefined(data.estimated_start)) {\n        this.estimated_start = data.estimated_start;\n      }\n      if (!_.isUndefined(data.estimated_end)) {\n        this.estimated_end = data.estimated_end;\n      }\n      if (!_.isUndefined(data.product_markup)) {\n        this.product_markup = data.product_markup;\n      }\n      if (!_.isUndefined(data.labor_markup)) {\n        this.labor_markup = data.labor_markup;\n      }\n      if (!_.isUndefined(data.payment_terms)) {\n        this.payment_terms = data.payment_terms;\n      }\n      if (!_.isUndefined(data.discounts)) {\n        this.discounts = data.discounts;\n      }\n    }\n\n    if (!this.id) {\n      this.id = estimate.getId();\n    }\n  }\n\n  public getId(): number {\n    const firstId = -1;\n\n    const currentMin = _.chain(this.line_items).pluck(\"id\").min().value();\n\n    return _.min([firstId, currentMin - 1]);\n  }\n\n  public cloneSalesTax(): ISalesTaxable {\n    return {\n      tax_rate: this.tax_rate,\n      taxable_amount: this.taxable_amount,\n      default_taxable_amount: this.default_taxable_amount,\n      tax_total: this.tax_total,\n    };\n  }\n\n  public updateSalesTax(salesTax: ISalesTaxable): void {\n    if (!_.isNull(salesTax.tax_rate) && !_.isUndefined(salesTax.tax_rate)) {\n      this.tax_rate = salesTax.tax_rate;\n    }\n    if (!_.isNull(salesTax.taxable_amount) && !_.isUndefined(salesTax.taxable_amount)) {\n      this.taxable_amount = salesTax.taxable_amount;\n    }\n    if (!_.isNull(salesTax.default_taxable_amount) && !_.isUndefined(salesTax.default_taxable_amount)) {\n      this.default_taxable_amount = salesTax.default_taxable_amount;\n    }\n\n    this.updateTotal();\n  }\n\n  public updateTaxTotal(): number {\n    if (this.taxable_amount && this.tax_rate) {\n      this.tax_total = roundToDecimals(this.taxable_amount * (this.tax_rate / 100.0), -2);\n    } else {\n      this.tax_total = 0.0;\n    }\n\n    return this.tax_total;\n  }\n\n  public updateTotal(): number {\n    const totals = _.chain([this])\n      .map((g: IEstimateGroup) => {\n        return g.line_items;\n      })\n      .flatten()\n      .compact()\n      .reduce(\n        (sum: any, item: IEstimateLineItem) => {\n          if (item._destroy) {\n            return sum;\n          }\n\n          sum.total = roundToDecimals(sum.total + item.ext_price, -2);\n          sum.labor = sum.labor + roundToDecimals(item.quantity * item.labor_price, -2);\n          sum.product = sum.product + roundToDecimals(item.quantity * item.product_price, -2);\n          if (isDiscountable(item)) {\n            sum.discountable = roundToDecimals(sum.discountable + item.ext_price, -2);\n          }\n          _.each(item.options, (option: IEstimateLineItemOption) => {\n            if (option._destroy || option.pog_type === \"cost\") {\n              return;\n            }\n            sum.total = sum.total + option.ext_price;\n            sum.labor = sum.labor + option.calculateLaborPrice();\n            sum.product = sum.product + option.calculateProductPrice();\n            if (isDiscountable(item)) {\n              sum.discountable = sum.discountable + option.ext_price;\n            }\n          });\n\n          return sum;\n        },\n        { total: 0, product: 0, labor: 0, discountable: 0 },\n      )\n      .value();\n    this.subtotal = totals.total;\n    this.product_total = totals.product;\n    this.labor_total = totals.labor;\n    this.discountable_total = totals.discountable;\n\n    this.discount = _.reduce(\n      this.discounts,\n      (memo: number, discount: IDiscount) => {\n        this.discountable_total = discount.perform(this.discountable_total);\n        return memo + discount.calculated;\n      },\n      0,\n    );\n\n    // Discounts Come Off Product Total\n    this.product_total = this.product_total - this.discount;\n\n    switch (this.default_taxable_amount) {\n      case \"product\":\n        this.taxable_amount = this.product_total;\n        break;\n      case \"labor\":\n        this.taxable_amount = this.labor_total;\n        break;\n      case \"product_labor\":\n        this.taxable_amount = this.product_total + this.labor_total;\n        break;\n    }\n\n    this.taxable_amount = _.max([this.taxable_amount, 0]);\n\n    this.updateTaxTotal();\n\n    this.total = roundToDecimals(this.product_total + this.labor_total + this.tax_total, -2);\n\n    if (this.payment_terms) {\n      this.payment_terms = memoizedCalculatePaymentTerms(this.payment_terms, this.total);\n    }\n\n    return this.total;\n  }\n\n  public existingLineItems() {\n    return _.filter(this.line_items, (g) => {\n      return g._destroy !== true;\n    });\n  }\n\n  public static transformRequest(group: any, groupResource: IEstimateGroup): any {\n    if (group.id < 0) {\n      delete group.id;\n    }\n\n    group.line_items_attributes = group.line_items;\n    group.room_estimations_attributes = group.room_estimations;\n\n    if (group.payment_terms && groupResource.payment_terms) {\n      group.payment_terms = paymentTermsToJSON(groupResource.payment_terms);\n    }\n\n    if (groupResource.discounts && groupResource.discounts.length > 0) {\n      group.discounts = _.map(groupResource.discounts, (d: IDiscount) => {\n        return d.toJsonObj();\n      });\n    }\n\n    // clean out temp ID from \"new\" line items\n    _.each(group.line_items_attributes, (lineItem: IEstimateLineItem) => {\n      if (lineItem.id <= 0) {\n        delete lineItem.id;\n      }\n\n      delete lineItem.estimateGroup;\n      delete lineItem.orig_estimate_group_id;\n      if (lineItem.estimate_group_id <= 0) {\n        delete lineItem.estimate_group_id;\n      }\n\n      (lineItem as any).options_attributes = lineItem.options;\n      _.each((lineItem as any).options_attributes, (option: IEstimateLineItemOption) => {\n        if (option.id <= 0) {\n          delete option.id;\n        }\n        delete option.estimate_line_item;\n      });\n\n      delete lineItem.options;\n\n      (lineItem as any).images_attributes = lineItem.images;\n      (lineItem as any).documents_attributes = lineItem.documents;\n      (lineItem as any).opening_estimations_attributes = lineItem.opening_estimations;\n      delete lineItem.images;\n      delete lineItem.documents;\n    });\n\n    if (group.estimated_start instanceof Date) {\n      group.estimated_start = (group.estimated_start as Date).toISOString();\n    }\n    if (typeof group.estimated_start === \"string\") {\n      group.estimated_start = group.estimated_start.split(\"T\")[0];\n    }\n\n    if (group.estimated_end instanceof Date) {\n      group.estimated_end = (group.estimated_end as Date).toISOString();\n    }\n    if (typeof group.estimated_start === \"string\") {\n      group.estimated_end = group.estimated_end.split(\"T\")[0];\n    }\n\n    delete group.estimate;\n    delete group.line_items;\n    delete group.product_total;\n    delete group.labor_total;\n    delete group.room_estimations;\n\n    return group;\n  }\n\n  public decycleToJSON() {\n    const data = JSON.decycle(this);\n\n    if (this.line_items) {\n      _.each(this.line_items, (lineItem, idx) => {\n        data.line_items[idx] = lineItem.decycleToJSON();\n      });\n    }\n\n    if (this.payment_terms) {\n      data.payment_terms = paymentTermsToJSON(this.payment_terms);\n    }\n\n    return data;\n  }\n\n  public static fromJSON(estimate: IEstimate, json: any): IEstimateGroup {\n    if (json.created_at) {\n      json.created_at = new Date(json.created_at as string);\n    }\n    if (json.updated_at) {\n      json.updated_at = new Date(json.updated_at as string);\n    }\n    if (json.estimated_start && typeof json.estimated_start === \"string\") {\n      const timezoneDate = new Date(json.estimated_start);\n      json.estimated_start = new Date(\n        `${json.estimated_start}T00:00:00.000${getTimezoneString(timezoneDate.getTimezoneOffset())}`,\n      );\n    }\n    if (json.estimated_end && typeof json.estimated_end === \"string\") {\n      const timezoneDate = new Date(json.estimated_end);\n      json.estimated_end = new Date(\n        `${json.estimated_end}T00:00:00.000${getTimezoneString(timezoneDate.getTimezoneOffset())}`,\n      );\n    }\n\n    const doOrder = !_.any(json.line_items, (item: any) => {\n      return item.sort_order;\n    });\n\n    if (json.payment_terms) {\n      json.payment_terms = paymentTermsFromJSON(json.payment_terms);\n    } else {\n      json.payment_terms = paymentTermsFromJSON({});\n    }\n\n    if (!json.discounts) {\n      json.discounts = [];\n    } else if (_.isArray(json.discounts)) {\n      json.discounts = _.map(json.discounts, (d: any) => {\n        return Discount.fromJSON(d);\n      });\n    }\n\n    const estimateGroup = new EstimateGroup(estimate, json);\n    _.each(json.line_items, (li, index) => {\n      estimateGroup.line_items[index] = EstimateLineItem.fromJSON(estimateGroup, li);\n\n      if (doOrder) {\n        estimateGroup.line_items[index].sort_order = index;\n      }\n    });\n\n    estimateGroup.line_items = _.sortBy(estimateGroup.line_items, \"sort_order\");\n\n    return estimateGroup;\n  }\n}\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\n\nexport const validationsById = (state: RootState, props: any) => state.getIn([\"validations\", \"byId\"]);\nexport const validationIdFromItemUuid = (state: RootState, props: any) =>\n  state.getIn([\"validations\", \"byItemUuid\", `${props.kind}-${props.itemUuid}`]);\n\nexport const validationFromItemUuid = createSelector(\n  [validationsById, validationIdFromItemUuid],\n  (validationsById, validationId) => {\n    return validationsById.get(validationId);\n  },\n);\n","import { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport { EstimatePrototype } from \"app/src/Models/Estimate\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { ValidationRecord } from \"app2/src/records/Validation\";\nimport { RootState } from \"app2/src/reducers\";\nimport { cachedProduct } from \"app2/src/selectors/product.selectors\";\nimport { cachedProductOptionGroups } from \"app2/src/selectors/productOptionGroup.selectors\";\nimport { validationFromItemUuid } from \"app2/src/selectors/validation.selectors\";\n\nexport const validationMessage = (validation_results: any[], ConfirmDialog: IConfirmDialog) => {\n  const messages = [];\n  _.each(validation_results, (result) => {\n    let message = `<h2>${result.name}:</h2>`;\n    if (result.required) {\n      message += resultMessage(result.required, \"required\");\n    }\n\n    if (result.optional) {\n      message += resultMessage(result.optional, \"optional\");\n    }\n\n    if (result.requiredSelection) {\n      message += resultOptionsMessage(result.requiredSelection, \"required options\");\n    }\n\n    if (result.photo_upload_required) {\n      message += resultPhotoUploadMessage(result.photo_upload_required);\n    }\n\n    messages.push(message);\n  });\n\n  ConfirmDialog.confirm(\"\", {\n    template: `<div class=\"modal-body\">${messages.join(\n      \"<br>\",\n    )}</div><div class=\"modal-footer\"><button class=\"btn btn-default\" type=\"button\" ng-click=\"$close()\">OK</button></div>`,\n    size: \"lg\",\n    windowClass: \"on-top-modal validation-message-modal\",\n  });\n};\n\nexport const resultMessage = (data: any, type: string) => {\n  const defaultMessage = `${type} categories met. Choose a product from the following categories to pass validation.<p><ul class=\"list-group\"><li class=\"list-group-item\">${\n    data.categories && data.categories.join('</li><li class=\"list-group-item\">')\n  }</li></ul>`;\n  return `<p>${data.qty_met} out of ${data.qty_required} ${\n    data.custom_message ? `${data.custom_message}</p>` : defaultMessage\n  }<br>`;\n};\n\nexport const resultOptionsMessage = (data: any, type: string) => {\n  const defaultMessage = `${type} met. Choose a selection from the following option group to pass validation.<p><ul class=\"list-group\"><li class=\"list-group-item\">${\n    data.categories && data.categories.join('</li><li class=\"list-group-item\">')\n  }</li></ul>`;\n\n  return `<p>${data.qty_met} out of ${data.qty_required} ${\n    data.custom_message ? `${data.custom_message}</p>` : defaultMessage\n  }<br>`;\n};\n\nexport const resultPhotoUploadMessage = (data: any) => {\n  return `<p>${data.custom_message || \"Upload a photo to pass validation.\"}</p><br>`;\n};\n\nexport const validateLineItem = (\n  state: RootState,\n  estimate: EstimatePrototype,\n  lineItem: IEstimateLineItem,\n): { validated: boolean; validation_results: any[] } => {\n  let validated = true;\n  let validation_results = [];\n  const productResult = validateLineItemProduct(state, estimate, lineItem);\n  if (!productResult.validated) {\n    validated = false;\n    validation_results.push(productResult.validation_result);\n  }\n\n  const optionGroupsResult = validateLineItemOptionGroups(state, estimate, lineItem);\n  if (!optionGroupsResult.validated) {\n    validated = validated && false;\n    validation_results = validation_results.concat(optionGroupsResult.validation_results);\n  }\n\n  return { validated, validation_results };\n};\n\nexport const validateLineItemProduct = (\n  state: RootState,\n  estimate: EstimatePrototype,\n  lineItem: IEstimateLineItem,\n): { validated: boolean; validation_result: any } => {\n  const validation = findValidation(state, lineItem.product_id, estimate.activated_price_list_id, estimate.kind);\n  if (!validation) {\n    return { validated: true, validation_result: {} };\n  }\n  const definition = validation.definition;\n  const required = [];\n  let validated = true;\n  _.each(definition.required_categories || [], (category: any) => {\n    if (findLineItemProduct(state, estimate, category.product_uuids)) {\n      required.push(category.name);\n    }\n  });\n  const validation_result: any = { name: validation.name };\n  if (definition.required_categories && required.length < definition.required_categories.length) {\n    validated = false;\n    validation_result.required = {\n      qty_met: required.length,\n      qty_required: definition.required_categories.length,\n      custom_message: definition.required_categories_message,\n      categories: _.difference(_.pluck(definition.required_categories, \"name\"), required),\n    };\n  }\n\n  const optional = [];\n  _.each(definition.categories || [], (category: any) => {\n    if (findLineItemProduct(state, estimate, category.product_uuids)) {\n      optional.push(category.name);\n    }\n  });\n  if (optional.length < definition.min_required_qty) {\n    validated = validated && false;\n    validation_result.optional = {\n      qty_met: optional.length,\n      qty_required: definition.min_required_qty,\n      custom_message: definition.categories_message,\n      categories: _.difference(_.pluck(definition.categories, \"name\"), optional),\n    };\n  }\n\n  if (definition.photo_upload_required) {\n    const photoUploaded = lineItem.existingImages().length > 0;\n    if (!photoUploaded) {\n      validated = false;\n      validation_result.photo_upload_required = {\n        custom_message: definition.photo_upload_message,\n      };\n    }\n  }\n\n  return { validated, validation_result };\n};\n\nexport const validateLineItemOptionGroups = (\n  state: RootState,\n  estimate: EstimatePrototype,\n  lineItem: IEstimateLineItem,\n): { validated: boolean; validation_results: any[] } => {\n  const validation_results = [];\n  let validated = true;\n  const productId = lineItem.product_id;\n  const activatedPriceListId = estimate.activated_price_list_id;\n  const kind = estimate.kind;\n\n  if (!productId) {\n    return { validated: true, validation_results };\n  }\n\n  const productOptionGroups = cachedProductOptionGroups(state, { type: \"default\", activatedPriceListId, productId });\n\n  productOptionGroups.forEach((productOptionGroup) => {\n    const validation = validationFromItemUuid(state, { kind, itemUuid: productOptionGroup.uuid });\n    if (!validation) {\n      return;\n    }\n\n    if (validation.definition.kind !== \"product_option_group\") {\n      return;\n    }\n\n    const requiredSelectionCount = validation.definition.required_selection_count || 0;\n\n    const selectedOptions = lineItem.options\n      .filter((option) => option._destroy !== true)\n      .filter((option) => option.product_option_group_id === productOptionGroup.id);\n\n    if (selectedOptions.length < requiredSelectionCount) {\n      validated = validated && false;\n      validation_results.push({\n        name: validation.name,\n        requiredSelection: {\n          qty_met: selectedOptions.length,\n          qty_required: requiredSelectionCount,\n          custom_message: validation.definition.required_selection_count_message,\n          categories: [productOptionGroup.name],\n        },\n      });\n    }\n  });\n\n  return { validated, validation_results };\n};\n\nexport const findValidation = (\n  state: RootState,\n  productId: number,\n  activatedPriceListId: number,\n  kind: \"default\" | \"inspection\" | \"survey\",\n): ValidationRecord => {\n  if (!productId) {\n    return;\n  }\n  const product = cachedProduct(state, {\n    activatedPriceListId: activatedPriceListId,\n    productId: productId,\n  });\n  if (!product) {\n    console.error(`ProductId ${productId} not found in redux - activatedPriceListId ${activatedPriceListId}`);\n    return;\n  }\n\n  const validation = validationFromItemUuid(state, { kind, itemUuid: product.uuid });\n  if (validation) {\n    return validation;\n  }\n  return findValidation(state, product.parent_id, activatedPriceListId, kind);\n};\n\nexport const findLineItemProduct = (\n  state: RootState,\n  estimate: EstimatePrototype,\n  uuids: string[],\n): IEstimateLineItem => {\n  const lineItem = _.find(estimate.lineItems(estimate.estimateGroups(true)), (lineItem: IEstimateLineItem) => {\n    if (!lineItem.product_id || lineItem.quantity <= 0) {\n      return false;\n    }\n\n    return checkLineItemProduct(state, lineItem.product_id, uuids, estimate.activated_price_list_id);\n  });\n\n  return lineItem;\n};\n\nexport const checkLineItemProduct = _.memoize(\n  (state: RootState, productId: number, uuids: string[], activatedPriceListId: number): boolean => {\n    if (!productId) {\n      return false;\n    }\n    const product = cachedProduct(state, {\n      activatedPriceListId: activatedPriceListId,\n      productId: productId,\n    });\n    if (!product) {\n      return false;\n    }\n\n    if (_.includes(uuids, product.uuid)) {\n      return true;\n    }\n\n    return checkLineItemProduct(state, product.parent_id, uuids, activatedPriceListId);\n  },\n  (state, productId, uuids) => {\n    let hash = \"undefined\";\n    if (productId) {\n      hash = productId;\n    }\n    return hash + uuids.join(\",\");\n  },\n);\n","import * as ng from \"angular\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { IEstimateGroup, EstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport { IDiscount, Discount } from \"app/src/Models/Discount\";\nimport { IImage } from \"app/src/Models/Image\";\nimport { IDoc } from \"app/src/Models/Doc\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { AddEstimateLineItemOptionCmd } from \"../Commands/Estimator/AddEstimateLineItemOptionCmd\";\nimport {\n  fromJSON as paymentTermsFromJSON,\n  toJSON as paymentTermsToJSON,\n  memoizedCalculatePaymentTerms,\n  PaymentTermRecord,\n} from \"app2/src/records/PaymentTerm\";\nimport { useSelector, dispatch, useState } from \"app2/src/storeRegistry\";\nimport { validateLineItem } from \"app/src/Estimator/ValidationService\";\nimport {\n  EstimateFinanceOptionRecord,\n  IEstimateFinanceOptionData,\n  fromJSON as efoFromJSON,\n  toJSON as estimateFinanceOptionsToJSON,\n} from \"app2/src/records/EstimateFinanceOption\";\nimport { financeOptionCleanProps } from \"app2/src/api/estimate.service\";\nimport { IEstimateData, getTimezoneString } from \"app2/src/records/Estimate\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { ProductOptionGroupRecord } from \"app2/src/records/ProductOptionGroup\";\nimport { updateEstimateFinanceOptionPayments } from \"app2/src/selectors/estimateFinanceOption.selectors\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { List } from \"immutable\";\nimport { isDiscountable } from \"app2/src/records/EstimateLineItem\";\nimport { parseFloatSafe, roundToDecimals } from \"app2/src/helpers/Number\";\nimport { getNextSortOrder, hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport type EstimateKind = \"price\" | \"inspection\" | \"survey\";\n\nexport interface IEstimate extends ng.resource.IResource<IEstimate>, EstimatePrototype, ISalesTaxable {\n  id: number;\n\n  $pdf(...args: any[]): ng.IPromise<Blob>;\n  $csv(...args: any[]): ng.IPromise<Blob>;\n  $email(...args: any[]): ng.IPromise<boolean>;\n  $ms_upload(...args: any[]): ng.IPromise<boolean>;\n}\n\nexport interface IEstimateResource extends ng.resource.IResourceClass<IEstimate>, IRsfResource {\n  create(data: any): IEstimate;\n  createNew(data: any): IEstimate;\n  fromJSON?(data: any): IEstimate;\n  clone?(estimate: IEstimate): IEstimate;\n  pattern?(data?: any): IEstimate;\n  pdf?(params: any): ng.resource.IResource<IEstimate>;\n  csv?(params: any): ng.resource.IResource<IEstimate>;\n  email?(params: any): ng.resource.IResource<IEstimate>;\n  transformRequest?(estimate: IEstimate): any;\n  ms_upload(...args: any[]): ng.resource.IResource<boolean>;\n}\n\nexport interface ISalesTaxable {\n  tax_rate: number;\n  taxable_amount: number;\n  default_taxable_amount: string;\n  tax_total: number;\n}\n\nexport interface IDefaults {\n  options: { string: IDefaultOption };\n}\n\nexport interface IDefaultOption {\n  option_group_uuid: string;\n  quantity: number;\n}\n\nexport interface IEstimateMarkups {\n  product_markup: number;\n  labor_markup: number;\n}\n\nexport class EstimatePrototype {\n  public classy: string;\n  public id: number;\n  public activated_price_list_id: number;\n  public customer_name: string;\n  public kind: \"default\" | \"inspection\" | \"survey\";\n  public calc_method: \"standard\" | \"estimate_group\";\n  public name: string;\n  public org_uid: string;\n  public uid: string;\n  // noinspection JSUnusedGlobalSymbols\n  public customer_phone: string;\n  // noinspection JSUnusedGlobalSymbols\n  public payment_term_id: number;\n  public payment_terms: PaymentTermRecord;\n  public estimated_start: Date;\n  public estimated_end: Date;\n  public groups: IEstimateGroup[];\n  public discounts: IDiscount[];\n  public finance_options: EstimateFinanceOptionRecord[];\n  public job_id: number;\n  public job: IJob;\n  public discount: number;\n  public subtotal: number;\n  public total: number;\n  public labor_total: number;\n  public product_total: number;\n  public discountable_total: number;\n  public created_at: Date;\n  public updated_at: Date;\n  public line_items_count?: number;\n  public tax_rate = 0.0;\n  public tax_total = 0.0;\n  public taxable_amount = 0.0;\n  public default_taxable_amount: string;\n  public defaults: IDefaults;\n  public compare: boolean;\n  public product_markup: number;\n  public labor_markup: number;\n\n  public $saveOrCreate(params?: any, callback?) {\n    if (this.id <= 0 || (this.id as any as string) === \"new\") {\n      return (this as any).$create(params, callback);\n    } else {\n      return (this as any).$save(params, callback);\n    }\n  }\n\n  public estimateGroups(included: boolean) {\n    return _.filter(this.existingGroups(), (g) => {\n      return g.included === included;\n    });\n  }\n\n  public existingGroups() {\n    return _.filter(this.groups, (g) => {\n      return g._destroy !== true;\n    });\n  }\n\n  public createGroup(params) {\n    if (!_.isArray(this.groups)) {\n      this.groups = [];\n    }\n    if (!params[\"id\"]) {\n      params[\"id\"] = this.getId();\n    }\n    if (!params[\"sort_order\"]) {\n      params[\"sort_order\"] = getNextSortOrder(this.groups);\n    }\n    if (params[\"rooms\"]) {\n      params.room_estimations = params.rooms.map((r) => ({\n        room_id: r.id,\n        estimate_group_id: params.id,\n      }));\n      delete params.rooms;\n    }\n    params[\"discounts\"] = [];\n    const estimate_group = new EstimateGroup(this as any as IEstimate, params);\n    estimate_group.payment_terms = paymentTermsFromJSON({});\n    this.groups.push(estimate_group);\n    this.orderGroups();\n    return estimate_group;\n  }\n\n  public cloneSalesTax(): ISalesTaxable {\n    return {\n      tax_rate: this.tax_rate,\n      taxable_amount: this.taxable_amount,\n      default_taxable_amount: this.default_taxable_amount,\n      tax_total: this.tax_total,\n    };\n  }\n\n  public orderGroups() {\n    this.groups = _.chain(this.groups)\n      .groupBy((g) => {\n        return g.included;\n      })\n      .pairs()\n      .sortBy((a) => {\n        return (a[0] as any as string) === \"true\" ? 0 : 1;\n      })\n      .map((a) => {\n        return a[1];\n      })\n      .flatten()\n      .each((g: IEstimateGroup, idx: number) => {\n        g.sort_order = idx;\n      })\n      .value();\n  }\n\n  public lineItems(groups: IEstimateGroup[] = this.groups): IEstimateLineItem[] {\n    return _.chain(groups)\n      .select((g: IEstimateGroup) => {\n        return !g._destroy;\n      })\n      .map((g: IEstimateGroup) => {\n        return g.line_items;\n      })\n      .flatten()\n      .select((li: IEstimateLineItem) => {\n        return !li._destroy;\n      })\n      .value();\n  }\n\n  public hidden_line_items(): boolean {\n    const idx = _.findIndex(this.lineItems(), (li) => {\n      return !li.isVisible(false);\n    });\n    return idx >= 0;\n  }\n\n  public decycleToJSON(): any {\n    return JSON.decycle(this);\n  }\n\n  public toEstimateDataJSON(): IEstimateData {\n    const data = this.decycleToJSON();\n\n    if (this.payment_terms) {\n      data.payment_terms = paymentTermsToJSON(this.payment_terms);\n    }\n\n    if (this.groups) {\n      _.each(this.groups, (group, idx) => {\n        data.groups[idx] = group.decycleToJSON();\n      });\n    }\n\n    if (this.finance_options) {\n      _.each(this.finance_options, (fo: EstimateFinanceOptionRecord, index) => {\n        data.finance_options[index] = estimateFinanceOptionsToJSON(fo);\n      });\n    }\n\n    return data;\n  }\n\n  public updateSalesTax(salesTax: ISalesTaxable): void {\n    if (!_.isNull(salesTax.tax_rate) && !_.isUndefined(salesTax.tax_rate)) {\n      this.tax_rate = salesTax.tax_rate;\n    }\n    if (!_.isNull(salesTax.taxable_amount) && !_.isUndefined(salesTax.taxable_amount)) {\n      this.taxable_amount = salesTax.taxable_amount;\n    }\n    if (!_.isNull(salesTax.default_taxable_amount) && !_.isUndefined(salesTax.default_taxable_amount)) {\n      this.default_taxable_amount = salesTax.default_taxable_amount;\n    }\n\n    this.updateTotal();\n  }\n\n  public updateTaxTotal(): number {\n    if (this.taxable_amount && this.tax_rate) {\n      this.tax_total = roundToDecimals(this.taxable_amount * (this.tax_rate / 100.0), -2);\n    } else {\n      this.tax_total = 0.0;\n    }\n\n    return this.tax_total;\n  }\n\n  public updateTotal(): number {\n    const totals = _.chain(this.existingGroups())\n      .select((g: IEstimateGroup) => {\n        return g.included;\n      })\n      .map((g: IEstimateGroup) => {\n        return g.line_items;\n      })\n      .flatten()\n      .compact()\n      .reduce(\n        (sum: any, item: IEstimateLineItem) => {\n          if (item._destroy) {\n            return sum;\n          }\n          if (item.product_id) {\n            const val = validateLineItem(useState(), this, item);\n            item.validation_results = val.validation_results;\n            item.validated = val.validated;\n          }\n          sum.total = roundToDecimals(sum.total + item.ext_price, -2);\n          sum.labor = sum.labor + roundToDecimals(item.quantity * item.labor_price, -2);\n          sum.product = sum.product + roundToDecimals(item.quantity * item.product_price, -2);\n          if (isDiscountable(item)) {\n            sum.discountable = roundToDecimals(sum.discountable + item.ext_price, -2);\n          }\n          _.each(item.options, (option: IEstimateLineItemOption) => {\n            if (option._destroy || option.pog_type === \"cost\") {\n              return;\n            }\n            option.calculate(this);\n            sum.total = roundToDecimals(sum.total + option.ext_price, -2);\n            sum.labor = sum.labor + option.calculateLaborPrice();\n            sum.product = sum.product + option.calculateProductPrice();\n            if (isDiscountable(item)) {\n              sum.discountable = sum.discountable + option.ext_price;\n            }\n          });\n\n          return sum;\n        },\n        { total: 0, labor: 0, product: 0, discountable: 0 },\n      )\n      .value();\n    this.subtotal = totals.total;\n    this.labor_total = totals.labor;\n    this.product_total = totals.product;\n    this.discountable_total = totals.discountable;\n\n    this.discount = _.reduce(\n      this.discounts,\n      (memo: number, discount: IDiscount) => {\n        this.discountable_total = discount.perform(this.discountable_total);\n        return memo + discount.calculated;\n      },\n      0,\n    );\n\n    // Discounts Come Off Product Total\n    this.product_total = this.product_total - this.discount;\n\n    switch (this.default_taxable_amount) {\n      case \"product\":\n        this.taxable_amount = this.product_total;\n        break;\n      case \"labor\":\n        this.taxable_amount = this.labor_total;\n        break;\n      case \"product_labor\":\n        this.taxable_amount = this.product_total + this.labor_total;\n        break;\n    }\n\n    this.taxable_amount = _.max([this.taxable_amount, 0]);\n\n    this.updateTaxTotal();\n\n    this.total = roundToDecimals(this.product_total + this.labor_total + this.tax_total, -2);\n\n    if (this.payment_terms) {\n      this.payment_terms = memoizedCalculatePaymentTerms(this.payment_terms, this.total);\n    }\n\n    this.updateEstimateFinanceOptionPayments();\n\n    _.each(this.existingGroups(), (g) => {\n      g.updateTotal();\n    });\n\n    return this.total;\n  }\n\n  public updateEstimateFinanceOptionPayments(): void {\n    if (this.finance_options) {\n      const financeOptionIds = List(_.pluck(this.finance_options, \"finance_option_id\"));\n      const financedAmount = this.payment_terms.financed_amount;\n      dispatch(\n        estimateActions.AsyncActions.calculateCalculatedFinancing(\n          this as unknown as IEstimate,\n          financedAmount,\n          financeOptionIds,\n          false,\n        ),\n      );\n      _.each(this.finance_options, (fo, index) => {\n        this.finance_options[index] = useSelector((state) =>\n          updateEstimateFinanceOptionPayments(state, {\n            estimateFinanceOptionId: fo.id,\n            financedAmount,\n          }),\n        );\n      });\n    }\n  }\n\n  public getId(): number {\n    const firstId = -1;\n\n    const currentMin = _.chain(this.groups).pluck(\"id\").min().value();\n\n    return _.min([firstId, currentMin - 1]);\n  }\n\n  public getSortOrder(): number {\n    const firstSO = 0;\n\n    const currentMax = _.chain(this.groups).pluck(\"sort_order\").max().value();\n\n    return _.max([firstSO, currentMax + 1]);\n  }\n\n  public getLineItemId(): number {\n    const firstId = -1;\n\n    const currentMin = _.chain(this.lineItems()).pluck(\"id\").min().value();\n\n    return _.min([firstId, currentMin - 1]);\n  }\n\n  public editing(): boolean {\n    return _.any(this.lineItems(), (lineItem) => {\n      return lineItem.editing;\n    });\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/estimates/:id\";\n\n  const requestTransform = (estimate: IEstimate): string => {\n    const data: any = JSON.parse(angular.toJson(estimate.decycleToJSON()));\n    data.groups_attributes = data.groups;\n    data.estimate_finance_options_attributes = data.finance_options;\n\n    if (data.estimated_start instanceof Date) {\n      data.estimated_start = (data.estimated_start as Date).toISOString();\n    }\n    if (typeof data.estimated_start === \"string\") {\n      data.estimated_start = data.estimated_start.split(\"T\")[0];\n    }\n\n    if (data.estimated_end instanceof Date) {\n      data.estimated_end = (data.estimated_end as Date).toISOString();\n    }\n    if (typeof data.estimated_start === \"string\") {\n      data.estimated_end = data.estimated_end.split(\"T\")[0];\n    }\n\n    if (data.job) {\n      delete data.job;\n    }\n\n    // handle line items that have moved groups\n    _.each(estimate.lineItems(), (li) => {\n      if (!li.orig_estimate_group_id || li.orig_estimate_group_id === li.estimate_group_id) {\n        return;\n      }\n\n      const originalGroup: any = _.find(data.groups_attributes, (ga: any) => {\n        return li.orig_estimate_group_id === ga.id;\n      });\n      let groupDeleteIndex = -1;\n      _.find(data.groups_attributes, (ga: any, index: number) => {\n        groupDeleteIndex = index;\n        return li.estimate_group_id === ga.id;\n      });\n      if (originalGroup && groupDeleteIndex >= 0) {\n        originalGroup.line_items.push(li.decycleToJSON());\n        data.groups_attributes[groupDeleteIndex].line_items = _.filter(\n          data.groups_attributes[groupDeleteIndex].line_items,\n          (liData: any) => {\n            return liData.id !== li.id;\n          },\n        );\n      }\n    });\n\n    _.each(data.groups_attributes, (ga, index) => {\n      data.groups_attributes[index] = EstimateGroup.transformRequest(ga, estimate.groups[index]);\n    });\n\n    _.each(estimate.finance_options, (fo: EstimateFinanceOptionRecord, index) => {\n      data.estimate_finance_options_attributes[index] = financeOptionCleanProps(fo.toJS());\n    });\n\n    delete data.groups;\n    delete data.finance_options;\n    delete data.job;\n    delete data.url;\n    delete data.id;\n    delete data.line_items_count;\n    delete data.$promise;\n    delete data.$resolved;\n\n    if (estimate.payment_terms) {\n      data.payment_terms = paymentTermsToJSON(estimate.payment_terms);\n    }\n\n    if (estimate.discounts && estimate.discounts.length > 0) {\n      data.discounts = _.map(estimate.discounts, (d: IDiscount) => {\n        return d.toJsonObj();\n      });\n    }\n\n    const requestData = { estimate: data };\n    if (estimate[\"include\"]) {\n      requestData[\"include\"] = estimate[\"include\"];\n    }\n\n    return JSON.stringify(requestData);\n  };\n\n  const responseSingleTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IEstimate => {\n    if (status < 200 || status > 299) {\n      return new Estimate({});\n    }\n\n    const data = JSON.parse(response);\n    return Estimate.fromJSON(data.estimate);\n  };\n\n  //noinspection TypeScriptValidateTypes\n  const Estimate: IEstimateResource = <IEstimateResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: responseSingleTransform,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: BaseConfig.BASE_URL + \"/api/v1/jobs/:job_id/estimates\",\n        params: {\n          job_id: \"@job_id\",\n        },\n        transformRequest: requestTransform,\n        transformResponse: responseSingleTransform,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        url: BaseConfig.BASE_URL + \"/api/v1/jobs/:job_id/estimates/:id\",\n        params: {\n          job_id: \"@job_id\",\n        },\n        transformRequest: requestTransform,\n        transformResponse: responseSingleTransform,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        url: BaseConfig.BASE_URL + \"/api/v1/jobs/:job_id/estimates/:id\",\n        params: {\n          job_id: \"@job_id\",\n        },\n      },\n      pattern: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \".pattern\",\n        transformResponse: function (data: string, headers: ng.IHttpHeadersGetter, status: number) {\n          if (status < 200 || status > 299) {\n            return { response: null };\n          }\n\n          return JSON.parse(data);\n        },\n        isArray: false,\n      },\n      pdf: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \".pdf\",\n        headers: {\n          accept: \"application/pdf\",\n        },\n        params: {\n          doc_type: \"@doc_type\",\n          options: \"@options\",\n        },\n        paramSerializer: \"$httpParamSerializerJQLike\",\n        responseType: \"arraybuffer\",\n        transformResponse: function (data: string, headers: ng.IHttpHeadersGetter, status: number) {\n          if (status < 200 || status > 299) {\n            return { response: null };\n          }\n\n          let pdf;\n          if (data) {\n            pdf = new Blob([data], {\n              type: \"application/pdf\",\n            });\n          }\n          return {\n            response: pdf,\n          };\n        },\n      },\n      csv: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \".csv\",\n        headers: {\n          accept: \"text/csv\",\n        },\n        params: {\n          csv_type: \"@csv_type\",\n        },\n        responseType: \"arraybuffer\",\n        transformResponse: function (data: string, headers: ng.IHttpHeadersGetter, status: number) {\n          if (status < 200 || status > 299) {\n            return { response: null };\n          }\n\n          let csv;\n          if (data) {\n            csv = new Blob([data], {\n              type: \"text/csv\",\n            });\n            return {\n              response: csv,\n            };\n          }\n        },\n      },\n      email: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/email\",\n        params: {\n          doc_type: \"@doc_type\",\n        },\n        transformRequest: function (data) {\n          return JSON.stringify({\n            emails: data.emails,\n            doc_type: data.doc_type,\n            message: data.message,\n            options: data.options,\n          });\n        },\n      },\n      ms_upload: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/ms_upload\",\n        params: {\n          doc_type: \"@doc_type\",\n        },\n        transformRequest: function (data) {\n          return JSON.stringify({ doc_type: data.doc_type });\n        },\n      },\n    },\n  );\n\n  Estimate.fromJSON = (data: any): IEstimate => {\n    data.classy = \"Estimate\";\n    if (data.estimated_start && typeof data.estimated_start === \"string\") {\n      const timezoneDate = new Date(data.estimated_start);\n      data.estimated_start = new Date(\n        `${data.estimated_start}T00:00:00.000${getTimezoneString(timezoneDate.getTimezoneOffset())}`,\n      );\n    }\n    if (data.estimated_end && typeof data.estimated_end === \"string\") {\n      const timezoneDate = new Date(data.estimated_end);\n      data.estimated_end = new Date(\n        `${data.estimated_end}T00:00:00.000${getTimezoneString(timezoneDate.getTimezoneOffset())}`,\n      );\n    }\n    if (data.created_at) {\n      data.created_at = new Date(data.created_at as string);\n    } else {\n      data.created_at = new Date();\n    }\n    if (data.updated_at) {\n      data.updated_at = new Date(data.updated_at as string);\n    } else {\n      data.updated_at = new Date();\n    }\n\n    if (data.job) {\n      data.job = resources.Job.fromJSON(data.job);\n    }\n    if (data.payment_terms) {\n      data.payment_terms = paymentTermsFromJSON(data.payment_terms);\n    } else {\n      data.payment_terms = paymentTermsFromJSON({});\n    }\n\n    if (!data.calc_method) {\n      data.calc_method = \"standard\";\n    }\n\n    if (data.finance_options) {\n      _.each(data.finance_options, (fo: IEstimateFinanceOptionData, index) => {\n        data.finance_options[index] = efoFromJSON(fo);\n      });\n    } else {\n      data.finance_options = [];\n    }\n\n    if (!data.defaults) {\n      data.defaults = { options: {} as { string: IDefaultOption } };\n    }\n\n    data.total = parseFloatSafe(data.total);\n    data.subtotal = parseFloatSafe(data.subtotal);\n    data.discount = parseFloatSafe(data.discount);\n\n    const estimate = new Estimate(data);\n\n    const doOrder = !_.any(estimate.groups, (item: IEstimateGroup) => {\n      return !!item.sort_order;\n    });\n\n    _.each(estimate.groups, (g, index) => {\n      estimate.groups[index] = EstimateGroup.fromJSON(estimate, g);\n\n      if (doOrder) {\n        estimate.groups[index].sort_order = index;\n      }\n\n      _.each(estimate.groups[index].line_items, (li: IEstimateLineItem) => {\n        _.each(li.images, (image: IImage, index) => {\n          li.images[index] = resources.Image.fromJSON(image);\n        });\n        _.each(li.documents, (doc: IDoc, index) => {\n          li.documents[index] = resources.Doc.fromJSON(doc);\n        });\n      });\n    });\n\n    if (!estimate.discounts) {\n      estimate.discounts = [];\n    } else if (_.isArray(estimate.discounts)) {\n      estimate.discounts = _.map(estimate.discounts, (d: any) => {\n        return Discount.fromJSON(d);\n      });\n    }\n\n    return estimate;\n  };\n\n  Estimate.clone = (estimate: IEstimate): IEstimate => {\n    return Estimate.fromJSON(estimate.decycleToJSON());\n  };\n\n  Estimate.createNew = (data: any): IEstimate => {\n    const newE = new Estimate(data);\n    if (!newE.payment_terms) {\n      newE.payment_terms = paymentTermsFromJSON({});\n    }\n\n    if (!newE.discounts) {\n      newE.discounts = [];\n    }\n\n    if (!newE.groups) {\n      newE.groups = [];\n    }\n\n    if (!newE.finance_options) {\n      newE.finance_options = [];\n    }\n\n    newE.defaults = { options: {} as { string: IDefaultOption } };\n\n    newE.kind = \"default\";\n    newE.labor_markup = 0;\n    newE.product_markup = 0;\n    newE.calc_method = \"standard\";\n\n    return newE;\n  };\n\n  Estimate.transformRequest = (estimate: IEstimate) => {\n    return requestTransform(estimate);\n  };\n\n  hiddenExtend(Estimate.prototype, EstimatePrototype.prototype);\n\n  Estimate.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Estimate;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n\nexport const AddLineItemOption = (\n  eli: IEstimateLineItem,\n  option: ProductOptionRecord,\n  optionGroup: ProductOptionGroupRecord,\n  quantity = 0,\n  estimate: IEstimate,\n): IEstimateLineItem => {\n  if (optionGroup.selection_mode === \"single\") {\n    const elio = eli.existingSingleSelectOption(optionGroup.id);\n    if (elio !== null) {\n      eli = RemoveLineItemOption(eli, elio.product_option_uuid);\n    }\n  }\n\n  const cmd_po = new AddEstimateLineItemOptionCmd(option, optionGroup, eli, estimate);\n  cmd_po.execute(quantity);\n\n  return eli;\n};\n\nexport const RemoveLineItemOption = (eli: IEstimateLineItem, option_uuid: string): IEstimateLineItem => {\n  const toRemove = eli.existingEliForProductOption(option_uuid);\n\n  if (toRemove.id && toRemove.id > 0) {\n    toRemove._destroy = true;\n  } else {\n    eli.options = _.select(eli.options, (elio: IEstimateLineItemOption) => {\n      return elio._destroy === true || elio.product_option_uuid !== option_uuid;\n    });\n  }\n\n  return eli;\n};\n","import * as React from \"react\";\n\nexport interface IRadioCircleProps {\n  checked: boolean;\n  name: string;\n  id: string;\n  disabled?: boolean;\n  column?: boolean;\n  color?: string;\n  onChange?: (value: boolean) => void;\n}\n\nexport const RadioCircle: React.FC<IRadioCircleProps> = ({ checked, name, id, disabled, column, color, onChange }) => {\n  const handleChange = () => {\n    if (onChange) {\n      onChange(!checked);\n    }\n  };\n\n  let className = \"check\";\n  let inputClassName = \"check-circle\";\n\n  if (column) {\n    className = `${className} col-sm-1 center-checkbox`;\n  }\n  if (color) {\n    inputClassName = `${inputClassName} ${color}`;\n  }\n\n  return (\n    <div className={className}>\n      <label>\n        <input\n          type=\"radio\"\n          className={inputClassName}\n          id={id}\n          name={name}\n          checked={checked}\n          disabled={disabled}\n          onChange={handleChange}\n        />\n        <span />\n      </label>\n    </div>\n  );\n};\n","import * as React from \"react\";\n\nexport interface ICheckCircleProps {\n  checked: boolean;\n  disabled?: boolean;\n  column?: boolean;\n  onChange?: (value: boolean) => void;\n}\n\nexport const CheckCircle: React.FC<ICheckCircleProps> = ({ checked, disabled, column, onChange }) => {\n  const handleChange = () => {\n    if (onChange) {\n      onChange(!checked);\n    }\n  };\n\n  let className = \"check\";\n  if (column) {\n    className = `${className} center-checkbox justify-content-start`;\n  }\n\n  return (\n    <div className={className}>\n      <label>\n        <input type=\"checkbox\" className=\"check-circle\" checked={checked} disabled={disabled} onChange={handleChange} />\n        <span className=\"checkbox-span\" />\n      </label>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { Row, Col, Form } from \"react-bootstrap\";\nimport { List } from \"immutable\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { IEstimateLineItem, IsOptionSelected } from \"app/src/Models/EstimateLineItem\";\nimport { CheckCircle } from \"app2/src/components/JobTabs/InspectionTab/CheckCircle\";\n\ninterface IRadioVerticalProps {\n  options: List<ProductOptionRecord>;\n  lineItem: IEstimateLineItem;\n  onChange: (po: ProductOptionRecord, selected: boolean) => void;\n  disabled?: boolean;\n}\n\nexport const RadioVertical: React.FC<IRadioVerticalProps> = ({ lineItem, onChange, options, disabled }) => {\n  return (\n    <Row>\n      <Col sm={12}>\n        {options.map((po, idx) => {\n          return (\n            <Row key={idx}>\n              <Col sm={12}>\n                <Form.Group className=\"row\">\n                  <CheckCircle\n                    column\n                    onChange={(value) => onChange(po, value)}\n                    checked={IsOptionSelected(lineItem, po)}\n                    disabled={disabled}\n                  />\n                  <Form.Label column sm=\"10\" className=\"line-item-label\">\n                    {po.name}\n                  </Form.Label>\n                </Form.Group>\n              </Col>\n            </Row>\n          );\n        })}\n      </Col>\n    </Row>\n  );\n};\n","import { ICustomProduct } from \"app/src/Models/Product\";\nimport { IEstimateLineItem, EstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { ICommand } from \"app/src/Commands/Command\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\n\nexport class AddEstimateLineItemCmd implements ICommand {\n  public lineItem: IEstimateLineItem;\n  constructor(\n    public estimate: IEstimate,\n    public product: any,\n    public group: IEstimateGroup,\n    public EstimatorService: EstimatorService,\n  ) {}\n\n  public execute(): boolean {\n    this.lineItem = new EstimateLineItem(this.group);\n\n    if (!_.isString(this.product)) {\n      if (this.product.id) {\n        this.lineItem.quantity = this.EstimatorService.addMeasurementLink(\n          this.product,\n          undefined,\n          undefined,\n          this.group,\n        );\n        this.lineItem.setProduct(this.estimate.activated_price_list_id, this.product);\n        this.lineItem.calculate(this.estimate);\n      } else {\n        this.lineItem.setCustomProduct(<ICustomProduct>this.product);\n        this.lineItem.calculate(this.estimate);\n      }\n    } else {\n      this.lineItem.name = \"\";\n      this.lineItem.description = \"\";\n      this.lineItem.quantity = 1;\n      this.lineItem.price = 0;\n      this.lineItem.base_product_price = 0;\n      this.lineItem.base_labor_price = 0;\n      this.lineItem.markupable = \"yes\";\n      this.lineItem.ext_price = 0;\n    }\n\n    const max_line_item = _.max(this.group.line_items, (li) => {\n      return li.sort_order;\n    });\n    if ((max_line_item as any as number) === -Infinity) {\n      this.lineItem.sort_order = 0;\n    } else {\n      this.lineItem.sort_order = max_line_item.sort_order + 1;\n    }\n\n    this.lineItem.id = this.estimate.getLineItemId();\n    this.lineItem.newly_added = true;\n    this.lineItem.estimateGroup = this.group;\n\n    this.group.line_items.push(this.lineItem);\n    return true;\n  }\n}\n","import { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { AddEstimateLineItemCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemCmd\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IImage } from \"app/src/Models/Image\";\nimport { cachedRootProducts, cachedProducts } from \"app2/src/selectors/product.selectors\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { ProductRecord } from \"app2/src/records/Product\";\n\nclass InspectionService {\n  public clearEstimate(estimate: IEstimate): IEstimate {\n    estimate.groups = [];\n    return estimate;\n  }\n\n  public setupEstimate(estimate: IEstimate, EstimatorService: EstimatorService): IEstimate {\n    const rootProducts = cachedRootProducts(StoreRegistry.getStore().getState(), {\n      activatedPriceListId: estimate.activated_price_list_id,\n    });\n    rootProducts.map((p: ProductRecord) => {\n      const group: IEstimateGroup = estimate.createGroup({ name: p.name, included: true });\n\n      const children = cachedProducts(StoreRegistry.getStore().getState(), {\n        activatedPriceListId: estimate.activated_price_list_id,\n        productIds: p.children_ids,\n      });\n\n      children.map((child) => {\n        const cmd = new AddEstimateLineItemCmd(estimate, child, group, EstimatorService);\n        cmd.execute();\n        EstimatorService.addDefaultOptions(cmd.lineItem, child);\n      });\n    });\n\n    EstimatorService.checkValidations();\n    EstimatorService.resetEstimateState();\n\n    return estimate;\n  }\n\n  public setGroupVisibility(estimate: IEstimate, group: IEstimateGroup, prop: \"a\" | \"b\", value: boolean) {\n    const edited_group = _.find(estimate.groups, (g: IEstimateGroup) => {\n      return g.id === group.id;\n    });\n    _.each(edited_group?.line_items, (lineItem: IEstimateLineItem) => {\n      this.setVisibility(lineItem, prop, value);\n    });\n\n    return estimate;\n  }\n\n  public checkGroupVisibility(group: IEstimateGroup, prop: \"a\" | \"b\") {\n    let it = true;\n    _.each(group.line_items, (lineItem) => {\n      it = it && (lineItem.visibility === prop || lineItem.visibility === \"ab\");\n    });\n\n    return it;\n  }\n\n  public setVisibility(lineItem: IEstimateLineItem, prop: \"a\" | \"b\", value: boolean) {\n    if (value === true) {\n      if (prop === \"a\") {\n        if (lineItem.visibility === \"b\" || lineItem.visibility === \"ab\") {\n          lineItem.visibility = \"ab\";\n        } else {\n          lineItem.visibility = \"a\";\n        }\n      }\n      if (prop === \"b\") {\n        if (lineItem.visibility === \"a\" || lineItem.visibility === \"ab\") {\n          lineItem.visibility = \"ab\";\n        } else {\n          lineItem.visibility = \"b\";\n        }\n      }\n    } else {\n      if (prop === \"a\") {\n        if (lineItem.visibility === \"ab\") {\n          lineItem.visibility = \"b\";\n        } else {\n          lineItem.visibility = \"never\";\n        }\n      }\n      if (prop === \"b\") {\n        if (lineItem.visibility === \"ab\") {\n          lineItem.visibility = \"a\";\n        } else {\n          lineItem.visibility = \"never\";\n        }\n      }\n    }\n\n    return lineItem;\n  }\n\n  public setInclusion(image: IImage, include: boolean): IImage {\n    if (include) {\n      image.display = \"contract\";\n    } else {\n      image.display = \"do_not_display\";\n    }\n\n    return image;\n  }\n\n  public setGroupIncluded(estimate: IEstimate, group: IEstimateGroup) {\n    const edited_group = _.find(estimate.groups, (g: IEstimateGroup) => {\n      return g.id === group.id;\n    });\n    edited_group.included = !edited_group.included;\n\n    if (!edited_group.included) {\n      edited_group.line_items.forEach((lineItem: IEstimateLineItem) => {\n        lineItem.validation_results = [];\n        lineItem.validated = true;\n      });\n    }\n    return estimate;\n  }\n}\n\nexport default new InspectionService();\n","import * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Modal, Button } from \"react-bootstrap\";\nimport { ImageRecord, getUrl } from \"app2/src/records/Image\";\nimport { List } from \"immutable\";\n\nexport interface ImagePickerModalProps {\n  show: boolean;\n  closeHandler: () => void;\n  images: List<ImageRecord>;\n  selectionHandler: (images: List<ImageRecord>) => void;\n  selectMultiple: boolean;\n}\n\nexport interface ImagePickerModalState {\n  show: boolean;\n  images: List<ImageRecord>;\n  selectedImages: List<ImageRecord>;\n}\n\nexport const useSelectedImages = (\n  images: List<ImageRecord>,\n  selectMultiple: boolean,\n): [List<ImageRecord>, (ImageRecord) => void, () => {}] => {\n  const [selectedImages, setSelectedImages] = useState(List<ImageRecord>());\n\n  const clearSelectedImages = () => setSelectedImages(List());\n  const setSelectedImage = (image: ImageRecord) => {\n    // we dont want to select more than one image if we have said not to\n    // but we should check to make sure we aren't deselecting the single\n    // image we selected first\n    if (selectMultiple === false && selectedImages.size === 1) {\n      if (selectedImages.map((i) => i.id).contains(image.id)) clearSelectedImages();\n      return;\n    }\n    const selectedImgIdx = selectedImages.indexOf(image);\n\n    // if we select an already selected image, we should remove it\n    // otherwise, go ahead and actually select it\n    if (selectedImages.map((i) => i.id).contains(image.id)) {\n      setSelectedImages((curImages) => curImages.filter((i) => i.id !== image.id));\n    } else {\n      setSelectedImages((curImages) => List([...curImages, image]));\n    }\n  };\n  return [\n    selectedImages as List<ImageRecord>,\n    setSelectedImage as (ImageRecord) => void,\n    clearSelectedImages as () => {},\n  ];\n};\n\nexport const ImagePickerModal: React.FunctionComponent<ImagePickerModalProps> = (props) => {\n  const [show, setShow] = useState(props.show);\n  const [selectedImages, setSelectedImage, clearSelectedImages] = useSelectedImages(List(), props.selectMultiple);\n\n  useEffect(() => {\n    if (props.show === true && show === false) {\n      setShow(true);\n    }\n  }, [props.show, show]);\n\n  const handleClose = () => {\n    clearSelectedImages();\n    props.closeHandler();\n    setShow(false);\n  };\n\n  const handleSelection = () => {\n    if (selectedImages.size > 0) {\n      props.selectionHandler(selectedImages);\n    }\n    handleClose();\n  };\n\n  const borderClass = (image) =>\n    selectedImages.map((i) => i.id).contains(image.id) ? \"selected-image\" : \"unselected-image\";\n\n  return (\n    <Modal show={show} onHide={handleClose} size=\"xl\">\n      <Modal.Body className=\"overflow-y-scroll\">\n        <div className=\"grid-row\">\n          {props.images.map((image, idx) => (\n            <a href=\"#\" key={idx} onClick={() => setSelectedImage(image)} className=\"selectable-image\">\n              <img\n                // @ts-ignore\n                src={getUrl(image, \"small\")}\n                className={borderClass(image)}\n              />\n              <h3>{image.name}</h3>\n            </a>\n          ))}\n        </div>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button onClick={handleSelection}>Select Image{selectedImages.size === 1 ? \"\" : \"s\"}</Button>\n        <Button onClick={handleClose}>Close</Button>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n","import * as React from \"react\";\nimport { FormControl, Card, Accordion, Row, Col, Form } from \"react-bootstrap\";\nimport { IEstimateLineItem, IsOptionSelected } from \"app/src/Models/EstimateLineItem\";\nimport { AddLineItemOption, IEstimate, RemoveLineItemOption } from \"app/src/Models/Estimate\";\nimport { RadioCircle } from \"app2/src/components/JobTabs/InspectionTab/RadioCircle\";\nimport { RadioVertical } from \"app2/src/components/JobTabs/InspectionTab/RadioVertical\";\nimport inspectionService from \"../Inspection.service\";\nimport Files from \"react-files\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { Nullable } from \"app2/src/records\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { IImage } from \"app/src/Models/Image\";\nimport { ImagePickerModal } from \"app2/src/components/Common/ImagePickerModal\";\nimport { useSelector } from \"react-redux\";\nimport { List } from \"immutable\";\nimport { RootState } from \"app2/src/reducers\";\nimport { cachedProductOptionGroups } from \"app2/src/selectors/productOptionGroup.selectors\";\nimport { cachedProductOptions } from \"app2/src/selectors/productOption.selectors\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport { validationMessage } from \"app/src/Estimator/ValidationService\";\n\nexport interface IInspectionItemProps {\n  activatedPriceListId: number;\n  selectedEventKey: Nullable<string>;\n  lineItem: IEstimateLineItem;\n  queue: IFileQueueFactory;\n  triggerExpand: (key: string) => void;\n  check: any;\n  estimate: IEstimate;\n  isIncluded: boolean;\n  checkValidations: any;\n  ConfirmDialog: IConfirmDialog;\n}\n\nconst InspectionItem: React.FC<IInspectionItemProps> = ({\n  selectedEventKey,\n  triggerExpand,\n  check,\n  activatedPriceListId,\n  estimate,\n  isIncluded,\n  checkValidations,\n  ConfirmDialog: ConfirmDialogService,\n  lineItem: initialLineItem,\n  queue,\n}) => {\n  // State\n  const [lineItem] = React.useState<IEstimateLineItem>(initialLineItem);\n  const [, forceUpdate] = React.useReducer((x) => x + 1, 0);\n  const [showImagePickerModal, setShowImagePickerModal] = React.useState(false);\n\n  // Selectors\n  const optionGroups = useSelector((state: RootState) =>\n    cachedProductOptionGroups(state, {\n      activatedPriceListId,\n      productId: initialLineItem.product_id,\n    }),\n  );\n  const images = useSelector((state: RootState) => state.getIn([\"components\", \"common\", \"currentJob\", \"images\"]));\n\n  // Variables/Logic\n  const conditionGroup = optionGroups.find((og) => og.name === \"Answers\");\n  const conditionGroupOptions = conditionGroup\n    ? cachedProductOptions(StoreRegistry.getStore().getState(), {\n        activatedPriceListId,\n        productOptionIds: conditionGroup.option_ids,\n      })\n    : List<ProductOptionRecord>();\n  const goodConditionPo = conditionGroupOptions.find((o) => o.name === \"Satisfactory\");\n  const issuesGroup = optionGroups.find((og) => og.name === \"Needs Attention\");\n  const issuesGroupOptions = issuesGroup\n    ? cachedProductOptions(StoreRegistry.getStore().getState(), {\n        activatedPriceListId,\n        productOptionIds: issuesGroup.option_ids,\n      })\n    : List<ProductOptionRecord>();\n\n  const showValidationDialog = (event: React.MouseEvent<HTMLDivElement>) => {\n    event.stopPropagation();\n    validationMessage(lineItem.validation_results, ConfirmDialogService);\n  };\n\n  const inclusionChanged = (prop: \"a\" | \"b\", value: boolean) => {\n    inspectionService.setVisibility(lineItem, prop, value);\n    checkValidations();\n    check();\n    forceUpdate();\n  };\n\n  const onFilesUpload = (files) => {\n    if (files.length > 0) {\n      queue.getObject(files[0], lineItem).then(() => {\n        checkValidations();\n        check();\n        forceUpdate();\n        queue.setQueue();\n      });\n    }\n  };\n\n  const closeModal = () => {\n    setShowImagePickerModal(false);\n  };\n\n  const addImageToItem = async (images) => {\n    await Promise.all(\n      images.map(async (image) => {\n        const imgBlob = await fetch(image.file.url).then((resp) => resp.blob());\n        const file = new File([imgBlob], image.name, { type: imgBlob.type });\n        onFilesUpload([file]);\n      }),\n    );\n    checkValidations();\n  };\n\n  const deletePhoto = (image: IImage) => {\n    if (image.id >= 0) {\n      image._destroy = true;\n    } else {\n      lineItem.images = lineItem.images.filter((i) => i.id !== image.id);\n    }\n\n    checkValidations();\n    check();\n    forceUpdate();\n  };\n\n  const onFilesError = (error, file) => {\n    console.error(error);\n  };\n\n  if (!lineItem) {\n    return null;\n  }\n\n  return (\n    <Card className={`inspection-item${lineItem.validated ? \"\" : \" line-item-warning\"}`}>\n      <ImagePickerModal\n        show={showImagePickerModal}\n        closeHandler={closeModal}\n        selectionHandler={addImageToItem}\n        selectMultiple={true}\n        images={images}\n      />\n      <Accordion.Toggle as={Card.Header} eventKey={lineItem.id.toString()}>\n        <Row className=\"ml-0 mr-0 d-flex align-items-center\">\n          <Col\n            className={IsOptionSelected(lineItem, goodConditionPo) ? \"title-black\" : \"title-red\"}\n            sm={5}\n            md={5}\n            lg={5}\n            title={lineItem.name}>\n            {!lineItem.validated && (\n              <i\n                title=\"Product Validation Not Met\"\n                className=\"validation-icon fa fa-warning\"\n                onClick={showValidationDialog}\n              />\n            )}\n            {lineItem.name}\n          </Col>\n          {conditionGroupOptions.map((po: ProductOptionRecord, idx: number) => (\n            <Col sm={2} md={2} lg={2} key={idx} className=\"center-checkbox\">\n              <RadioCircle\n                disabled={!isIncluded}\n                color={idx === 0 ? \"green\" : \"\"}\n                name={lineItem.id.toString()}\n                id={po.id.toString()}\n                onChange={(value: boolean) => {\n                  triggerExpand(lineItem.id.toString());\n                  AddLineItemOption(lineItem, po, conditionGroup, 0, estimate);\n                  checkValidations();\n                  check();\n                  forceUpdate();\n                }}\n                checked={IsOptionSelected(lineItem, po)}\n              />\n            </Col>\n          ))}\n          <Col sm={2} md={2} lg={2} className=\"center-checkbox\">\n            <div\n              className={isIncluded ? \"mr-2\" : \"mr-2 disabled\"}\n              onClick={(e) => {\n                triggerExpand(lineItem.id.toString());\n                e.stopPropagation();\n              }}>\n              <Files\n                disabled={!isIncluded}\n                className=\"files-dropzone center-checkbox\"\n                onChange={onFilesUpload}\n                onError={onFilesError}\n                accepts={[\"image/*\", \".pdf\"]}\n                multiple={false}\n                maxFileSize={30000000}\n                minFileSize={0}\n                clickable>\n                <i className=\"fa fa-camera fa-2x\" title=\"Upload a photo\" />\n              </Files>\n            </div>\n            <div\n              className={isIncluded ? \"\" : \"disabled\"}\n              onClick={(e) => {\n                setShowImagePickerModal(!showImagePickerModal);\n                e.stopPropagation();\n              }}\n              style={{ width: \"36px\", height: \"36px\" }}>\n              <i className=\"fa fa-folder fa-2x\" title=\"Choose an uploaded photo\" />\n            </div>\n          </Col>\n          <Col sm={1} md={1} lg={1} className=\"d-flex justify-content-end\">\n            <i className={`fa ${selectedEventKey === lineItem.id.toString() ? \"fa-angle-up\" : \"fa-angle-down\"}`} />\n          </Col>\n        </Row>\n      </Accordion.Toggle>\n      <Accordion.Collapse eventKey={lineItem.id.toString()}>\n        <Card.Body>\n          <Row className=\"mr-0 ml-0\">\n            <Col className=\"title line-item-checkbox\" sm={12} md={{ span: 6 }} lg={{ span: 6 }}>\n              <RadioVertical\n                disabled={!isIncluded}\n                lineItem={lineItem}\n                options={issuesGroupOptions}\n                onChange={(po, value) => {\n                  if (value) {\n                    AddLineItemOption(lineItem, po, issuesGroup, 0, estimate);\n                  } else {\n                    RemoveLineItemOption(lineItem, po.uuid);\n                  }\n                  checkValidations();\n                  check();\n                  forceUpdate();\n                }}\n              />\n            </Col>\n            <Col sm={6} className=\"ml-0 pl-0 mr-0 pr-0\">\n              <Row>\n                <Col sm={12}>\n                  <FormControl\n                    disabled={!isIncluded}\n                    as=\"textarea\"\n                    placeholder=\"Notes\"\n                    value={lineItem.description}\n                    onChange={(event) => {\n                      lineItem.description = event.target.value;\n                      check();\n                      forceUpdate();\n                    }}\n                    rows={5}\n                  />\n                </Col>\n              </Row>\n              <Row>\n                <Col sm={12}>\n                  <div className=\"form-group add-to-presentation pull-right\">\n                    <label>Add to Agreement</label>\n                    <div className=\"toggle-container\">\n                      <input\n                        disabled={!isIncluded}\n                        type=\"checkbox\"\n                        checked={lineItem.visibility === \"a\" || lineItem.visibility === \"ab\"}\n                        onChange={(event) => inclusionChanged(\"a\", event.target.checked)}\n                        className=\"toggle\"\n                        id=\"switch-normal\"\n                      />\n                    </div>\n                  </div>\n                </Col>\n              </Row>\n              <Row>\n                <Col sm={12}>\n                  <div className=\"form-group add-to-presentation pull-right\">\n                    <label>Add to Presentation</label>\n                    <div className=\"toggle-container\">\n                      <input\n                        disabled={!isIncluded}\n                        type=\"checkbox\"\n                        checked={lineItem.visibility === \"b\" || lineItem.visibility === \"ab\"}\n                        onChange={(event) => inclusionChanged(\"b\", event.target.checked)}\n                        className=\"toggle\"\n                        id=\"switch-normal\"\n                      />\n                    </div>\n                  </div>\n                </Col>\n              </Row>\n            </Col>\n          </Row>\n          <Row>\n            <Col className=\"inspection-image-container\" sm={12} md={{ span: 10 }} lg={{ span: 9 }}>\n              {lineItem.images\n                .filter((i) => i._destroy !== true)\n                .map((i, idx) => (\n                  <div key={idx} className=\"photo\">\n                    <img className=\"inspection-image-thumb\" src={i.getUrl(\"small\")} />\n                    {isIncluded && (\n                      <ConfirmDialog description=\"\" title={\"Are you sure you want to delete this photo?\"}>\n                        {(confirm) => (\n                          <i\n                            className=\"rsf-delete-link rsf-base-66 action-button\"\n                            onClick={confirm(() => deletePhoto(i))}\n                          />\n                        )}\n                      </ConfirmDialog>\n                    )}\n                  </div>\n                ))}\n            </Col>\n          </Row>\n        </Card.Body>\n      </Accordion.Collapse>\n    </Card>\n  );\n};\n\nexport default InspectionItem;\n","import * as React from \"react\";\nimport { Accordion } from \"react-bootstrap\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport InspectionItem from \"app2/src/components/JobTabs/InspectionTab/InspectionItem\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { Nullable } from \"app2/src/records\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\n\nexport interface IInspectionGroupProps {\n  activatedPriceListId: number;\n  group: IEstimateGroup;\n  queue: IFileQueueFactory;\n  check: any;\n  checkValidations: any;\n  estimate: IEstimate;\n  ConfirmDialog: IConfirmDialog;\n}\n\nconst InspectionGroup: React.FC<IInspectionGroupProps> = ({\n  group,\n  queue,\n  check,\n  activatedPriceListId,\n  estimate,\n  checkValidations,\n  ConfirmDialog,\n}) => {\n  const [selectedEventKey, setSelectedEventKey] = React.useState<Nullable<string>>(null);\n\n  return (\n    <Accordion activeKey={selectedEventKey} onSelect={(event) => setSelectedEventKey(event)}>\n      {group.line_items.map((li, idx) => (\n        <InspectionItem\n          activatedPriceListId={activatedPriceListId}\n          selectedEventKey={selectedEventKey}\n          lineItem={li}\n          queue={queue}\n          check={check}\n          triggerExpand={(selectedEventKey: string) => setSelectedEventKey(selectedEventKey)}\n          key={idx}\n          estimate={estimate}\n          isIncluded={group?.included}\n          checkValidations={checkValidations}\n          ConfirmDialog={ConfirmDialog}\n        />\n      ))}\n    </Accordion>\n  );\n};\n\nexport default InspectionGroup;\n","import * as React from \"react\";\nimport { Modal, ListGroup, ButtonGroup } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useTracking } from \"react-tracking\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\n\ninterface Inspection {\n  id: number;\n  name?: string;\n  created_at?: string;\n  updated_at?: string;\n}\n\ninterface InspectionSelectorModalProps {\n  inspections: Inspection[];\n  onSelect: (inspection: Inspection) => void;\n  onArchive: (inspectionId: number) => Promise<void>;\n}\n\nexport const InspectionSelectorModal: React.FC<InspectionSelectorModalProps> = ({\n  inspections,\n  onSelect,\n  onArchive,\n}) => {\n  const [localInspections, setLocalInspections] = React.useState<Inspection[]>(inspections);\n  const [archiving, setArchiving] = React.useState<number | null>(null);\n  const { trackEvent } = useTracking(\n    { component: \"InspectionsSelectorModal\", action: \"multiple inspections viewed\" },\n    { dispatchOnMount: true },\n  );\n\n  React.useEffect(() => {\n    if (localInspections.length === 1) {\n      onSelect(localInspections[0]);\n    }\n  }, [localInspections, onSelect]);\n\n  const handleArchive = async (inspectionId: number) => {\n    setArchiving(inspectionId);\n    try {\n      await onArchive(inspectionId);\n      setLocalInspections(localInspections.filter((i) => i.id !== inspectionId));\n      trackEvent({ action: \"inspection archived\", inspection: inspectionId });\n    } catch (error) {\n      console.error(\"Failed to archive inspection:\", error);\n    } finally {\n      setArchiving(null);\n    }\n  };\n\n  const handleSelect = (inspection: Inspection) => {\n    if (archiving === null) {\n      trackEvent({ action: \"inspection selected\", inspection: inspection.id });\n      onSelect(inspection);\n    }\n  };\n\n  const formatDate = (dateString?: string) => {\n    if (!dateString) return \"Unknown date\";\n    const date = new Date(dateString);\n    return date.toLocaleDateString() + \" \" + date.toLocaleTimeString();\n  };\n\n  return (\n    <Modal show={true} onHide={() => {}} size=\"lg\" backdrop=\"static\">\n      <Modal.Header>\n        <Modal.Title>Multiple Inspections</Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        <p className=\"has-error\">\n          This Job currently has more than 1 inspection. This can cause issues with certain integrations. Please delete\n          the extra inspection(s).\n        </p>\n        <ListGroup>\n          {localInspections.map((inspection) => (\n            <ListGroup.Item\n              key={inspection.id}\n              className=\"d-flex justify-content-between align-items-center\"\n              onClick={() => {\n                handleSelect(inspection);\n              }}\n              style={{ cursor: archiving === null ? \"pointer\" : \"default\" }}>\n              <div>\n                <div>\n                  <strong>Inspection #{inspection.id}</strong>\n                </div>\n                <small className=\"text-muted\">Last Updated: {formatDate(inspection.updated_at)}</small>\n              </div>\n              <ButtonGroup onClick={(e) => e.stopPropagation()}>\n                <a\n                  className=\"action-button\"\n                  href=\"#\"\n                  title=\"View/Edit Inspection\"\n                  onClick={(e) => {\n                    e.preventDefault();\n                    e.stopPropagation();\n                    handleSelect(inspection);\n                  }}\n                  style={{\n                    pointerEvents: archiving !== null ? \"none\" : \"auto\",\n                    opacity: archiving !== null ? 0.5 : 1,\n                  }}>\n                  <i className=\"rsf-edit-link rsf-base-66\"></i>\n                </a>\n                {archiving === inspection.id ? (\n                  <FontAwesome name=\"spinner\" spin />\n                ) : (\n                  <ConfirmDialog title=\"Are you sure you want to delete this Inspection?\">\n                    {(confirm) => (\n                      <i\n                        className=\"rsf-delete-link rsf-base-66\"\n                        title=\"Delete Inspection\"\n                        onClick={confirm(() => {\n                          handleArchive(inspection.id);\n                        })}\n                        style={{\n                          pointerEvents: archiving !== null ? \"none\" : \"auto\",\n                          opacity: archiving !== null ? 0.5 : 1,\n                        }}></i>\n                    )}\n                  </ConfirmDialog>\n                )}\n              </ButtonGroup>\n            </ListGroup.Item>\n          ))}\n        </ListGroup>\n      </Modal.Body>\n    </Modal>\n  );\n};\n","import * as React from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { Card, Row, Col, Tabs, Tab, Button, Dropdown } from \"react-bootstrap\";\nimport { RootState } from \"app2/src/reducers\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport InspectionGroup from \"./InspectionGroup\";\nimport inspectionService from \"./Inspection.service\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { IDirtyWatcher, IDirtyMerge } from \"app/src/Common/DirtyWatcher\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { validationMessage } from \"app/src/Estimator/ValidationService\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport * as imageActions from \"app2/src/reducers/image.actions\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { useTracking } from \"react-tracking\";\nimport { InspectionSelectorModal } from \"./InspectionSelectorModal\";\nimport { estimateService } from \"app2/src/api/estimate.service\";\n\nexport interface IInspectionProps {\n  queue: IFileQueueFactory;\n  EstimatorService: EstimatorService;\n  JobFetcher: IJobFetcherService;\n  DirtyWatcher: IDirtyWatcher;\n  $scope: ng.IScope;\n  email: (estimate: IEstimate) => void;\n  download: (estimate: IEstimate) => void;\n  ConfirmDialog: IConfirmDialog;\n}\n\nclass DirtyMergeImpl implements IDirtyMerge {\n  constructor(\n    private checkFn: () => boolean,\n    private resetFn: () => Promise<any>,\n    private trackEventFn: (action: string, props: any) => void,\n  ) {}\n\n  check(): boolean {\n    return this.checkFn();\n  }\n\n  reset() {\n    return this.resetFn();\n  }\n\n  trackEvent(action: string, props: any): void {\n    this.trackEventFn(action, props);\n  }\n}\n\nexport const Inspection: React.FC<IInspectionProps> = ({\n  queue,\n  EstimatorService,\n  JobFetcher,\n  DirtyWatcher,\n  $scope,\n  email,\n  download,\n  ConfirmDialog,\n}) => {\n  // Use Redux hooks\n  const job = useSelector((state: RootState) => currentJob(state));\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking();\n\n  const [estimate, setEstimate] = React.useState<IEstimate>(null);\n  const [loading, setLoading] = React.useState(true);\n  const [hasPriceList, setHasPriceList] = React.useState(true);\n  const [dirty, setDirty] = React.useState(false);\n  const [, forceUpdate] = React.useReducer((x) => x + 1, 0);\n  const [showInspectionSelector, setShowInspectionSelector] = React.useState(false);\n  const [multipleInspections, setMultipleInspections] = React.useState<any[]>([]);\n\n  const listImages = React.useCallback(\n    (jobId: number) => {\n      dispatch(\n        imageActions.AsyncActions.listImages({ imageableId: jobId, imageableType: \"job\" }, new QueryParamsRecord()),\n      );\n    },\n    [dispatch],\n  );\n\n  const checkValidations = React.useCallback(() => {\n    const updatedEstimate = EstimatorService.checkValidations();\n    setEstimate(updatedEstimate);\n  }, [EstimatorService]);\n\n  const check = React.useCallback((): boolean => {\n    const newCheck = EstimatorService.checkEstimateState();\n    if (newCheck !== dirty) {\n      setDirty(newCheck);\n    }\n    return newCheck;\n  }, [EstimatorService, dirty]);\n\n  const reset = React.useCallback(() => {\n    if (!estimate) return Promise.resolve();\n\n    setLoading(true);\n\n    const promise = EstimatorService.reloadEstimate(estimate.id).$promise;\n    promise.then(\n      () => {\n        setLoading(false);\n      },\n      () => {\n        setLoading(false);\n      },\n    );\n\n    return promise;\n  }, [EstimatorService, estimate]);\n\n  // Setup DirtyWatcher\n  React.useEffect(() => {\n    const dirtyMerge = new DirtyMergeImpl(check, reset, trackEvent);\n    DirtyWatcher.setup($scope, dirtyMerge);\n\n    // Cleanup function to remove the history prompt when effect re-runs or component unmounts\n    return () => {\n      DirtyWatcher.cleanup();\n    };\n  }, [DirtyWatcher, $scope, check, reset]);\n\n  const loadInspection = React.useCallback(\n    async (inspection: any) => {\n      setShowInspectionSelector(false);\n      setLoading(true);\n\n      // Reload job to get updated inspections list\n      if (job?.id) {\n        const fetchedJob: IJob = JobFetcher.get(job.id);\n        await fetchedJob.$promise;\n        const updatedInspections = (fetchedJob as any).inspections || [];\n        setMultipleInspections(updatedInspections);\n      }\n\n      const newEstimate: IEstimate = EstimatorService.reloadEstimate(inspection.id);\n      await newEstimate.$promise;\n      await EstimatorService.priceListPromise;\n\n      if ((newEstimate.id as any) === \"new\") {\n        inspectionService.clearEstimate(newEstimate);\n        inspectionService.setupEstimate(newEstimate, EstimatorService);\n      }\n\n      setEstimate(newEstimate);\n      setLoading(false);\n\n      if (job?.id) {\n        listImages(job.id);\n      }\n    },\n    [EstimatorService, JobFetcher, job?.id, listImages],\n  );\n\n  const handleArchiveInspection = React.useCallback(\n    async (inspectionId: number) => {\n      if (!job?.id) return;\n      await estimateService.delete(job.id, inspectionId);\n    },\n    [job?.id],\n  );\n\n  const openManageInspections = React.useCallback(() => {\n    if (!job?.id) return;\n    const fetchedJob: IJob = JobFetcher.get(job.id);\n    fetchedJob.$promise.then(() => {\n      const inspections = (fetchedJob as any).inspections || [];\n      if (inspections.length > 1) {\n        trackEvent({ action: \"reopen inspections selector\" });\n        setMultipleInspections(inspections);\n        setShowInspectionSelector(true);\n      }\n    });\n  }, [job?.id, JobFetcher]);\n\n  // Load estimate on mount\n  React.useEffect(() => {\n    // Guard against job not being loaded yet\n    if (!job || !job.id) {\n      return;\n    }\n\n    const loadEstimate = async () => {\n      const fetchedJob: IJob = JobFetcher.get(job.id);\n      await fetchedJob.$promise;\n\n      if (!fetchedJob.org.activated_inspection_list || !fetchedJob.org.activated_inspection_list.id) {\n        setLoading(false);\n        setHasPriceList(false);\n        return;\n      }\n\n      const inspections = (fetchedJob as any).inspections || [];\n\n      if (inspections.length > 1) {\n        // Show modal to select which inspection to load\n        setMultipleInspections(inspections);\n        setShowInspectionSelector(true);\n        setLoading(false);\n        return;\n      }\n\n      let newEstimate: IEstimate;\n      if (inspections.length === 1) {\n        newEstimate = EstimatorService.reloadEstimate(inspections[0].id);\n      } else {\n        newEstimate = EstimatorService.createEstimate(fetchedJob.id, \"inspection\");\n      }\n\n      await newEstimate.$promise;\n      await EstimatorService.priceListPromise;\n\n      if ((newEstimate.id as any) === \"new\") {\n        inspectionService.clearEstimate(newEstimate);\n        inspectionService.setupEstimate(newEstimate, EstimatorService);\n      }\n\n      setEstimate(newEstimate);\n      setLoading(false);\n\n      listImages(job.id);\n    };\n\n    loadEstimate();\n  }, [job?.id, EstimatorService, JobFetcher, listImages]);\n\n  const save = React.useCallback(() => {\n    checkValidations();\n    let validated = true;\n    let validation_results = [];\n\n    _.each(estimate.lineItems(), (li) => {\n      if (li.estimateGroup.included) {\n        validated = validated && li.validated;\n        if (!li.validated) {\n          validation_results = validation_results.concat(li.validation_results);\n        }\n      }\n    });\n\n    if (!validated) {\n      validationMessage(validation_results, ConfirmDialog);\n      return;\n    }\n\n    setLoading(true);\n\n    _.each(estimate.lineItems(), (li) => {\n      queue.cleanFileQueue(li, true);\n    });\n\n    EstimatorService.saveEstimate()\n      .then(() => {\n        return queue.directUploadFileQueue(estimate);\n      })\n      .then(() => {\n        EstimatorService.resetEstimateState();\n        checkValidations();\n        check();\n        setLoading(false);\n      })\n      .catch((errors) => {\n        console.error(errors);\n        setLoading(false);\n      });\n  }, [estimate, EstimatorService, queue, ConfirmDialog, checkValidations, check]);\n\n  const inclusionChanged = React.useCallback(\n    (group: IEstimateGroup, prop: \"a\" | \"b\", value: boolean) => {\n      inspectionService.setGroupVisibility(estimate, group, prop, value);\n      check();\n      forceUpdate();\n    },\n    [estimate, check],\n  );\n\n  const includeGroup = React.useCallback(\n    (group: IEstimateGroup) => {\n      inspectionService.setGroupIncluded(estimate, group);\n      // group.included was toggled by setGroupIncluded, so check the NEW value\n      const edited_group = estimate.groups.find((g) => g.id === group.id);\n      if (edited_group && edited_group.included) {\n        checkValidations();\n      }\n      check();\n      forceUpdate();\n    },\n    [estimate, checkValidations, check],\n  );\n\n  const renderCheckBox = (group: IEstimateGroup, prop: \"a\" | \"b\") => {\n    const uniqueId = `switch-${group.id}-${prop}`;\n\n    return (\n      <div className=\"form-group add-to-presentation inspection-text\">\n        <label htmlFor={uniqueId}>Add All to {prop === \"a\" ? \"Agreement\" : \"Presentation\"}</label>\n        <div className=\"toggle-container\">\n          <input\n            disabled={!group.included}\n            type=\"checkbox\"\n            checked={inspectionService.checkGroupVisibility(group, prop)}\n            onChange={(event) => inclusionChanged(group, prop, event.target.checked)}\n            className=\"toggle\"\n            id={uniqueId}\n          />\n        </div>\n      </div>\n    );\n  };\n\n  const noPriceList = () => {\n    return (\n      <div className=\"inspection\">\n        <div className=\"form-section blank-state alert alert-danger\">\n          <h2>The Inspection Configuration for this Organization doesn't exist!</h2>\n          <h4>An Inspection can not be created without Inspection Configuration.</h4>\n        </div>\n      </div>\n    );\n  };\n\n  if (!hasPriceList) {\n    return noPriceList();\n  }\n\n  if (showInspectionSelector) {\n    return (\n      <InspectionSelectorModal\n        inspections={multipleInspections}\n        onSelect={loadInspection}\n        onArchive={handleArchiveInspection}\n      />\n    );\n  }\n\n  if (!estimate || !job) {\n    return <SpinnerComponent localProperty={loading} />;\n  }\n\n  return (\n    <SpinnerComponent localProperty={loading}>\n      <Row className=\"inspection\">\n        <Col sm={12}>\n          <Button variant=\"primary\" className=\"pull-right\" onClick={save} disabled={!dirty}>\n            Save\n          </Button>\n          <Button\n            disabled={dirty || (estimate.id as any) === \"new\"}\n            variant=\"primary\"\n            className=\"pull-right\"\n            onClick={() => {\n              email(estimate);\n            }}>\n            Email Inspection\n          </Button>\n          <Button\n            disabled={dirty || (estimate.id as any) === \"new\"}\n            variant=\"primary\"\n            className=\"pull-right\"\n            onClick={() => {\n              download(estimate);\n            }}>\n            <FontAwesome name=\"download\" title=\"Download\" />\n          </Button>\n          {multipleInspections.length > 1 && (\n            <Button variant=\"danger\" className=\"pull-right\" onClick={openManageInspections}>\n              Manage Inspections\n            </Button>\n          )}\n        </Col>\n        <Col sm={12}>\n          <Tabs id=\"inspection\">\n            {estimate.groups.map((g, idx) => {\n              return (\n                <Tab\n                  eventKey={g.name}\n                  tabClassName=\"inspection-tab\"\n                  title={\n                    <div className=\"tab-title-container\">\n                      <div>\n                        {g.included ? \"*\" : \"\"}\n                        {g.name}\n                      </div>\n                      <Dropdown className=\"tab-dropdown\" key={g.id}>\n                        <Dropdown.Toggle\n                          variant=\"link\"\n                          bsPrefix=\"px-[0.5em] py-0\"\n                          id={`dropdown-ellipsis-${idx}`}\n                          aria-label={`Toggle options for ${g.name}`}>\n                          <i className=\"fa fa-ellipsis-v\"></i>\n                        </Dropdown.Toggle>\n\n                        <Dropdown.Menu>\n                          <Dropdown.Item onClick={() => includeGroup(g)}>\n                            {g.included ? \"Exclude\" : \"Include\"}\n                          </Dropdown.Item>\n                        </Dropdown.Menu>\n                      </Dropdown>\n                    </div>\n                  }\n                  key={idx}>\n                  <Card>\n                    <Card.Title>\n                      <Row className=\"inspection-text ml-0 mr-0\">\n                        <Col sm={3} md={5} lg={5} className=\"d-flex align-items-center mb-0 pl-0\">\n                          <Row className=\"inspection-text mb-0\">\n                            <Col>Inspection Item</Col>\n                          </Row>\n                        </Col>\n                        <Col sm={3} md={2} lg={2} className=\"center-checkbox\">\n                          Satisfactory\n                        </Col>\n                        <Col sm={1} md={2} lg={2} className=\"center-checkbox offset-sm-1 offset-md-0 offset-lg-0\">\n                          Needs Attention\n                        </Col>\n                        <Col sm={4} md={2} lg={2} className=\"center-checkbox\">\n                          Add Picture\n                        </Col>\n                      </Row>\n                      <Row className=\"justify-content-end\">\n                        <Col sm={6} lg={3} md={3}>\n                          {renderCheckBox(g, \"a\")}\n                        </Col>\n                        <Col sm={6} lg={3} md={3}>\n                          {renderCheckBox(g, \"b\")}\n                        </Col>\n                      </Row>\n                    </Card.Title>\n                    <Card.Body>\n                      <InspectionGroup\n                        activatedPriceListId={estimate.activated_price_list_id}\n                        queue={queue}\n                        group={g}\n                        check={check}\n                        checkValidations={checkValidations}\n                        estimate={estimate}\n                        ConfirmDialog={ConfirmDialog}\n                      />\n                    </Card.Body>\n                  </Card>\n                </Tab>\n              );\n            })}\n          </Tabs>\n        </Col>\n      </Row>\n    </SpinnerComponent>\n  );\n};\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { Dispatch, TrackingData } from \"app2/src/helpers/Analytics\";\nimport { Inspection } from \"./Inspection\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { IDirtyWatcher } from \"app/src/Common/DirtyWatcher\";\nimport { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\n\n// Connector with mapStateToProps to get currentJob\nconst connector = connect((state: RootState) => ({\n  job: currentJob(state),\n}));\n\nexport interface IInspectionContainerProps {\n  queue: IFileQueueFactory;\n  EstimatorService: EstimatorService;\n  JobFetcher: IJobFetcherService;\n  $scope: ng.IScope;\n  $analytics: angulartics.IAnalyticsService;\n  DirtyWatcher: IDirtyWatcher;\n  tracking?: TrackingProp;\n  email(estimate: IEstimate): void;\n  download(estimate: IEstimate): void;\n  ConfirmDialog: IConfirmDialog;\n}\n\nconst track: Track<TrackingData, IInspectionContainerProps> = _track;\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = IInspectionContainerProps & PropsFromRedux;\n\n@track(\n  (props: Props) => {\n    return {\n      category: \"Inspection Editor\",\n      action: \"Show\",\n      job: props.job?.id,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n    dispatchOnMount: true,\n  },\n)\nclass InspectionContainer extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n    Dispatch.analytics = props.$analytics;\n  }\n\n  public render() {\n    const { queue, EstimatorService, JobFetcher, DirtyWatcher, $scope, email, download, ConfirmDialog } = this.props;\n\n    return (\n      <Inspection\n        queue={queue}\n        EstimatorService={EstimatorService}\n        JobFetcher={JobFetcher}\n        DirtyWatcher={DirtyWatcher}\n        $scope={$scope}\n        email={email}\n        download={download}\n        ConfirmDialog={ConfirmDialog}\n      />\n    );\n  }\n}\n\nexport default connector(InspectionContainer);\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { SlideRecord } from \"app2/src/records/Slide\";\n\nconst mapStateToProps = (state: RootState, ownProps: ISlideComponentProps) => {\n  return {};\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ISlideComponentProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ISlideComponentProps {\n  slide: any;\n  selected?: boolean;\n  toggle?: (state: boolean) => void;\n  showToggle: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ISlideComponentProps;\n\nclass SlideComponent extends React.PureComponent<Props> {\n  public render() {\n    const { slide, showToggle, toggle, selected } = this.props;\n    if (!slide) {\n      return null;\n    }\n    return (\n      <div className=\"slide\">\n        {this.renderSlide(slide)}\n        {showToggle && (\n          <div className=\"toggle-container\">\n            <input\n              type=\"checkbox\"\n              checked={selected}\n              onChange={(event) => toggle(event.target.checked)}\n              className=\"toggle form-control\"\n              id=\"switch-normal\"\n            />\n          </div>\n        )}\n      </div>\n    );\n  }\n\n  protected renderSlide = (slide: SlideRecord) => {\n    if (slide && slide.cover_image && slide.cover_image.small.url) {\n      return <img src={slide.cover_image.small.url} />;\n    }\n\n    return <span className=\"placeholder\">{slide.name}</span>;\n  };\n}\n\nexport default connector(SlideComponent);\n","import { List, Set } from \"immutable\";\nimport { PresentationRecord, fromJSON as presentationFromJSON } from \"app2/src/records/Presentation\";\nimport {\n  PresentationTemplateRecord,\n  fromJSON as presentationTemplateFromJSON,\n} from \"app2/src/records/PresentationTemplate\";\nimport { fromJSON as dplFromJSON } from \"app2/src/records/DynamicPresentationLink\";\nimport { SlideRecord } from \"app2/src/records/Slide\";\nimport { DynamicPresentationLinkRecord } from \"app2/src/records/DynamicPresentationLink\";\nimport { intersectLists, removeDuplicates } from \"app2/src/helpers/ImmutableData\";\n\nexport const activeDynamicLinks = (presentation: PresentationRecord): List<DynamicPresentationLinkRecord> => {\n  if (presentation === null || presentation === undefined) {\n    return List<DynamicPresentationLinkRecord>();\n  }\n  return presentation.dynamic_links.filter((dl) => !dl._destroy);\n};\n\nexport const buildInitialJobPresentation = (jobId: number, inspectionId: number) => {\n  let links = List<DynamicPresentationLinkRecord>();\n  links = links.push(\n    dplFromJSON({\n      presentable_id: inspectionId,\n      presentable_type: \"Estimate\",\n      kind: \"inspection\",\n      sort_order: 0,\n    }),\n  );\n\n  return presentationFromJSON({\n    name: \"Job Presentation\",\n    job_id: jobId,\n    kind: \"dynamic\",\n    dynamic_links: links.map((dl) => dl.toJS()).toArray() as any,\n    slides: [],\n  });\n};\n\nexport const checkInspectionDynamicPresentationLink = (\n  presentation: PresentationRecord,\n  inspectionId: number,\n): PresentationRecord => {\n  const dplIndex = presentation.dynamic_links.findIndex((x) => x.presentable_type === \"Estimate\");\n  const dpl = presentation.dynamic_links.get(dplIndex);\n\n  if (dpl && (!dpl.presentable_id || dpl.presentable_id <= 0)) {\n    presentation = presentation.update(\"dynamic_links\", (dpls) =>\n      dpls.setIn([dplIndex, \"presentable_id\"], inspectionId),\n    );\n  }\n\n  return presentation;\n};\n\nexport const slideSelected = (dynamicPresentation: PresentationRecord, slideId: number): boolean => {\n  if (!dynamicPresentation) {\n    return false;\n  }\n\n  return activeDynamicLinks(dynamicPresentation).some((dl) => dl.presentable_id === slideId);\n};\n\nexport const getSortOrder = (\n  presentation: PresentationRecord,\n  orgPresentations: List<PresentationRecord>,\n): \"default\" | \"free-for-all\" => {\n  if (presentation === undefined || presentation === null) {\n    return \"default\";\n  }\n\n  const newPresentationIds = [];\n  const newSlideIds = [];\n\n  // collecting ids for presentation & slides that are included in the new presentation\n  presentation.slides.forEach(({ id, presentation_id }) => {\n    newSlideIds.push(id);\n    newPresentationIds.push(presentation_id);\n  });\n\n  // slides from orgPresentation that are part of new presentation being created in the default sorting order\n  const defaultSortedSlides = orgPresentations\n    .filter(({ id }) => newPresentationIds.includes(id))\n    .flatMap(({ slides }) => slides)\n    .filter(({ id }) => newSlideIds.includes(id));\n\n  // if the new presentation slides are in the same order as of the org presentation slides listing then it's the default order\n  if (defaultSortedSlides.every(({ id }, index) => newSlideIds[index] === id)) {\n    return \"default\";\n  } else {\n    return \"free-for-all\";\n  }\n};\n\nexport const removeSlides = (\n  dynamicPresentation: PresentationRecord,\n  presentation: PresentationRecord,\n): PresentationRecord => {\n  presentation.slides.map((slide: SlideRecord) => {\n    if (slideSelected(dynamicPresentation, slide.id)) {\n      dynamicPresentation = removeSlide(dynamicPresentation, slide.id);\n    }\n  });\n  return dynamicPresentation;\n};\n\nexport const removeSlide = (dynamicPresentation: PresentationRecord, slideId: number): PresentationRecord => {\n  return dynamicPresentation\n    .update(\"dynamic_links\", (dls) => {\n      const index = dls.findIndex((dl) => dl.presentable_id === slideId);\n      const dl = dls.get(index);\n      if (dl.id <= 0) {\n        return dls.filter((dl) => dl.presentable_id !== slideId).map((dl, idx) => dl.set(\"sort_order\", idx));\n      } else {\n        return dls.update(index, (dl) => dl.set(\"_destroy\", true));\n      }\n    })\n    .update(\"slides\", (slides) => {\n      return slides.filter((slide) => slide.id !== slideId);\n    });\n};\n\nexport const addSlides = (\n  dynamicPresentation: PresentationRecord,\n  presentation: PresentationRecord,\n  orgPresentations: List<PresentationRecord>,\n  sortOrder = \"default\",\n): PresentationRecord => {\n  presentation.slides.map((slide: SlideRecord) => {\n    if (!slideSelected(dynamicPresentation, slide.id)) {\n      dynamicPresentation = addSlide(dynamicPresentation, slide, orgPresentations, sortOrder);\n    }\n  });\n  return dynamicPresentation;\n};\n\nexport const addSlide = (\n  dynamicPresentation: PresentationRecord,\n  slide: SlideRecord,\n  orgPresentations: List<PresentationRecord>,\n  sortOrder = \"default\",\n): PresentationRecord => {\n  const presIds: List<number> = orgPresentations.map((p) => p.id);\n\n  // Sort the slides based on presentation id\n  dynamicPresentation = dynamicPresentation.update(\"slides\", (slides) => {\n    const updatedSlides = slides.push(slide);\n\n    // No need of sorting or grouping if the sort_order is free-for-all, just needs appending\n    if (sortOrder === \"free-for-all\") {\n      return updatedSlides;\n    }\n\n    const grouped = updatedSlides.groupBy((a) => a.presentation_id);\n    const sorted: List<List<SlideRecord>> = presIds.map((id) => {\n      const list = grouped.get(id);\n      if (!list) {\n        return List();\n      }\n      return list.sortBy((s) => s.sort_order).toList();\n    });\n\n    return sorted.flatten().toList();\n  });\n\n  // Get the inspection slide figure out where it goes.\n  // Location is hardcoded to 'after' the 'first' presentation.\n  const slidesById = dynamicPresentation.slides.map((s) => s.id);\n  const inspectionLinkIdx = dynamicPresentation.dynamic_links.findIndex((dl) => dl.kind === \"inspection\");\n  const inspectionLink = dynamicPresentation.dynamic_links.get(inspectionLinkIdx);\n  let firstOfSecondIdx = dynamicPresentation.slides.findIndex((dl) => dl.presentation_id !== presIds.first());\n  if (firstOfSecondIdx < 0) {\n    firstOfSecondIdx = dynamicPresentation.slides.size;\n  }\n\n  return dynamicPresentation.update(\"dynamic_links\", (dls) => {\n    // check to see if it exists as a destroyed\n    const existing = dls.findIndex((dls) => dls.presentable_id === slide.id && dls.presentable_type === \"Slide\");\n\n    if (existing >= 0) {\n      // if it's a destroyed, just undestroy it.\n      dls = dls.update(existing, (d) => d.set(\"_destroy\", false));\n    } else {\n      // if it's not destroyed then add it as a new\n      dls = dls.push(dplFromJSON({ presentable_id: slide.id, presentable_type: \"Slide\" }));\n    }\n\n    // sort the dynamic links based on the slide.\n    // insert the inspection where it should go\n    // update sort orders\n    let finalDynamicLinks = dls;\n    if (sortOrder === \"free-for-all\") {\n      // if we are in a free-for-all sorting, put the new slide at the end\n      const dsSlideIdx = finalDynamicLinks.findIndex((s) => s.presentable_id === slide.id);\n      finalDynamicLinks = moveSlide(\n        finalDynamicLinks,\n        finalDynamicLinks.get(dsSlideIdx),\n        dsSlideIdx,\n        finalDynamicLinks.size,\n      );\n    } else {\n      // otherwise do traditional sorting\n      dls = dls.splice(inspectionLinkIdx, 1);\n      finalDynamicLinks = dls\n        .sort((a, b) => {\n          if (a._destroy && b._destroy) {\n            return 0;\n          } else if (a._destroy && !b._destroy) {\n            return 1;\n          } else if (!a._destroy && b._destroy) {\n            return -1;\n          }\n\n          return slidesById.indexOf(a.presentable_id) - slidesById.indexOf(b.presentable_id);\n        })\n        .insert(firstOfSecondIdx, inspectionLink)\n        .map((dl, idx) => dl.set(\"sort_order\", idx));\n    }\n    return finalDynamicLinks;\n  });\n};\n\nexport const moveSlide = (\n  allSlides: List<DynamicPresentationLinkRecord>,\n  slide: DynamicPresentationLinkRecord,\n  fromIndex: number,\n  toIndex: number,\n): List<DynamicPresentationLinkRecord> => {\n  allSlides = allSlides\n    .delete(fromIndex)\n    .insert(toIndex, slide)\n    .map((a, idx) => {\n      return a.set(\"sort_order\", idx);\n    });\n\n  return allSlides;\n};\n\nexport const createTemplateFromPresentation = (\n  name: string,\n  presentation: PresentationRecord,\n): PresentationTemplateRecord => {\n  return presentationTemplateFromJSON({\n    name: name,\n    org_id: presentation.org_id,\n    template: {\n      slides: activeDynamicLinks(presentation)\n        .map<number>((dl) => dl.presentable_id)\n        .toArray(),\n    },\n  });\n};\n\nexport const applyTemplateToPresentation = (\n  template: PresentationTemplateRecord,\n  presentation: PresentationRecord,\n  orgPresentations: List<PresentationRecord>,\n): PresentationRecord => {\n  presentation.dynamic_links.forEach((dls) => {\n    if (dls.presentable_type === \"Slide\") {\n      presentation = removeSlide(presentation, dls.presentable_id);\n    }\n  });\n\n  let slides: List<SlideRecord> = orgPresentations\n    .map((op) => op.slides)\n    .flatten()\n    .toList();\n  const slideIds: List<number> = removeDuplicates(slides.map((s) => s.id));\n  const tplSlides = removeDuplicates(List(template.template.slides));\n  const good: Array<number> = intersectLists(tplSlides, slideIds).toArray();\n\n  good.forEach((n, idx) => {\n    const slideIdx = slides.findIndex((s) => s.id === n);\n    if (slideIdx >= 0) {\n      const newSlide = slides.get(slideIdx);\n      presentation = presentation\n        .update(\"slides\", (ps) => ps.push(newSlide))\n        .update(\"dynamic_links\", (dls) => {\n          // check to see if it exists as a destroyed\n          const existing = dls.findIndex(\n            (dls) => dls.presentable_id === newSlide.id && dls.presentable_type === \"Slide\",\n          );\n\n          if (existing >= 0) {\n            // if it's a destroyed, just undestroy it.\n            dls = dls.update(existing, (d) => d.set(\"_destroy\", false).set(\"sort_order\", idx));\n          } else {\n            // if it's not destroyed then add it as a new\n            dls = dls.push(dplFromJSON({ presentable_id: newSlide.id, presentable_type: \"Slide\", sort_order: idx }));\n          }\n\n          return dls;\n        });\n      slides = slides.delete(slideIdx);\n    }\n  });\n\n  presentation = presentation.update(\"dynamic_links\", (dls) => dls.sortBy((dl) => dl.sort_order));\n\n  return presentation;\n};\n\nexport const setupDynamicLinkSlides = (\n  presentation: PresentationRecord,\n  orgPresentations: List<PresentationRecord>,\n): PresentationRecord => {\n  const existingSlides = orgPresentations\n    .map((o) => o.slides)\n    .flatten()\n    .toList();\n\n  return presentation.update(\"slides\", (slides) => {\n    slides = presentation.dynamic_links.map((dl) =>\n      existingSlides.find((s) => dl.presentable_id === s.id && dl.presentable_type === \"Slide\"),\n    );\n    return slides.filter((a) => a !== undefined);\n  });\n};\n","import { RootState, RootActions } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { PresentationTemplateRecord } from \"app2/src/records/PresentationTemplate\";\nimport { Map, List } from \"immutable\";\n\nconst presentationTemplatesById = (state: RootState) =>\n  state.getIn([\"presentationTemplates\", \"presentationTemplatesById\"]);\nconst orgPresentationTemplateIds = (state: RootState, props: any) => {\n  if (!props.orgId) {\n    return List();\n  }\n\n  return state.getIn([\"presentationTemplates\", \"presentationTemplatesByOrgId\", props.orgId, \"presentationTemplates\"]);\n};\n\nexport const getOrgPresentationTemplates = createSelector(\n  [presentationTemplatesById, orgPresentationTemplateIds],\n  (byId: Map<number, PresentationTemplateRecord>, presentations: List<number>) => {\n    if (!presentations) {\n      return List();\n    }\n\n    const interim = presentations.map((id) => byId.get(id)).sortBy((d) => d.sort_order);\n    return interim;\n  },\n);\n","import * as React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\n\ninterface INoTemplatesComponentProps {}\n\nconst NoTemplatesComponent: React.FunctionComponent<INoTemplatesComponentProps> = (props) => {\n  return (\n    <Row>\n      <Col sm={12}>There are no Presentation Templates. Please create one.</Col>\n    </Row>\n  );\n};\n\nexport default NoTemplatesComponent;\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { Card, Modal, Button, Row, Col } from \"react-bootstrap\";\nimport { PresentationTemplateRecord } from \"app2/src/records/PresentationTemplate\";\nimport { getOrgPresentationTemplates } from \"./presentationTemplateSelector\";\nimport NoTemplateComponent from \"./NoTemplatesComponent\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\n\nconst mapStateToProps = (state: RootState, ownProps: ListPickerProps) => {\n  return {\n    presentationTemplates: getOrgPresentationTemplates(state, { orgId: ownProps.orgId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ListPickerProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ListPickerProps {\n  orgId: number;\n  show: boolean;\n  onSelect: (template: PresentationTemplateRecord) => void;\n  onClose: () => void;\n}\n\nexport interface ListPickerState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ListPickerProps;\n\nclass ListPicker extends React.Component<Props, ListPickerState> {\n  public render() {\n    const { onClose, orgId, presentationTemplates } = this.props;\n\n    return (\n      <SpinnerComponent stateProperty={[\"presentationTemplates\", \"presentationTemplatesByOrgId\", orgId, \"loading\"]}>\n        <Modal size=\"lg\" show={this.props.show} onHide={onClose}>\n          <Modal.Header closeButton>\n            <Modal.Title>\n              <div className=\"row-eq-height\">\n                <Col md={12}>\n                  <h3>Presentation Templates</h3>\n                </Col>\n              </div>\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <Row>\n              <Col sm={12}>{this.renderTemplates(presentationTemplates)}</Col>\n            </Row>\n          </Modal.Body>\n          <Modal.Footer>\n            <Button onClick={onClose}>Close</Button>\n          </Modal.Footer>\n        </Modal>\n      </SpinnerComponent>\n    );\n  }\n\n  public renderTemplates = (templates: List<PresentationTemplateRecord>) => {\n    const { onSelect } = this.props;\n    if (templates.size <= 0) {\n      return <NoTemplateComponent />;\n    }\n\n    return templates.map((t, idx) => {\n      return (\n        <Card key={idx}>\n          <Card.Body onClick={(e) => onSelect(t)}>{t.name}</Card.Body>\n        </Card>\n      );\n    });\n  };\n}\n\nexport default connector(ListPicker);\n","import * as React from \"react\";\nimport { PresentationTemplateRecord } from \"app2/src/records/PresentationTemplate\";\nimport { Form, Row, Col } from \"react-bootstrap\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { Dispatch, TrackingData } from \"app2/src/helpers/Analytics\";\n\nexport interface IManagementItemProps {\n  presentationTemplate: PresentationTemplateRecord;\n  update: (pt: PresentationTemplateRecord) => void;\n  updateName: (pt: PresentationTemplateRecord) => void;\n  remove: (pt: PresentationTemplateRecord) => void;\n  tracking?: TrackingProp;\n}\n\nconst track: Track<TrackingData, IManagementItemProps> = _track;\n\nexport interface IManagementItemState {\n  presentationTemplate: PresentationTemplateRecord;\n  editing: boolean;\n}\n\n@track(\n  //@ts-ignore\n  (props: IManagementItemProps) => {\n    return {\n      presentationTemplate: props.presentationTemplate.id,\n    };\n  },\n  { dispatchOnMount: false },\n)\nexport default class ManagementItem extends React.Component<IManagementItemProps, IManagementItemState> {\n  public state = {\n    presentationTemplate: this.props.presentationTemplate,\n    editing: false,\n  };\n\n  constructor(props) {\n    super(props);\n\n    this.startEditName = this.startEditName.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: IManagementItemProps, prevState: IManagementItemState) {\n    if (prevProps.presentationTemplate.id !== this.props.presentationTemplate.id) {\n      this.setState({\n        presentationTemplate: this.props.presentationTemplate,\n      });\n    }\n  }\n\n  public render() {\n    const { editing, presentationTemplate } = this.state;\n    return (\n      <tr>\n        <td>\n          <Row className=\"align-items-center\">\n            <Col sm={4} lg={2}>\n              {!editing && <i className=\"rsf-edit-link rsf-base-66 action-button\" onClick={this.startEditName}></i>}\n              &nbsp;&nbsp;\n              {editing && <i className=\"rsf-save-link rsf-base-66 action-button\" onClick={this.updateName}></i>}\n              &nbsp;&nbsp;\n            </Col>\n            <Col sm={8} lg={10}>\n              {!editing && presentationTemplate.name}\n              {editing && <Form.Control type=\"text\" value={presentationTemplate.name} onChange={this.editName} />}\n            </Col>\n          </Row>\n        </td>\n        <td>\n          <ConfirmDialog title={`Are you sure you want to update template: ${presentationTemplate.name}?`}>\n            {(confirm) => (\n              <i\n                className=\"rsf-save-link rsf-base-66 action-button\"\n                onClick={(event) => this.confirmUpdate(event, confirm)}></i>\n            )}\n          </ConfirmDialog>\n          <ConfirmDialog title={`Are you sure you want to delete template: ${presentationTemplate.name}?`}>\n            {(confirm) => (\n              <i\n                className=\"rsf-delete-link rsf-base-66 action-button\"\n                onClick={(event) => this.confirmDelete(event, confirm)}></i>\n            )}\n          </ConfirmDialog>\n        </td>\n      </tr>\n    );\n  }\n\n  @track({ action: \"Start Name Edit\" })\n  public startEditName() {\n    this.setState({\n      editing: true,\n    });\n  }\n\n  public editName = (e) => {\n    const { presentationTemplate } = this.state;\n\n    this.setState({\n      presentationTemplate: presentationTemplate.set(\"name\", e.target.value),\n    });\n  };\n\n  public updateName = () => {\n    const { updateName } = this.props;\n    const { presentationTemplate } = this.state;\n    this.setState({\n      editing: false,\n    });\n\n    updateName(presentationTemplate);\n  };\n\n  public confirmDelete(event, confirm: (arg: any) => any) {\n    const { tracking, presentationTemplate } = this.props;\n\n    tracking.trackEvent({\n      action: \"Start Delete Presentation Template\",\n      presentationTemplate: presentationTemplate.id,\n    });\n\n    confirm(this.remove)(event);\n  }\n\n  public confirmUpdate(event, confirm: (arg: any) => any) {\n    const { tracking, presentationTemplate } = this.props;\n\n    tracking.trackEvent({\n      action: \"Start Full Presentation Template Update\",\n      presentationTemplate: presentationTemplate.id,\n    });\n\n    confirm(this.updateTemplate)(event);\n  }\n\n  public remove = () => {\n    const { remove } = this.props;\n    const { presentationTemplate } = this.state;\n\n    remove(presentationTemplate);\n  };\n\n  public updateTemplate = () => {\n    const { update } = this.props;\n    const { presentationTemplate } = this.state;\n\n    update(presentationTemplate);\n  };\n}\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { Form, Modal, Button, Row, Col } from \"react-bootstrap\";\nimport { PresentationTemplateRecord, fromJSON as templateFromJSON } from \"app2/src/records/PresentationTemplate\";\nimport { getOrgPresentationTemplates } from \"./presentationTemplateSelector\";\nimport { List } from \"immutable\";\nimport { activeDynamicLinks } from \"../PresentationBuilder/PresentationBuilder.service\";\nimport * as presentationTemplateAction from \"app2/src/reducers/presentationTemplate.actions\";\nimport NoTemplateComponent from \"./NoTemplatesComponent\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { PresentationRecord } from \"app2/src/records/Presentation\";\nimport ManagementItem from \"./ManagementItem\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { TrackingData } from \"app2/src/helpers/Analytics\";\n\nconst mapStateToProps = (state: RootState, ownProps: ManagementProps) => {\n  return {\n    presentationTemplates: getOrgPresentationTemplates(state, { orgId: ownProps.orgId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ManagementProps) => {\n  return {\n    createTemplate: (name: string, sortOrder: number) => {\n      let template = templateFromJSON({ name: name, sort_order: sortOrder });\n      template = template.updateIn([\"template\", \"slides\"], (l) => {\n        return ownProps.presentation.dynamic_links.map((dl) => dl.presentable_id);\n      });\n\n      return dispatch(presentationTemplateAction.AsyncActions.addPresentationTemplate(ownProps.orgId, template));\n    },\n    updateTemplateName: (pt: PresentationTemplateRecord) => {\n      return dispatch(presentationTemplateAction.AsyncActions.updatePresentationTemplate(pt));\n    },\n    updateTemplate: (pt: PresentationTemplateRecord) => {\n      pt = pt.updateIn([\"template\", \"slides\"], (l) => {\n        return activeDynamicLinks(ownProps.presentation).map((dl) => dl.presentable_id);\n      });\n\n      return dispatch(presentationTemplateAction.AsyncActions.updatePresentationTemplate(pt));\n    },\n    removeTemplate: (pt: PresentationTemplateRecord) => {\n      return dispatch(presentationTemplateAction.AsyncActions.deletePresentation(pt));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ManagementProps {\n  orgId: number;\n  show: boolean;\n  presentation: PresentationRecord;\n  onClose: () => void;\n  tracking?: TrackingProp;\n}\n\nconst track: Track<TrackingData, ManagementProps> = _track;\n\nexport interface ManagementState {\n  newName: string;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ManagementProps;\n\n@track(\n  (props: Props) => {\n    return {\n      category: \"Presentation Template Management\",\n      action: \"Show\",\n    };\n  },\n  { dispatchOnMount: false },\n)\nclass Management extends React.Component<Props, ManagementState> {\n  public state: ManagementState = { newName: \"\" };\n\n  constructor(props) {\n    super(props);\n\n    this.saveNew = this.saveNew.bind(this);\n    this.updateTemplate = this.updateTemplate.bind(this);\n    this.updateTemplateName = this.updateTemplateName.bind(this);\n    this.deleteTemplate = this.deleteTemplate.bind(this);\n    this.closeWindow = this.closeWindow.bind(this);\n  }\n\n  public componentDidMount() {\n    this.setState({ newName: \"\" });\n  }\n\n  public render() {\n    const { orgId, presentationTemplates } = this.props;\n\n    return (\n      <SpinnerComponent stateProperty={[\"presentationTemplates\", \"presentationTemplatesByOrgId\", orgId, \"loading\"]}>\n        <Modal size=\"lg\" show={this.props.show} onHide={this.closeWindow}>\n          <Modal.Header closeButton>\n            <Modal.Title>\n              <div className=\"row-eq-height\">\n                <Col md={12}>\n                  <h3>Manage Presentation Templates</h3>\n                </Col>\n              </div>\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <Row>\n              <Col sm={12}>\n                <Row className=\"align-items-center\">\n                  <Col sm={12}>{this.renderTemplates(presentationTemplates)}</Col>\n                </Row>\n                <hr />\n                <Form onSubmit={this.saveNew}>\n                  <Row className=\"align-items-center\">\n                    <Col sm={8}>\n                      <Form.Group controlId=\"name\">\n                        <Form.Label>Template Name</Form.Label>\n                        <Form.Control\n                          type=\"text\"\n                          placeholder=\"Template Name\"\n                          value={this.state.newName}\n                          onChange={this.setNewName}\n                          required\n                        />\n                      </Form.Group>\n                    </Col>\n                    <Col sm={4}>\n                      <Button variant=\"secondary\" type=\"submit\">\n                        Save New\n                      </Button>\n                    </Col>\n                  </Row>\n                </Form>\n              </Col>\n            </Row>\n          </Modal.Body>\n          <Modal.Footer>\n            <Button onClick={this.closeWindow}>Close</Button>\n          </Modal.Footer>\n        </Modal>\n      </SpinnerComponent>\n    );\n  }\n\n  public closeWindow() {\n    this.clearName();\n    this.props.onClose();\n  }\n\n  public clearName() {\n    this.setState({\n      newName: \"\",\n    });\n  }\n\n  @track({ action: \"Save New Template\" })\n  public saveNew() {\n    event.preventDefault();\n    const { newName } = this.state;\n    const { createTemplate, presentationTemplates, tracking } = this.props;\n\n    createTemplate(newName, presentationTemplates.size + 1).then((ptr) => {\n      tracking.trackEvent({\n        action: \"Save New Template Successful\",\n        presentationTemplate: ptr.id,\n      });\n    });\n    this.clearName();\n  }\n\n  public setNewName = (e) => {\n    this.setState({\n      newName: e.target.value,\n    });\n  };\n\n  public renderTemplates = (templates: List<PresentationTemplateRecord>) => {\n    if (templates.size <= 0) {\n      return <NoTemplateComponent />;\n    }\n\n    return (\n      <table className=\"table table-striped\">\n        <thead>\n          <tr>\n            <th style={{ width: \"75%\" }}>Existing Template</th>\n            <th style={{ width: \"25%\" }}>Actions</th>\n          </tr>\n        </thead>\n        <tbody>\n          {templates.map((t, idx) => {\n            return (\n              <ManagementItem\n                key={idx}\n                presentationTemplate={t}\n                update={this.updateTemplate}\n                updateName={this.updateTemplateName}\n                remove={this.deleteTemplate}\n              />\n            );\n          })}\n        </tbody>\n      </table>\n    );\n  };\n\n  public updateTemplate(ptr: PresentationTemplateRecord) {\n    const { updateTemplate, tracking } = this.props;\n    tracking.trackEvent({\n      action: \"Update Presentation Template\",\n      presentationTemplate: ptr.id,\n    });\n    updateTemplate(ptr).then((updatedPtr) => {\n      tracking.trackEvent({\n        action: \"Update Presentation Template Successful\",\n        presentationTemplate: ptr.id,\n      });\n    });\n  }\n\n  public updateTemplateName(ptr: PresentationTemplateRecord) {\n    const { updateTemplateName, tracking } = this.props;\n    tracking.trackEvent({\n      action: \"Update Presentation Template Name\",\n      presentationTemplate: ptr.id,\n    });\n    updateTemplateName(ptr).then((updatedPtr) => {\n      tracking.trackEvent({\n        action: \"Update Presentation Template Name Successful\",\n        presentationTemplate: ptr.id,\n      });\n    });\n  }\n\n  public deleteTemplate(ptr: PresentationTemplateRecord) {\n    const { removeTemplate, tracking } = this.props;\n    tracking.trackEvent({\n      action: \"Delete Presentation Template\",\n      presentationTemplate: ptr.id,\n    });\n    removeTemplate(ptr).then((updatedPtr) => {\n      tracking.trackEvent({\n        action: \"Delete Presentation Template Successful\",\n        presentationTemplate: ptr.id,\n      });\n    });\n  }\n}\n\nexport default connector(Management);\n","import * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { EstimateLineItemRecord } from \"app2/src/records/EstimateLineItem\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport { images as imagesSelector } from \"app2/src/selectors/image.selectors\";\n\nexport interface IInspectionSlideProps {\n  lineItem: EstimateLineItemRecord;\n  key: number;\n}\n\nexport const InspectionSlide: React.FC<IInspectionSlideProps> = ({ lineItem, key }) => {\n  const images = useSelector((state: any) => imagesSelector(state, { imageIds: lineItem.image_ids }));\n\n  return (\n    <div key={key} className=\"slide\">\n      <div className=\"placeholder\">\n        <span>{lineItem.name}</span>\n        {images.size > 0 && <img src={getUrl(images.first(), \"small\")} />}\n      </div>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Nullable } from \"app2/src/records\";\nimport { EstimateLineItemRecord } from \"app2/src/records/EstimateLineItem\";\nimport { lineItemsEstimate } from \"app2/src/selectors/estimate.selectors\";\nimport { InspectionSlide } from \"./InspectionSlide\";\n\nexport interface IInspectionSlidesProps {\n  inspectionId: Nullable<number>;\n}\n\nexport const InspectionSlides: React.FC<IInspectionSlidesProps> = ({ inspectionId }) => {\n  if (!inspectionId) {\n    return <span></span>;\n  }\n  const lineItems = useSelector((state: any) => lineItemsEstimate(state, { estimateId: inspectionId }));\n\n  return (\n    <div className=\"scroll-bar-box\">\n      {lineItems\n        .filter((l: EstimateLineItemRecord) => {\n          return l.visibility === \"b\" || l.visibility === \"ab\";\n        })\n        .map((li: EstimateLineItemRecord, idx: number) => {\n          return <InspectionSlide key={idx} lineItem={li} />;\n        })}\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { Map, List } from \"immutable\";\nimport { Card, Row, Col, Button, ButtonGroup, Dropdown } from \"react-bootstrap\";\nimport SlideComponent from \"app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/SlideComponent\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { SlideRecord } from \"app2/src/records/Slide\";\nimport { PresentationRecord } from \"app2/src/records/Presentation\";\nimport { activeDynamicLinks, moveSlide, getSortOrder } from \"./PresentationBuilder.service\";\nimport ListPicker from \"../PresentationTemplate/ListPicker\";\nimport ListManager from \"../PresentationTemplate/Management\";\nimport { PresentationTemplateRecord } from \"app2/src/records/PresentationTemplate\";\nimport { InspectionSlides } from \"./InspectionSlides\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { TrackingData } from \"app2/src/helpers/Analytics\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { DragDropContext, Draggable, Droppable, DropResult } from \"react-beautiful-dnd\";\nimport { DynamicPresentationLinkRecord } from \"app2/src/records/DynamicPresentationLink\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport * as presentationActions from \"app2/src/reducers/presentation.actions\";\nimport { Nullable } from \"app2/src/records\";\n\nconst mapStateToProps = () => {\n  return {};\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    updatePresentation: (presentation) => {\n      dispatch(presentationActions.Actions.receivePresentation(presentation));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface IDynamicPresentationComponentProps {\n  presentation: PresentationRecord;\n  orgPresentations: List<PresentationRecord>;\n  inspectionId: Nullable<number>;\n  slidesById: Map<number, SlideRecord>;\n  orgId: number;\n  tracking?: TrackingProp;\n  dirty: boolean;\n  goTo: () => void;\n  save(presentation: PresentationRecord);\n  applyTemplate(template: PresentationTemplateRecord);\n}\n\nconst track: Track<TrackingData, IDynamicPresentationComponentProps> = _track;\n\nexport interface IDynamicPresentationComponentState {\n  showTemplates: boolean;\n  showTemplateEditor: boolean;\n  sortOrder: \"default\" | \"free-for-all\";\n  dynamicSlides: List<DynamicPresentationLinkRecord>;\n  currentlyReordering: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IDynamicPresentationComponentProps;\n\n@track(\n  //@ts-ignore\n  (props) => {\n    return {\n      category: \"Dynamic Presentation View\",\n      action: \"Show\",\n      presentation: (props.presentation || { id: null }).id,\n    };\n  },\n  { dispatchOnMount: false },\n)\nclass DynamicPresentationComponent extends React.Component<Props, IDynamicPresentationComponentState> {\n  public sliderRef: React.RefObject<HTMLDivElement> = React.createRef<HTMLDivElement>();\n  public state: IDynamicPresentationComponentState = {\n    showTemplates: false,\n    showTemplateEditor: false,\n    sortOrder: \"default\",\n    dynamicSlides: List<DynamicPresentationLinkRecord>(),\n    currentlyReordering: false,\n  };\n\n  constructor(props: Props) {\n    super(props);\n\n    this.applyTemplate = this.applyTemplate.bind(this);\n    this.selectTemplate = this.selectTemplate.bind(this);\n    this.closeTemplatePicker = this.closeTemplatePicker.bind(this);\n    this.editTemplate = this.editTemplate.bind(this);\n    this.closeTemplateEditor = this.closeTemplateEditor.bind(this);\n    this.onDragEnd = this.onDragEnd.bind(this);\n    this.reorderPresentation = this.reorderPresentation.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: IDynamicPresentationComponentProps) {\n    const { orgPresentations } = this.props;\n    if (this.props.presentation !== prevProps.presentation) {\n      this.setState({\n        sortOrder: getSortOrder(this.props.presentation, orgPresentations),\n        dynamicSlides: activeDynamicLinks(this.props.presentation),\n      });\n    }\n  }\n\n  public onDragEnd(result: DropResult) {\n    if (!result.destination || result.destination.index === result.source.index) {\n      return;\n    }\n\n    const { dynamicSlides } = this.state;\n    const { updatePresentation, presentation } = this.props;\n    const from = result.source.index;\n    const to = result.destination.index;\n    const slide = dynamicSlides.get(result.source.index);\n\n    const updatedSlides: List<DynamicPresentationLinkRecord> = moveSlide(dynamicSlides, slide, from, to);\n    let pres = presentation;\n    pres = pres.update(\"dynamic_links\", (_s: List<DynamicPresentationLinkRecord>) => updatedSlides);\n    updatePresentation(pres);\n    this.setState({\n      sortOrder: \"free-for-all\",\n      dynamicSlides: updatedSlides,\n    });\n  }\n\n  public reorderPresentation() {\n    this.setState({\n      currentlyReordering: true,\n    });\n  }\n\n  public render() {\n    const { presentation, orgId, slidesById, save, goTo, dirty, inspectionId } = this.props;\n    const { showTemplates, showTemplateEditor, dynamicSlides, currentlyReordering } = this.state;\n\n    if (!presentation || dynamicSlides === undefined) {\n      return <SpinnerComponent localProperty={true} />;\n    }\n\n    const noSlidesView = activeDynamicLinks(presentation).size === 0;\n\n    return (\n      <SpinnerComponent localProperty={presentation.loading}>\n        <Row>\n          <Col sm={12}>\n            <Card>\n              <Card.Header className=\"d-flex align-items-center justify-content-between h-100\">\n                Final Presentation\n                <div className=\"d-sm-flex flex-sm-column flex-md-row justify-content-sm-between\">\n                  <Dropdown as={ButtonGroup} className=\"pull-right\">\n                    <Button variant=\"default\" onClick={this.selectTemplate}>\n                      Select a Template\n                    </Button>\n                    <Can resource=\"presentation_template\" permission=\"create\">\n                      <Dropdown.Toggle split variant=\"default\" className=\"btn-narrow\"></Dropdown.Toggle>\n                      <Dropdown.Menu className=\"super-colors\">\n                        <Dropdown.Item eventKey=\"1\" onClick={this.editTemplate}>\n                          Manage Templates\n                        </Dropdown.Item>\n                      </Dropdown.Menu>\n                    </Can>\n                  </Dropdown>\n                  <Button\n                    variant=\"default\"\n                    className={\"pull-right mb-sm-1 mb-md-0\"}\n                    disabled={presentation.id <= 0 || dirty ? true : false}\n                    onClick={goTo}>\n                    Present\n                  </Button>\n                  <Button\n                    variant=\"default\"\n                    className={\"pull-right\"}\n                    disabled={presentation.id <= 0 || dirty ? true : false || currentlyReordering}\n                    onClick={() => this.reorderPresentation()}>\n                    Reorder\n                  </Button>\n                  <Button\n                    variant=\"default\"\n                    disabled={!dirty}\n                    className=\"pull-right\"\n                    onClick={() => {\n                      this.setState({ currentlyReordering: false });\n                      save(presentation);\n                    }}>\n                    Save\n                  </Button>\n                </div>\n              </Card.Header>\n              <Card.Body>\n                <Row>\n                  {/*\n                  // @ts-ignore */}\n                  <Col sm={12} ref={this.sliderRef} className=\"slide-container\">\n                    {noSlidesView ? <span>No Slides</span> : null}\n                    <DragDropContext onDragEnd={this.onDragEnd}>\n                      <Droppable direction=\"horizontal\" droppableId=\"droppable\">\n                        {(provided, snapshot) => (\n                          <div\n                            className=\"droppable scroll-bar-box\"\n                            ref={provided.innerRef}\n                            {...provided.droppableProps}>\n                            {dynamicSlides.map((dl: DynamicPresentationLinkRecord, idx: number) => {\n                              if (dl.kind === \"default\") {\n                                return (\n                                  <Draggable\n                                    key={idx}\n                                    draggableId={idx.toString()}\n                                    index={idx}\n                                    isDragDisabled={!currentlyReordering}>\n                                    {(provided, snapshot) => (\n                                      <div\n                                        key={idx}\n                                        ref={provided.innerRef}\n                                        {...provided.draggableProps}\n                                        {...provided.dragHandleProps}>\n                                        <SlideComponent slide={slidesById.get(dl.presentable_id)} showToggle={false} />\n                                      </div>\n                                    )}\n                                  </Draggable>\n                                );\n                              } else if (dl.kind === \"inspection\") {\n                                return (\n                                  <Draggable\n                                    key={idx}\n                                    draggableId={idx.toString()}\n                                    index={idx}\n                                    isDragDisabled={!currentlyReordering}>\n                                    {(provided, snapshot) => (\n                                      <div\n                                        key={idx}\n                                        ref={provided.innerRef}\n                                        {...provided.draggableProps}\n                                        {...provided.dragHandleProps}\n                                        className=\"droppable\">\n                                        {currentlyReordering ? (\n                                          <div className=\"slide\">\n                                            <div className=\"placeholder\">\n                                              <span>Inspection Slides</span>\n                                            </div>\n                                          </div>\n                                        ) : (\n                                          <InspectionSlides inspectionId={inspectionId} />\n                                        )}\n                                      </div>\n                                    )}\n                                  </Draggable>\n                                );\n                              }\n                            })}\n                          </div>\n                        )}\n                      </Droppable>\n                    </DragDropContext>\n                  </Col>\n                </Row>\n              </Card.Body>\n            </Card>\n          </Col>\n        </Row>\n        <ListPicker\n          show={showTemplates}\n          orgId={orgId}\n          onSelect={this.applyTemplate}\n          onClose={this.closeTemplatePicker}\n        />\n        <ListManager\n          show={showTemplateEditor}\n          orgId={orgId}\n          presentation={presentation}\n          onClose={this.closeTemplateEditor}\n        />\n      </SpinnerComponent>\n    );\n  }\n\n  public applyTemplate(pt: PresentationTemplateRecord) {\n    const { applyTemplate, tracking } = this.props;\n\n    this.setState({ showTemplates: false });\n\n    tracking.trackEvent({\n      action: \"Apply Template\",\n      presentationTemplate: pt.id,\n    });\n    applyTemplate(pt);\n  }\n\n  @track({ action: \"Show Template Selector\" })\n  public selectTemplate() {\n    this.setState({ showTemplates: true });\n  }\n\n  @track({ action: \"Close Template Selector\" })\n  public closeTemplatePicker() {\n    this.setState({ showTemplates: false });\n  }\n\n  @track({ action: \"Open Template Editor\" })\n  public editTemplate() {\n    this.setState({ showTemplateEditor: true });\n  }\n\n  @track({ action: \"Close Template Editor\" })\n  public closeTemplateEditor() {\n    this.setState({ showTemplateEditor: false });\n  }\n}\n\nexport default connector(DynamicPresentationComponent);\n","import * as React from \"react\";\nimport { Card, Row, Col } from \"react-bootstrap\";\nimport { InspectionSlides } from \"./InspectionSlides\";\nimport { Nullable } from \"app2/src/records\";\n\nexport interface IInspectionComponentProps {\n  inspectionId: Nullable<number>;\n}\n\nconst InspectionComponent: React.FC<IInspectionComponentProps> = ({ inspectionId }) => {\n  return (\n    <Row>\n      <Col sm={12}>\n        <Card>\n          <Card.Header>Inspection Items (Analyze Needs)</Card.Header>\n          <Card.Body>\n            <Row>\n              <Col sm={12} className=\"slide-container\">\n                {inspectionId ? <InspectionSlides inspectionId={inspectionId} /> : <span>No Inspection</span>}\n              </Col>\n            </Row>\n          </Card.Body>\n        </Card>\n      </Col>\n    </Row>\n  );\n};\n\nexport default InspectionComponent;\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { Card, Accordion, Row, Col, Tooltip, Button } from \"react-bootstrap\";\nimport { List } from \"immutable\";\nimport SlideComponent from \"./SlideComponent\";\nimport { Nullable } from \"app2/src/records\";\nimport { PresentationRecord } from \"app2/src/records/Presentation\";\nimport * as presentationActions from \"app2/src/reducers/presentation.actions\";\nimport * as builderService from \"./PresentationBuilder.service\";\nimport { SlideRecord } from \"app2/src/records/Slide\";\nimport { getSortOrder } from \"./PresentationBuilder.service\";\n\nconst mapStateToProps = (state: RootState, ownProps: IPresentationComponentProps) => {\n  return {};\n};\n\nconst mapDispatchToProps = (\n  dispatch: ThunkDispatch<RootState, {}, RootActions>,\n  ownProps: IPresentationComponentProps,\n) => {\n  return {\n    updatePresentation: (presentation: PresentationRecord) => {\n      dispatch(presentationActions.Actions.receivePresentation(presentation));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface IPresentationComponentProps {\n  presentation: any;\n  dynamicPresentation: PresentationRecord;\n  inspectionId: number;\n  orgPresentations: List<PresentationRecord>;\n  selectedEventKey: Nullable<string>;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IPresentationComponentProps;\n\nclass PresentationComponent extends React.Component<Props> {\n  public sliderRef: React.RefObject<HTMLDivElement>;\n  protected _tooltip = (<Tooltip id={this.props.presentation.id}>Present Source Presentation</Tooltip>);\n\n  constructor(props) {\n    super(props);\n\n    this.sliderRef = React.createRef();\n    this.addSlides = this.addSlides.bind(this);\n    this.removeSlides = this.removeSlides.bind(this);\n  }\n\n  public addSlides(e) {\n    e.stopPropagation();\n    const { presentation, dynamicPresentation, updatePresentation, orgPresentations } = this.props;\n    const addSlidesBuilderPresentation = builderService.addSlides(\n      dynamicPresentation,\n      presentation,\n      orgPresentations,\n      getSortOrder(presentation, orgPresentations),\n    );\n    updatePresentation(addSlidesBuilderPresentation);\n  }\n\n  public removeSlides(e) {\n    e.stopPropagation();\n    const { presentation, dynamicPresentation, updatePresentation } = this.props;\n    const removeSlidesBuilderPresentation = builderService.removeSlides(dynamicPresentation, presentation);\n    updatePresentation(removeSlidesBuilderPresentation);\n  }\n\n  public render() {\n    const { dynamicPresentation, presentation, selectedEventKey } = this.props;\n    return (\n      <Card>\n        <Accordion.Toggle as={Card.Header} eventKey={presentation.id.toString()}>\n          <Row>\n            <Col sm={12}>\n              {presentation.name}&nbsp;&nbsp;\n              <i className=\"rsf-plus-link\" onClick={this.addSlides} title=\"Add All Slides\" />\n              &nbsp;&nbsp;\n              <i className=\"rsf-minus-link\" onClick={this.removeSlides} title=\"Remove All Slides\" />\n              {selectedEventKey !== presentation.id.toString() && (\n                <a\n                  href={presentation.url}\n                  title=\"View Original Presentation\"\n                  onClick={(e) => e.stopPropagation()}\n                  target=\"_blank\"></a>\n              )}\n              <i\n                className={`fa fa-angle-${selectedEventKey === presentation.id.toString() ? \"up\" : \"down\"} pull-right`}\n              />\n            </Col>\n          </Row>\n        </Accordion.Toggle>\n        <Accordion.Collapse eventKey={presentation.id.toString()}>\n          <Card.Body>\n            <Row>\n              {/*\n              // @ts-ignore */}\n              <Col sm={12} className=\"slide-container\" ref={this.sliderRef}>\n                <div className=\"scroll-bar-box\">\n                  {presentation.slides.map((s, idx) => {\n                    return (\n                      <SlideComponent\n                        key={idx}\n                        slide={s}\n                        selected={builderService.slideSelected(dynamicPresentation, s.id)}\n                        toggle={(state) => {\n                          if (state) {\n                            this.addSlide(s);\n                          } else {\n                            this.removeSlide(s.id);\n                          }\n                        }}\n                        showToggle={true}\n                      />\n                    );\n                  })}\n                </div>\n              </Col>\n            </Row>\n          </Card.Body>\n        </Accordion.Collapse>\n      </Card>\n    );\n  }\n\n  protected removeSlide = (slideId: number) => {\n    const { dynamicPresentation, updatePresentation } = this.props;\n\n    updatePresentation(builderService.removeSlide(dynamicPresentation, slideId));\n  };\n\n  protected addSlide = (slide: SlideRecord) => {\n    const { dynamicPresentation, updatePresentation, orgPresentations } = this.props;\n\n    updatePresentation(\n      builderService.addSlide(\n        dynamicPresentation,\n        slide,\n        orgPresentations,\n        getSortOrder(dynamicPresentation, orgPresentations),\n      ),\n    );\n  };\n}\n\nexport default connector(PresentationComponent);\n","import * as React from \"react\";\nimport { List } from \"immutable\";\nimport { Accordion, Row, Col } from \"react-bootstrap\";\nimport PresentationComponent from \"app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/PresentationComponent\";\nimport { Nullable } from \"app2/src/records\";\nimport { PresentationRecord } from \"app2/src/records/Presentation\";\n\nexport interface IPresentationOverviewProps {\n  dynamicPresentation: PresentationRecord;\n  presentations: List<PresentationRecord>;\n  inspectionId: number;\n}\n\nexport interface IPresentationOverviewState {\n  selectedEventKey: Nullable<string>;\n}\n\nexport default class PresentationOverview extends React.Component<\n  IPresentationOverviewProps,\n  IPresentationOverviewState\n> {\n  constructor(props) {\n    super(props);\n    this.state = {\n      selectedEventKey: null,\n    };\n  }\n\n  public render() {\n    const { presentations, dynamicPresentation, inspectionId } = this.props;\n    const { selectedEventKey } = this.state;\n\n    return (\n      <Row>\n        <Col sm={12}>\n          <Accordion\n            className=\"bucket-accordion\"\n            activeKey={selectedEventKey}\n            onSelect={(selectedEventKey) => this.setState({ selectedEventKey })}>\n            {presentations.map((a, idx) => {\n              return (\n                <PresentationComponent\n                  key={a.id}\n                  inspectionId={inspectionId}\n                  orgPresentations={presentations}\n                  dynamicPresentation={dynamicPresentation}\n                  presentation={a}\n                  selectedEventKey={selectedEventKey}\n                />\n              );\n            })}\n          </Accordion>\n        </Col>\n      </Row>\n    );\n  }\n}\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { PresentationRecord } from \"app2/src/records/Presentation\";\nimport { Map, List } from \"immutable\";\n\nconst presentationsById = (state: RootState) => state.getIn([\"presentations\", \"byId\"]);\nconst orgPresentationIds = (state: RootState, props: any) => {\n  if (!props.orgId) {\n    return List();\n  }\n\n  return state.getIn([\"presentations\", \"presentationsByOrgId\", parseInt(props.orgId), \"presentations\"]);\n};\nconst jobPresentationIds = (state: RootState, props: any) => {\n  if (!props.jobId) {\n    return List();\n  }\n\n  return state.getIn([\"presentations\", \"presentationsByJobId\", parseInt(props.jobId), \"presentations\"]);\n};\nconst slideIds = (state: RootState) => state.getIn([\"presentations\", \"slidesById\"]);\n\nexport const getOrgPresentations = createSelector(\n  [presentationsById, orgPresentationIds],\n  (byId: Map<number, PresentationRecord>, presentations: List<number>) => {\n    if (!presentations) {\n      return List();\n    }\n\n    const interim = presentations\n      .map((id) => byId.get(id))\n      .filter((p) => p.kind === \"default\")\n      .sortBy((d) => d.sort_order);\n    return interim;\n  },\n);\n\nexport const getJobPresentations = createSelector(\n  [presentationsById, jobPresentationIds],\n  (byId: Map<number, PresentationRecord>, presentations: List<number>) => {\n    if (!presentations) {\n      return List();\n    }\n\n    const interim = presentations.map((id) => byId.get(id)).sortBy((d) => d.sort_order);\n    return interim;\n  },\n);\n\nexport const getFirstJobPresentation = createSelector(\n  [presentationsById, jobPresentationIds],\n  (byId: Map<number, PresentationRecord>, presentations: List<number>) => {\n    if (!presentations) {\n      return undefined;\n    }\n\n    if (presentations.size <= 0) {\n      return null;\n    }\n\n    return byId.get(presentations.first({} as any));\n  },\n);\n","import { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { push } from \"connected-react-router/immutable\";\nimport * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useHistory } from \"react-router\";\n\ninterface IReactRouterDirtyWatcher {\n  check: () => boolean;\n  reset: () => void;\n  title?: string;\n  validPathTest?: RegExp;\n}\n\nexport const dirtyWatcherTitle = \"There are unsaved changes that will be lost. Are you sure you want to continue?\";\n\nexport const ReactRouterDirtyWatcher: React.FC<IReactRouterDirtyWatcher> = ({ check, reset, title, validPathTest }) => {\n  if (!title) {\n    title = dirtyWatcherTitle;\n  }\n  const history = useHistory();\n  const dispatch = useDispatch();\n\n  const [openDialog, setOpenDialog] = useState(0);\n  const [currentPath, setCurrentPath] = useState(\"\");\n  const [currentSearch, setCurrentSearch] = useState(\"\");\n  const unblockRef: any = React.useRef();\n\n  useEffect(() => {\n    unblockRef.current = history.block((prompt) => {\n      if (validPathTest && prompt.pathname.match(new RegExp(validPathTest))) {\n        return;\n      }\n\n      if (check()) {\n        setCurrentPath(prompt.pathname);\n        setCurrentSearch(prompt.search || \"\");\n        setOpenDialog((prevOpenDialog) => prevOpenDialog + 1);\n        return false;\n      }\n    });\n\n    return () => {\n      unblockRef.current();\n    };\n  }, [history, check]);\n\n  const handleOK = useCallback(() => {\n    reset();\n    unblockRef.current();\n    dispatch(push(currentPath + currentSearch));\n  }, [currentPath, currentSearch, history, dispatch]);\n\n  return <ConfirmDialog title={title} openDialog={openDialog} onConfirm={handleOK} />;\n};\n","import * as React from \"react\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { ILocationData } from \"app2/src/records/Location\";\nimport { push } from \"app2/src/reducers/router.actions\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { dirtyWatcherTitle, ReactRouterDirtyWatcher } from \"app2/src/components/Common/ReactRouterDirtyWatcher\";\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return { push: (location: Partial<ILocationData>) => dispatch(push(location)) };\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport interface DirtyWatcherProps {\n  check: () => boolean;\n  reset: () => void;\n  reactRouter?: boolean;\n}\n\ninterface DirtyWatcherState {\n  openDialog: number;\n  location: Partial<ILocationData>;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & DirtyWatcherProps;\n\nclass DirtyWatcher extends React.Component<Props, DirtyWatcherState> {\n  public title = dirtyWatcherTitle;\n  private _locationChangeBinding: () => void;\n\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      openDialog: 0,\n      location: null,\n    };\n\n    this.onRefresh = this.onRefresh.bind(this);\n    this.navigate = this.navigate.bind(this);\n  }\n\n  public componentDidMount(): void {\n    const $rootScope = StoreRegistry.get<RsfRootScope>(\"$rootScope\");\n\n    window.addEventListener(\"beforeunload\", this.onRefresh);\n\n    this._locationChangeBinding = $rootScope.$on(\"RSF_StateChange\", (event: ng.IAngularEvent, args: any) => {\n      const { check } = this.props;\n      if (check()) {\n        args.transition._deferred.reject();\n        this.setState((state) => ({\n          openDialog: state.openDialog + 1,\n          location: { pathname: args.transition.to().name, query: args.transition.params() },\n        }));\n      }\n    });\n  }\n\n  public componentWillUnmount(): void {\n    window.removeEventListener(\"beforeunload\", this.onRefresh);\n    if (this._locationChangeBinding) {\n      this._locationChangeBinding();\n    }\n  }\n\n  public onRefresh(e): any {\n    const { check } = this.props;\n    if (check()) {\n      e.returnValue = this.title;\n      return this.title;\n    } else {\n      return undefined;\n    }\n  }\n\n  public navigate() {\n    const { location } = this.state;\n    const { reset, push } = this.props;\n    reset();\n    push(location);\n  }\n\n  public render(): React.ReactNode {\n    const { openDialog } = this.state;\n    const { children, reactRouter, check, reset } = this.props;\n    return (\n      <div>\n        {reactRouter ? (\n          <ReactRouterDirtyWatcher title={this.title} check={check} reset={reset} />\n        ) : (\n          <ConfirmDialog title={this.title} openDialog={openDialog} onConfirm={this.navigate} />\n        )}\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default connector(DirtyWatcher);\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { List } from \"immutable\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { Dispatch, TrackingData } from \"app2/src/helpers/Analytics\";\nimport * as presentationActions from \"app2/src/reducers/presentation.actions\";\nimport * as presentationTemplateActions from \"app2/src/reducers/presentationTemplate.actions\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport DynamicPresentationComponent from \"./DynamicPresentationComponent\";\nimport InspectionComponent from \"./InspectionComponent\";\nimport PresentationOverview from \"./PresentationOverview\";\nimport { PresentationRecord } from \"app2/src/records/Presentation\";\nimport { getOrgPresentations, getFirstJobPresentation, getJobPresentations } from \"./presentationSelector\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport * as builderService from \"./PresentationBuilder.service\";\nimport { PresentationTemplateRecord } from \"app2/src/records/PresentationTemplate\";\nimport { Nullable } from \"app2/src/records\";\nimport { IndexPresentationsRecord } from \"app2/src/reducers/presentation.reducer\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport DirtyWatcher from \"app2/src/components/Common/DirtyWatcher\";\n\nconst mapStateToProps = (state: RootState, ownProps: IPresentationBuilderContainerProps) => {\n  const job = currentJob(state);\n\n  return {\n    jobPresentation: getFirstJobPresentation(state, { jobId: job.id }),\n    jobPresentations: state.getIn([\"presentations\", \"presentationsByJobId\", job.id], new IndexPresentationsRecord()),\n    orgPresentations: getOrgPresentations(state, { orgId: job.org_id }),\n    slidesById: state.getIn([\"presentations\", \"slidesById\"]),\n    job,\n  };\n};\n\nconst mapDispatchToProps = (\n  dispatch: ThunkDispatch<RootState, {}, RootActions>,\n  ownProps: IPresentationBuilderContainerProps,\n) => {\n  return {\n    loadJobPresentation: (jobId: number, orgPresentations: List<PresentationRecord>, inspectionId?: number) => {\n      return dispatch(presentationActions.AsyncActions.listJobPresentations(jobId, [\"slides\"])).then(\n        (presentations) => {\n          if (presentations.size <= 0) {\n            const p = builderService.buildInitialJobPresentation(jobId, inspectionId);\n            dispatch(presentationActions.Actions.receivePresentation(p));\n            return p;\n          }\n\n          const p = builderService.setupDynamicLinkSlides(\n            presentations.first() as PresentationRecord,\n            orgPresentations,\n          );\n\n          dispatch(presentationActions.Actions.receivePresentation(p));\n          return p;\n        },\n      );\n    },\n    loadOrgPresentations: (orgId: number) => {\n      return dispatch(presentationActions.AsyncActions.listOrgPresentations(orgId, [\"slides\"]));\n    },\n    saveDynamicPresentation: (jobId: number, pres: PresentationRecord, orgPresentations: List<PresentationRecord>) => {\n      dispatch(presentationActions.Actions.fetchPresentation(pres.id));\n      if (pres.id <= 0) {\n        return dispatch(presentationActions.AsyncActions.addJobPresentation(jobId, pres)).then((a) => {\n          dispatch(presentationActions.Actions.removePresentation(pres.id));\n          dispatch(presentationActions.Actions.removeJobPresentation(jobId, pres.id));\n\n          a = builderService.setupDynamicLinkSlides(a, orgPresentations);\n          dispatch(presentationActions.Actions.receivePresentation(a));\n          return a;\n        });\n      }\n\n      return dispatch(presentationActions.AsyncActions.updatePresentation(pres)).then((a) => {\n        a = builderService.setupDynamicLinkSlides(a, orgPresentations);\n        dispatch(presentationActions.Actions.receivePresentation(a));\n\n        return a;\n      });\n    },\n    loadTemplates: (orgId: number) => {\n      return dispatch(presentationTemplateActions.AsyncActions.listPresentationTemplates(orgId));\n    },\n    updatePresentation: (presentation: PresentationRecord) => {\n      dispatch(presentationActions.Actions.receivePresentation(presentation));\n    },\n    loadInspection: (inspectionId: number) => {\n      dispatch(estimateActions.AsyncActions.getEstimate(inspectionId));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface IPresentationBuilderContainerProps {\n  tracking?: TrackingProp;\n}\n\nconst track: Track<TrackingData, IPresentationBuilderContainerProps> = _track;\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IPresentationBuilderContainerProps;\n\nexport interface IPresentationBuilderContainerState {\n  inspectionId: Nullable<number>;\n  savedState: string;\n  dirty: boolean;\n  isNew: boolean;\n}\n\n@track(\n  (props: Props) => {\n    return {\n      category: \"Presentation Builder\",\n      action: \"Show\",\n      job: props.job.id,\n      org: props.job.org_id,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n    dispatchOnMount: true,\n  },\n)\nclass PresentationBuilderContainer extends React.Component<Props, IPresentationBuilderContainerState> {\n  public state = {\n    inspectionId: null,\n    savedState: \"\",\n    dirty: false,\n    isNew: false,\n  };\n\n  constructor(props: Props) {\n    super(props);\n\n    this.applyTemplate = this.applyTemplate.bind(this);\n    this.savePresentation = this.savePresentation.bind(this);\n  }\n\n  public componentDidMount() {\n    const { loadJobPresentation, loadOrgPresentations, loadInspection, loadTemplates, job } = this.props;\n\n    const promises = [loadOrgPresentations(job.org_id)];\n\n    const inspectionId = job.getIn([\"inspections\", 0, \"id\"]);\n    if (inspectionId) {\n      this.setState({ inspectionId });\n      promises.push(loadInspection(inspectionId));\n    }\n\n    Promise.all(promises).then(() => {\n      loadJobPresentation(job.id, this.props.orgPresentations, inspectionId).then((j) => {\n        if (j.id <= 0) {\n          this.setState({ isNew: true });\n        }\n        this.resetState();\n        this.checkInspectionSlide();\n      });\n    });\n\n    loadTemplates(job.org_id);\n  }\n\n  public componentDidUpdate(prevProps: Props) {\n    if (prevProps.jobPresentation && !prevProps.jobPresentation.equals(this.props.jobPresentation)) {\n      this.check();\n    }\n  }\n\n  public render() {\n    const { orgPresentations, jobPresentation, jobPresentations, slidesById, job } = this.props;\n    const { inspectionId, dirty, isNew } = this.state;\n\n    return (\n      <SpinnerComponent localProperty={jobPresentations.loading}>\n        <DirtyWatcher check={this.check} reset={this.reset} reactRouter />\n        <Row className=\"presentation-builder\">\n          <Col sm={12}>\n            <Row>\n              <Col sm={12}>\n                <DynamicPresentationComponent\n                  presentation={jobPresentation}\n                  inspectionId={inspectionId}\n                  orgId={job.org_id}\n                  goTo={this.goToPresentation}\n                  slidesById={slidesById}\n                  dirty={dirty || isNew}\n                  applyTemplate={this.applyTemplate}\n                  orgPresentations={orgPresentations}\n                  save={this.savePresentation}\n                />\n                <InspectionComponent inspectionId={inspectionId} />\n                <PresentationOverview\n                  presentations={orgPresentations}\n                  inspectionId={inspectionId}\n                  dynamicPresentation={jobPresentation}\n                />\n              </Col>\n            </Row>\n          </Col>\n        </Row>\n      </SpinnerComponent>\n    );\n  }\n\n  public goToPresentation = () => {\n    const { jobPresentation } = this.props;\n    const presentation_url = `${jobPresentation.url}?dynamic=true`;\n\n    window.open(presentation_url, \"_blank\");\n  };\n\n  public savePresentation = () => {\n    const { job, saveDynamicPresentation, jobPresentation, orgPresentations } = this.props;\n\n    saveDynamicPresentation(job.id, jobPresentation, orgPresentations).then(() => {\n      this.setState({ isNew: false });\n      this.resetState();\n    });\n  };\n\n  public applyTemplate(template: PresentationTemplateRecord) {\n    const { jobPresentation, orgPresentations, updatePresentation } = this.props;\n\n    updatePresentation(builderService.applyTemplateToPresentation(template, jobPresentation, orgPresentations));\n  }\n\n  public check = (): boolean => {\n    const { savedState } = this.state;\n    const { jobPresentation } = this.props;\n\n    if (!jobPresentation || !savedState) {\n      return false;\n    }\n\n    const newCheck = savedState !== JSON.stringify(jobPresentation.toJS());\n\n    this.setState((prevState) => {\n      if (prevState.dirty !== newCheck) {\n        return {\n          dirty: newCheck,\n        };\n      }\n    });\n    return newCheck;\n  };\n\n  // return the state to the initial, reload from server\n  public reset = (): ng.IPromise<any> => {\n    const { loadJobPresentation, orgPresentations, job } = this.props;\n    const { inspectionId } = this.state;\n\n    return loadJobPresentation(job.id, orgPresentations, inspectionId).then((j) => {\n      this.setState({\n        savedState: JSON.stringify(this.props.jobPresentation.toJS()),\n        dirty: false,\n        isNew: j.id <= 0,\n      });\n    }) as any as ng.IPromise<any>;\n  };\n\n  // An Initial State setting\n  public resetState = () => {\n    const { jobPresentation } = this.props;\n\n    this.setState({\n      savedState: JSON.stringify(jobPresentation?.toJS()),\n      dirty: false,\n    });\n  };\n\n  public trackEvent = (action: any, props: any): void => {\n    const { tracking, jobPresentation } = this.props;\n\n    tracking.trackEvent({\n      action: action,\n      presentation: jobPresentation ? jobPresentation.id : null,\n      ...props,\n    });\n  };\n\n  public checkInspectionSlide = () => {\n    const { updatePresentation } = this.props;\n    let { jobPresentation } = this.props;\n    const { inspectionId } = this.state;\n\n    jobPresentation = builderService.checkInspectionDynamicPresentationLink(jobPresentation, inspectionId);\n\n    updatePresentation(jobPresentation);\n    return jobPresentation;\n  };\n}\n\nexport default connector(PresentationBuilderContainer);\n","import { connectFC } from \"app2/src/connect\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getAuthorization } from \"app2/src/selectors/token.selectors\";\nimport * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport track from \"react-tracking\";\nimport { currentUserOrgId } from \"app2/src/selectors/user.selectors\";\nimport * as config from \"react-global-configuration\";\nimport { Button } from \"react-bootstrap\";\nimport { accessUid, authToken } from \"app2/src/selectors/auth.selectors\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { Acl } from \"app2/src/helpers/Acl\";\n\nexport const FinanceTab: React.FC = () => {\n  // Selectors\n  const orgId = useSelector(currentUserOrgId);\n  const token = useSelector(authToken);\n  const occPayAuthorized = useSelector((state: RootState) =>\n    getAuthorization(state, { orgId, integration: \"occ_pay\" }),\n  );\n  const authId = useSelector(accessUid);\n  const canPaymentReport = Acl.can(\"payment_report\", \"payment\");\n  const canDepositReport = Acl.can(\"deposit_report\", \"payment\");\n  const canChargebackReport = Acl.can(\"chargeback_report\", \"payment\");\n  const hasPermissions = canPaymentReport || canDepositReport || canChargebackReport;\n\n  // Local State\n  const defaultActiveTab =\n    canChargebackReport && !canPaymentReport && !canDepositReport\n      ? \"chargebacks\"\n      : canDepositReport && !canPaymentReport\n        ? \"deposits\"\n        : \"payments\";\n  const [activeTab, setActiveTab] = React.useState<\"payments\" | \"deposits\" | \"chargebacks\" | \"\">(\"\");\n  const forceActiveTab = activeTab || defaultActiveTab;\n\n  // Constants\n  const iframeUrl = token\n    ? `${config.get(\"RSF_ANALYTICS_URL\")}/orgs/${orgId}/${forceActiveTab}/report?token=${token}&auth_id=${authId}`\n    : \"\";\n\n  if (!occPayAuthorized || !hasPermissions) return null;\n\n  return (\n    <div>\n      <div className=\"d-flex justify-content-between\">\n        <h1>Finance</h1>\n\n        <div className=\"d-flex align-items-center\">\n          <Can resource=\"payment\" permission=\"payment_report\" exactMatch>\n            <Button\n              className=\"rounded-0 border-0\"\n              variant={forceActiveTab === \"payments\" ? \"primary\" : \"secondary\"}\n              onClick={() => setActiveTab(\"payments\")}>\n              Payments\n            </Button>\n          </Can>\n          <Can resource=\"payment\" permission=\"deposit_report\" exactMatch>\n            <Button\n              className=\"rounded-0 border-0\"\n              variant={forceActiveTab === \"deposits\" ? \"primary\" : \"secondary\"}\n              onClick={() => setActiveTab(\"deposits\")}>\n              Deposits\n            </Button>\n          </Can>\n          <Can resource=\"payment\" permission=\"chargeback_report\" exactMatch>\n            <Button\n              className=\"rounded-0 border-0\"\n              variant={forceActiveTab === \"chargebacks\" ? \"primary\" : \"secondary\"}\n              onClick={() => setActiveTab(\"chargebacks\")}>\n              Chargebacks\n            </Button>\n          </Can>\n        </div>\n      </div>\n\n      <iframe src={iframeUrl} />\n    </div>\n  );\n};\n\nexport default connectFC(track({ category: \"Finance\" }, { dispatch: Dispatch.dispatch })(FinanceTab));\n","import { isString } from \"underscore\";\n\nexport const capitalizeString = (input: string) => {\n  if (!input) {\n    return \"\";\n  }\n  return `${input.charAt(0).toUpperCase()}${input.slice(1).toLowerCase()}`;\n};\n\nexport const titleCaseString = (input: string) => {\n  if (!input) {\n    return \"\";\n  }\n  return input\n    .replace(/([^A-Z])([A-Z])/g, \"$1 $2\") // split cameCase\n    .replace(/[_\\-]+/g, \" \") // split snake_case and lisp-case\n    .toLowerCase()\n    .replace(/(^\\w|\\b\\w)/g, function (m) {\n      return m.toUpperCase();\n    }) // title case words\n    .replace(/\\s+/g, \" \") // collapse repeated whitespace\n    .replace(/^\\s+|\\s+$/, \"\"); // remove leading/trailing whitespace\n};\n\nexport const firstName = (input: string): string => {\n  if (!input || !isString(input)) return \"\";\n\n  return input.split(\" \")[0];\n};\n\nexport const lastName = (input: string): string => {\n  if (!input || !isString(input)) return \"\";\n\n  const names = input.split(\" \");\n  names.shift(); // drop the first name\n  return names.join(\" \"); // join the rest\n};\n","import * as React from \"react\";\nimport { FormInput, FormInputProps } from \"app2/src/components/JobMetadata/FormInput\";\nimport { createContext, useContext, useEffect, useState } from \"react\";\nimport { Map } from \"immutable\";\n\ninterface RenderedFieldsContextType {\n  renderedFields: Map<string, boolean>;\n  addRenderedField: (field: string) => void;\n}\n\nexport const RenderedFieldsContext = createContext<RenderedFieldsContextType>({\n  renderedFields: Map(),\n  addRenderedField: (field: string) => {},\n});\n\nexport const RenderedFieldsProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n  const [renderedFields, setRenderedFields] = useState(() => Map<string, boolean>());\n\n  const addRenderedField = (field: string) => {\n    setRenderedFields((prevFields) => prevFields.set(field, true));\n  };\n\n  return (\n    <RenderedFieldsContext.Provider value={{ renderedFields, addRenderedField }}>\n      {children}\n    </RenderedFieldsContext.Provider>\n  );\n};\n\nexport const UniqueFormInput: React.FC<FormInputProps> = (props) => {\n  const { renderedFields } = useContext(RenderedFieldsContext);\n  const [shouldShow, setShouldShow] = useState(false);\n\n  useEffect(() => {\n    setShouldShow(!renderedFields.has(props.integrationKey));\n  }, [props.integrationKey, renderedFields]);\n\n  return shouldShow ? <FormInput {...props} disabled={true} hideOnNull={true} /> : null;\n};\n","import { FC, useContext, useEffect } from \"react\";\nimport * as React from \"react\";\nimport { Col, Form } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { titleCaseString } from \"app2/src/services/string.service\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { RenderedFieldsContext } from \"./UniqueFormInput\";\n\nexport interface FormInputProps {\n  integrationKey: string;\n  onChange?: (key: string, value: string) => void;\n  rootMetadata?: boolean;\n  disabled?: boolean;\n  hideOnNull?: boolean;\n}\n\nexport const FormInput: FC<FormInputProps> = ({\n  integrationKey,\n  onChange,\n  disabled = false,\n  rootMetadata = false,\n  hideOnNull = false,\n}) => {\n  // selectors\n  const job = useSelector(currentJob);\n\n  // hooks\n  const { renderedFields, addRenderedField } = useContext(RenderedFieldsContext);\n\n  // constant\n  const canUpdate = Acl.can(\"update\", \"job_metadata\");\n  let path = [\"metadata\"];\n\n  if (rootMetadata) {\n    path = path.concat([integrationKey]);\n  } else {\n    path = path.concat([\"integration\", integrationKey]);\n  }\n\n  // Methods\n  const onChangeHandler = (e: React.ChangeEvent<HTMLInputElement>) => {\n    if (onChange) {\n      onChange(`${rootMetadata ? \"\" : \"integration.\"}${integrationKey}`, e.target.value);\n    }\n  };\n\n  useEffect(() => {\n    if (!disabled) {\n      addRenderedField(integrationKey);\n    }\n  }, [integrationKey, renderedFields, addRenderedField]);\n\n  if (hideOnNull && !job?.getIn(path)) {\n    return null;\n  }\n\n  return (\n    <Col xs={12} md={6}>\n      <Form.Group>\n        <Form.Label>{titleCaseString(integrationKey)}</Form.Label>\n        <Form.Control\n          id={integrationKey}\n          aria-label={integrationKey}\n          disabled={!canUpdate || disabled}\n          value={job?.getIn(path) || \"\"}\n          onChange={onChangeHandler}\n        />\n      </Form.Group>\n    </Col>\n  );\n};\n","import { FC } from \"react\";\nimport * as React from \"react\";\nimport { FormInput } from \"app2/src/components/JobMetadata/FormInput\";\n\nexport interface LeadProps {\n  onUpdate: (key: string, value: string) => void;\n}\n\nexport const Lead: FC<LeadProps> = ({ onUpdate }) => {\n  return (\n    <>\n      <FormInput integrationKey=\"salesforce_lead\" onChange={onUpdate} />\n      <FormInput integrationKey=\"salesforce_user_id\" onChange={onUpdate} rootMetadata />\n    </>\n  );\n};\n","import { FC } from \"react\";\nimport * as React from \"react\";\nimport { FormInput } from \"app2/src/components/JobMetadata/FormInput\";\n\nexport interface OpportunityProps {\n  onUpdate: (key: string, value: string) => void;\n}\n\nexport const Opportunity: FC<OpportunityProps> = ({ onUpdate }) => {\n  return (\n    <>\n      <FormInput integrationKey=\"salesforce_opportunity\" onChange={onUpdate} />\n      <FormInput integrationKey=\"salesforce_contact\" onChange={onUpdate} />\n      <FormInput integrationKey=\"salesforce_user_id\" onChange={onUpdate} rootMetadata />\n    </>\n  );\n};\n","import { FC } from \"react\";\nimport * as React from \"react\";\nimport { FormInput } from \"app2/src/components/JobMetadata/FormInput\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { salesforceJobMappingRootValues, salesforceJobMappingValues } from \"app2/src/selectors/token.selectors\";\n\nexport interface CustomProps {\n  onUpdate: (key: string, value: string) => void;\n}\n\nexport const Custom: FC<CustomProps> = ({ onUpdate }) => {\n  const editableSalesforceValues = useSelector(salesforceJobMappingValues);\n  const editableRootSalesforceValues = useSelector(salesforceJobMappingRootValues);\n\n  return (\n    <>\n      {editableSalesforceValues.map((value) => (\n        <FormInput key={value} integrationKey={value} onChange={onUpdate} />\n      ))}\n      {editableRootSalesforceValues.map((value) => (\n        <FormInput key={value} integrationKey={value} onChange={onUpdate} rootMetadata />\n      ))}\n    </>\n  );\n};\n","import { FC, useEffect } from \"react\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { getAuthorizedTokens, token as tokenSelector } from \"app2/src/selectors/token.selectors\";\nimport { AsyncActions } from \"app2/src/reducers/token.actions\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Lead } from \"app2/src/components/JobMetadata/Salesforce/Lead\";\nimport { Opportunity } from \"app2/src/components/JobMetadata/Salesforce/Opportunity\";\nimport { Custom } from \"app2/src/components/JobMetadata/Salesforce/Custom\";\n\nexport interface SalesforceProps {\n  onUpdate: (key: string, value: string) => void;\n}\n\nexport const Salesforce: FC<SalesforceProps> = ({ onUpdate }) => {\n  // hooks\n  const dispatch = useDispatch();\n\n  // selectors\n  const job = useSelector(currentJob);\n  const authorized = useSelector(getAuthorizedTokens);\n  const salesforceAuthorized = authorized.getIn([\"salesforce\", \"authorized\"]);\n  const token = useSelector((state: RootState) => tokenSelector(state, { kind: \"salesforce\" }));\n\n  useEffect(() => {\n    // check to see if job has an authorization salesforce token, if so, load the token\n    if (salesforceAuthorized && job?.org_id) {\n      dispatch(AsyncActions.getToken(job?.org_id, \"salesforce\", true));\n    }\n  }, [salesforceAuthorized, job?.org_id]);\n\n  if (!salesforceAuthorized || !token) {\n    return null;\n  }\n\n  switch (token.getIn([\"data\", \"job_object\"])) {\n    case \"lead\":\n      return <Lead onUpdate={onUpdate} />;\n    case \"opportunity\":\n      return <Opportunity onUpdate={onUpdate} />;\n    case \"custom\":\n      return <Custom onUpdate={onUpdate} />;\n    default:\n      return null;\n  }\n};\n","import { FC } from \"react\";\nimport * as React from \"react\";\nimport { FormInput } from \"app2/src/components/JobMetadata/FormInput\";\n\nexport interface ClassicProps {\n  onUpdate: (key: string, value: string) => void;\n}\n\nexport const Classic: FC<ClassicProps> = ({ onUpdate }) => {\n  return (\n    <>\n      <FormInput integrationKey=\"improveit360_prospect_id\" onChange={onUpdate} rootMetadata />\n      <FormInput integrationKey=\"improveit360_salesrep_id\" onChange={onUpdate} rootMetadata />\n      <FormInput integrationKey=\"improveit360_lead_source_id\" onChange={onUpdate} rootMetadata />\n    </>\n  );\n};\n","import { FC } from \"react\";\nimport * as React from \"react\";\nimport { FormInput } from \"app2/src/components/JobMetadata/FormInput\";\n\nexport interface LightningProps {\n  onUpdate: (key: string, value: string) => void;\n}\n\nexport const Lightning: FC<LightningProps> = ({ onUpdate }) => {\n  return (\n    <>\n      <FormInput integrationKey=\"i360_lightning_account\" onChange={onUpdate} />\n      <FormInput integrationKey=\"i360_lightning_salesrep_id\" onChange={onUpdate} />\n    </>\n  );\n};\n","import { FC, useEffect } from \"react\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { getAuthorizedTokens, token as tokenSelector } from \"app2/src/selectors/token.selectors\";\nimport { AsyncActions } from \"app2/src/reducers/token.actions\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Classic } from \"app2/src/components/JobMetadata/Improveit360/Classic\";\nimport { Lightning } from \"app2/src/components/JobMetadata/Improveit360/Lightning\";\n\nexport interface Improveit360Props {\n  onUpdate: (key: string, value: string) => void;\n}\n\nexport const Improveit360: FC<Improveit360Props> = ({ onUpdate }) => {\n  // hooks\n  const dispatch = useDispatch();\n\n  // selectors\n  const job = useSelector(currentJob);\n  const authorized = useSelector(getAuthorizedTokens);\n  const improveit360Authorized = authorized.getIn([\"improveit360\", \"authorized\"]);\n  const token = useSelector((state: RootState) => tokenSelector(state, { kind: \"improveit360\" }));\n\n  useEffect(() => {\n    // check to see if job has an authorization improveit360 token, if so, load the token\n    if (improveit360Authorized && job?.org_id) {\n      dispatch(AsyncActions.getToken(job?.org_id, \"improveit360\"));\n    }\n  }, [job, authorized]);\n\n  if (!improveit360Authorized || !token) {\n    return null;\n  }\n\n  switch (token.getIn([\"data\", \"platform\"])) {\n    case \"classic\":\n      return <Classic onUpdate={onUpdate} />;\n    case \"lightning\":\n      return <Lightning onUpdate={onUpdate} />;\n    default:\n      return null;\n  }\n};\n","import { FC } from \"react\";\nimport * as React from \"react\";\nimport { getAuthorizedTokens } from \"app2/src/selectors/token.selectors\";\nimport { TokenKind } from \"app2/src/records/Token\";\nimport { useSelector } from \"app2/src/storeRegistry\";\n\nexport interface TokenCheckProps {\n  kind: TokenKind;\n  children: React.ReactNode;\n}\n\nexport const TokenCheck: FC<TokenCheckProps> = ({ kind, children }) => {\n  // selectors\n  const authorized = useSelector(getAuthorizedTokens);\n  const integrationAuthorized = authorized?.getIn([kind, \"authorized\"]) || false;\n\n  if (!integrationAuthorized) {\n    return null;\n  }\n\n  return <>{children}</>;\n};\n","import * as React from \"react\";\nimport { FormInput } from \"app2/src/components/JobMetadata/FormInput\";\nimport { TokenCheck } from \"./TokenCheck\";\n\nexport interface MarketsharpProps {\n  onUpdate: (key: string, value: string) => void;\n}\n\nexport const Marketsharp: React.FC<MarketsharpProps> = ({ onUpdate }) => {\n  return (\n    <TokenCheck kind=\"marketsharp\">\n      <FormInput integrationKey=\"marketsharp_id\" onChange={onUpdate} rootMetadata />\n      <FormInput integrationKey=\"marketsharp_contact_id\" onChange={onUpdate} rootMetadata />\n      <FormInput integrationKey=\"marketsharp_salesperson\" onChange={onUpdate} rootMetadata />\n    </TokenCheck>\n  );\n};\n","import * as React from \"react\";\nimport { FormInput } from \"app2/src/components/JobMetadata/FormInput\";\nimport { TokenCheck } from \"app2/src/components/JobMetadata/TokenCheck\";\n\nexport interface LeadPerfectionProps {\n  onUpdate: (key: string, value: string) => void;\n}\n\nexport const LeadPerfection: React.FC<LeadPerfectionProps> = ({ onUpdate }) => {\n  return (\n    <TokenCheck kind=\"lead_perfection\">\n      <FormInput integrationKey=\"lead_perfection_id\" onChange={onUpdate} rootMetadata />\n      <FormInput integrationKey=\"lead_perfection_salesperson\" onChange={onUpdate} rootMetadata />\n    </TokenCheck>\n  );\n};\n","import { connectFC } from \"app2/src/connect\";\nimport { FC, useEffect } from \"react\";\nimport * as React from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { Actions as RsfFormActions } from \"app2/src/reducers/rsfForm.actions\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { useTracking } from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { Salesforce } from \"app2/src/components/JobMetadata/Salesforce\";\nimport { Improveit360 } from \"app2/src/components/JobMetadata/Improveit360\";\nimport { Marketsharp } from \"app2/src/components/JobMetadata/Marketsharp\";\nimport { UniqueFormInput, RenderedFieldsProvider } from \"app2/src/components/JobMetadata/UniqueFormInput\";\nimport { LeadPerfection } from \"app2/src/components/JobMetadata/LeadPerfection\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport { getAuthorizedTokens } from \"app2/src/selectors/token.selectors\";\n\nexport interface JobMetadataProps {\n  update: (key: string, value: string) => void;\n}\n\nexport const JobMetadata: FC<JobMetadataProps> = ({ update }) => {\n  // hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking({ component: \"JobMetadata\" }, { dispatch: Dispatch.dispatch });\n\n  // selectors\n  const job = useSelector(currentJob);\n  const authorizedTokens = useSelector(getAuthorizedTokens);\n\n  // constants\n  const rootMetadataKeys = [\n    \"external_zapier_id\",\n    \"salesforce_user_id\",\n    \"improveit360_salesrep_id\",\n    \"improveit360_prospect_id\",\n    \"improveit360_lead_source_id\",\n    \"lead_perfection_id\",\n    \"lead_perfection_salesperson\",\n    \"marketsharp_id\",\n    \"marketsharp_contact_id\",\n    \"marketsharp_salesperson\",\n  ];\n\n  useEffect(() => {\n    if (job?.org_id && authorizedTokens.size <= 0) {\n      dispatch(tokenActions.AsyncActions.getAuthorizedTokens(job?.org_id));\n    }\n  }, [job?.org_id, authorizedTokens]);\n\n  // methods\n  const updateMetadata = (key: string, value: string) => {\n    update(key, value);\n    dispatch(RsfFormActions.update({ rootPath: [\"jobs\", \"byId\", job.id, \"metadata\"], name: key, value }));\n    trackEvent({\n      action: \"job_metadata_updated\",\n      category: \"Job\",\n      name: key,\n      text: value,\n    });\n  };\n\n  return (\n    <Can resource=\"job_metadata\" permission=\"read\">\n      <RenderedFieldsProvider>\n        <Row>\n          <Col md=\"12\">\n            <div className=\"form-section\">\n              <div className=\"form-section-heading\">\n                <h3>Integrations</h3>\n              </div>\n              <div className=\"form-section-content\">\n                <Row>\n                  <Salesforce onUpdate={updateMetadata} />\n                  <Improveit360 onUpdate={updateMetadata} />\n                  <Marketsharp onUpdate={updateMetadata} />\n                  <LeadPerfection onUpdate={updateMetadata} />\n                  {Object.keys(job?.getIn([\"metadata\", \"integration\"])?.toJS() || {}).map((key) => {\n                    return <UniqueFormInput key={key} integrationKey={key} />;\n                  })}\n                  {rootMetadataKeys.map((key) => {\n                    return <UniqueFormInput key={key} integrationKey={key} rootMetadata />;\n                  })}\n                </Row>\n              </div>\n            </div>\n          </Col>\n        </Row>\n      </RenderedFieldsProvider>\n    </Can>\n  );\n};\n\nexport default connectFC(JobMetadata);\n","import { FC, useEffect } from \"react\";\nimport * as React from \"react\";\nimport { Accordion, Button, Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { useTracking } from \"react-tracking\";\nimport { Actions, AsyncActions } from \"app2/src/reducers/customForm.actions\";\nimport { jobResult, jobResultingCustomForm } from \"app2/src/selectors/customForm.selectors\";\nimport { push } from \"connected-react-router/immutable\";\n\nexport const Header: FC = () => {\n  // State\n  const [isOpen, setIsOpen] = React.useState(false);\n\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"Header\" });\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n  const customForm = useSelector(jobResultingCustomForm);\n  const result = useSelector(jobResult);\n\n  // Methods\n  const openResult = () => {\n    const action = customForm ? \"edit job resulting\" : \"open job resulting\";\n    trackEvent({\n      action,\n    });\n    if (!customForm) {\n      dispatch(Actions.receiveCustomForm({ kind: \"job_resulting\" }));\n    }\n    dispatch(push(`info/job_result/${customForm?.get(\"id\") || \"new\"}`));\n  };\n\n  const toggleAccordion = () => {\n    setIsOpen(!isOpen);\n  };\n\n  useEffect(() => {\n    if (jobId) {\n      dispatch(AsyncActions.listCustomForms(jobId, \"job_resulting\", \"jobResultingForms\"));\n    }\n  }, [jobId]);\n\n  return (\n    <div className=\"form-section-heading\">\n      <Row>\n        <Col>\n          {result ? (\n            <Accordion.Toggle eventKey=\"0\" as=\"div\" style={{ cursor: \"pointer\" }} onClick={toggleAccordion}>\n              <h3 style={{ margin: \"0\" }}>\n                Job Result - <strong>{result}</strong> <i className={`fa fa-chevron-${isOpen ? \"up\" : \"down\"}`}></i>\n              </h3>\n            </Accordion.Toggle>\n          ) : (\n            <h3>Job Result</h3>\n          )}\n        </Col>\n        <Col>\n          <Button className=\"pull-right\" onClick={openResult}>\n            {customForm ? \"Edit Result\" : \"Result\"}\n          </Button>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport Form from \"@rjsf/core\";\nimport { jobResultingOption } from \"app2/src/selectors/org.selectors\";\nimport { useSelector } from \"react-redux\";\nimport { Accordion, Col, Row } from \"react-bootstrap\";\nimport { RootState } from \"app2/src/reducers\";\nimport { CustomFormRecord } from \"app2/src/components/JobTabs/InfoTab/CustomForm/CustomFormRecord\";\n\ninterface ReadOnlyFormProps {\n  customForm: CustomFormRecord;\n}\n\nexport const ReadOnlyForm = ({ customForm }: ReadOnlyFormProps) => {\n  // Selectors\n  const option = useSelector((state: RootState) => jobResultingOption(state, { id: customForm?.get(\"id\") }));\n\n  // Constants\n  const schema = option?.get(\"schema\")?.toJS();\n  const uiSchema = option?.get(\"uiSchema\")?.toJS();\n  const formData = customForm?.get(\"form_data\")?.toJS();\n\n  return (\n    <Accordion.Collapse eventKey=\"0\">\n      <Row className=\"core-form\">\n        <Col lg={6}>\n          {!schema || !formData ? (\n            <div>No schema or formData found</div>\n          ) : (\n            <Form\n              schema={schema}\n              uiSchema={{\n                ...uiSchema,\n                \"ui:submitButtonOptions\": {\n                  norender: true,\n                },\n              }}\n              formData={formData}\n              validator={(() => null) as any}\n              readonly\n            />\n          )}\n        </Col>\n      </Row>\n    </Accordion.Collapse>\n  );\n};\n","import { FC } from \"react\";\nimport * as React from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { jobResultingCustomForm } from \"app2/src/selectors/customForm.selectors\";\nimport { ReadOnlyForm } from \"app2/src/components/JobResultingSection/Content/ReadOnlyForm\";\n\nexport const Content: FC = () => {\n  // Selectors\n  const customForm = useSelector(jobResultingCustomForm);\n\n  return (\n    <div className=\"form-section-content\">\n      <Row>\n        <Col md=\"12\">{customForm ? <ReadOnlyForm customForm={customForm} /> : <p>No result has been added</p>}</Col>\n      </Row>\n    </div>\n  );\n};\n","import { connectFC } from \"app2/src/connect\";\nimport { FC } from \"react\";\nimport * as React from \"react\";\nimport { Accordion, Col, Row } from \"react-bootstrap\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { Header } from \"app2/src/components/JobResultingSection/Header\";\nimport { Content } from \"app2/src/components/JobResultingSection/Content\";\nimport { useSelector } from \"react-redux\";\nimport { jobResultingOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\n\nexport const JobResultingSection: FC = () => {\n  // Selectors\n  const config = useSelector(jobResultingOrgPrefConfig);\n  const isJobResultingEnabled = config?.get(\"enabled\");\n\n  if (!isJobResultingEnabled) {\n    return null;\n  }\n\n  return (\n    <Can resource=\"flags\" permission=\"job_resulting\">\n      <Can resource=\"custom_form\" permission=\"read\">\n        <Row>\n          <Col md=\"12\">\n            <Accordion>\n              <div className=\"form-section\">\n                <Header />\n                <Content />\n              </div>\n            </Accordion>\n          </Col>\n        </Row>\n      </Can>\n    </Can>\n  );\n};\n\nexport default connectFC(JobResultingSection);\n","import * as ng from \"angular\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { cachedProductChildren } from \"app2/src/selectors/product.selectors\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"../Models/EstimateGroup\";\n\nexport interface IProductColorDropdownScope extends ng.IScope {\n  lineItem: IEstimateLineItem;\n  product: ProductRecord;\n  activatedPriceListId: number;\n  parent_id: number;\n  current_product: ProductRecord;\n  children: ProductRecord[];\n  estimate: IEstimate;\n  estimateGroup: IEstimateGroup;\n  colorChanged(cp: ProductRecord): void;\n}\n\nexport class ProductColorDropdown implements ng.IDirective {\n  public restrict = \"E\";\n  public templateUrl = \"src/Estimator/productColorDropdown.html\";\n  public scope = {\n    lineItem: \"=\",\n    product: \"=\",\n    activatedPriceListId: \"<\",\n    estimate: \"<\",\n    estimateGroup: \"<\",\n  };\n\n  constructor(\n    public ConfirmDialog: IConfirmDialog,\n    public EstimatorService: EstimatorService,\n    public $timeout: ng.ITimeoutService,\n  ) {}\n\n  public link = (scope: IProductColorDropdownScope) => {\n    const app = this;\n\n    scope.$watchGroup([\"lineItem.id\", \"lineItem.product_id\", \"product.id\"], () => {\n      if (scope.lineItem && scope.product) {\n        scope.current_product = scope.product;\n        scope.parent_id = scope.product.parent_id;\n        scope.children = [];\n        if (scope.parent_id) {\n          scope.children = useSelector((state) =>\n            cachedProductChildren(state, {\n              activatedPriceListId: scope.activatedPriceListId,\n              productId: scope.parent_id,\n              includeParent: false,\n            }),\n          ).toArray();\n        }\n      } else {\n        scope.parent_id = undefined;\n      }\n    });\n\n    scope.colorChanged = (cp) => {\n      if (!cp) {\n        // RSF-15752 - Fixes a very specific error, see ticket\n        const selectCurrentProduct = scope.current_product;\n        scope.current_product = null;\n        app.$timeout(() => {\n          scope.current_product = selectCurrentProduct;\n        });\n        return;\n      }\n      scope.current_product = cp;\n      if (scope.lineItem.checkDescription(scope.current_product)) {\n        app.productSetup(scope, true);\n        return;\n      }\n\n      if (scope.lineItem.checkDescription(scope.product)) {\n        app.productSetup(scope, true);\n      } else {\n        app.ConfirmDialog.confirm(\n          \"You edited the current line item description. Would you like to change the description to the new product?\",\n        )\n          .then(() => {\n            app.productSetup(scope, true);\n          })\n          .catch(() => {\n            app.productSetup(scope, false);\n          });\n      }\n    };\n  };\n\n  public productSetup(scope, setDescription) {\n    scope.lineItem.options = [];\n    const quantity = this.EstimatorService.addMeasurementLink(\n      scope.current_product,\n      scope.lineItem.quantity,\n      undefined,\n      scope.estimateGroup,\n    );\n    const current_link_quantity = this.EstimatorService.addMeasurementLink(\n      scope.product,\n      scope.lineItem.quantity,\n      false,\n      scope.estimateGroup,\n    );\n    if (current_link_quantity !== scope.lineItem.quantity) {\n      this.ConfirmDialog.confirm(\n        \"You edited the current line item quantity (\" +\n          scope.lineItem.quantity +\n          \"). Would you like to change the quantity to \" +\n          quantity +\n          \"?\",\n        {\n          template:\n            '<div class=\"confirm-modal modal-header\"><div class=\"modal-title description\"><h3>{{msg}}</h3></div></div><div class=\"modal-footer\"><button class=\"btn btn-default\" type=\"button\" ng-click=\"$close()\">YES</button><button class=\"btn btn-cancel\" type=\"button\" ng-click=\"$dismiss(false)\">NO</button></div>',\n        },\n      )\n        .then(() => {\n          scope.lineItem.quantity = quantity;\n          scope.lineItem.setProduct(scope.activatedPriceListId, scope.current_product, setDescription);\n          scope.lineItem.calculate(scope.estimate);\n          this.EstimatorService.addDefaultOptions(scope.lineItem, scope.product);\n        })\n        .catch(() => {\n          scope.lineItem.setProduct(scope.activatedPriceListId, scope.current_product, setDescription);\n          scope.lineItem.calculate(scope.estimate);\n          this.EstimatorService.addDefaultOptions(scope.lineItem, scope.product);\n        });\n    } else {\n      scope.lineItem.quantity = quantity;\n      scope.lineItem.setProduct(scope.activatedPriceListId, scope.current_product, setDescription);\n      scope.lineItem.calculate(scope.estimate);\n      this.EstimatorService.addDefaultOptions(scope.lineItem, scope.product);\n    }\n  }\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = (\n      ConfirmDialog: IConfirmDialog,\n      EstimatorService: EstimatorService,\n      $timeout: ng.ITimeoutService,\n    ) => new ProductColorDropdown(ConfirmDialog, EstimatorService, $timeout);\n    directive.$inject = <ReadonlyArray<string>>[\"ConfirmDialog\", \"EstimatorService\", \"$timeout\"];\n\n    return directive;\n  }\n}\n","export class BrowserDetection {\n  public static isBrowserMs11() {\n    return /rv:11.0/i.test(navigator.userAgent);\n  }\n\n  public static isBrowserMs() {\n    if (\n      /MSIE 10/i.test(navigator.userAgent) ||\n      /MSIE 9/i.test(navigator.userAgent) ||\n      /rv:11.0/i.test(navigator.userAgent) ||\n      /Edge\\/\\d./i.test(navigator.userAgent)\n    ) {\n      // This is internet explorer 9, 10, 11 or Edge\n      return true;\n    }\n\n    return false;\n  }\n\n  public static isBrowserMobile() {\n    return /Android|iPad|iPhone|iPod/.test(navigator.userAgent) && !(window as any).MSStream;\n  }\n\n  public static isBrowserSafari() {\n    return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  }\n\n  public static isMobileIOS() {\n    return /iPad|iPhone|iPod/.test(navigator.userAgent) && !(window as any).MSStream;\n  }\n}\n","import * as angulartics from \"angulartics\";\nimport { IDateSource, IEventService } from \"app/src/Calendar/EventService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IEvent } from \"app/src/Models/Event\";\nimport { IUserResource, IUserResponse } from \"app/src/Models/User\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport * as moment from \"moment\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport SchedulerEditEvent = kendo.ui.SchedulerEditEvent;\nimport SchedulerMoveEvent = kendo.ui.SchedulerMoveEvent;\nimport SchedulerMoveStartEvent = kendo.ui.SchedulerMoveStartEvent;\n\nexport class CalendarCtrl {\n  /**\n   * Due to KendoUI, the _dateSource field has to be before the schedulerOptions\n   */\n  /* eslint-disable @typescript-eslint/member-ordering */\n  private _dateSource: IDateSource = {\n    start: moment().startOf(\"month\").subtract(1, \"week\"),\n    end: moment().endOf(\"month\").add(1, \"week\"),\n  };\n\n  public dataSource: kendo.data.SchedulerDataSource;\n  public scheduler: kendo.ui.Scheduler;\n  public userResponse: IUserResponse;\n  public schedulerOptions = <kendo.ui.SchedulerOptions>{\n    views: [\"day\", \"workWeek\", \"week\", { type: \"month\", selected: true }],\n    autoBind: false,\n    allDaySlot: false,\n    //eventTemplate: kendo.template(jQuery(\"#event-template\").html()),\n    editable: { template: kendo.template(jQuery(\"#customEditorTemplate\").html()) },\n    timezone: \"Etc/UTC\",\n    height: \"85vh\",\n    dataSource: this.getDataSource(),\n    resources: this.EventService.getSchedulerResourceDatasource(),\n    edit: (e: SchedulerEditEvent) => {\n      if ((e.event as any).isEditable === false) {\n        e.preventDefault();\n        return;\n      }\n      e.event.set(\"isAllDay\", false);\n\n      const validator = e.container.data(\"kendoValidator\");\n\n      delete validator.options.rules.dateCompare;\n      _.extend(validator.options.rules, {\n        greaterDate: function (input) {\n          if (input.is(\"[data-greaterdate]\") && input.val() !== \"\") {\n            // @ts-ignore\n            const startDate = kendo.parseDate($(\"[name='start']\").val());\n            // @ts-ignore\n            const endDate = kendo.parseDate($(\"[name='end']\").val());\n            const theReturn = endDate == null || endDate.getTime() > startDate.getTime();\n            if (!theReturn) {\n              $(\"#date-errors\").text(\"The End Date must be greater than the Start Date.\");\n              $(\".k-scheduler-update\").prop(\"disabled\", true);\n            } else {\n              $(\"#date-errors\").text(\"\");\n              $(\".k-scheduler-update\").prop(\"disabled\", false);\n            }\n            return theReturn;\n          }\n\n          $(\"#date-errors\").text(\"\");\n          $(\".k-scheduler-update\").prop(\"disabled\", false);\n          return true;\n        },\n        required: function (input) {\n          if (input.is(\"[required]\") && input.val().trim().length === 0) {\n            return false;\n          }\n\n          return true;\n        },\n      });\n      this.trackEvents(\"appt edit\");\n    },\n    moveStart: (e: SchedulerMoveStartEvent) => {\n      if ((e.event as any).isEditable === false) {\n        e.preventDefault();\n        return;\n      }\n    },\n    navigate: (e) => {\n      this.$analytics.eventTrack(\"switch view\", { category: \"Calendar\", value: e.view });\n      const dateSource = this.EventService.getPeriod(e.view, e.action, moment(e.date));\n      this._dateSource.start = dateSource.start;\n      this._dateSource.end = dateSource.end;\n      this.dataSource.read();\n\n      if (e.view === \"week\" || e.view === \"workWeek\" || e.view === \"day\") {\n        this.$timeout(() => {\n          this.scrollToCurrent();\n        });\n      }\n    },\n  };\n\n  private selectedUsers: number[] = [];\n  private moment = moment();\n  /* tslint:enable:member-ordering */\n\n  public static $inject = [\"BaseConfig\", \"EventService\", \"Session\", \"User\", \"$analytics\", \"$timeout\", \"$scope\", \"$q\"];\n  constructor(\n    public BaseConfig: IBaseConfig,\n    public EventService: IEventService,\n    public Session: ISession,\n    private User: IUserResource,\n    private $analytics: angulartics.IAnalyticsService,\n    public $timeout: ng.ITimeoutService,\n    private $scope: ng.IScope,\n    private $q: ng.IQService,\n  ) {\n    this.schedulerOptions = _.extend(this.schedulerOptions, {\n      add: this.trackEvents(\"add appt\"),\n      save: this.trackEvents(\"appt saved\"),\n      remove: this.trackEvents(\"appt removed\"),\n      cancel: this.trackEvents(\"appt canceled\"),\n      changed: this.trackEvents(\"appt changed\"),\n      moveEnd: this.trackEvents(\"appt moved\"),\n      resizeEnd: this.trackEvents(\"appt resized\"),\n    });\n    this.schedulerOptions.mobile = BrowserDetection.isBrowserMobile();\n\n    $scope.$on(\"kendoRendered\", () => {\n      Session.currentUser.$promise.then(() => {\n        const promises: ng.IPromise<boolean>[] = [];\n\n        promises.push(this.Session.can(\"read_self\", \"event\", null));\n        promises.push(this.Session.can(\"read_assigned\", \"event\", null));\n\n        this.$q.all(promises).then((results) => {\n          if (\n            _.some(results, (result) => {\n              return result;\n            })\n          ) {\n            this.userResponse = <IUserResponse>{ users: [this.Session.currentUser] };\n          } else {\n            this.userResponse = <IUserResponse>this.User.query({\n              org_id: Session.currentUser.org_id,\n              version: \"v2\",\n            });\n          }\n          this.toggleStateFilter(this.Session.currentUser.id);\n        });\n      });\n\n      this.scheduler.bind(\"edit\", (e: kendo.ui.SchedulerEditEvent) => {\n        e.event.set(\"isAllDay\", false);\n      });\n    });\n  }\n\n  public getDataSource() {\n    this.dataSource = this.EventService.getSchedulerDatasource(this._dateSource, {\n      preCreate: (event) => {\n        event.user_id = this.Session.currentUser.id;\n        event.org_id = this.Session.currentUser.org.id;\n      },\n      postRead: (data) => {\n        (this.scheduler as any).resources[0].dataSource.data(this.EventService.resources);\n        this.scheduler.refresh();\n      },\n    });\n    return this.dataSource;\n  }\n\n  public getResources() {\n    return [\n      {\n        field: \"resourceId\",\n        name: \"Appointments\",\n        title: \"Appointments\",\n        dataSource: [],\n      },\n    ];\n  }\n\n  public editableEvent(event: IEvent): boolean {\n    if (event.metadata.cronofy_id) {\n      return false;\n    }\n\n    return true;\n  }\n\n  public toggleStateFilter(id: number) {\n    if (!_.include(this.selectedUsers, id)) {\n      this.selectedUsers.push(id);\n    } else {\n      this.selectedUsers = _.without(this.selectedUsers, id);\n    }\n\n    this._dateSource.userIds = this.selectedUsers;\n    this.dataSource.read();\n  }\n\n  public stateSelected(id: number) {\n    return _.include(this.selectedUsers, id);\n  }\n\n  private scrollToCurrent() {\n    const time = new Date();\n    time.setHours(time.getHours() + 1);\n    time.setMinutes(0);\n    time.setSeconds(0);\n    time.setMilliseconds(0);\n\n    const contentDiv = this.scheduler.element.find(\"div.k-scheduler-content\");\n    const rows = contentDiv.find(\"tr\");\n\n    for (let i = 0; i < rows.length; i++) {\n      const slot = this.scheduler.slotByElement(rows[i]);\n\n      const slotTime = kendo.toString(slot.startDate, \"HH:mm\");\n      const targetTime = kendo.toString(time, \"HH:mm\");\n\n      if (targetTime === slotTime) {\n        // noinspection TypeScriptUnresolvedFunction\n        (this.scheduler.view() as any)._scrollTo($(rows[i]).find(\"td:first\")[0], contentDiv[0]);\n      }\n    }\n  }\n\n  private trackEvents(eventName: string) {\n    return (e: any) => {\n      if (e.event.isEditable === false) {\n        e.preventDefault();\n        return;\n      }\n      this.$analytics.eventTrack(eventName, { category: \"Calendar\", value: e.event.id });\n    };\n  }\n}\n","import * as angulartics from \"angulartics\";\nimport { IDateSource, IEventService } from \"app/src/Calendar/EventService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IEvent } from \"app/src/Models/Event\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IUserResource, IUserResponse } from \"app/src/Models/User\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport * as moment from \"moment\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport SchedulerAddEvent = kendo.ui.SchedulerAddEvent;\nimport SchedulerDataBoundEvent = kendo.ui.SchedulerDataBoundEvent;\nimport SchedulerEditEvent = kendo.ui.SchedulerEditEvent;\nimport SchedulerMoveStartEvent = kendo.ui.SchedulerMoveStartEvent;\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { currentAccessUid as accessUidSelector } from \"app2/src/selectors/auth.selectors\";\n\nclass AppointmentCreatorCtrl implements ng.IComponentController {\n  /**\n   * Due to KendoUI the _dateSource field has to be before the schedulerOptions field\n   */\n  /* eslint-disable @typescript-eslint/member-ordering */\n  private _dateSource: IDateSource = {\n    start: moment().startOf(\"month\").subtract(1, \"week\"),\n    end: moment().endOf(\"month\").add(1, \"week\"),\n  };\n\n  public dataSource: kendo.data.DataSource;\n  public appointmentWindow: kendo.ui.Window;\n  public scheduler: kendo.ui.Scheduler;\n  public job: IJob;\n  public org: IOrg;\n  public users: IUserResponse;\n  public selectedUsers: number[];\n  public modalInstance: ng.ui.bootstrap.IModalServiceInstance;\n\n  public schedulerOptions = <kendo.ui.SchedulerOptions>{\n    date: moment().toDate(),\n    views: [\"day\", \"workWeek\", { type: \"week\", selected: true }, \"month\"],\n    autoBind: false,\n    allDaySlot: false,\n    height: \"60vh\",\n    width: \"90vw\",\n    editable: { template: kendo.template(jQuery(\"#customEditorTemplate\").html()) },\n    timezone: \"Etc/UTC\",\n    dataSource: this.buildDataSource(),\n    add: (e: SchedulerAddEvent) => {\n      const currentAccessUid = useSelector(accessUidSelector);\n      let params = \"\";\n      if (currentAccessUid) {\n        const searchParams = new URLSearchParams();\n        searchParams.set(\"authUser\", currentAccessUid);\n\n        params = `?${searchParams.toString()}`;\n      }\n\n      e.event.title = \"Sales Call: \" + this.job.name;\n      e.event.summary = e.event.title;\n      e.event.location = this.job.address.fullAddress();\n      e.event.description = `Location:\n${e.event.location}\n${this.job.additional_info ? `\\nAdditional Info:\\n${this.job.additional_info}\\n` : \"\"}\nPhone Numbers:\n${this.job.phone_numbers.map((pn) => `${pn.name}: ${pn.number}`).join(\"\\n\")}\n\nLink: ${this.BaseConfig.APP_URL}/jobs/${this.job.id}${params}`;\n\n      e.event.job_id = this.job.id;\n      e.event.jobName = this.job.name;\n\n      if (\n        this.org.preferences.config.cronofy.invite_attendees === \"always\" ||\n        this.org.preferences.config.cronofy.invite_attendees === \"by_default\"\n      ) {\n        e.event.inviteAttendee = true;\n      }\n      this.trackEvents(\"add appt\");\n    },\n    edit: (e: SchedulerEditEvent) => {\n      if ((e.event as any).isEditable === false) {\n        e.preventDefault();\n        return;\n      }\n      const validator = e.container.data(\"kendoValidator\");\n\n      delete validator.options.rules.dateCompare;\n      _.extend(validator.options.rules, {\n        greaterDate: function (input) {\n          if (input.is(\"[data-greaterdate]\") && input.val() !== \"\") {\n            // @ts-ignore\n            const startDate = kendo.parseDate($(\"[name='start']\").val());\n            // @ts-ignore\n            const endDate = kendo.parseDate($(\"[name='end']\").val());\n            const theReturn = endDate == null || endDate.getTime() > startDate.getTime();\n            if (!theReturn) {\n              $(\"#date-errors\").text(\"The End Date must be greater than the Start Date.\");\n              $(\".k-scheduler-update\").prop(\"disabled\", true);\n            } else {\n              $(\"#date-errors\").text(\"\");\n              $(\".k-scheduler-update\").prop(\"disabled\", false);\n            }\n            return theReturn;\n          }\n\n          $(\"#date-errors\").text(\"\");\n          $(\".k-scheduler-update\").prop(\"disabled\", false);\n          return true;\n        },\n        required: function (input) {\n          if (input.is(\"[required]\") && input.val().trim().length === 0) {\n            return false;\n          }\n\n          return true;\n        },\n      });\n      this.trackEvents(\"appt edit\");\n    },\n    moveStart: (e: SchedulerMoveStartEvent) => {\n      if ((e.event as any).isEditable === false) {\n        e.preventDefault();\n        return;\n      }\n    },\n    dataBound: (event: SchedulerDataBoundEvent) => {\n      this.$scope.$emit(\"appointment_creator:change\", event);\n    },\n    navigate: (e) => {\n      const dateSource = this.EventService.getPeriod(e.view, e.action, moment(e.date));\n      this._dateSource.start = dateSource.start;\n      this._dateSource.end = dateSource.end;\n      this.dataSource.read();\n\n      if (e.view === \"week\" || e.view === \"workWeek\" || e.view === \"day\") {\n        this.$timeout(() => {\n          this.scrollToCurrent();\n        });\n      }\n    },\n  };\n  /* tslint:enable:member-ordering */\n\n  constructor(\n    public $scope: ng.IScope,\n    public EventService: IEventService,\n    public User: IUserResource,\n    private Session: ISession,\n    public BaseConfig: IBaseConfig,\n    private $uibModal: ng.ui.bootstrap.IModalService,\n    private $analytics: angulartics.IAnalyticsService,\n    private $timeout: ng.ITimeoutService,\n    private $q: ng.IQService,\n  ) {\n    this.schedulerOptions.mobile = BrowserDetection.isBrowserMobile();\n\n    $scope.$on(\"appointment_creator:open\", (event: ng.IAngularEvent, appointment: IEvent) => {\n      this.selectedUsers = [this.Session.currentUser.id];\n      this._dateSource.userIds = this.selectedUsers;\n      this.modalInstance = this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n        size: \"fill\",\n        windowClass: \"appointment-creator\",\n        templateUrl: \"schedulerTemplate.html\",\n        scope: this.$scope,\n      });\n\n      this.modalInstance.closed.then(() => {\n        this.$scope.$emit(\"appointment_creator:close\", {});\n      });\n\n      this.$timeout(() => {\n        $(window).trigger(\"resize\");\n        this.scrollToCurrent();\n        if (appointment) {\n          this.edit(appointment.id);\n        }\n      });\n    });\n\n    $scope.$on(\"appointment_creator:refresh\", (id) => {\n      this.dataSource.read();\n    });\n\n    Session.currentUser.$promise.then(() => {\n      this.org = Session.currentUser.org;\n    });\n\n    this.schedulerOptions = _.extend(this.schedulerOptions, {\n      save: this.trackEvents(\"appt saved\"),\n      remove: this.trackEvents(\"appt removed\"),\n      cancel: this.trackEvents(\"appt edit canceled\"),\n      changed: this.trackEvents(\"appt changed\"),\n      moveEnd: this.trackEvents(\"appt moved\"),\n      resizeEnd: this.trackEvents(\"appt resized\"),\n    });\n  }\n\n  public $onChanges() {\n    if (this.job && !this.users) {\n      this.job.$promise.then(() => {\n        const promises: ng.IPromise<boolean>[] = [];\n\n        promises.push(this.Session.can(\"read_self\", \"event\", null));\n        promises.push(this.Session.can(\"read_assigned\", \"event\", null));\n\n        this.$q.all(promises).then((results) => {\n          if (\n            !_.some(results, (result) => {\n              return result;\n            })\n          ) {\n            this.users = <IUserResponse>this.User.query({\n              org_id: this.Session.currentUser.org_id,\n              version: \"v2\",\n            });\n          }\n        });\n      });\n    }\n  }\n\n  public edit(id: number) {\n    let idx = 0;\n    const found = _.find(this.scheduler.dataSource.data(), (e, index) => {\n      idx = index;\n      return e.id === id;\n    });\n    if (found) {\n      const event = this.scheduler.dataSource.at(idx);\n      // @ts-ignore\n      this.scheduler.editEvent(event);\n    }\n  }\n\n  public toggleStateFilter(id: number) {\n    if (!_.include(this.selectedUsers, id)) {\n      this.selectedUsers.push(id);\n    } else {\n      this.selectedUsers = _.without(this.selectedUsers, id);\n    }\n\n    this._dateSource.userIds = this.selectedUsers;\n    this.dataSource.read();\n  }\n\n  public stateSelected(id: number) {\n    return _.include(this.selectedUsers, id);\n  }\n\n  public getSchedulerOptions() {\n    return this.schedulerOptions;\n  }\n\n  private buildDataSource() {\n    this.dataSource = this.EventService.getSchedulerDatasource(this._dateSource, {});\n\n    return this.dataSource;\n  }\n\n  private trackEvents(eventName: string) {\n    return (e: any) => {\n      if (e.event.isEditable === false) {\n        e.preventDefault();\n        return;\n      }\n      this.$analytics.eventTrack(eventName, {\n        category: \"Appointment\",\n        job: this.job.id,\n        org: this.job.org_id,\n        appointment: e.event.id,\n      });\n    };\n  }\n\n  private scrollToCurrent() {\n    const time = new Date();\n    time.setHours(time.getHours() + 1);\n    time.setMinutes(0);\n    time.setSeconds(0);\n    time.setMilliseconds(0);\n\n    const contentDiv = this.scheduler.element.find(\"div.k-scheduler-content\");\n    const rows = contentDiv.find(\"tr\");\n\n    for (let i = 0; i < rows.length; i++) {\n      const slot = this.scheduler.slotByElement(rows[i]);\n\n      const slotTime = kendo.toString(slot.startDate, \"HH:mm\");\n      const targetTime = kendo.toString(time, \"HH:mm\");\n\n      if (targetTime === slotTime) {\n        // noinspection TypeScriptUnresolvedFunction\n        (this.scheduler.view() as any)._scrollTo($(rows[i]).find(\"td:first\")[0], contentDiv[0]);\n      }\n    }\n  }\n}\n\nexport class AppointmentCreator implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/Calendar/appointment_creator.html\";\n  public bindings: any = {\n    job: \"<\",\n  };\n\n  constructor() {\n    this.controller = AppointmentCreatorCtrl;\n    this.controller.$inject = [\n      \"$scope\",\n      \"EventService\",\n      \"User\",\n      \"Session\",\n      \"BaseConfig\",\n      \"$uibModal\",\n      \"$analytics\",\n      \"$timeout\",\n      \"$q\",\n    ];\n  }\n}\n","import { ISession } from \"app/src/Common/SessionService\";\nimport * as moment from \"moment\";\nimport Moment = moment.Moment;\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport StartOf = moment.unitOfTime.StartOf;\n\nexport interface IEventService {\n  resources: any[];\n  getSchedulerDatasource(dateSource: IDateSource, callbacks?: any): kendo.data.SchedulerDataSource;\n  getSchedulerResourceDatasource(): any;\n\n  getPeriod(view: string, action: string, date: Moment): IDateSource;\n}\n\nexport interface IDateSource {\n  start: Moment;\n  end: Moment;\n  userIds?: number[];\n}\n\nexport class EventService implements IEventService {\n  public resources: any[] = [];\n\n  private colors = [\n    \"#445257\",\n    \"#7ACC5A\",\n    \"#FFC539\",\n    \"#17283D\",\n    \"#7460EE\",\n    \"#FE7328\",\n    \"#FAFAFA\",\n    \"#FF5F5D\",\n    \"#4FBDF4\",\n    \"#F8F8F9\",\n  ];\n  private crudServiceBaseUrl = \"/api/v1/events\";\n  private lastData: any;\n\n  public static $inject = [\"BaseConfig\", \"$http\", \"Session\", \"$q\"];\n  constructor(\n    public BaseConfig: IBaseConfig,\n    public $http: ng.IHttpService,\n    public Session: ISession,\n    private $q: ng.IQService,\n  ) {}\n\n  public getSchedulerDatasource(dateSource: IDateSource, callbacks?: any): kendo.data.SchedulerDataSource {\n    const dataSource = new kendo.data.SchedulerDataSource({\n      transport: {\n        read: (cb: kendo.data.DataSourceTransportOptions) => {\n          const params = {\n            start: dateSource.start.format(),\n            end: dateSource.end.format(),\n          };\n\n          const promises = [];\n\n          // Job Appointments\n          const jobParams = _.clone(params);\n          jobParams[\"jobs_only\"] = true;\n          promises.push(this.$http.get(this.BaseConfig.BASE_URL + this.crudServiceBaseUrl, { params: jobParams }));\n\n          // User Appointments\n          const userParams = _.clone(params);\n          if (!dateSource.userIds) {\n            userParams[\"user_ids[]\"] = [this.Session.currentUser.id];\n            promises.push(this.$http.get(this.BaseConfig.BASE_URL + this.crudServiceBaseUrl, { params: userParams }));\n          } else if (_.isArray(dateSource.userIds) && dateSource.userIds.length > 0) {\n            userParams[\"user_ids[]\"] = dateSource.userIds;\n            promises.push(this.$http.get(this.BaseConfig.BASE_URL + this.crudServiceBaseUrl, { params: userParams }));\n          }\n\n          // Org Parameters\n          const orgParams = _.clone(params);\n          orgParams[\"orgs_only\"] = true;\n          promises.push(this.$http.get(this.BaseConfig.BASE_URL + this.crudServiceBaseUrl, { params: orgParams }));\n\n          this.$q\n            .all(promises)\n            .then((responses) => {\n              let data = [];\n\n              _.each(responses, (response: any) => {\n                data = data.concat(response.data.events);\n              });\n\n              _.each(data, (record) => {\n                if (record.job_id) {\n                  record.resourceId = \"job_\" + record.job_id;\n                } else if (record.org_id) {\n                  record.resourceId = \"org_\" + record.org_id;\n                } else if (record.user_id) {\n                  record.resourceId = \"user_\" + record.user_id;\n                }\n\n                if (record.metadata && record.metadata.cronofy_id) {\n                  record.editable = false;\n                }\n              });\n\n              this.lastData = data;\n              this.resources = _.chain(this.lastData)\n                .map((resource) => {\n                  return {\n                    text: resource.resourceId,\n                    value: resource.resourceId,\n                    color: \"#FFFFFF\",\n                  };\n                })\n                .uniq((resource) => {\n                  return resource.value;\n                })\n                .each((resource, index) => {\n                  resource.color = this.colors[index % this.colors.length];\n                })\n                .value();\n\n              cb.success({ events: data });\n\n              if (callbacks && callbacks[\"postRead\"] && _.isFunction(callbacks[\"postRead\"])) {\n                callbacks[\"postRead\"](data);\n              }\n            })\n            .catch((err) => {\n              cb.error(err);\n            });\n        },\n        update: (cb: kendo.data.DataSourceTransportOptions) => {\n          if (cb.data.status > 0) {\n            return;\n          }\n\n          if (callbacks && callbacks[\"preUpdate\"] && _.isFunction(callbacks[\"preUpdate\"])) {\n            callbacks[\"preUpdate\"](cb.data);\n          }\n\n          this.$http\n            .patch(this.BaseConfig.BASE_URL + this.crudServiceBaseUrl + \"/\" + cb.data.id, cb.data)\n            .then((response) => {\n              cb.success(response.data);\n            })\n            .catch((err) => {\n              cb.error(err);\n            });\n        },\n        destroy: (cb: kendo.data.DataSourceTransportOptions) => {\n          if (cb.data.status > 0) {\n            return;\n          }\n\n          this.$http\n            .delete(this.BaseConfig.BASE_URL + this.crudServiceBaseUrl + \"/\" + cb.data.id, cb.data)\n            .then((response) => {\n              cb.success(response.data);\n            })\n            .catch((err) => {\n              cb.error(err);\n            });\n        },\n        create: (cb: kendo.data.DataSourceTransportOptions) => {\n          if (cb.data.status > 0) {\n            return;\n          }\n\n          if (callbacks && callbacks[\"preCreate\"] && _.isFunction(callbacks[\"preCreate\"])) {\n            callbacks[\"preCreate\"](cb.data);\n          }\n\n          this.$http\n            .post(this.BaseConfig.BASE_URL + this.crudServiceBaseUrl, { event: cb.data })\n            .then((response) => {\n              cb.success(response.data);\n            })\n            .catch((err) => {\n              cb.error(err);\n            });\n        },\n      },\n      schema: {\n        data: (data: any) => {\n          if (data.events) {\n            data = data.events;\n          } else if (data.event) {\n            data = data.event;\n          }\n          return data;\n        },\n        model: {\n          id: \"id\",\n          fields: {\n            title: {\n              from: \"summary\",\n              defaultValue: \"Sales Call\",\n              validation: { required: true },\n            },\n            start: {\n              type: \"date\",\n              from: \"start_time\",\n            },\n            end: {\n              type: \"date\",\n              from: \"end_time\",\n            },\n            description: {\n              from: \"description\",\n            },\n            job_id: {\n              from: \"job_id\",\n            },\n            resourceId: {\n              from: \"resourceId\",\n              nullable: true,\n            },\n            jobName: {\n              from: \"job_name\",\n            },\n            cronofy_invite_attendees: {\n              from: \"cronofy_invite_attendees\",\n            },\n            inviteAttendee: {\n              from: \"invite_customer\",\n            },\n            isEditable: {\n              from: \"editable\",\n              defaultValue: true,\n            },\n          },\n        },\n      },\n      change: (event: kendo.data.DataSourceChangeEvent) => {\n        if (callbacks && callbacks[\"change\"] && _.isFunction(callbacks[\"change\"])) {\n          callbacks[\"change\"](event);\n        }\n      },\n    } as any as kendo.data.DataSourceOptions);\n\n    dataSource.fetch();\n    return dataSource;\n  }\n\n  public getSchedulerResourceDatasource() {\n    return [\n      {\n        field: \"resourceId\",\n        dataColorField: \"color\",\n        name: \"Appointments\",\n        title: \"Appointments\",\n        dataSource: this.resources,\n      },\n    ];\n  }\n\n  public getPeriod(view: string, action: string, date: Moment) {\n    let subUnitOfTime: moment.unitOfTime.DurationConstructor = \"week\";\n    let unitOfTime: moment.unitOfTime.DurationConstructor = \"month\";\n    switch (view) {\n      case \"workWeek\":\n      case \"week\":\n        unitOfTime = \"week\";\n        subUnitOfTime = \"day\";\n        break;\n      case \"day\":\n        unitOfTime = \"day\";\n        subUnitOfTime = \"day\";\n        break;\n      case \"month\":\n        unitOfTime = \"month\";\n        subUnitOfTime = \"week\";\n        break;\n    }\n\n    date = date.startOf(unitOfTime as any as StartOf);\n\n    const result: IDateSource = {\n      start: date.clone().subtract(1, subUnitOfTime),\n      end: date.clone().add(1, unitOfTime).add(1, subUnitOfTime),\n    };\n    return result;\n  }\n}\n","import * as config from \"react-global-configuration\";\n\nexport interface ITask {\n  id: string;\n  job_id: string;\n  logs: string;\n  status: string;\n  lock_version: number;\n  user_id: number;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport class Task implements ITask {\n  public id: string;\n  public job_id: string;\n  public logs: string;\n  public status: string;\n  public lock_version: number;\n  public user_id: number;\n  public created_at: Date;\n  public updated_at: Date;\n\n  constructor(data?: any) {\n    if (data) {\n      this.id = data.id;\n      this.job_id = data.job_id;\n      this.logs = data.logs;\n      this.status = data.status;\n      this.lock_version = data.lock_version;\n      this.user_id = data.user_id;\n      this.created_at = new Date(data.created_at);\n      this.updated_at = new Date(data.updated_at);\n    }\n  }\n\n  public update(data: any) {\n    if (data) {\n      if (data.id) {\n        this.id = data.id;\n      }\n\n      if (data.job_id) {\n        this.job_id = data.job_id;\n      }\n\n      if (data.logs) {\n        this.logs = data.logs;\n      }\n\n      if (data.status) {\n        this.status = data.status;\n      }\n\n      if (data.lock_version) {\n        this.lock_version = data.lock_version;\n      }\n\n      if (data.user_id) {\n        this.user_id = data.user_id;\n      }\n\n      if (data.created_at) {\n        this.created_at = new Date(data.created_at);\n      }\n\n      if (data.updated_at) {\n        this.updated_at = new Date(data.updated_at);\n      }\n    }\n  }\n\n  public watch($timeout, $http, location, callback, timeout = 5000) {\n    if (location.indexOf(\"http\") !== 0) {\n      const joined = new URL(location, config.get(\"BASE_URL\"));\n      location = joined.toString();\n    }\n\n    $timeout(() => {\n      $http.get(location).then((resp: any) => {\n        this.update(resp.data.task);\n        callback(this);\n        if (this.status !== \"error\" && this.status !== \"finished\") {\n          this.watch($timeout, $http, location, callback);\n        }\n      });\n    }, timeout);\n  }\n\n  public static watch($timeout, $http, location, callback, timeout = 5000) {\n    const task = new Task();\n    task.watch($timeout, $http, location, callback, timeout);\n\n    return task;\n  }\n}\n","import { IEvent } from \"app/src/Models/Event\";\nimport { IJob, IJobResource } from \"app/src/Models/Job\";\nimport { IFlash, FlashLevels } from \"app/src/Common/FlashService\";\nimport * as angulartics from \"angulartics\";\nimport { ITask, Task } from \"../Models/Task\";\nimport { emailListRegex } from \"app2/src/helpers/InputValidator\";\n\nexport class InviteModal {\n  public emails: string;\n  public emailListPattern = emailListRegex;\n\n  public static $inject = [\n    \"$uibModalInstance\",\n    \"$analytics\",\n    \"Flash\",\n    \"appointment\",\n    \"job\",\n    \"Job\",\n    \"$timeout\",\n    \"$http\",\n  ];\n\n  constructor(\n    public $uibModalInstance: ng.ui.bootstrap.IModalServiceInstance,\n    public $analytics: angulartics.IAnalyticsService,\n    public Flash: IFlash,\n    public appointment: IEvent,\n    public job: IJob,\n    public Job: IJobResource,\n    public $timeout: ng.ITimeoutService,\n    public $http: ng.IHttpService,\n  ) {\n    this.emails = job.email;\n  }\n\n  public send() {\n    this.Job.invite({\n      id: this.job.id,\n      event_id: this.appointment.id,\n      emails: this.emails,\n      summary: this.appointment.summary,\n    })\n      .$promise.then((response: any) => {\n        Task.watch(this.$timeout, this.$http, response.location, (task: ITask) => {\n          if (task.status === \"error\") {\n            this.Flash.addMessage(FlashLevels.danger, \"There was an error with your email: \" + task.logs);\n          }\n        });\n\n        this.Flash.addMessage(FlashLevels.success, \"Invite successfully sent.\");\n      })\n      .catch(() => {\n        this.Flash.addMessage(\n          FlashLevels.danger,\n          \"There were problems sending the invite. If the problem continues, contact support.\",\n        );\n      });\n    this.$uibModalInstance.close();\n  }\n}\n","import { IResultResource, IResultResponse } from \"app/src/Models/Result\";\nimport { IResultReasonResource, IResultReasonResponse } from \"app/src/Models/ResultReason\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IEvent } from \"app/src/Models/Event\";\n\nclass ResultModalCtrl implements ng.IComponentController {\n  public close: () => void;\n  public result: (params: any) => void;\n  public org: IOrg;\n  public eventSrc: IEvent;\n  public event: IEvent;\n  public resultWindow: ng.ui.bootstrap.IModalServiceInstance;\n  public spinnerPromise: ng.IPromise<any>;\n  public results: IResultResponse;\n  public reasons: IResultReasonResponse;\n\n  constructor(\n    public $q: ng.IQService,\n    public Result: IResultResource,\n    public ResultReason: IResultReasonResource,\n    private $uibModal: ng.ui.bootstrap.IModalService,\n  ) {}\n\n  public $onChanges() {\n    if (this.org && !this.results) {\n      this.results = <IResultResponse>this.Result.query({ org_id: this.org.id });\n      this.reasons = <IResultReasonResponse>this.ResultReason.query({ org_id: this.org.id });\n      this.spinnerPromise = this.$q.all([this.results.$promise, this.reasons.$promise]);\n    }\n\n    if (this.eventSrc) {\n      this.event = this.eventSrc.clone();\n      this.resultWindow = this.$uibModal.open({\n        size: \"md\",\n        templateUrl: \"resultModalWindow.html\",\n        controller: [\n          \"$scope\",\n          \"event\",\n          \"results\",\n          \"reasons\",\n          function ($scope, event, results, reasons) {\n            this.event = event;\n            this.results = results;\n            this.reasons = reasons;\n          },\n        ],\n        controllerAs: \"$ctrl\",\n        resolve: {\n          event: this.event,\n          results: this.results,\n          reasons: this.reasons,\n        },\n      });\n\n      this.resultWindow.result.then(\n        () => {\n          this.sendResults();\n        },\n        () => {\n          this.windowClosed();\n        },\n      );\n    } else if (this.resultWindow) {\n      this.resultWindow.close();\n    }\n  }\n\n  public sendResults() {\n    if (this.result) {\n      this.result({\n        result_id: this.event.events_result_id,\n        reason_id: this.event.events_result_reason_id,\n        notes: this.event.notes,\n      });\n    }\n    this.windowClosed();\n  }\n\n  public windowClosed() {\n    this.eventSrc = null;\n    this.event = null;\n    this.resultWindow = null;\n    if (this.close) {\n      this.close();\n    }\n  }\n}\n\nexport class ResultModal implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/Calendar/result_modal.html\";\n  public bindings: any = {\n    org: \"<\",\n    eventSrc: \"<\",\n    result: \"&\",\n    close: \"&\",\n  };\n\n  constructor() {\n    this.controller = ResultModalCtrl;\n    this.controller.$inject = [\"$q\", \"Result\", \"ResultReason\", \"$uibModal\"];\n  }\n}\n","export class CalendarProviderUnit {\n  public static factory() {\n    const factoryFunction = (text) => {\n      let result = text;\n      switch (text) {\n        case \"apple\":\n          result = \"Apple iCloud\";\n          break;\n        case \"cronofy\":\n          result = \"Cronofy\";\n          break;\n        case \"exchange\":\n          result = \"Microsoft Exchange\";\n          break;\n        case \"google\":\n          result = \"Google Calendar\";\n          break;\n        case \"live_connect\":\n          result = \"Outlook\";\n          break;\n        case \"office365\":\n          result = \"Office 365\";\n          break;\n      }\n\n      return result;\n    };\n\n    factoryFunction.$inject = [];\n\n    return factoryFunction;\n  }\n}\n","import * as React from \"react\";\nimport { List, Record } from \"immutable\";\nimport { EventRecord } from \"app2/src/records/Event\";\nimport { RootState } from \"app2/src/reducers\";\n\nexport interface DateRange {\n  start: Date;\n  end: Date;\n}\n\ninterface ContextProps {\n  dateRange: DateRange;\n  setDateRange: (newRange: DateRange) => void;\n  userIds: List<number>;\n  setUserIds: (newUserIds: List<number>) => void;\n  events: List<EventRecord>;\n  loading: boolean;\n  includes: string[];\n  setEventColor: (state: RootState, props: any) => string;\n}\n\nconst defaultContextProps: ContextProps = {\n  dateRange: { start: null, end: null },\n  setDateRange: () => null,\n  userIds: List(),\n  setUserIds: () => null,\n  events: List(),\n  loading: false,\n  includes: [],\n  setEventColor: (state: RootState, props: any) => null,\n};\n\nexport class ContextRecord extends Record(defaultContextProps) implements ContextProps {}\n\nexport const Context = React.createContext(new ContextRecord());\n","import { validateEmail, validatePhoneNumber } from \"app2/src/helpers/InputValidator\";\nimport { Nullable } from \"app2/src/records\";\nimport * as EmailValidator from \"email-validator\";\n\n/**\n * Compose multiple FinalForm validators on one field level validation\n *\n * @param {...validators} FinalForm validators\n * @returns {Nullable<string>}\n */\nexport const composeValidators =\n  (...validators: any[]) =>\n  (value: Nullable<string>): Nullable<string> => {\n    return validators.reduce((error, validator) => error || validator(value), undefined);\n  };\n\n/**\n * Returns undefined for valid inputs and the erorr message for invalid inputs.\n *\n * @param {data: Nullable<string | number>} input\n * @returns {Nullable<string>}\n */\nexport const required = (data: Nullable<string | number>): Nullable<string> => {\n  const badValues = [null, undefined, \"\"];\n\n  const dataStr: string = typeof data === \"number\" ? data.toString() : data;\n  return badValues.includes(dataStr?.trim()) ? \"Required\" : undefined;\n};\n\n/**\n * Returns undefined for valid inputs and the erorr message for invalid inputs.\n *\n * @param {data: Nullable<boolean>} input\n * @returns {Nullable<string>}\n */\nexport const checkRequired = (data: Nullable<boolean | string>): Nullable<string> => {\n  const badValues = [false, null, undefined] as any[];\n  return badValues.includes(data) ? \"Required\" : undefined;\n};\n\n/**\n * Returns undefined for valid inputs and the erorr message for invalid inputs.\n *\n * @param {data: Nullable<string>} input\n * @returns {Nullable<string>}\n */\nexport const arrayRequired = (data: Nullable<any[]>): Nullable<string> => {\n  const badValues = [null, undefined, 0];\n  return badValues.includes(data?.length) ? \"Required\" : undefined;\n};\n\n/**\n * Returns undefined for valid phone number and the erorr message for invalid phone numbers.\n *\n * @param {data: Nullable<string>} input\n * @returns {Nullable<string>}\n */\nexport const phoneNumber = (phone: string): Nullable<string> => {\n  return validatePhoneNumber(phone) ? undefined : \"Improperly formatted Phone Number. Numeric Only.\";\n};\n\n/**\n * Returns undefined for valid comma separated emails and the erorr message for invalid emails.\n *\n * @param {data: Nullable<string>} input\n * @returns {Nullable<string>}\n */\nexport const commaSeparatedEmail = (email: string): Nullable<string> => {\n  return validateEmail(email) ? undefined : \"Improperly formatted emails '_@__.__' (comma separated)\";\n};\n\n/**\n * Returns undefined for valid base url (no query params) and the error message for invalid urls.\n */\nexport const validateBaseUrl = (input: string): Nullable<string> => {\n  if (!input) return null;\n\n  const url_regex = new RegExp(\n    /^((?:http:\\/\\/)|(?:https:\\/\\/))(www.)?((?:[\\-a-zA-Z0-9]+\\.[\\-a-z]{3})|(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(?::\\d+)?))([\\/\\-a-zA-Z0-9\\.]*)$/,\n  );\n  return input.match(url_regex) ? undefined : \"Invalid URL\";\n};\n\n/**\n * Returns undefined for valid https base url (including query params) and the error message for invalid  or not https urls.\n */\nexport const validateHttpsBaseUrl = (input: string): Nullable<string> => {\n  if (!input) return null;\n\n  const url_regex = new RegExp(\n    /^((?:https:\\/\\/))(www\\.)?((?:[\\w\\-]+\\.)+(?:[\\w\\-]{2,})(?:\\.[a-z]{2,})?|(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(?::\\d+)?))([\\/\\w\\-\\.?#&=\\[\\]]*)$/,\n  );\n  return input.match(url_regex) ? undefined : \"Invalid URL\";\n};\n\n/*\n * Returns undefined for valid emails and the error message for invalid emails.\n *\n * @param {data: Nullable<string>} input\n * @returns {Nullable<string>}\n */\nexport const email = (email: string): Nullable<string> => {\n  return EmailValidator.validate(email) ? undefined : \"Improperly formatted email '_@__.__'\";\n};\n\n/*\n * Returns undefined for number > input and the error message for number <= input\n *\n * @param {data: Nullable<string>} input\n * @returns {Nullable<string>}\n */\nexport const greaterThanValue = (greaterThanValue: number) => {\n  return (value: any): Nullable<string> => {\n    return value > greaterThanValue ? undefined : `Must be greater than ${greaterThanValue}`;\n  };\n};\n\n/*\n * Returns undefined for number >= input and the error message for number < input\n *\n * @param {data: Nullable<string>} input\n * @returns {Nullable<string>}\n */\nexport const greaterThanOrEqualToValue = (greaterThanOrEqualToValue: number) => {\n  return (value: any): Nullable<string> => {\n    return value >= greaterThanOrEqualToValue\n      ? undefined\n      : `Must be greater than or equal to ${greaterThanOrEqualToValue}`;\n  };\n};\n\n/*\n * Returns undefined for number < input and the error message for number >= input\n *\n * @param {data: Nullable<string>} input\n * @returns {Nullable<string>}\n */\nexport const lessThanValue = (lessThanValue: number) => {\n  return (value: any): Nullable<string> => {\n    return value < lessThanValue ? undefined : `Must be less than ${lessThanValue}`;\n  };\n};\n\n/*\n * Returns undefined for number <= input and the error message for number > input\n *\n * @param {data: Nullable<string>} input\n * @returns {Nullable<string>}\n */\nexport const lessThanOrEqualToValue = (lessThanOrEqualToValue: number) => {\n  return (value: any): Nullable<string> => {\n    return value <= lessThanOrEqualToValue ? undefined : `Must be less than or equal to ${lessThanOrEqualToValue}`;\n  };\n};\n","import { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport * as React from \"react\";\nimport { Button, ButtonProps } from \"react-bootstrap\";\n\nexport interface ButtonFooterProps {\n  cancel: () => void;\n  update?: () => void;\n  destroy?: () => void;\n  itemName?: string;\n  saveButtonProps?: ButtonProps;\n  deleteButtonProps?: ButtonProps;\n  cancelButtonProps?: ButtonProps;\n  saveText?: string;\n}\n\nexport default class ButtonFooter extends React.Component<ButtonFooterProps> {\n  constructor(props: ButtonFooterProps) {\n    super(props);\n  }\n\n  public render() {\n    const { update, cancel, destroy } = this.props;\n    const { saveButtonProps, deleteButtonProps, cancelButtonProps } = this.props;\n    let { itemName, saveText } = this.props;\n    if (!itemName) itemName = \"item\";\n    if (!saveText) saveText = \"Save Changes\";\n\n    return (\n      <>\n        {destroy && (\n          <ConfirmDialog title={`Are you sure you wish to delete this ${itemName}?`}>\n            {(confirm) => (\n              <Button variant=\"delete\" onClick={confirm(() => destroy())} className=\"mr-auto\" {...deleteButtonProps}>\n                Delete\n              </Button>\n            )}\n          </ConfirmDialog>\n        )}\n\n        <div className=\"button-footer\">\n          <Button variant=\"save\" type=\"submit\" onClick={update} {...saveButtonProps}>\n            {saveText}\n          </Button>\n          <Button variant=\"cancel\" onClick={cancel} {...cancelButtonProps}>\n            Cancel\n          </Button>\n        </div>\n      </>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Modal, Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Actions, AsyncActions } from \"app2/src/reducers/event.actions\";\nimport { Context } from \"./Context\";\nimport { push } from \"connected-react-router/immutable\";\nimport { RootState } from \"app2/src/reducers\";\nimport { event as eventSelector } from \"app2/src/selectors/event.selectors\";\nimport { useRouteMatch } from \"react-router\";\nimport { RsfForm, FormControl, FormControlDate, FormControlTime } from \"@tberrysoln/rsf-form\";\nimport { required } from \"app2/src/helpers/FinalFormValidator\";\nimport { useTracking } from \"react-tracking\";\nimport ButtonFooter from \"app2/src/components/Common/ButtonFooter\";\nimport { CustomLink } from \"app2/src/components/Common/CustomLink\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\n\nexport const EditAppointmentModal: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"EditAppointmentModal\" });\n  const match = useRouteMatch<{ eventId: string }>();\n\n  // Selectors\n  const eventId = parseInt(match.params.eventId);\n  const event = useSelector((state: RootState) => eventSelector(state, { eventId }));\n\n  // Context\n  const { includes } = React.useContext(Context);\n\n  // Local State\n  const [showError, setShowError] = React.useState(false);\n\n  // Methods\n  const close = () => {\n    const prevPath = match.path.split(\"/edit\")[0];\n    dispatch(push(prevPath));\n  };\n\n  const cancel = () => {\n    trackEvent({ action: \"appt edit canceled\", event: eventId });\n    dispatch(Actions.resetEvent(eventId));\n    close();\n  };\n\n  const deleteEvent = async () => {\n    trackEvent({ action: \"appt removed\", event: eventId });\n    await dispatch(AsyncActions.delete(eventId));\n    close();\n  };\n\n  const submit = async () => {\n    trackEvent({ action: \"appt saved\", event: eventId });\n    await dispatch(AsyncActions.createOrUpdate(eventId, includes));\n    close();\n  };\n\n  const validateForm = () => {\n    if (event && event.start_time >= event.end_time) {\n      setShowError(true);\n      return [\n        { name: \"start_time\", error: \" \" },\n        { name: \"end_time\", error: \" \" },\n      ];\n    } else {\n      setShowError(false);\n      return [{ name: \"start_time\" }, { name: \"end_time\" }];\n    }\n  };\n\n  return (\n    <Modal show={true} onHide={cancel} backdrop=\"static\" backdropClassName=\"z-index-1060\" className=\"z-index-1070\">\n      <Modal.Header closeButton>\n        <Modal.Title>Edit Appointment</Modal.Title>\n      </Modal.Header>\n      <SpinnerComponent localProperty={event?.loading} />\n      <RsfForm\n        rootPath={[\"events\", \"byId\", eventId]}\n        onSubmit={submit}\n        updateFormReducer={Actions.updateForm}\n        validate={validateForm}>\n        <Modal.Body>\n          <FormControl name=\"summary\" label=\"Title\" validate={required} autoFocus />\n          <Row>\n            <Col>\n              <FormControlDate name=\"start_time\" label=\"Start Date\" id=\"start_date\" />\n            </Col>\n            <Col>\n              <FormControlTime name=\"start_time\" label=\"Start Time\" id=\"start_time\" />\n            </Col>\n          </Row>\n          <Row>\n            <Col>\n              <FormControlDate name=\"end_time\" label=\"End Date\" id=\"end_date\" />\n            </Col>\n            <Col>\n              <FormControlTime name=\"end_time\" label=\"End Time\" id=\"end_time\" />\n            </Col>\n          </Row>\n          {showError && (\n            <div className=\"mb-2 text-center red-text\" style={{ marginTop: \"-10px\" }}>\n              Start Time must be before End Time\n            </div>\n          )}\n          <FormControl name=\"description\" label=\"Description\" as=\"textarea\" />\n          {eventId > 0 && event?.job_id ? (\n            <>\n              <CustomLink tag=\"a\" to={`/jobs/${event.job_id}/info`}>\n                Navigate to Job\n              </CustomLink>\n              <CustomLink\n                className=\"btn-link ml-2\"\n                tag=\"a\"\n                to={`/jobs/${event.job_id}/info`}\n                target=\"_blank\"\n                id=\"job-link-new-window\">\n                <FontAwesome name=\"external-link\" />\n              </CustomLink>\n            </>\n          ) : null}\n        </Modal.Body>\n        <Modal.Footer>\n          <ButtonFooter cancel={cancel} destroy={eventId !== 0 ? deleteEvent : null} itemName=\"appointment\" />\n        </Modal.Footer>\n      </RsfForm>\n    </Modal>\n  );\n};\n","import * as React from \"react\";\nimport FullCalendar, { EventApi } from \"@fullcalendar/react\";\nimport dayGridPlugin from \"@fullcalendar/daygrid\";\nimport timeGridPlugin from \"@fullcalendar/timegrid\";\nimport interactionPlugin from \"@fullcalendar/interaction\";\nimport bootstrapPlugin from \"@fullcalendar/bootstrap\";\nimport { initDescription, IEventData } from \"app2/src/records/Event\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { EditAppointmentModal } from \"./EditAppointmentModal\";\nimport { Actions, AsyncActions } from \"app2/src/reducers/event.actions\";\nimport { Route, Switch, useRouteMatch } from \"react-router\";\nimport { push } from \"connected-react-router/immutable\";\nimport { Context, DateRange } from \"./Context\";\nimport { useTracking } from \"react-tracking\";\nimport { currentAccessUid } from \"app2/src/reducers/auth.selectors\";\nimport { currentUserId as currentUserIdSelector } from \"app2/src/selectors/user.selectors\";\nimport { currentOrgId as currentOrgIdSelector } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\n\nexport interface EventsCalendarProps {\n  onDateChange: (dateRange: DateRange) => void;\n  disabledViews?: [\"timeGridWeek\" | \"timeGridDay\" | \"dayGridMonth\"];\n  eventAddDisabled?: boolean;\n}\n\nexport const EventsCalendar: React.FC<EventsCalendarProps> = ({ onDateChange, disabledViews, eventAddDisabled }) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const match = useRouteMatch();\n  const { trackEvent } = useTracking<any>({ component: \"EventsCalendar\" });\n  const { setDateRange, events, loading, setEventColor, includes } = React.useContext(Context);\n\n  // Selectors\n  const job = useSelector(currentJob);\n  const accessUid = useSelector(currentAccessUid);\n  const currentUserId = useSelector(currentUserIdSelector);\n  const currentOrgId = useSelector(currentOrgIdSelector);\n  const calendarEvents = useSelector((state: RootState) => {\n    if (events?.size) {\n      return events\n        .map((event) => ({\n          title: event.summary,\n          start: event.start_time,\n          end: event.end_time,\n          id: event.id,\n          color: setEventColor(state, { event }),\n          editable: event.editable,\n          startEditable: event.editable,\n          durationEditable: event.editable,\n        }))\n        .toJS();\n    } else return [];\n  });\n\n  // Methods\n  const handleSelect = (arg) => {\n    trackEvent({ action: \"add\" });\n    const newEvent: Partial<IEventData> = {\n      id: 0,\n      start_time: arg.start,\n      end_time: arg.end,\n      summary: \"Sales Call\",\n      job_id: job?.id || null,\n    };\n\n    if (job) {\n      newEvent.description = initDescription(job, accessUid);\n      newEvent.summary = \"Sales Call: \" + job.name;\n    } else {\n      newEvent.user_id = currentUserId;\n      newEvent.org_id = currentOrgId;\n    }\n\n    dispatch(Actions.initializeEvent(newEvent));\n    dispatch(push(`${match.url}/edit/0`));\n  };\n\n  const handleEventChange = (arg) => {\n    const eventId = parseInt(arg.event.id);\n    trackEvent({ action: \"appt changed\", event: eventId });\n    dispatch(\n      AsyncActions.updateTime(\n        {\n          id: eventId,\n          start_time: arg.event.start,\n          end_time: arg.event.end,\n        },\n        includes,\n      ),\n    );\n  };\n\n  const handleEventClick = ({ event }) => {\n    if (event.startEditable && event.durationEditable) {\n      trackEvent({ action: \"Edit Appointment\", event: event.id });\n      dispatch(push(`${match.url}/edit/${event.id}`));\n    }\n  };\n\n  const handleDatesSet = async (dateRange: DateRange) => {\n    trackEvent({ action: \"change date range\", startTime: dateRange.start, endTime: dateRange.end });\n    onDateChange(dateRange);\n    setDateRange(dateRange);\n  };\n\n  const availableViews = React.useMemo(() => {\n    const views = [\"timeGridDay\", \"timeGridWeek\", \"dayGridMonth\"];\n    if (!disabledViews) return views.join(\",\");\n\n    return views.filter((view: any) => !disabledViews.includes(view)).join(\",\");\n  }, [disabledViews]);\n\n  const handleEvents = (events: EventApi[]) => {\n    const lookup = events.reduce((a, e) => {\n      a[e.id] = ++a[e.id] || 0;\n      return a;\n    }, {});\n    const duplicatedEvents = events.filter((e) => lookup[e.id]);\n    if (duplicatedEvents.length) {\n      duplicatedEvents.splice(-1, 1); // keep the last one\n      duplicatedEvents.map((evt) => evt.remove()); // remove the others, may be more than one\n    }\n  };\n\n  return (\n    <>\n      <FullCalendar\n        height={\"100%\"}\n        plugins={[dayGridPlugin, timeGridPlugin, interactionPlugin, bootstrapPlugin as any]}\n        themeSystem=\"bootstrap\"\n        headerToolbar={{\n          left: \"today prev,next\",\n          center: \"title\",\n          right: availableViews,\n        }}\n        businessHours={{\n          startTime: \"8:00\",\n        }}\n        buttonText={{\n          today: \"Today\",\n          month: \"Month\",\n          week: \"Week\",\n          day: \"Day\",\n        }}\n        initialView=\"timeGridWeek\"\n        events={calendarEvents}\n        eventsSet={handleEvents}\n        select={handleSelect}\n        eventChange={handleEventChange}\n        eventClick={handleEventClick}\n        datesSet={handleDatesSet}\n        allDaySlot={false}\n        nowIndicator\n        editable\n        selectable={!eventAddDisabled}\n        selectMirror\n      />\n      {!loading && (\n        <Switch>\n          <Route path={`${match.url}/edit/:eventId`} component={EditAppointmentModal} />\n        </Switch>\n      )}\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as userActions from \"app2/src/reducers/user.actions\";\nimport { queryParamsFromJSON } from \"app2/src/records/Page\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { List } from \"immutable\";\nimport { currentUser, users as usersSelector } from \"app2/src/selectors/user.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getFullName, UserRecord } from \"app2/src/records/UserRecord\";\nimport { Context } from \"./Context\";\nimport { Actions } from \"app2/src/reducers/event.actions\";\nimport { colorsByUserId as colorsByUserIdSelector } from \"app2/src/selectors/event.selectors\";\nimport Select, { StylesConfig } from \"react-select\";\nimport { getPaginationByModel, isCurrentPageLoading } from \"app2/src/selectors/pagination.selectors\";\nimport { useTracking } from \"react-tracking\";\n\nexport interface UserFilterProps {\n  onUsersChange: (newUsersList: List<number>) => void;\n  // Used for Scheduler\n  userToAssignId?: number;\n}\n\nexport const UserFilter: React.FC<UserFilterProps> = ({ onUsersChange, userToAssignId }) => {\n  const modelName = \"user\";\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"UserFilter\" });\n\n  // Context\n  const { userIds, setUserIds } = React.useContext(Context);\n\n  // Selectors\n  const orgId = useSelector((state: RootState) => currentOrgId(state) || currentUser(state)?.get(\"org_id\"));\n  const users: List<UserRecord> = useSelector((state: RootState) => {\n    const paginatedUsers = getPaginationByModel(state, { path: [\"users\", \"usersById\"], modelName });\n    return paginatedUsers\n      .filter((u) => u.id !== userToAssignId && !userIds.includes(u.id))\n      .concat(usersSelector(state, { userIds }));\n  });\n  const loading = useSelector((state: RootState) => isCurrentPageLoading(state, { modelName }));\n  const colorsByUserId = useSelector(colorsByUserIdSelector);\n\n  // Select Values\n  const selectOptions = React.useMemo(() => {\n    return users.map((u) => ({ label: getFullName(u), value: u.id, color: colorsByUserId?.get(u.id) })).toJS();\n  }, [users, userToAssignId, colorsByUserId]);\n  const selectValues = React.useMemo(() => {\n    return selectOptions.filter((o) => userIds.includes(o.value));\n  }, [selectOptions, userIds]);\n\n  // Local State\n  const [lastInputValue, setLastInputValue] = React.useState(\"\");\n\n  // Methods\n  const listUsers = async (query = null) => {\n    await dispatch(\n      userActions.AsyncActions.listUsers(queryParamsFromJSON({ parameters: { org_id: orgId.toString() }, query })),\n    );\n  };\n\n  const handleChange = (value: any[] | null) => {\n    trackEvent({ action: \"handle user filter change\", value });\n    const newList = List(value.map((obj) => obj.value));\n    setUserIds(newList);\n    onUsersChange(newList);\n  };\n\n  const handleInputChange = _.debounce((query: string) => {\n    if (lastInputValue !== query) listUsers(query);\n    setLastInputValue(query);\n  }, 500);\n\n  // Lifecycle\n  React.useEffect(() => {\n    listUsers();\n  }, []);\n\n  React.useEffect(() => {\n    dispatch(Actions.generateColors(userIds, userToAssignId));\n  }, [userIds, userToAssignId]);\n\n  const customStyles: StylesConfig<any, false> = {\n    container: (styles) => ({\n      ...styles,\n      zIndex: 2,\n    }),\n    multiValue: (styles, { data }) => {\n      return {\n        ...styles,\n        borderLeft: `5px solid ${data.color}`,\n      };\n    },\n    valueContainer: (styles) => ({\n      ...styles,\n      minWidth: \"215px\",\n      maxWidth: \"30vw\",\n      maxHeight: \"65px\",\n      overflowY: \"auto\",\n    }),\n  };\n\n  return (\n    <Form.Group>\n      <Form.Label>Users</Form.Label>\n      <Select\n        styles={customStyles}\n        isMulti\n        value={selectValues}\n        onChange={handleChange}\n        options={selectOptions}\n        onInputChange={handleInputChange}\n        isLoading={loading}\n        filterOption={() => true}\n      />\n    </Form.Group>\n  );\n};\n","import * as React from \"react\";\nimport { getFullName, UserRecord } from \"app2/src/records/UserRecord\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentUser, user } from \"app2/src/selectors/user.selectors\";\nimport { List } from \"immutable\";\nimport { Form } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Select, { StylesConfig } from \"react-select\";\nimport { getPaginationByModel, isCurrentPageLoading } from \"app2/src/selectors/pagination.selectors\";\nimport * as userActions from \"app2/src/reducers/user.actions\";\nimport { queryParamsFromJSON } from \"app2/src/records/Page\";\n\nexport interface JobsToAssignDropdownProps {\n  selectedUserId: number;\n  onChange: (newValue: number) => void;\n}\n\nexport const JobsToAssignDropdown: React.FC<JobsToAssignDropdownProps> = ({ selectedUserId, onChange }) => {\n  const modelName = \"jobsToAssignUsers\";\n  // Hooks\n  const dispatch = useDispatch();\n\n  // Local State\n  const [lastInputValue, setLastInputValue] = React.useState(\"\");\n\n  // Selectors\n  const orgId = useSelector((state: RootState) => currentUser(state)?.get(\"org_id\"));\n  const selectedUser = useSelector((state: RootState) => user(state, { userId: selectedUserId }));\n  const users: List<UserRecord> = useSelector((state: RootState) =>\n    getPaginationByModel(state, { path: [\"users\", \"usersById\"], modelName })\n      .filter((u) => u.id !== selectedUserId)\n      .insert(0, selectedUser),\n  );\n  const loading = useSelector((state: RootState) => isCurrentPageLoading(state, { modelName }));\n\n  // Select Values\n  const selectOptions = React.useMemo(() => {\n    return users.toJS().map((u) => ({ label: getFullName(u), value: u.id }));\n  }, [users]);\n  const selectValue = React.useMemo(() => {\n    return selectOptions.find((o) => o.value === selectedUserId);\n  }, [users, selectedUserId]);\n\n  const customStyles: Partial<StylesConfig<any, false>> = {\n    container: (styles) => ({\n      ...styles,\n      minWidth: \"230px\",\n      zIndex: 2,\n    }),\n    singleValue: (styles) => ({\n      ...styles,\n      alignItems: \"center\",\n      display: \"flex\",\n\n      \":before\": {\n        backgroundColor: \"hsl(0, 0%, 45%)\",\n        content: '\" \"',\n        display: \"block\",\n        marginRight: 8,\n        height: 10,\n        width: 10,\n      },\n    }),\n  };\n\n  // Methods\n  const listUsers = (query = null) => {\n    dispatch(\n      userActions.AsyncActions.listUsers(\n        queryParamsFromJSON({ parameters: { org_id: orgId.toString() }, query }),\n        modelName,\n      ),\n    );\n  };\n\n  const handleChange = (selectedOption) => {\n    onChange(selectedOption.value);\n  };\n\n  const handleInputChange = _.debounce((query: string) => {\n    if (lastInputValue !== query) listUsers(query);\n    setLastInputValue(query);\n  }, 500);\n\n  const onMenuOpen = () => {\n    listUsers();\n  };\n\n  return (\n    <Form.Group className=\"mr-3\">\n      <Form.Label>Jobs to Assign</Form.Label>\n      <Select\n        onMenuOpen={onMenuOpen}\n        styles={customStyles}\n        options={selectOptions}\n        value={selectValue}\n        onChange={handleChange}\n        onInputChange={handleInputChange}\n        isLoading={loading}\n        filterOption={() => true}\n      />\n    </Form.Group>\n  );\n};\n","import * as React from \"react\";\nimport { connectFC } from \"app2/src/connect\";\nimport { history } from \"app2/src/store\";\nimport { ConnectedRouter } from \"connected-react-router/immutable\";\nimport { List } from \"immutable\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { EventsCalendar } from \"../Common/EventsCalendar\";\nimport { Context, ContextRecord, DateRange } from \"../Common/EventsCalendar/Context\";\nimport { Switch, Route } from \"react-router-dom\";\nimport { UserFilter } from \"../Common/EventsCalendar/UserFilter\";\nimport { currentUser as currentUserSelector } from \"app2/src/selectors/user.selectors\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { AsyncActions } from \"app2/src/reducers/event.actions\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { JobsToAssignDropdown } from \"./JobsToAssignDropdown\";\nimport { getAllPaginationByModel, pageRecord } from \"app2/src/selectors/pagination.selectors\";\nimport { RootState, ThunkResult } from \"app2/src/reducers\";\nimport { queryParamsFromJSON } from \"app2/src/records/Page\";\nimport SpinnerComponent from \"../SpinnerComponent\";\nimport { eventColor } from \"app2/src/selectors/event.selectors\";\nimport { useTracking } from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport track from \"react-tracking\";\n\nexport const SchedulerTab: React.FC = () => {\n  const modelName = \"events\";\n  const includes = [\"job_basic\", \"assignments\"];\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"SchedulerTab\" });\n\n  const [userIds, setUserIds] = React.useState(List<number>());\n\n  // Selectors\n  const currentUser = useSelector(currentUserSelector);\n  const jobAssignedEvents = useSelector((state: RootState) =>\n    getAllPaginationByModel(state, { path: [modelName, \"byId\"], modelName }),\n  );\n  const [localLoading, setLocalLoading] = React.useState(false);\n  const userEvents = useSelector((state: RootState) =>\n    getAllPaginationByModel(state, { path: [modelName, \"byId\"], modelName: \"userEvents\" }),\n  );\n\n  // Local State\n  const [dateRange, setDateRange] = React.useState<DateRange>({\n    start: null,\n    end: null,\n  });\n  const [userToAssignId, setUserToAssignId] = React.useState(currentUser?.get(\"id\"));\n\n  // Lifecycle\n  React.useEffect(() => {\n    return () => {\n      dispatch(paginationActions.Actions.clearPage(modelName));\n      dispatch(paginationActions.Actions.clearPage(\"userEvents\"));\n    };\n  }, []);\n\n  // Methods\n  const loadToAssignEvents = (dateRange: DateRange, userToAssignId: number): ThunkResult<Promise<void>> => {\n    dispatch(paginationActions.Actions.clearPage(\"events\"));\n    return dispatch(\n      AsyncActions.loadEvents(\n        queryParamsFromJSON({\n          page: 1,\n          parameters: {\n            start_time: dateRange.start,\n            end_time: dateRange.end,\n            job_assigned_user_id: userToAssignId.toString(),\n            \"include[]\": includes,\n          },\n        }),\n        \"events\",\n        true,\n      ),\n    );\n  };\n\n  const loadUserEvents = (dateRange: DateRange, userIds: List<number>): ThunkResult<Promise<void>> => {\n    dispatch(paginationActions.Actions.clearPage(\"userEvents\"));\n    return dispatch(\n      AsyncActions.loadEvents(\n        queryParamsFromJSON({\n          page: 1,\n          parameters: {\n            start_time: dateRange.start,\n            end_time: dateRange.end,\n            \"user_ids_all_appointments[]\": userIds.toJS(),\n            \"include[]\": includes,\n          },\n        }),\n        \"userEvents\",\n        true,\n      ),\n    );\n  };\n\n  const handleUserFilterChange = async (newUsersList: List<number>) => {\n    if (newUsersList.size > 0) {\n      setLocalLoading(true);\n      await loadUserEvents(dateRange, newUsersList);\n      setLocalLoading(false);\n    } else {\n      dispatch(paginationActions.Actions.clearPage(\"userEvents\"));\n    }\n  };\n\n  const handleJobToAssignChange = async (newUserToAssignId: number) => {\n    setLocalLoading(true);\n    trackEvent({ action: \"job assigned user changed\", user: newUserToAssignId });\n    setUserToAssignId(newUserToAssignId);\n    setUserIds(List());\n\n    await loadToAssignEvents(dateRange, newUserToAssignId);\n    dispatch(paginationActions.Actions.clearPage(\"userEvents\"));\n    setLocalLoading(false);\n  };\n\n  const handleDateChange = async (dateRange: DateRange) => {\n    setLocalLoading(true);\n    if (userIds.size > 0) {\n      await loadUserEvents(dateRange, userIds);\n    }\n    await loadToAssignEvents(dateRange, userToAssignId);\n    setLocalLoading(false);\n  };\n\n  return (\n    <Context.Provider\n      value={\n        new ContextRecord({\n          dateRange,\n          setDateRange,\n          userIds,\n          setUserIds,\n          events: List([...jobAssignedEvents, ...userEvents]),\n          loading: localLoading,\n          includes,\n          setEventColor: eventColor,\n        })\n      }>\n      <SpinnerComponent localProperty={localLoading} />\n      <Row className=\"height-100vh\">\n        <Col>\n          <Row className=\"mb-3\">\n            <Col className=\"d-flex align-items-center\">\n              <h1 className=\"mb-0 mr-auto\">Scheduler</h1>\n              <JobsToAssignDropdown selectedUserId={userToAssignId} onChange={handleJobToAssignChange} />\n              <UserFilter onUsersChange={handleUserFilterChange} userToAssignId={userToAssignId} />\n            </Col>\n          </Row>\n          <ConnectedRouter history={history}>\n            <Switch>\n              <Route path=\"/scheduler\">\n                <EventsCalendar onDateChange={handleDateChange} disabledViews={[\"dayGridMonth\"]} eventAddDisabled />\n              </Route>\n            </Switch>\n          </ConnectedRouter>\n        </Col>\n      </Row>\n    </Context.Provider>\n  );\n};\n\nexport default connectFC(track({ category: \"Scheduler\" }, { dispatch: Dispatch.dispatch })(SchedulerTab));\n","import * as ng from \"angular\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport * as fileSaver from \"file-saver\";\nimport * as uuid from \"uuid/v4\";\nimport { List, Map } from \"immutable\";\nimport { IOrg, OrgAclType, OrgPrefType } from \"app/src/Models/Org\";\nimport { IOrgPrefMarkup } from \"app/src/Models/OrgPreference\";\nimport { IEstimate, EstimateKind } from \"app/src/Models/Estimate\";\nimport { IJob, IJobEvent } from \"app/src/Models/Job\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport { IPaymentTermResponse } from \"app/src/Models/PaymentTerm\";\nimport { IEstimateTemplate, IEstimateTemplateGroup, IEstimateTemplateGroups } from \"app/src/Models/EstimateTemplate\";\nimport { IMeasurementLink, IMeasurementLinkResponse } from \"app/src/Models/MeasurementLink\";\nimport { ICustomProduct } from \"app/src/Models/Product\";\nimport { IMeasurement } from \"app/src/Models/Measurement\";\nimport { IConvert } from \"app/src/Common/UnitConversionService\";\nimport { IOpeningEstimation } from \"app/src/Models/OpeningEstimation\";\nimport { IOpening } from \"app/src/Models/Opening\";\nimport { AddEstimateLineItemOptionCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemOptionCmd\";\nimport { IEventingFactory } from \"app/src/Common/EventingFactory\";\nimport { IRepository } from \"../Common/Repository\";\nimport { FlashLevels, IFlash } from \"app/src/Common/FlashService\";\nimport { Task, ITask } from \"app/src/Models/Task\";\nimport { paymentTermItemFromJSON } from \"app2/src/records/PaymentTermTemplate\";\nimport { useSelector, dispatch, useState } from \"app2/src/storeRegistry\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport * as orgActions from \"app2/src/reducers/org.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport * as measurementActions from \"app2/src/reducers/measurement.actions\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\nimport * as activatedPriceListActions from \"app2/src/reducers/activatedPriceList.actions\";\nimport * as fencingActions from \"app2/src/reducers/measurements/fencing.actions\";\nimport { estimate, toEstimateJson } from \"app2/src/selectors/estimate.selectors\";\nimport { org } from \"app2/src/selectors/org.selectors\";\nimport { job } from \"app2/src/selectors/job.selectors\";\nimport { currentMeasurementId, measurement } from \"app2/src/selectors/measurement.selectors\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { cachedProduct, cachedProductByUuid } from \"app2/src/selectors/product.selectors\";\nimport { cachedProductOptionGroup } from \"app2/src/selectors/productOptionGroup.selectors\";\nimport {\n  cachedProductOption,\n  cachedProductOptions,\n  cachedProductOptionByMatchId,\n  cachedProductOptionsByUuid,\n} from \"app2/src/selectors/productOption.selectors\";\nimport { ProductToOptionGroupLinkRecord } from \"app2/src/records/ProductToOptionGroupLink\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { door } from \"app2/src/selectors/door.selectors\";\nimport { window } from \"app2/src/selectors/window.selectors\";\nimport { calculateFormula } from \"app2/src/records/Measurement\";\nimport { estimateService } from \"app2/src/api/estimate.service\";\nimport { measurementFencing } from \"app2/src/selectors/measurements/fencing.selectors\";\nimport { rooms as roomsSelector } from \"app2/src/selectors/room.selectors\";\nimport { calculateRoomFormula } from \"app2/src/records/Room\";\nimport { IEstimateGroup } from \"../Models/EstimateGroup\";\nimport { validateLineItem } from \"app/src/Estimator/ValidationService\";\n\nexport class EstimatorService {\n  public priceListPromise: ng.IPromise<any>;\n  public includes: string[] = estimateService.include;\n  public estimate: IEstimate;\n  public job: IJob;\n  public org: IOrg;\n  public measurement: IMeasurement;\n  public paymentTerms: IPaymentTermResponse;\n  public links: IMeasurementLinkResponse;\n  public linksById: { number: IMeasurementLink } = {} as { number: IMeasurementLink };\n  private _errors: string[] = [];\n  private _errorsShown = false;\n\n  private _originalState: any;\n\n  public static $inject = [\n    \"Repository\",\n    \"$q\",\n    \"$timeout\",\n    \"$http\",\n    \"$rootScope\",\n    \"Conversion\",\n    \"EventingFactory\",\n    \"Flash\",\n    \"$analytics\",\n  ];\n  constructor(\n    public Repository: IRepository,\n    public $q: ng.IQService,\n    public $timeout: ng.ITimeoutService,\n    public $http: ng.IHttpService,\n    public $rootScope: RsfRootScope,\n    public Conversion: IConvert,\n    public EventingFactory: IEventingFactory,\n    public Flash: IFlash,\n    protected $analytics: angulartics.IAnalyticsService,\n  ) {\n    $rootScope.$on(\"job:updated\", (event: ng.IAngularEvent, args: IJobEvent) => {\n      this.receiveReduxJob(args.job);\n    });\n  }\n\n  public loadEstimate(id: number): IEstimate {\n    const estimateRecord = useSelector((state) => estimate(state, { estimateId: id }));\n\n    //noinspection TypeScriptValidateTypes\n    if ((id as any as string) === \"new\") {\n      return this.estimate;\n    } else if (!estimateRecord) {\n      return this.get(id);\n    } else {\n      if (estimateRecord.loading) {\n        return this.estimate;\n      }\n\n      let previous_id = \"none\" as any as number;\n      if (this.estimate) {\n        previous_id = this.estimate.id;\n      }\n\n      const reduxEstimate = this.getReduxEstimate(id);\n      const deferred: ng.IDeferred<IEstimate> = this.$q.defer();\n      this.estimate.$promise = deferred.promise;\n      Object.assign(this.estimate, reduxEstimate);\n\n      _.each(this.estimate.lineItems(), (lineItem) => {\n        lineItem.editing = false;\n      });\n      this.job = this.getReduxJob(this.estimate.job_id);\n      this.org = this.getReduxOrg(this.job.org_id);\n      if (previous_id !== id) {\n        this.resetEstimateState();\n      }\n      this.setupEstimate(deferred);\n      return this.estimate;\n    }\n  }\n\n  public async loadActivatedPriceList(): Promise<void> {\n    const activatedPriceListId = this.estimate.activated_price_list_id;\n    const deferred: ng.IDeferred<void> = this.$q.defer();\n    this.priceListPromise = deferred.promise;\n\n    await dispatch(activatedPriceListActions.AsyncActions.getCached(this.org.id, activatedPriceListId));\n    deferred.resolve();\n\n    return this.priceListPromise;\n  }\n\n  public reloadEstimate(id: number): IEstimate {\n    if (id === (\"new\" as any as number)) {\n      this.estimate = this.Repository.Estimate.createNew({});\n      const deferred: ng.IDeferred<IEstimate> = this.$q.defer();\n      this.estimate.$promise = deferred.promise;\n      this.resetEstimateState();\n      deferred.resolve();\n      return this.estimate;\n    } else {\n      return this.get(id);\n    }\n  }\n\n  public initializeTaxes(group: IEstimateGroup = undefined) {\n    if (this.estimate.calc_method === \"estimate_group\") {\n      if (group) {\n        group.tax_rate = this.org.preferences.config?.sales_tax?.default_rate;\n        group.taxable_amount = 0.0;\n        group.default_taxable_amount = this.org.preferences.config?.sales_tax?.default_taxable_amount;\n      } else {\n        this.estimate.groups.forEach((group) => {\n          group.tax_rate = this.org.preferences.config?.sales_tax?.default_rate;\n          group.taxable_amount = 0.0;\n          group.default_taxable_amount = this.org.preferences.config?.sales_tax?.default_taxable_amount;\n        });\n      }\n    } else {\n      this.estimate.tax_rate = this.org.preferences.config?.sales_tax?.default_rate;\n      this.estimate.taxable_amount = 0.0;\n      this.estimate.default_taxable_amount = this.org.preferences.config?.sales_tax?.default_taxable_amount;\n    }\n  }\n\n  public initializeMarkup(group: IEstimateGroup = undefined): void {\n    if (this.org.fetchPref<IOrgPrefMarkup>(OrgPrefType.markup).enabled) {\n      if (this.estimate.calc_method === \"estimate_group\") {\n        if (group) {\n          group.product_markup = this.org.fetchPref<IOrgPrefMarkup>(OrgPrefType.markup).product_default || 0;\n          group.labor_markup = this.org.fetchPref<IOrgPrefMarkup>(OrgPrefType.markup).labor_default || 0;\n        } else {\n          this.estimate.groups.forEach((group) => {\n            group.product_markup = this.org.fetchPref<IOrgPrefMarkup>(OrgPrefType.markup).product_default || 0;\n            group.labor_markup = this.org.fetchPref<IOrgPrefMarkup>(OrgPrefType.markup).labor_default || 0;\n          });\n        }\n      } else {\n        this.estimate.product_markup = this.org.fetchPref<IOrgPrefMarkup>(OrgPrefType.markup).product_default || 0;\n        this.estimate.labor_markup = this.org.fetchPref<IOrgPrefMarkup>(OrgPrefType.markup).labor_default || 0;\n      }\n    }\n  }\n\n  public initializePaymentTerms(group: IEstimateGroup = undefined): void {\n    if (this.paymentTerms.payment_terms.length > 0) {\n      const items = _.map(this.paymentTerms.payment_terms[0].breakdown.items, (ptid) => paymentTermItemFromJSON(ptid));\n      if (this.estimate.calc_method === \"estimate_group\") {\n        if (group) {\n          group.payment_terms = group.payment_terms.set(\"payment_term_items\", List(items));\n        } else {\n          this.estimate.groups.forEach((group) => {\n            group.payment_terms = group.payment_terms.set(\"payment_term_items\", List(items));\n          });\n        }\n      } else {\n        this.estimate.payment_terms = this.estimate.payment_terms.set(\"payment_term_items\", List(items));\n      }\n    }\n  }\n\n  public createEstimate(jobId: number, estimateKind: EstimateKind = \"price\"): IEstimate {\n    const deferred: ng.IDeferred<IEstimate> = this.$q.defer();\n    this.estimate = this.Repository.Estimate.createNew({});\n\n    this.estimate.id = \"new\" as any as number;\n    this.estimate.job_id = jobId;\n\n    if (estimateKind !== \"price\") {\n      this.estimate.kind = estimateKind;\n    }\n\n    const job = this.Repository.Job.get({ id: jobId, \"include[]\": this.includes });\n\n    job.$promise\n      .then(() => {\n        this.setupEstimatorService(job);\n\n        this.estimate.createGroup({ name: \"Included\", included: true });\n        if (this.org.can(\"layered\", OrgAclType.estimator, \"multiple_groups\")) {\n          this.estimate.createGroup({ name: \"Options\", included: false });\n        }\n\n        this.estimate.calc_method = this.org.preferences.config?.estimator?.calc_method || \"standard\";\n\n        this.estimate.activated_price_list_id = this.org[`activated_${estimateKind}_list`]?.id;\n        this.loadActivatedPriceList();\n\n        this.initializeTaxes();\n\n        this.initializeMarkup();\n\n        this.paymentTerms = <IPaymentTermResponse>this.Repository.PaymentTerm.query({ org_id: this.org.id });\n\n        return this.$q\n          .all([this.priceListPromise, this.paymentTerms.$promise, this.setupMeasurementLinks()])\n          .then(() => {\n            if (this.paymentTerms.payment_terms.length > 0) {\n              this.initializePaymentTerms();\n              this.estimate.updateTotal();\n            }\n\n            deferred.resolve(this.estimate);\n          });\n      })\n      .catch((e) => {\n        deferred.reject(e);\n      });\n\n    deferred.promise.then(() => {\n      this.resetEstimateState();\n    });\n\n    this.estimate.$promise = deferred.promise;\n    return this.estimate;\n  }\n\n  public saveEstimate(): ng.IPromise<any> {\n    this.estimate.updateTotal();\n    const deferred: ng.IDeferred<IEstimate> = this.$q.defer();\n    this.estimate.$promise = deferred.promise;\n\n    let estimateResource: IEstimate;\n    this.estimate[\"include\"] = this.includes;\n    if (this.estimate.id > 0) {\n      dispatch(estimateActions.Actions.fetchEstimate(this.estimate.id));\n      estimateResource = this.Repository.Estimate.save(this.estimate);\n    } else {\n      estimateResource = this.Repository.Estimate.create(this.estimate);\n    }\n\n    estimateResource.$promise\n      .then((estimate: IEstimate) => {\n        this.setupEstimatorService(estimate.job);\n        this.receiveAndSetReduxEstimate(estimate);\n\n        const reduxEstimate = this.getReduxEstimate(estimate.id);\n        Object.assign(this.estimate, reduxEstimate);\n\n        deferred.resolve();\n      })\n      .catch((error: any) => {\n        deferred.reject();\n        this.Flash.addMessage(\n          FlashLevels.danger,\n          \"There was an error saving your estimate. Please contact support! HERE!\",\n        );\n        throw error;\n      });\n    return this.estimate.$promise;\n  }\n\n  public resetEstimateState() {\n    if (this.estimate) {\n      this._originalState = angular.toJson(this.Repository.Estimate.transformRequest(this.estimate));\n    }\n  }\n\n  /**\n   * Compares current estimate against saved state\n   * true if state has changed else false\n   * @returns {boolean}\n   */\n  public checkEstimateState(): boolean {\n    if (!this.estimate) {\n      return false;\n    }\n    return (\n      this._originalState !== \"\" &&\n      this._originalState !== angular.toJson(this.Repository.Estimate.transformRequest(this.estimate))\n    );\n  }\n\n  public savePdf(estimate?: IEstimate, doc_type?: string, options?: any): ng.IPromise<any> {\n    if (!estimate) {\n      estimate = this.estimate;\n    }\n    return this.generatePdf(estimate.id, doc_type, options)\n      .then((data: any) => {\n        fileSaver.saveAs(data.response, estimate.job.name + \" - \" + estimate.id + \".pdf\");\n      })\n      .catch(() => {\n        this.Flash.addMessage(\n          FlashLevels.danger,\n          \"There were problems downloading your document.  Please try again.  If the problem persists contact support.\",\n        );\n      });\n  }\n\n  public saveCsv(estimate?: IEstimate, csv_type?: string): ng.IPromise<any> {\n    if (!estimate) {\n      estimate = this.estimate;\n    }\n    return this.generateCsv(estimate, csv_type)\n      .then((data: any) => {\n        fileSaver.saveAs(data.response, estimate.job.name + \" - \" + estimate.id + \".csv\");\n      })\n      .catch(() => {\n        this.Flash.addMessage(\n          FlashLevels.danger,\n          \"There were problems downloading your document.  Please try again.  If the problem persists contact support.\",\n        );\n      });\n  }\n\n  public generatePdf(estimateId?: number, doc_type?: string, options?: any): ng.IPromise<IEstimate> {\n    if (!estimateId) {\n      estimateId = this.estimate.id;\n    }\n\n    if (!doc_type) {\n      doc_type = \"estimate\";\n    }\n\n    return <ng.IPromise<IEstimate>>(\n      this.Repository.Estimate.pdf({ id: estimateId, doc_type: doc_type, options: options }).$promise\n    );\n  }\n\n  public emailPdf(estimateId: number, docType: string, returnObject: any): ng.IPromise<any> {\n    return this.Repository.Estimate.email({\n      id: estimateId,\n      doc_type: docType,\n      emails: returnObject.emails,\n      message: returnObject.message,\n      options: returnObject.options,\n    })\n      .$promise.then((response: any) => {\n        this.Flash.addMessage(FlashLevels.success, \"Document was successfully sent.\");\n        // Event category & action used for analytics job reporting - do not rename and keep upon refactor\n        this.trackEvent(docType + \" emailed\", {\n          category: toTitleCase(docType),\n          estimate: estimateId,\n          emails: returnObject.emails,\n          message: returnObject.message,\n          options: returnObject.options,\n        });\n\n        Task.watch(this.$timeout, this.$http, response.location, (task: ITask) => {\n          if (task.status === \"error\") {\n            this.Flash.addMessage(FlashLevels.danger, \"There was an error with your email: \" + task.logs);\n          }\n        });\n      })\n      .catch(() => {\n        this.Flash.addMessage(\n          FlashLevels.danger,\n          \"There were problems sending your document.  Please try again.  If the problem persists contact support.\",\n        );\n      });\n  }\n\n  public generateCsv(estimate?: IEstimate, csv_type?: string): ng.IPromise<IEstimate> {\n    if (!estimate) {\n      estimate = this.estimate;\n    }\n\n    if (!csv_type) {\n      csv_type = \"product\";\n    }\n\n    return <ng.IPromise<IEstimate>>this.Repository.Estimate.csv({ id: estimate.id, csv_type: csv_type }).$promise;\n  }\n\n  public addMeasurementLink(product: ProductRecord, quantity = 1, showMessage = true, estimateGroup?: IEstimateGroup) {\n    const measurement = this.find_link(product);\n    if (_.isUndefined(measurement)) {\n      return quantity;\n    }\n\n    switch (measurement.kind) {\n      case \"measurement\":\n        const measure_value = measurement.measure_value.measurement;\n        if (_.isUndefined(this.measurement[measure_value]) || _.isNull(this.measurement[measure_value])) {\n          if (!_.isNaN(parseFloat(measure_value))) {\n            quantity = parseFloat(measure_value);\n          }\n        } else {\n          const measurement_uom = this.measurement.measurement_to_uom[measure_value];\n          quantity = this.Conversion.convert(\n            this.measurement[measure_value],\n            measurement_uom,\n            product.uom,\n            product,\n            showMessage,\n          );\n        }\n        break;\n      case \"formula\":\n        {\n          const { formula, formula_uom } = measurement.measure_value;\n          const { result, error } = calculateFormula(formula, this.measurement);\n          if (error) {\n            this.Flash.addMessage(\n              FlashLevels.warning,\n              `There was a problem with the measurement link formula. ${error}`,\n            );\n          } else {\n            quantity = this.Conversion.convert(result, formula_uom, product.uom, product, showMessage);\n          }\n        }\n        break;\n      case \"interior_measurement\":\n        {\n          if (this.measurement.room_ids?.length === 0) break;\n\n          quantity = 0;\n          const measurementLabel = measurement.measure_value.measurement;\n          let roomIds = _.isUndefined(estimateGroup)\n            ? List()\n            : List(estimateGroup.room_estimations.map((room_estimation) => room_estimation.room_id));\n          if (roomIds.size === 0) roomIds = List(this.measurement.room_ids);\n\n          const rooms = useSelector((state) => roomsSelector(state, { roomIds }));\n\n          rooms.forEach((r) => {\n            if (!_.isUndefined(r.get(measurementLabel)) && !_.isNull(r.get(measurementLabel))) {\n              quantity += roundToDecimals(r.get(measurementLabel), -2);\n            }\n          });\n          quantity = roundToDecimals(quantity, -2);\n        }\n        break;\n      case \"interior_formula\":\n        if (this.measurement.room_ids?.length === 0) break;\n\n        quantity = 0;\n        let roomIds = _.isUndefined(estimateGroup)\n          ? List()\n          : List(estimateGroup.room_estimations.map((room_estimation) => room_estimation.room_id));\n        if (roomIds.size === 0) roomIds = List(this.measurement.room_ids);\n\n        const rooms = useSelector((state) => roomsSelector(state, { roomIds }));\n        const { formula, formula_uom } = measurement.measure_value;\n\n        rooms.forEach((r) => {\n          const { result, error } = calculateRoomFormula(formula, r);\n          if (error) {\n            this.Flash.addMessage(\n              FlashLevels.warning,\n              `There was a problem with the measurement link formula. ${error}`,\n            );\n          } else {\n            quantity += this.Conversion.convert(result, formula_uom, product.uom, product, showMessage);\n          }\n        });\n        quantity = roundToDecimals(quantity, -2);\n        break;\n    }\n\n    return quantity;\n  }\n\n  public find_link(product: ProductRecord) {\n    const link = this.linksById[product.uuid];\n    if (_.isUndefined(link)) {\n      if (product.parent_id) {\n        const parent_product = useSelector((state) =>\n          cachedProduct(state, {\n            productId: product.parent_id,\n            activatedPriceListId: this.estimate.activated_price_list_id,\n          }),\n        );\n        return this.find_link(parent_product);\n      }\n    }\n    return link;\n  }\n\n  public createTemplate(data: any) {\n    return this.Repository.EstimateTemplate.create({ org_id: this.org.id }, data).$promise.then((resp) => {\n      return resp;\n    });\n  }\n\n  public updateTemplate(template: IEstimateTemplate) {\n    return template.$update().then((resp) => {\n      return resp;\n    });\n  }\n\n  public setupNewTemplate() {\n    const template: IEstimateTemplateGroups = <IEstimateTemplateGroups>{};\n    template.groups = [];\n    _.each(this.estimate.existingGroups(), (eg) => {\n      const items = {};\n      const custom_products = [];\n      const line_item_order: Array<{ type: string; order: string }> = [];\n      _.each(eg.existingLineItems(), (li) => {\n        if (_.isUndefined(li.product_id) || _.isNull(li.product_id)) {\n          const custom_product = this.setupCustomProduct(li);\n          custom_products.push(custom_product);\n          line_item_order.push({\n            type: \"custom\",\n            order: custom_product.uuid,\n          });\n        } else {\n          const product = useSelector((state) =>\n            cachedProduct(state, {\n              activatedPriceListId: this.estimate.activated_price_list_id,\n              productId: li.product_id,\n            }),\n          );\n          items[product.uuid] = [];\n          line_item_order.push({\n            type: \"item\",\n            order: product.uuid,\n          });\n          _.each(li.options, (opt) => {\n            const productOption = useSelector((state) =>\n              cachedProductOption(state, {\n                activatedPriceListId: this.estimate.activated_price_list_id,\n                productOptionId: opt.product_option_id,\n              }),\n            );\n            items[product.uuid].push(productOption.uuid);\n          });\n        }\n      });\n      template.groups.push(<IEstimateTemplateGroup>{\n        name: eg.name,\n        included: eg.included,\n        sort_order: eg.sort_order,\n        item_uuids: items,\n        custom_products: custom_products,\n        line_item_order,\n      });\n    });\n    return template;\n  }\n\n  public setupTemplate(est_template: IEstimateTemplate) {\n    if (!est_template.template.groups) {\n      return;\n    }\n    est_template.template.groups.forEach((etg: IEstimateTemplateGroup) => {\n      etg.products = [];\n      // we dont have a line item order yet, use the old way.\n      if (!etg.line_item_order || etg.line_item_order.length === 0) {\n        if (etg.item_uuids) {\n          _.each(Object.keys(etg.item_uuids), (key) => {\n            this.setupTemplateProductsOptions(key, etg, etg.item_uuids);\n          });\n        } else {\n          // backwards compatibility for templates that don't have support for product options\n          _.each(etg.items, (i) => {\n            this.setupTemplateProductsOptions(i, etg, etg.items);\n          });\n        }\n        if (etg.custom_products) {\n          _.each(etg.custom_products, (cp) => {\n            etg.products.push(cp as any as ProductRecord);\n          });\n        }\n      } else {\n        etg.line_item_order.forEach((lineItemOrder: { type: string; order: string }) => {\n          if (lineItemOrder.type === \"custom\") {\n            const customProduct: ICustomProduct = etg.custom_products.find(\n              (custom_product: ICustomProduct) => custom_product.uuid === lineItemOrder.order,\n            );\n            etg.products.push(customProduct as any as ProductRecord);\n          } else if (lineItemOrder.type === \"item\") {\n            this.setupTemplateProductsOptions(lineItemOrder.order, etg, etg.item_uuids);\n          }\n        });\n      }\n    });\n  }\n\n  public setupTemplateProductsOptions(key: string, etg: IEstimateTemplateGroup, items: any) {\n    const product = useSelector((state) =>\n      cachedProductByUuid(state, {\n        productUuid: key,\n        activatedPriceListId: this.estimate.activated_price_list_id,\n      }),\n    );\n\n    if (!product) {\n      return;\n    }\n\n    let options = [];\n    if (items[key] && items[key].length > 0) {\n      options = useSelector((state) =>\n        cachedProductOptionsByUuid(state, {\n          productId: product.id,\n          optionUuids: items[key],\n          activatedPriceListId: this.estimate.activated_price_list_id,\n        }),\n      ).toArray();\n    }\n\n    etg.products.push(product);\n    if (!etg.optionsByProductId) {\n      etg.optionsByProductId = Map<number, ProductOptionRecord[]>();\n    }\n    etg.optionsByProductId = etg.optionsByProductId.set(product.id, options);\n  }\n\n  public setMeasurement(measurement: IMeasurement) {\n    this.receiveReduxMeasurement(measurement);\n  }\n\n  public addDefaultOptions(lineItem: IEstimateLineItem, product: ProductRecord) {\n    if (!product.ptog_links) {\n      return;\n    }\n    product.ptog_links.forEach((link: ProductToOptionGroupLinkRecord) => {\n      if (!_.isUndefined(link.options.default)) {\n        _.each(Object.keys(link.options.default), (opt_uuid) => {\n          const group = useSelector((state) =>\n            cachedProductOptionGroup(state, {\n              productOptionGroupId: link.option_group_id,\n              activatedPriceListId: this.estimate.activated_price_list_id,\n            }),\n          );\n          const options = useSelector((state) =>\n            cachedProductOptions(state, {\n              productOptionIds: group.option_ids,\n              activatedPriceListId: this.estimate.activated_price_list_id,\n            }),\n          );\n          const po: ProductOptionRecord = options.find((opt) => opt.uuid === opt_uuid);\n\n          const cmd_po = new AddEstimateLineItemOptionCmd(po, group, lineItem, this.estimate);\n          const quantity = lineItem.openingEstimationMeasurement(po.charge_type, link.options.default[opt_uuid]);\n          cmd_po.execute(quantity);\n          this.EventingFactory.trackEvent(\"default product option added\", {\n            product_option: po.id,\n          });\n        });\n      }\n    });\n  }\n\n  public addEstimateDefaultOptions(lineItem: IEstimateLineItem) {\n    _.each(Object.keys(this.estimate.defaults.options), (opt_match_id) => {\n      const pog_match_id = this.estimate.defaults.options[opt_match_id].option_group_uuid;\n      const po = useSelector((state) =>\n        cachedProductOptionByMatchId(state, {\n          productId: lineItem.product_id,\n          productOptionGroupMatchId: pog_match_id,\n          productOptionMatchId: opt_match_id,\n          activatedPriceListId: this.estimate.activated_price_list_id,\n        }),\n      );\n      if (!po) {\n        return;\n      }\n      const optionGroup = useSelector((state) =>\n        cachedProductOptionGroup(state, {\n          productOptionGroupId: po.option_group_id,\n          activatedPriceListId: this.estimate.activated_price_list_id,\n        }),\n      );\n\n      const cmd_po = new AddEstimateLineItemOptionCmd(po, optionGroup, lineItem, this.estimate);\n      const quantity = lineItem.openingEstimationMeasurement(\n        po.charge_type,\n        this.estimate.defaults.options[opt_match_id].quantity,\n      );\n      cmd_po.execute(quantity);\n      this.EventingFactory.trackEvent(\"default estimate product option added\", {\n        product_option: po.id,\n      });\n    });\n  }\n\n  public lineItemEditorOpen() {\n    return _.find(this.estimate.lineItems(), (li) => {\n      return li.editing === true;\n    });\n  }\n\n  public prettyOpenings(input_array: any[]) {\n    let openings = [];\n    if (input_array[0] && input_array[0].openable) {\n      // input are opening estimations\n      openings = _.pluck(input_array, \"openable\");\n    } else {\n      // input are openings\n      openings = input_array;\n    }\n    return (\n      _.chain(openings)\n        .groupBy((opening) => opening.location)\n        .mapObject((oes, _location) => _.map(oes, (opening) => opening.name))\n        .pairs()\n        // s == [\"location\", [\"opening\", \"opening\", \"opening\"]]\n        .map((s) => `${!s[0] || (s[0] as any) === \"null\" ? \"\" : s[0]}: ${s[1].join(\", \")}`)\n        .join(\" | \")\n        .value()\n    );\n  }\n\n  public prettyOpeningsSize(input_array: any[]) {\n    let openings = [];\n    if (input_array[0] && input_array[0].openable) {\n      // input are opening estimations\n      openings = _.pluck(input_array, \"openable\");\n    } else {\n      // input are openings\n      openings = input_array;\n    }\n    if (openings.some((opening) => _.isUndefined(opening.width))) {\n      return \"Error: Opening was not found.\";\n    }\n    return (\n      _.chain(openings)\n        .groupBy((opening) => opening.location)\n        .mapObject((oes, _location) => {\n          return _.chain(oes)\n            .groupBy((opening) => `${opening.width}x${opening.height}`)\n            .value();\n        })\n        .pairs()\n        // s == [\"location\", {31x31: [\"opening\", \"opening\"], 36x60: [\"opening\"]}]\n        .map((s) => {\n          const opening_text = _.chain(s[1])\n            .mapObject((oes, _size) => _.map(oes, (opening: IOpening) => opening.name))\n            .pairs()\n            .map((s) => {\n              return `${s[1].join(\", \")} (${!s[0] || (s[0] as any) === \"null\" ? \"\" : s[0]})`;\n            })\n            .value();\n          return `${!s[0] || (s[0] as any) === \"null\" ? \"\" : s[0]}: ${opening_text.join(\" \")}`;\n        })\n        .join(\" | \")\n        .value()\n    );\n  }\n\n  public receiveAndSetReduxEstimate(estimate: IEstimate): IEstimate {\n    this.receiveReduxEstimate(estimate);\n    const reduxEstimate = this.getReduxEstimate(estimate.id);\n    Object.assign(this.estimate, reduxEstimate);\n    const deferred: ng.IDeferred<IEstimate> = this.$q.defer();\n    this.estimate.$promise = deferred.promise;\n    this.setupEstimate(deferred);\n    return this.estimate;\n  }\n\n  public receiveReduxEstimate(estimate: IEstimate): void {\n    dispatch(estimateActions.Actions.receiveEstimate(estimate.toEstimateDataJSON()));\n  }\n\n  public receiveReduxOrg(org: IOrg): void {\n    dispatch(orgActions.Actions.setOrg(JSON.decycle(org)));\n  }\n\n  public receiveReduxJob(job: IJob): void {\n    dispatch(jobActions.Actions.receiveJob(JSON.decycle(job)));\n  }\n\n  public receiveReduxMeasurement(measurement: IMeasurement): void {\n    dispatch(measurementActions.Actions.receiveMeasurement(JSON.decycle(measurement)));\n  }\n\n  public getReduxEstimate(id: number): IEstimate {\n    return this.Repository.Estimate.fromJSON(\n      useSelector((state) => toEstimateJson(state, { estimateId: id, fullEstimate: true })),\n    );\n  }\n\n  public getReduxOrg(id: number): IOrg {\n    return this.Repository.Org.fromJSON(useSelector((state) => org(state, { orgId: id })).toJS());\n  }\n\n  public getReduxJob(id: number): IJob {\n    return this.Repository.Job.fromJSON(useSelector((state) => job(state, { jobId: id })).toJS());\n  }\n\n  public getReduxMeasurement(id: number): IMeasurement {\n    return this.Repository.Measurement.fromJSON(\n      useSelector((state) => measurement(state, { measurementId: id })).toJS(),\n    );\n  }\n\n  public checkReduxFencing(measurementId: number): void {\n    const fencing = useSelector((state) => measurementFencing(state, { measurementId }));\n    if (isNullOrUndefined(fencing)) {\n      dispatch(fencingActions.AsyncActions.fetchByMeasurementId(measurementId, false));\n    }\n  }\n\n  public setupEstimatorService(job: IJob) {\n    this.receiveReduxJob(job);\n    this.receiveReduxOrg(job.org);\n    this.checkReduxFencing(job.measurement_id);\n    this.job = this.getReduxJob(job.id);\n    this.org = this.getReduxOrg(job.org_id);\n  }\n\n  public checkValidations() {\n    this.estimate.estimateGroups(true).forEach((group) => {\n      group.line_items.forEach((lineItem) => {\n        if (lineItem.product_id) {\n          const val = validateLineItem(useState(), this.estimate, lineItem);\n          lineItem.validation_results = val.validation_results;\n          lineItem.validated = val.validated;\n        }\n      });\n    });\n\n    return this.estimate;\n  }\n\n  private get(id: number): IEstimate {\n    this._errorsShown = false;\n    this._errors = [];\n    this.estimate = this.Repository.Estimate.fromJSON({});\n    const deferred: ng.IDeferred<IEstimate> = this.$q.defer();\n    this.estimate.$promise = deferred.promise;\n    const estimateResource = this.Repository.Estimate.get({ id: id, \"include[]\": this.includes });\n    dispatch(estimateActions.Actions.fetchEstimate(id));\n\n    estimateResource.$promise\n      .then((estimate: IEstimate) => {\n        this.setupEstimatorService(estimate.job);\n        this.receiveReduxEstimate(estimate);\n\n        const reduxEstimate = this.getReduxEstimate(id);\n        Object.assign(this.estimate, reduxEstimate);\n\n        this.paymentTerms = <IPaymentTermResponse>this.Repository.PaymentTerm.query({ org_id: this.org.id });\n\n        return this.$q.all([this.paymentTerms.$promise, this.setupMeasurementLinks()]).then(() => {\n          return this.setupEstimate(deferred) as ng.IPromise<void>;\n        });\n      })\n      .catch((error: any) => {\n        deferred.reject();\n        this.Flash.addMessage(FlashLevels.danger, \"There was an error loading your estimate. Please contact support!\");\n        console.error(error);\n        throw error;\n      });\n\n    return this.estimate;\n  }\n\n  private async setupEstimate(deferred): Promise<void> {\n    await this.loadActivatedPriceList();\n    this.setupEstimateLineItems();\n    this.estimate.updateTotal();\n    this.resetEstimateState();\n\n    if (!this._errorsShown) {\n      this._errors = _.uniq(this._errors);\n      this._errors.forEach((e) => {\n        this.Flash.addMessage(FlashLevels.danger, e);\n      });\n      this._errors = [];\n      this._errorsShown = true;\n    }\n\n    deferred.resolve();\n    await deferred.promise;\n  }\n\n  private setupMeasurement(): ng.IPromise<void> {\n    // use $q to 'convert' dispatch/redux Promise to angularjs ng.IPromise\n    const deferred = this.$q.defer<void>();\n\n    dispatch(measurementActions.AsyncActions.loadMeasurement()).then(deferred.resolve).catch(deferred.reject);\n\n    deferred.promise.then(() => {\n      this.measurement = this.getReduxMeasurement(useSelector((s) => currentMeasurementId(s, {})));\n    });\n\n    return deferred.promise;\n  }\n\n  private setupEstimateLineItems() {\n    _.each(this.estimate.lineItems(), (line_item: IEstimateLineItem) => {\n      _.each(line_item.options, (option: IEstimateLineItemOption) => {\n        option.estimate_line_item = line_item;\n      });\n      _.each(line_item.opening_estimations, (oe: IOpeningEstimation) => {\n        if (oe.openable) {\n          return;\n        }\n        let openable;\n        if (oe.openable_type === \"Window\") {\n          openable = useSelector((state) => window(state, { windowId: oe.openable_id }))?.toJS();\n        } else if (oe.openable_type === \"Door\") {\n          openable = useSelector((state) => door(state, { doorId: oe.openable_id }))?.toJS();\n        }\n        if (openable) {\n          Object.defineProperty(oe, \"openable\", { value: openable });\n        } else {\n          this._errors.push(\n            `Unable to find ${oe.openable_type} Opening for ${line_item.name}. Please delete the line item to proceed`,\n          );\n          console.error(`Unable to find openable ${oe.openable_type} - ${oe.openable_id}`);\n        }\n      });\n    });\n  }\n\n  private setupMeasurementLinks(): ng.IPromise<any> {\n    this.links = <IMeasurementLinkResponse>this.Repository.MeasurementLink.query({ org_id: this.org.id });\n    return this.$q.all([this.links.$promise, this.setupMeasurement()]).then(() => {\n      this.linksById = {} as { number: IMeasurementLink };\n      _.each(this.links.measurement_links, (link: IMeasurementLink) => {\n        this.linksById[link.item_uuid] = link;\n      });\n    });\n  }\n\n  private setupCustomProduct(li: IEstimateLineItem): ICustomProduct {\n    let product_uuid;\n    if (li.product_uuid) {\n      product_uuid = li.product_uuid;\n    } else {\n      product_uuid = uuid();\n      li.product_uuid = product_uuid;\n    }\n    return <ICustomProduct>{\n      name: li.name,\n      uuid: product_uuid,\n      description: li.description,\n      sort_order: li.sort_order,\n      product_price: li.product_price,\n      labor_price: li.labor_price,\n      quantity: li.quantity,\n      uom: li.uom,\n      image_ids: [],\n      document_ids: [],\n    };\n  }\n\n  private trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        job: this.job.id,\n        org: this.job.org_id,\n      }),\n    );\n  }\n}\n","import { ICommand } from \"app/src/Commands/Command\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\n\nexport class EditLineItemCmd implements ICommand {\n  constructor(\n    public src: IEstimateLineItem,\n    public dest: IEstimateLineItem,\n    public groups: IEstimateGroup[],\n    public group?: IEstimateGroup,\n  ) {}\n\n  public execute(): boolean {\n    this.dest.copyValues(this.src);\n\n    if (this.group) {\n      let switched = false;\n\n      if (this.dest.estimateGroup.id !== this.group.id) {\n        switched = true;\n        const fromGroup = _.find(this.groups, (g) => {\n          return g.id === this.dest.estimateGroup.id;\n        });\n        const index = _.findIndex(fromGroup.line_items, (li) => {\n          return li.id === this.dest.id;\n        });\n        fromGroup.line_items.splice(index, 1);\n      } else {\n        this.dest.estimateGroup = _.find(this.groups, (g) => {\n          return g.id === this.dest.estimateGroup.id;\n        });\n      }\n\n      if (switched) {\n        const max_line_item = _.max(this.group.line_items, (li) => {\n          return li.sort_order;\n        });\n        if ((max_line_item as any as number) === -Infinity) {\n          this.dest.sort_order = 0;\n        } else {\n          this.dest.sort_order = max_line_item.sort_order + 1;\n        }\n        this.group.line_items.push(this.dest);\n        this.dest.estimateGroup = this.group;\n        if (this.dest.id > 0) {\n          this.dest.estimate_group_id = this.group.id;\n        }\n      }\n    }\n\n    _.each(this.dest.options, (op: IEstimateLineItemOption) => {\n      op.estimate_line_item = this.dest;\n    });\n\n    return true;\n  }\n}\n","import { IProviaOrder } from \"app/src/Estimator/ProviaApi\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { ICommand } from \"app/src/Commands/Command\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { ICustomProduct } from \"app/src/Models/Product\";\nimport { AddEstimateLineItemCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemCmd\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport class AddProviaOrderCmd implements ICommand {\n  public hasLineItemPricing: boolean;\n\n  constructor(\n    public estimate: IEstimate,\n    public order: IProviaOrder,\n    public group: IEstimateGroup,\n    public fileQueue: IFileQueueFactory,\n    public $http: ng.IHttpService,\n    public spinnerPromise: ng.IPromise<any>,\n    public $q: ng.IQService,\n    public EstimatorService: EstimatorService,\n  ) {}\n\n  public execute(): boolean {\n    const promises = [];\n    if (this.order.line.length < 1) {\n      return false;\n    }\n\n    this.hasLineItemPricing = false;\n\n    this.hasLineItemPricing = _.all(this.order.line, (line) => {\n      return line.sellprice !== undefined || line.extcost !== undefined;\n    });\n\n    _.each(this.order.line, (line) => {\n      const new_product = <ICustomProduct>{};\n      new_product.name = line.description;\n      new_product.quantity = line.qty;\n      new_product.description = this.combineOptions(line.options.option);\n      if (line.tagno) {\n        new_product.description += \"Tag #: \" + line.tagno;\n      }\n      if (line.comments) {\n        if (new_product.description.length > 0) {\n          new_product.description += \"\\n\";\n        }\n        new_product.description += \"Comments: \" + line.comments;\n      }\n\n      if (this.hasLineItemPricing) {\n        if (_.isUndefined(line.extsellprice)) {\n          new_product.product_price = roundToDecimals(line.useprice / line.qty, -2);\n        } else {\n          new_product.product_price = roundToDecimals(line.useprice, -2);\n        }\n      } else {\n        new_product.product_price = 0;\n      }\n\n      new_product.labor_price = 0.0;\n      new_product.uom = \"ea\";\n\n      const cmd = new AddEstimateLineItemCmd(this.estimate, new_product, this.group, this.EstimatorService);\n      cmd.execute();\n      cmd.lineItem.newly_added = false;\n\n      if (line.imageurl) {\n        promises.push(this.fileQueue.getRemoteFile(line.imageurl, cmd.lineItem));\n      }\n    });\n\n    // Labor\n    const labor_price = this.order.sellpricelabor;\n    if (labor_price > 0) {\n      const labor_product = <ICustomProduct>{};\n      labor_product.name = \"Labor\";\n      labor_product.description = \"\";\n      labor_product.quantity = 1;\n      labor_product.labor_price = labor_price;\n      labor_product.product_price = 0.0;\n      labor_product.uom = \"ea\";\n      const labor_cmd = new AddEstimateLineItemCmd(this.estimate, labor_product, this.group, this.EstimatorService);\n      labor_cmd.execute();\n      labor_cmd.lineItem.newly_added = false;\n    }\n\n    if (!this.hasLineItemPricing) {\n      const total_price = roundToDecimals(this.order.sellprice, -2);\n\n      const sum_product = <ICustomProduct>{};\n      sum_product.name = \"ProVia Custom\";\n      sum_product.description = \"\";\n      sum_product.quantity = 1;\n      sum_product.product_price = total_price;\n      sum_product.labor_price = 0.0;\n      sum_product.uom = \"ea\";\n      sum_product.visibility = \"company_only\";\n\n      const sum_cmd = new AddEstimateLineItemCmd(this.estimate, sum_product, this.group, this.EstimatorService);\n      sum_cmd.execute();\n      sum_cmd.lineItem.newly_added = false;\n    }\n\n    this.spinnerPromise = this.$q.all(promises).then(() => {\n      this.fileQueue.setQueue();\n    });\n\n    return true;\n  }\n\n  private combineOptions(options) {\n    let description = \"\";\n    _.each(options, (o) => {\n      description += o + \"\\n\";\n    });\n    return description;\n  }\n}\n","import { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { ICommand } from \"app/src/Commands/Command\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { ICustomProduct } from \"app/src/Models/Product\";\nimport { AddEstimateLineItemCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemCmd\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IFenetechQuoteFullResponse } from \"app2/src/lib/fene_tech/types\";\n\nexport class AddFeneTechOrderCmd implements ICommand {\n  public hasLineItemPricing: boolean;\n\n  constructor(\n    public estimate: IEstimate,\n    public order: IFenetechQuoteFullResponse,\n    public group: IEstimateGroup,\n    public fileQueue: IFileQueueFactory,\n    public $http: ng.IHttpService,\n    public spinnerPromise: ng.IPromise<any>,\n    public $q: ng.IQService,\n    public EstimatorService: EstimatorService,\n  ) {}\n\n  public execute(): boolean {\n    const promises = [];\n    const lineItems = this.order.lineItems;\n\n    if (lineItems.length === 0) {\n      return false;\n    }\n\n    lineItems.forEach((line) => {\n      const subLineItemOptions = [];\n\n      if (line.subLineItems.length) {\n        subLineItemOptions.push({ newLine: true });\n\n        line.subLineItems.forEach((subLineItem, index) => {\n          const subLi = subLineItem.lineItem;\n          subLineItemOptions.push({\n            name: `${subLi.formattedPart} (${subLi.displayWidth}\" X ${subLi.displayHeight}\")\\n`,\n          });\n\n          subLineItem.options.forEach((opt) => {\n            subLineItemOptions.push(opt);\n          });\n\n          if (line.subLineItems.length !== index + 1) subLineItemOptions.push({ newLine: true });\n        });\n      }\n\n      const newProduct = this.setProduct(line, subLineItemOptions);\n\n      const cmd = new AddEstimateLineItemCmd(this.estimate, newProduct, this.group, this.EstimatorService);\n      cmd.execute();\n      cmd.lineItem.newly_added = false;\n\n      if (line.imageBlob) {\n        promises.push(this.fileQueue.getObject(line.imageBlob, cmd.lineItem));\n      }\n    });\n\n    this.spinnerPromise = this.$q.all(promises).then(() => {\n      this.fileQueue.setQueue();\n    });\n\n    return true;\n  }\n\n  private setProduct(lineItem, subLineItemOptions: any[]) {\n    const setLineItem = lineItem.lineItem;\n    const options = [...lineItem.options, ...subLineItemOptions];\n    const newProduct = <ICustomProduct>{ uom: \"ea\", description: \"\", labor_price: 0 };\n    newProduct.name = setLineItem.formattedPart;\n    if (\n      setLineItem.displayHeight &&\n      setLineItem.displayWidth &&\n      setLineItem.displayWidth > 0 &&\n      setLineItem.displayHeight > 0\n    ) {\n      newProduct.name = `${newProduct.name} (${setLineItem.displayWidth}\" X ${setLineItem.displayHeight}\")`;\n    }\n    if (options && options.length > 0) {\n      options.forEach((option) => {\n        if (option.newLine) {\n          newProduct.description += \"\\n\";\n        } else if (option.name) {\n          newProduct.description += `${option.name}`;\n        } else {\n          newProduct.description += `<b>${option.optionGroup}</b>: ${option.description}${\n            option.optionValue ? ` - ${option.optionValue}` : \"\"\n          }\\n`;\n        }\n      });\n    }\n\n    newProduct.quantity = setLineItem.quantity;\n    newProduct.product_price = setLineItem.unitPrice;\n    newProduct.price = newProduct.product_price * newProduct.labor_price;\n\n    return newProduct;\n  }\n}\n","import { ICustomProduct } from \"app/src/Models/Product\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { ICommand } from \"app/src/Commands/Command\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { AddEstimateLineItemCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemCmd\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { parseXml } from \"app2/src/helpers/File\";\nimport { parseFloatSafe, roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport class AddProductFromXmlCmd implements ICommand {\n  public lineItems: IEstimateLineItem[] = [];\n  constructor(\n    public estimate: IEstimate,\n    public xml_data: string,\n    public group: IEstimateGroup,\n    public FileQueue: IFileQueueFactory,\n    public EstimatorService: EstimatorService,\n  ) {}\n\n  public execute(): boolean {\n    if (this.xml_data[0] !== \"<\") {\n      this.xml_data = this.xml_data.substring(this.xml_data.indexOf(\"\\n\") + 1);\n    }\n    const products = this.xml_type(this.xml_data);\n    if (products.length < 1) {\n      return false;\n    }\n    _.each(products, (product: any) => {\n      const cmd = new AddEstimateLineItemCmd(this.estimate, product, this.group, this.EstimatorService);\n      cmd.execute();\n      cmd.lineItem.newly_added = false;\n      this.lineItems.push(cmd.lineItem);\n      if (!_.isEmpty(product.image)) {\n        this.FileQueue.getObjectBlob(\"image\", product.image, cmd.lineItem);\n      }\n    });\n\n    this.FileQueue.setQueue();\n    return true;\n  }\n\n  private xml_type(data): ICustomProduct[] {\n    let products = [];\n    if (data.indexOf(\"lineitemmasters\") > 0 && data.indexOf(\"quote\") > 0) {\n      products = this.parseWTSParadigm(data);\n    } else if (data.indexOf(\"Order_Information\") > 0 && data.indexOf(\"Item\") > 0) {\n      products = this.parseSealRite(data);\n    } else if (data.indexOf(\"JobName\") > 0 && data.indexOf(\"Lines\") > 0) {\n      products = this.parseMarvin(data);\n    } else if ((data.indexOf(\"m2oFile\") > 0 && data.indexOf(\"Unit\") > 0) || data.indexOf(\"Composite\") > 0) {\n      products = this.parseAndersenIQ(data);\n    } else if (data.indexOf(\"SaberisImportDocument\") > 0) {\n      products = this.parseSaberisDaVinci(data);\n    }\n    return products;\n  }\n\n  private parseSaberisDaVinci(data: any) {\n    data = data.replace(/&lt;br \\/&gt;/g, \": \");\n    const xml = data.replace(/<br \\/>/g, \": \");\n    const raw_object = parseXml(xml, [\"Group\"]);\n    const products = [];\n    _.each(raw_object.SaberisImportDocument.Order.Group, (group: any) => {\n      _.each(group.Item, (item: any) => {\n        products.push(this.saberisItem(item));\n      });\n    });\n\n    return products;\n  }\n\n  private saberisItem(item: any): ICustomProduct {\n    const name = item.Model[\"#text\"] || \"\";\n    const description = item.ProductDescription[\"#text\"] || \"\";\n    const quantity = item.Quantity[\"#text\"];\n    const product_price = item.UnitSelling[\"#text\"];\n    const hardware = item.Hardware[\"#text\"] || \"\";\n    const int_color = item.IntColour[\"#text\"] || \"\";\n    const ext_color = item.ExtColour[\"#text\"] || \"\";\n    const frame_wh = item.FrameWH[\"#text\"] || \"\";\n    const rso = item.RSO[\"#text\"] || \"\";\n    const Image = item?.Image?.[\"#text\"] || \"\";\n\n    const theQuantity = parseFloatSafe(quantity);\n    const theProductPrice = roundToDecimals(parseFloatSafe(product_price) / theQuantity, -2);\n\n    const theDescription = `${description}Hardware: ${hardware}\\nFrame WH: ${frame_wh}\\nExt Color: ${ext_color}\\nInt Color: ${int_color}\\nRSO: ${rso}`;\n\n    return <ICustomProduct>{\n      name: name,\n      description: theDescription,\n      price: theProductPrice,\n      product_price: theProductPrice,\n      quantity: theQuantity,\n      labor_price: 0.0,\n      uom: \"ea\",\n      image: Image ? this.imageAndersenIq(Image) : \"\",\n    };\n  }\n\n  private parseAndersenIQ(data: any): ICustomProduct[] {\n    const xml = data.replace(/<!DOCTYPE m2oFile >/g, \"\").replace(/<!-- m2o XML ORDER EXPORT FILE V1.0 -->/g, \"\");\n    const raw_object = parseXml(xml, [\"Unit\", \"Composite\"]);\n    const products = [];\n    _.each(raw_object.m2oFile.m2oOrder.Unit, (u: any) => {\n      products.push(this.unitAndersenIq(u));\n    });\n\n    _.each(raw_object.m2oFile.m2oOrder.Composite, (c: any) => {\n      products.push(this.compositeAndersenIq(c));\n    });\n\n    return products;\n  }\n\n  private compositeAndersenIq(item: any): ICustomProduct {\n    const PRODLINE = _.findWhere(item.Attribute, { Name: \"PRODLINE\" })[\"#text\"];\n    const PROD = _.findWhere(item.Attribute, { Name: \"PROD\" })[\"#text\"];\n    const PRODTYPE = _.findWhere(item.Attribute, { Name: \"PRODTYPE\" })[\"#text\"];\n    const QUOTE_QUANTITY = _.findWhere(item.Attribute, { Name: \"QUOTE_QUANTITY\" })[\"#text\"];\n    const Total_Price_in_USD = _.findWhere(item.Attribute, { Name: \"Total_Price_in_USD\" })[\"#text\"];\n    const DescCode = _.findWhere(item.Attribute, { Name: \"DescCode\" })[\"#text\"];\n    const Image = _.findWhere(item.Attribute, { Name: \"Image\" })[\"#text\"];\n\n    const totalPrice = parseFloatSafe(Total_Price_in_USD);\n\n    return <ICustomProduct>{\n      name: PRODLINE + \": \" + PROD + \": \" + PRODTYPE,\n      description: DescCode,\n      quantity: parseFloatSafe(QUOTE_QUANTITY),\n      price: totalPrice,\n      product_price: totalPrice,\n      labor_price: 0.0,\n      uom: \"ea\",\n      image: this.imageAndersenIq(Image),\n    };\n  }\n\n  private unitAndersenIq(item: any): ICustomProduct {\n    let PRODLINE = _.findWhere(item.Attribute, { Name: \"PRODLINE\" });\n\n    if (PRODLINE !== undefined) {\n      PRODLINE = _.findWhere(item.Attribute, { Name: \"PRODLINE\" })[\"#text\"];\n    } else {\n      PRODLINE = \"\";\n    }\n\n    const PROD = _.findWhere(item.Attribute, { Name: \"PROD\" })[\"#text\"];\n    const PRODTYPE = _.findWhere(item.Attribute, { Name: \"PRODTYPE\" })[\"#text\"];\n    const QUOTE_QUANTITY = _.findWhere(item.Attribute, { Name: \"QUOTE_QUANTITY\" })[\"#text\"];\n    const Total_Price_in_USD = _.findWhere(item.Attribute, { Name: \"Total_Price_in_USD\" })[\"#text\"];\n    const DescCode = _.findWhere(item.Attribute, { Name: \"DescCode\" })[\"#text\"];\n    const Image = _.findWhere(item.Attribute, { Name: \"Image\" })[\"#text\"];\n\n    if (!_.isArray(item.Accessory)) {\n      item.Accessory = [item.Accessory];\n    }\n\n    const totalPrice: number = _.reduce(\n      _.compact(item.Accessory),\n      (memo: number, acc: any) => {\n        const qty = parseFloatSafe(_.findWhere(acc.Attribute, { Name: \"QUOTE_QUANTITY\" })[\"#text\"]) || 0;\n        const price = parseFloatSafe(_.findWhere(acc.Attribute, { Name: \"Total_Price_in_USD\" })[\"#text\"]) || 0;\n        return (memo += qty * price);\n      },\n      parseFloatSafe(Total_Price_in_USD),\n    );\n\n    return <ICustomProduct>{\n      name: PRODLINE + \": \" + PROD + \": \" + PRODTYPE,\n      description: DescCode,\n      quantity: parseFloatSafe(QUOTE_QUANTITY),\n      price: totalPrice,\n      product_price: totalPrice,\n      labor_price: 0.0,\n      uom: \"ea\",\n      image: this.imageAndersenIq(Image),\n    };\n  }\n\n  private imageAndersenIq(image: any): string {\n    return \"data:image/png;base64,\" + image;\n  }\n\n  private parseWTSParadigm(data: any): ICustomProduct[] {\n    const xml = data.replace(/<!\\[CDATA\\[/g, \"\").replace(/]]>/g, \"\");\n    const raw_object = parseXml(xml, [\"lineitemmaster\", \"lineitem\"]);\n    const products = [];\n    _.each(raw_object.quote.lineitemmasters.lineitemmaster, (i: any) => {\n      products.push(<ICustomProduct>{\n        name: this.nameWTSParadigm(i),\n        description: this.descriptionWTSParadigm(i),\n        quantity: parseFloatSafe(i.quantity.Value),\n        price: this.priceWTSParadigm(i.lineitems.lineitem),\n        product_price: this.priceWTSParadigm(i.lineitems.lineitem),\n        labor_price: 0.0,\n        uom: \"ea\",\n        image: this.imageWTSParadigm(i),\n      });\n    });\n    return products;\n  }\n\n  private nameWTSParadigm(line_item: any): string {\n    let name = line_item.description.Value.split(\"\\n\")[0].trim();\n\n    if (_.isEmpty(name)) {\n      name = \"\";\n      _.each(line_item.lineitems.lineitem, (li: any) => {\n        name += li.category1.Value.trim() + \" \";\n        name += li.category2.Value.trim() + \" \";\n        name += li.category3.Value.trim() + \" \";\n        name += li.category4.Value.trim() + \" \";\n        name += li.category5.Value.trim() + \" \";\n        name = name.trim();\n      });\n    }\n\n    return name;\n  }\n\n  private descriptionWTSParadigm(line_item: any): string {\n    let description = line_item.description.Value;\n\n    // Beechworth Extra Data\n    if (\n      !_.isUndefined(line_item.lineitems.lineitem[0].extradata.extrafields) &&\n      !_.isEmpty(line_item.lineitems.lineitem[0].extradata.extrafields.clsNameValues)\n    ) {\n      _.each(line_item.lineitems.lineitem[0].extradata.extrafields.clsNameValues.clsnamevalue, (clsN: any) => {\n        if (clsN.name[\"Value\"] === \"Long Description\") {\n          description = clsN.value[\"Value\"].trim();\n        }\n      });\n    }\n\n    // Fail-safe\n    if (_.isEmpty(description)) {\n      description = \"\";\n      _.each(line_item.lineitems.lineitem, (li: any) => {\n        if (li.description) {\n          description += li.description[\"#text\"].trim();\n        }\n      });\n    }\n\n    return description;\n  }\n\n  private imageWTSParadigm(line_item: any): string {\n    if (line_item.bmp && line_item.bmp[\"#text\"]) {\n      return \"data:image/bmp;base64,\" + line_item.bmp[\"#text\"].replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n    }\n    return \"\";\n  }\n\n  private priceWTSParadigm(line_items: any[]): number {\n    let price = 0;\n    _.each(line_items, (li) => {\n      price += parseFloatSafe(li.customerprice.Value);\n    });\n    return price;\n  }\n\n  private parseSealRite(data: any): ICustomProduct[] {\n    const raw_object = parseXml(data, [\"Item\"]);\n    const products = [];\n    _.each(raw_object.Project.Item, (i: any) => {\n      products.push(<ICustomProduct>{\n        name: i.Description[\"#text\"].split(\" - \")[0].trim(),\n        description: i.Description[\"#text\"].trim(),\n        quantity: parseFloatSafe(i.Qty[\"#text\"]),\n        price: parseFloatSafe(i.Price[\"#text\"]),\n        product_price: parseFloatSafe(i.Price[\"#text\"]),\n        labor_price: 0.0,\n        uom: \"ea\",\n      });\n    });\n    return products;\n  }\n\n  private parseMarvin(data: any): ICustomProduct[] {\n    const raw_object = parseXml(data, [\"LineItem\", \"detail\"]);\n    const products = [];\n    _.each(raw_object.Project.Lines.LineItem, (li: any) => {\n      products.push(<ICustomProduct>{\n        name: this.nameMarvin(li),\n        description: this.descriptionMarvin(li),\n        quantity: parseFloatSafe(li.Quantity[\"#text\"]),\n        product_price: roundToDecimals(\n          parseFloatSafe(li.AssemblyInfo.MarvinAssembly[\"pr\"]) / parseFloatSafe(li.Quantity[\"#text\"]),\n          -2,\n        ),\n        labor_price: 0.0,\n        uom: \"ea\",\n      });\n    });\n    return products;\n  }\n\n  private nameMarvin(li: any): string {\n    return li.Brand[\"#text\"] + \" \" + li.Series[\"#text\"];\n  }\n\n  private descriptionMarvin(li: any): string {\n    let description = \"\";\n    _.each(li.AssemblyInfo.MarvinAssembly.summary.detail, (d: any) => {\n      description += d[\"desc\"] + \"\\n\";\n    });\n    return description.trim();\n  }\n}\n","import { ICustomProduct } from \"app/src/Models/Product\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { ICommand } from \"app/src/Commands/Command\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { AddEstimateLineItemCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemCmd\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { Discount } from \"app/src/Models/Discount\";\nimport { parseFloatSafe, roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport class AddEstimateFromOccImportCmd implements ICommand {\n  public errors: string[] = [];\n  public promise: ng.IPromise<any>;\n\n  constructor(\n    public estimate: IEstimate,\n    public data: string[],\n    public group: IEstimateGroup,\n    public FileQueue: IFileQueueFactory,\n    public EstimatorService: EstimatorService,\n    public valid_kind: string[],\n    public valid_uom: string[],\n    public $q: ng.IQService,\n  ) {}\n\n  public execute(): boolean {\n    const header = this.data[0];\n    const typeIndex = _.findIndex(header, (title) => {\n      return title === \"type\";\n    });\n    if (typeIndex < 0) {\n      this.errors.push(\"Invalid Header: Need to include type in header.\");\n      return false;\n    }\n    if (this.isHeaderInvalid(header)) {\n      return false;\n    }\n\n    const line_items = [];\n    const discounts = [];\n    _.each(this.data, (item, index) => {\n      if (item[typeIndex] === \"type\") {\n        return;\n      }\n      switch (item[typeIndex]) {\n        case \"line_item\":\n          line_items.push(item);\n          break;\n        case \"discount\":\n          discounts.push(item);\n          break;\n        default:\n          const line = index + 1;\n          this.errors.push(\"Invalid Type: \" + item[typeIndex] + \" is not a valid type. See line \" + line + \".\");\n          break;\n      }\n    });\n\n    const promises = [];\n    const overall_defer = this.$q.defer();\n    promises.push(overall_defer.promise);\n    const products = this.parseProducts(line_items, header);\n    promises.push(this.addProductsToEstimate(products));\n\n    this.addDiscountsToEstimate(discounts, header);\n\n    overall_defer.resolve();\n    this.promise = this.$q.all(promises);\n    this.promise.then(() => {\n      this.FileQueue.setQueue();\n    });\n\n    return true;\n  }\n\n  private addDiscountsToEstimate(discounts, header) {\n    _.each(discounts, (discount, index) => {\n      const discount_setup = <ICustomProduct>{};\n      _.each(header, (title: string, index: number) => {\n        if (title === \"type\") {\n          return;\n        }\n        discount_setup[title] = discount[index];\n      });\n\n      if (this.isKindInvalid(discount_setup.uom)) {\n        const line = index + 1;\n        this.errors.push(\n          \"Invalid Discount Kind: \" +\n            discount_setup.uom +\n            \" is not a valid discount kind. Check discount \" +\n            line +\n            \".\",\n        );\n        return;\n      }\n\n      // convert from custom product import to discount (did not want to include headers for discounts)\n      const new_discount = Discount.fromJSON({\n        kind: discount_setup.uom,\n        name: discount_setup.name,\n        amount: discount_setup.quantity,\n        limit: discount_setup.product_price,\n      });\n      this.estimate.discounts.push(new_discount);\n    });\n  }\n\n  private addProductsToEstimate(products: ICustomProduct[]): ng.IPromise<any> {\n    const promises = [];\n    _.each(products, (product: ICustomProduct) => {\n      const group_index = _.findIndex(_.pluck(this.estimate.estimateGroups(product.included), \"name\"), (name) => {\n        return name === product.estimate_group;\n      });\n      let group: IEstimateGroup;\n      if (group_index >= 0) {\n        group = this.estimate.estimateGroups(product.included)[group_index];\n      } else {\n        group = this.estimate.createGroup({ name: product.estimate_group, included: product.included });\n        if (this.estimate.calc_method === \"estimate_group\") {\n          this.EstimatorService.initializeTaxes(group);\n          this.EstimatorService.initializeMarkup(group);\n          this.EstimatorService.initializePaymentTerms(group);\n        }\n      }\n      const cmd = new AddEstimateLineItemCmd(this.estimate, product, group, this.EstimatorService);\n      cmd.execute();\n      cmd.lineItem.newly_added = false;\n\n      if (product.image_url) {\n        promises.push(this.FileQueue.getRemoteFile(product.image_url, cmd.lineItem));\n      }\n\n      if (product.document_url) {\n        promises.push(this.FileQueue.getRemoteFile(product.document_url, cmd.lineItem));\n      }\n    });\n    return this.$q.all(promises);\n  }\n\n  private parseProducts(line_items, header): ICustomProduct[] {\n    const products = [];\n\n    _.each(line_items, (li, index) => {\n      const new_product = <ICustomProduct>{};\n      _.each(header, (title: string, index) => {\n        if (title === \"type\") {\n          return;\n        }\n        new_product[title] = li[index];\n      });\n      const line = index + 1;\n      if (this.isUomInvalid(new_product.uom)) {\n        this.errors.push(\n          \"Invalid Unit Of Measure: \" +\n            new_product.uom +\n            \" is not a valid unit of measure. Check line_item \" +\n            line +\n            \".\",\n        );\n        return;\n      }\n      if (this.isIncludedInvalid(new_product.included)) {\n        this.errors.push(\n          \"Invalid Included Value: \" +\n            new_product.included +\n            \" is not a valid boolean. Needs to be true or false. Check line_item \" +\n            line +\n            \".\",\n        );\n        return;\n      }\n\n      new_product.visibility = this.parseVisibility(new_product.visibility);\n      new_product.included = this.parseBool(new_product.included);\n      new_product.quantity = parseFloatSafe(new_product.quantity);\n      new_product.product_price = parseFloatSafe(new_product.product_price);\n      new_product.labor_price = parseFloatSafe(new_product.labor_price);\n      new_product.price = roundToDecimals(\n        parseFloatSafe(new_product.product_price) + parseFloatSafe(new_product.labor_price),\n        -2,\n      );\n      products.push(new_product);\n    });\n    return products;\n  }\n\n  private isHeaderInvalid(header) {\n    const valid_headers = [\n      \"type\",\n      \"estimate_group\",\n      \"name\",\n      \"description\",\n      \"quantity\",\n      \"product_price\",\n      \"labor_price\",\n      \"uom\",\n      \"included\",\n      \"image_url\",\n      \"document_url\",\n      \"visibility\",\n    ];\n    let feedback = false;\n    _.each(header, (h) => {\n      const test = _.findIndex(valid_headers, (valid_h) => {\n        return valid_h === h;\n      });\n      if (test < 0) {\n        this.errors.push(\"Invalid Header: \" + h + \" is not a valid header name.\");\n        feedback = true;\n      }\n    });\n    return feedback;\n  }\n\n  private isUomInvalid(uom) {\n    let feedback = false;\n    const test = _.findIndex(this.valid_uom, (valid_unit) => {\n      return valid_unit === uom;\n    });\n    if (test < 0) {\n      feedback = true;\n    }\n    return feedback;\n  }\n\n  private isKindInvalid(kind) {\n    let feedback = false;\n    const test = _.findIndex(this.valid_kind, (valid_k) => {\n      return valid_k === kind;\n    });\n    if (test < 0) {\n      feedback = true;\n    }\n    return feedback;\n  }\n\n  private isIncludedInvalid(included) {\n    return !(included.toLowerCase().trim() === \"true\" || included.toLowerCase().trim() === \"false\");\n  }\n\n  private parseBool(included) {\n    return included.toLowerCase().trim() === \"true\";\n  }\n\n  private parseVisibility(visibility) {\n    let parsed_v = \"always\";\n    if (visibility) {\n      parsed_v = visibility.toLowerCase().trim();\n    }\n    if (!(parsed_v === \"always\" || parsed_v === \"company_only\")) {\n      parsed_v = \"always\";\n    }\n    return parsed_v;\n  }\n}\n","import { ICommand } from \"app/src/Commands/Command\";\nimport { IEstimate, ISalesTaxable } from \"app/src/Models/Estimate\";\n\nexport class EditSalesTaxCmd implements ICommand {\n  private _oldSalesTax;\n  constructor() {}\n\n  public execute(estimate: IEstimate, salesTax: ISalesTaxable): boolean {\n    this._oldSalesTax = estimate.cloneSalesTax();\n    estimate.updateSalesTax(salesTax);\n\n    return true;\n  }\n}\n","import { ICustomProduct } from \"app/src/Models/Product\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { ICommand } from \"app/src/Commands/Command\";\nimport { AddEstimateLineItemCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemCmd\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { parseFloatSafe, roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport class AddProductFromXlsxCmd implements ICommand {\n  public lineItems: IEstimateLineItem[] = [];\n  public marvinValues: string[] = [\"Product\", \"Quantity\", \"Brand\", \"Series\", \"Extended Net Price\", \"Size\"];\n  constructor(\n    public estimate: IEstimate,\n    public xlsx_data: string[][],\n    public group: IEstimateGroup,\n    public EstimatorService: EstimatorService,\n  ) {}\n\n  public execute(): boolean {\n    const products = this.xlsx_type(this.xlsx_data);\n    if (products.length < 1) {\n      return false;\n    }\n    _.each(products, (product) => {\n      const cmd = new AddEstimateLineItemCmd(this.estimate, product, this.group, this.EstimatorService);\n      cmd.execute();\n      cmd.lineItem.newly_added = false;\n      this.lineItems.push(cmd.lineItem);\n    });\n\n    return true;\n  }\n\n  private xlsx_type(data): ICustomProduct[] {\n    let products = [];\n    if (this.isMarvin(data)) {\n      products = this.parseMarvin(data);\n    }\n    return products;\n  }\n\n  private parseMarvin(data): ICustomProduct[] {\n    const columns = {};\n    _.each(this.marvinValues, (v) => {\n      columns[v] = _.indexOf(data[0], v);\n    });\n    const products = [];\n    _.each(data, (row, i) => {\n      if (i === 0) {\n        return;\n      }\n      products.push({\n        name: row[columns[\"Brand\"]] + \" \" + row[columns[\"Series\"]] + \" \" + row[columns[\"Product\"]],\n        description: row[columns[\"Size\"]],\n        quantity: parseFloatSafe(row[columns[\"Quantity\"]]),\n        product_price: roundToDecimals(\n          parseFloatSafe(row[columns[\"Extended Net Price\"]]) / parseFloatSafe(row[columns[\"Quantity\"]]),\n          -2,\n        ),\n        labor_price: 0.0,\n        uom: \"ea\",\n      });\n    });\n    return products;\n  }\n\n  private isMarvin(data): boolean {\n    const diff = _.difference(this.marvinValues, data[0]);\n    return diff.length === 0;\n  }\n}\n","import { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEstimate, ISalesTaxable } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { IOrg, OrgAclType, OrgPrefType } from \"app/src/Models/Org\";\nimport { IImageResource } from \"app/src/Models/Image\";\nimport { IDocResource } from \"app/src/Models/Doc\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { EditLineItemCmd } from \"app/src/Commands/Estimator/EditLineItemCmd\";\nimport { AddEstimateLineItemCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemCmd\";\nimport { AddProviaOrderCmd } from \"app/src/Commands/Estimator/AddProviaOrderCmd\";\nimport { AddFeneTechOrderCmd } from \"app/src/Commands/Estimator/AddFeneTechOrderCmd\";\nimport { AddProductFromXmlCmd } from \"app/src/Commands/Estimator/AddProductFromXmlCmd\";\nimport { AddEstimateFromOccImportCmd } from \"app/src/Commands/Estimator/AddEstimateFromOccImportCmd\";\nimport { IJobEstimateAddedEvent } from \"app/src/Estimator/EstimatorEvents\";\nimport { validationMessage } from \"app/src/Estimator/ValidationService\";\nimport { IFlash, FlashLevels } from \"app/src/Common/FlashService\";\nimport { IDiscount } from \"app/src/Models/Discount\";\nimport { INavDisplayArgs } from \"app/src/Jobs/JobShowCtrl\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport { IDirtyWatcher, IDirtyMerge } from \"app/src/Common/DirtyWatcher\";\nimport {\n  IEstimateTemplateResource,\n  IEstimateTemplate,\n  IEstimateTemplateResponse,\n  IEstimateTemplateGroups,\n} from \"app/src/Models/EstimateTemplate\";\nimport { IEventingFactory } from \"app/src/Common/EventingFactory\";\nimport {\n  IEstimateLineItemEvent,\n  IEstimateLineItemGroupEvent,\n  IEstimateLineItemOpeningEvent,\n} from \"app/src/Estimator/EstimateLineItemComponent\";\nimport { IFileQueueFactory, IFileQueueInit } from \"app/src/Common/FileQueueFactory\";\nimport { EditSalesTaxCmd } from \"app/src/Commands/Estimator/EditSalesTaxCmd\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { AddProductFromXlsxCmd } from \"app/src/Commands/Estimator/AddProductFromXlsxCmd\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IOrgPrefEstimator } from \"../Models/OrgPreference\";\nimport { ISession } from \"../Common/SessionService\";\nimport * as ng from \"angular\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { useSelector, dispatch } from \"app2/src/storeRegistry\";\nimport * as estimatorActions from \"app2/src/reducers/components/estimator.actions\";\nimport { IJobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { PaymentTermItemRecord, PaymentTermTemplateRecord } from \"app2/src/records/PaymentTermTemplate\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { cachedProduct, cachedProducts } from \"app2/src/selectors/product.selectors\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { subscriber } from \"app2/src/helpers/Subscribe\";\nimport { calculatedFinancingsLoading } from \"app2/src/selectors/calculatedFinancing.selectors\";\nimport { List } from \"immutable\";\nimport { currentOrgId, presentModePreferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { RoomRecord } from \"app2/src/records/Room\";\nimport { RootState } from \"app2/src/reducers\";\nimport { rooms as roomsSelector } from \"app2/src/selectors/room.selectors\";\nimport { estimateUnsavedId } from \"app2/src/selectors/estimate.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { token as tokenSelector } from \"app2/src/selectors/token.selectors\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\n\nclass EstimateEditorCtrl implements IDirtyMerge {\n  public job: IJob;\n  public showLoanCalc = false;\n  public activeGroupTab: any;\n  public spinnerPromise: ng.IPromise<any>;\n  public popups: any = {\n    estimated_start_opened: false,\n    estimated_end_opened: false,\n  };\n  public estimate: IEstimate;\n  public org: IOrg;\n  public priceListCurrent = true;\n  public selectedLineItem: IEstimateLineItem;\n  public navDisplay: boolean;\n  public editNameStatus = false;\n  public templates: IEstimateTemplateResponse;\n  public collapsedView = false;\n  public tourEditNameAction: boolean[];\n  public sortableOptions = {\n    items: \".group-tab\",\n    distance: 15,\n    stop: () => {\n      this.EventingFactory.trackEvent(\"group tabs reordered\", {});\n      this.estimate.orderGroups();\n    },\n  };\n  public modalActive = false;\n  public addProductCalled = false;\n  public addGroupTabs: any[] = [];\n  public fileQueue: IFileQueueFactory;\n  public capitalizeTemplate: string;\n  public openDrawer = 0;\n  public calculatedFinancingsLoading = false;\n  public show = 0;\n  public selectorMode = true;\n  public showTotalSection = false;\n  public showDiscountAndPaymentEstimator = false;\n\n  //noinspection JSUnusedGlobalSymbols\n  public dateOptions: ng.ui.bootstrap.IDatepickerConfig = {\n    formatYear: \"yy\",\n    minDate: new Date(),\n    startingDay: 1,\n  };\n  public endDateOptions: ng.ui.bootstrap.IDatepickerConfig = {\n    formatYear: \"yy\",\n    minDate: \"ctrl.estimate.estimated_start\",\n    startingDay: 1,\n  };\n\n  private _calculatedFinancingSub: () => void;\n\n  constructor(\n    public BaseConfig: IBaseConfig,\n    public EstimatorService: EstimatorService,\n    public Image: IImageResource,\n    public Doc: IDocResource,\n    public Flash: IFlash,\n    public Upload: ng.angularFileUpload.IUploadService,\n    public EventingFactory: IEventingFactory,\n    public $uibModal: ng.ui.bootstrap.IModalService,\n    public $stateParams: ng.ui.IStateParamsService,\n    public $scope: ng.IScope,\n    public $rootScope: ng.IScope,\n    public $q: ng.IQService,\n    public $timeout: ng.ITimeoutService,\n    public ConfirmDialog: IConfirmDialog,\n    public $state: ng.ui.IStateService,\n    public DirtyWatcher: IDirtyWatcher,\n    public EstimateTemplate: IEstimateTemplateResource,\n    public EstimatorTourService: any,\n    public FileQueue: IFileQueueInit,\n    public $http: ng.IHttpService,\n    public valid_kind: string[],\n    public valid_uom: string[],\n    public Session: ISession,\n    public $document: ng.IDocumentService,\n    public Pretty: IPretty,\n    public JobFetcher: IJobFetcherService,\n  ) {\n    const navListener = $rootScope.$on(\"nav:display\", (event: ng.IAngularEvent, args: INavDisplayArgs) => {\n      this.navDisplay = args.navDisplay;\n      this.setTotalSection();\n      this.setDiscountAndPaymentEstimator();\n    });\n\n    const helpListener = $rootScope.$on(\"header:help:estimator\", (event: ng.IAngularEvent, args: INavDisplayArgs) => {\n      this.EstimatorTourService.help().then(() => {\n        this.tourInit();\n      });\n    });\n\n    $scope.$on(\"$destroy\", () => {\n      navListener();\n      helpListener();\n      this._calculatedFinancingSub();\n    });\n\n    $scope.$on(\"estimateLineItem.edit\", (event: ng.IAngularEvent, args: IEstimateLineItemEvent) => {\n      if (this.lineItemEmitSave()) {\n        const listener = this.$rootScope.$on(\"estimateLineItem.confirmed\", (event, args: any) => {\n          if (args.continueOn) {\n            this.editLineItem(args.estimateLineItem);\n          }\n          listener();\n        });\n      } else {\n        this.editLineItem(args.estimateLineItem);\n      }\n    });\n\n    $scope.$on(\"estimateLineItem.edited\", (event: ng.IAngularEvent, args: IEstimateLineItemGroupEvent) => {\n      this.fileQueue.mergeQueue(args.newEstimateLineItem, args.temp_queue);\n      this.fileQueue.setQueue();\n      this.selectedLineItem = args.oldEstimateLineItem;\n      this.lineItemEdited(args.newEstimateLineItem, args.estimateGroup);\n    });\n\n    $scope.$on(\"estimateLineItem.collapse\", (event: ng.IAngularEvent, args: any) => {\n      this.collapsedView = args.collapsedView;\n    });\n\n    $scope.$on(\"estimateLineItem.add_opening\", (event: ng.IAngularEvent, args: IEstimateLineItemOpeningEvent) => {\n      this._handle_opening(args.product, args.estimateGroup);\n    });\n\n    $scope.$on(\"estimateLineItem.import_selected\", (event: ng.IAngularEvent, args: IEstimateLineItemOpeningEvent) => {\n      this.modalSetup(\"import\", args.estimateGroup);\n    });\n\n    $scope.$on(\"estimateLineItem.fenetech_order\", (event: ng.IAngularEvent, args: any) => {\n      this._handle_fenetech(args.data, args.estimateGroup);\n    });\n\n    this._calculatedFinancingSub = subscriber.subscribe<string>(\"estimates.calculatedFinancingByFinancedAmount\", () => {\n      this.setCalculatedFinancingsLoading();\n      this.$timeout(() => {\n        this.$scope.$digest();\n      });\n    });\n\n    DirtyWatcher.setup($scope, this);\n    this.fileQueue = FileQueue.getInstance();\n\n    this.tourEditNameAction = [false];\n    this.capitalizeTemplate = toTitleCase(this.Pretty.name[\"template\"]);\n\n    this.addPaymentTermTemplate = this.addPaymentTermTemplate.bind(this);\n    this.addPaymentTermItem = this.addPaymentTermItem.bind(this);\n    this.removePaymentTermItem = this.removePaymentTermItem.bind(this);\n    this.updatePaymentTermItem = this.updatePaymentTermItem.bind(this);\n    this.markupUpdated = this.markupUpdated.bind(this);\n    this.save = this.save.bind(this);\n    this.saveAsCallback = this.saveAsCallback.bind(this);\n    this.selectTemplateCallback = this.selectTemplateCallback.bind(this);\n  }\n\n  public $onChanges(): void {\n    let estimateId = this.$stateParams[\"estimate_id\"];\n    if (estimateId === (\"new\" as any as number)) {\n      this.editNameStatus = true;\n    } else {\n      estimateId = parseInt(estimateId);\n    }\n\n    if (!this.estimate && (estimateId >= 0 || estimateId === (\"new\" as any as number))) {\n      this.estimate = this.EstimatorService.loadEstimate(estimateId);\n      this.spinnerPromise = this.estimate.$promise.then(() => {\n        this.org = this.EstimatorService.org;\n        this.setTotalSection();\n        this.setDiscountAndPaymentEstimator();\n        this.updateMinDate();\n        if (this.org.can(\"layered\", OrgAclType.estimator, \"multiple_groups\")) {\n          this.addGroupTabs.push({});\n        }\n\n        return this.EstimatorService.priceListPromise.then(() => {\n          this.priceListCurrent =\n            this.estimate.activated_price_list_id === this.org.activated_price_list.id ||\n            estimateId === (\"new\" as any as number);\n          this.EventingFactory.init({\n            category: \"Estimate\",\n            estimate: this.estimate.id,\n            job: this.estimate.job_id,\n            org: this.org.id,\n            navDisplay: !this.navDisplay,\n          });\n          this.tourInit();\n          const pref: any = this.org.fetchPref(OrgPrefType.estimator);\n          if (\n            estimateId === (\"new\" as any as number) &&\n            !this.addProductCalled &&\n            pref.show_product_selector === \"always\"\n          ) {\n            this.addProductCalled = true;\n            this.addLineItem();\n          }\n        });\n      });\n    }\n  }\n\n  public setTotalSection() {\n    this.showTotalSection = useSelector((state) =>\n      presentModePreferencesConfig(state, {\n        path: [\"estimator\", \"show_pricing\", \"total_section\"],\n      }),\n    );\n  }\n\n  public setDiscountAndPaymentEstimator() {\n    this.showDiscountAndPaymentEstimator = useSelector((state) =>\n      presentModePreferencesConfig(state, {\n        path: [\"estimator\", \"show_pricing\", \"discount_and_payment_estimator\"],\n      }),\n    );\n  }\n\n  public setCalculatedFinancingsLoading() {\n    const financedAmount = this.estimate.payment_terms.financed_amount;\n    const financeOptionIds = List(_.pluck(this.estimate.finance_options, \"finance_option_id\"));\n    this.calculatedFinancingsLoading = useSelector((state) =>\n      calculatedFinancingsLoading(state, {\n        financedAmount,\n        financeOptionIds,\n      }),\n    );\n  }\n\n  public salesTaxUpdated(salesTaxable: ISalesTaxable): void {\n    const cmd = new EditSalesTaxCmd();\n    cmd.execute(this.estimate, salesTaxable);\n  }\n\n  public total(): number {\n    // @ts-ignore\n    if (this.estimate && this.estimate.$promise.$$state.status === 1) {\n      return this.estimate.updateTotal();\n    }\n\n    return 0;\n  }\n\n  public openDate(value): void {\n    this.popups[value] = !this.popups[value];\n  }\n\n  public updateMinDate(): void {\n    if (this.estimate.estimated_start) {\n      this.endDateOptions.minDate = this.estimate.estimated_start;\n\n      if (this.estimate.estimated_start > this.estimate.estimated_end || !this.estimate.estimated_end) {\n        this.estimate.estimated_end = this.estimate.estimated_start;\n      }\n    } else {\n      this.endDateOptions.minDate = new Date();\n    }\n  }\n\n  public editLineItem(line_item: IEstimateLineItem, removable = false): void {\n    const noProduct = _.isNull(line_item.product_id) || _.isUndefined(line_item.product_id);\n    if (!noProduct) {\n      const product = useSelector((state) =>\n        cachedProduct(state, {\n          activatedPriceListId: this.estimate.activated_price_list_id,\n          productId: line_item.product_id,\n        }),\n      );\n      let parent: ProductRecord;\n      if (product.parent_id) {\n        parent = useSelector((state) =>\n          cachedProduct(state, {\n            activatedPriceListId: this.estimate.activated_price_list_id,\n            productId: product.parent_id,\n          }),\n        );\n      }\n\n      if (\n        _.include(this.org.fetchSettingsAcl(OrgAclType.estimator), \"window\") &&\n        product &&\n        parent &&\n        (parent.kind === \"window\" || parent.kind === \"door\")\n      ) {\n        const modal = this.windowModal(parent, line_item.estimateGroup, line_item.clone());\n        this.EventingFactory.trackEvent(\"edit opening line item\", { category: \"EstimateLineItemComponent\" });\n        modal.result\n          .then((result) => {\n            const cmd = new EditLineItemCmd(result[0], line_item, this.estimate.existingGroups(), result[1]);\n            cmd.execute();\n            line_item.calculate(this.estimate);\n          })\n          .finally(() => {\n            this.modalActive = false;\n          });\n\n        return;\n      }\n    }\n    line_item.editing = true;\n    this.$timeout(() => {\n      this.scrollIntoView(line_item.id.toString());\n    });\n\n    if (!removable) {\n      this.EventingFactory.trackEvent(\"edit line item\", { category: \"EstimateLineItemComponent\" });\n    }\n  }\n\n  public scrollIntoView(id: string) {\n    const ele = document.getElementById(id);\n    if (ele) {\n      this.scrollElementIntoView(ele, \"smooth\");\n    }\n  }\n\n  public scrollElementIntoView(element: HTMLElement, behavior?: ScrollBehavior) {\n    const scrollTop = window.pageYOffset || element.scrollTop;\n    const finalOffset = element.getBoundingClientRect().top + scrollTop - window.innerHeight / 2;\n    window.parent.scrollTo({\n      top: finalOffset,\n      behavior: behavior || \"auto\",\n    });\n  }\n\n  public showEditName(): boolean {\n    if (!this.estimate) {\n      return false;\n    }\n\n    return this.editNameStatus;\n  }\n\n  public deleteEstimate(): void {\n    if (this.estimate) {\n      this.estimate\n        .$delete()\n        .then(() => {\n          this.Flash.addMessage(FlashLevels.success, \"Estimate Deleted\");\n          this.trackEvent(\"estimate delete\", {\n            category: \"Estimate\",\n          });\n          this.closeEstimate();\n        })\n        .catch((err) => {\n          this.Flash.addMessage(FlashLevels.danger, \"Problems deleting Estimate!!\");\n        });\n    }\n  }\n\n  public lineItemEdited(lineItem: IEstimateLineItem, group: IEstimateGroup): void {\n    const cmd = new EditLineItemCmd(lineItem, this.selectedLineItem, this.estimate.existingGroups(), group);\n    cmd.execute();\n    this.selectedLineItem.calculate(this.estimate);\n\n    this.selectedLineItem = null;\n\n    this.EventingFactory.trackEvent(\"line item edited\", { category: \"EstimateLineItemComponent\" });\n  }\n\n  public modalSetup(type: string, group: IEstimateGroup = undefined): void {\n    this.EventingFactory.trackEvent(\"add product\", {});\n    this.productModal(type).result.then(\n      (selectedItem) => {\n        group = this.checkGroup(group);\n        this[\"_handle_\" + selectedItem.type](selectedItem.data, group);\n      },\n      () => {\n        this.modalActive = false;\n      },\n    );\n  }\n\n  public addLineItem(group: IEstimateGroup = undefined): void {\n    if (this.lineItemEmitSave()) {\n      const listener = this.$rootScope.$on(\"estimateLineItem.confirmed\", (event, args: any) => {\n        if (args.continueOn) {\n          group = this.checkGroup(group);\n          this._handle_custom(\"line_item\", group);\n        }\n        listener();\n      });\n    } else {\n      group = this.checkGroup(group);\n      this._handle_custom(\"line_item\", group);\n    }\n  }\n\n  public lineItemEmitSave(): boolean {\n    const lineItemEditing = this.EstimatorService.lineItemEditorOpen();\n    if (lineItemEditing && lineItemEditing.editing) {\n      this.$scope.$emit(\"estimateLineItem.save.\" + lineItemEditing.id);\n    }\n    return lineItemEditing && lineItemEditing.editing;\n  }\n\n  public togglePaymentOptionEditor(): void {\n    dispatch(estimatorActions.Actions.setPaymentOptionEditorVisible(true));\n  }\n\n  public _handle_product(product: ProductRecord, group: IEstimateGroup): void {\n    const cmd = new AddEstimateLineItemCmd(this.estimate, product, group, this.EstimatorService);\n    cmd.execute();\n\n    this.EventingFactory.trackEvent(\"product added\", {\n      product: product.id,\n      estimate_group_name: group.name,\n      estimate_group_id: group.id,\n    });\n    this.editLineItem(cmd.lineItem, true);\n  }\n\n  public _handle_template(template: IEstimateTemplate): void {\n    const type = template.kind === \"interior\" ? \"interior_template\" : \"template\";\n    this.estimateImportOptions(template, undefined, type);\n  }\n\n  public _handle_opening(product: ProductRecord, group: IEstimateGroup): void {\n    this.EventingFactory.trackEvent(\"opening product added\", {\n      product: product.id,\n      estimate_group_name: group.name,\n      estimate_group_id: group.id,\n    });\n    this.windowModal(product, group)\n      .result.then(() => {})\n      .finally(() => {\n        this.modalActive = false;\n      });\n  }\n\n  public _handle_provia(data, group): void {\n    this.EventingFactory.trackEvent(\"add provia\", {});\n    const cmd = new AddProviaOrderCmd(\n      this.estimate,\n      data,\n      group,\n      this.fileQueue,\n      this.$http,\n      this.spinnerPromise,\n      this.$q,\n      this.EstimatorService,\n    );\n    if (cmd.execute() === false) {\n      this.Flash.addMessage(FlashLevels.danger, \"There are no products in that ProVia Order.\");\n    }\n    this.modalActive = false;\n  }\n\n  public _handle_fenetech(data, group): void {\n    this.EventingFactory.trackEvent(\"add fenetech\", {});\n    const cmd = new AddFeneTechOrderCmd(\n      this.estimate,\n      data,\n      group,\n      this.fileQueue,\n      this.$http,\n      this.spinnerPromise,\n      this.$q,\n      this.EstimatorService,\n    );\n    if (cmd.execute() === false) {\n      this.Flash.addMessage(FlashLevels.danger, \"There are no products in that FeneTech Order.\");\n    }\n  }\n\n  public _handle_xml(xml_data, group): void {\n    this.EventingFactory.trackEvent(\"handle xml\", {});\n    const cmd = new AddProductFromXmlCmd(this.estimate, xml_data, group, this.fileQueue, this.EstimatorService);\n    if (cmd.execute() === false) {\n      this.Flash.addMessage(\n        FlashLevels.danger,\n        \"The file you're trying to import is not supported or does not have products to import.\",\n      );\n    }\n    this.modalActive = false;\n  }\n\n  public _handle_xlsx(data, group): void {\n    this.EventingFactory.trackEvent(\"handle xlsx\", {});\n    const cmd = new AddProductFromXlsxCmd(this.estimate, data, group, this.EstimatorService);\n    if (cmd.execute() === false) {\n      this.Flash.addMessage(\n        FlashLevels.danger,\n        \"The file you're trying to import is not supported or does not have products to import.\",\n      );\n    }\n    this.modalActive = false;\n  }\n\n  public _handle_custom(product_string, group): void {\n    this._handle_product(product_string, group);\n  }\n\n  public _handle_occ_import(data, group): void {\n    this.estimateImportOptions(data, group, \"occ_import\");\n  }\n\n  public estimateImportOptions(data, group, type): void {\n    switch (this.org.fetchPref<IOrgPrefEstimator>(OrgPrefType.estimator).add_products) {\n      case \"replace\":\n        this.replaceEstimate(data, group, type);\n        break;\n      case \"merge\":\n        this.mergeEstimate(data, group, type);\n        break;\n      case \"ask\":\n        if (this.estimate.lineItems().length === 0) {\n          this.replaceEstimate(data, group, type);\n        } else {\n          this.ConfirmDialog.confirm(\"Would you like to Replace or Merge into the current estimate?\", {\n            template:\n              '<div class=\"merge-replace confirm-modal modal-header\"><div class=\"modal-title\"><h3>{{msg}}</h3></div></div><div class=\"modal-footer\"><button class=\"btn btn-merge\" type=\"button\" ng-click=\"$close()\">Merge</button><button class=\"btn btn-replace\" type=\"button\" ng-click=\"$dismiss(false)\">Replace</button></div>',\n          })\n            .then(() => {\n              try {\n                this.mergeEstimate(data, group, type);\n              } catch (err) {\n                console.error(err);\n              }\n            })\n            .catch(() => {\n              this.replaceEstimate(data, group, type);\n            });\n        }\n        break;\n    }\n  }\n\n  public mergeEstimate(data, group, type): void {\n    this.EventingFactory.trackEvent(\"merge estimate with template\", {});\n    _.each(this.estimate.existingGroups(), (group) => {\n      if (group.line_items.length === 0) {\n        this.removeGroup(group);\n      }\n    });\n\n    this.modalActive = false;\n    this[\"add_\" + type](data, group);\n  }\n\n  public replaceEstimate(data, group, type): void {\n    this.EventingFactory.trackEvent(\"replace estimate with template\", {});\n    if (this.estimate.lineItems().length > 0) {\n      this.ConfirmDialog.confirm(\n        `There are products in the estimate that will be lost. Are you sure you want to replace them with this ${this.Pretty.name[\"template\"]}?`,\n      ).then(() => {\n        _.each(this.estimate.groups, (eg) => {\n          this.removeGroup(eg);\n        });\n        this.fileQueue.clearQueue();\n        this.modalActive = false;\n        this[\"add_\" + type](data, group);\n      });\n    } else {\n      _.each(this.estimate.groups, (eg) => {\n        this.removeGroup(eg);\n      });\n      this.fileQueue.clearQueue();\n      this.modalActive = false;\n      this[\"add_\" + type](data, group);\n    }\n  }\n\n  public checkGroup(group): any {\n    if (_.isUndefined(group)) {\n      group = this.estimate.existingGroups()[0];\n    }\n\n    if (_.isUndefined(group)) {\n      this.EventingFactory.trackEvent(\"estimate group created\", {\n        estimate_group_name: \"\",\n      });\n      group = this.estimate.createGroup({ name: \"Included\", included: true });\n      if (this.estimate.calc_method === \"estimate_group\") {\n        this.EstimatorService.initializeTaxes(group);\n        this.EstimatorService.initializeMarkup(group);\n        this.EstimatorService.initializePaymentTerms(group);\n      }\n    }\n    return group;\n  }\n\n  public addGroup(): void {\n    this.EventingFactory.trackEvent(\"new group added\", {});\n    const group = this.estimate.createGroup({ included: false, name: \"Group\" });\n\n    if (this.estimate.calc_method === \"estimate_group\") {\n      this.EstimatorService.initializeTaxes(group);\n      this.EstimatorService.initializeMarkup(group);\n      this.EstimatorService.initializePaymentTerms(group);\n    }\n\n    this.$timeout(() => {\n      this.activeGroupTab = this.estimate.existingGroups()[this.estimate.existingGroups().length - 1].$$hashKey;\n      this.$scope.$broadcast(\"estimateGroup.edit\", { estimateGroup: group });\n    }, 0);\n  }\n\n  public add_template(est_template: IEstimateTemplate): void {\n    this.EstimatorService.setupTemplate(est_template);\n    this.EventingFactory.trackEvent(\"add estimate template\", {\n      estimate_template: est_template.id,\n      kind: est_template.kind,\n    });\n    this.spinnerPromise = est_template.addTemplate(\n      this.estimate,\n      this.EstimatorService,\n      this.fileQueue,\n      this.EventingFactory,\n      this.$q,\n      this.Flash,\n    );\n  }\n\n  public add_interior_template(est_template: IEstimateTemplate): void {\n    this.EstimatorService.setupTemplate(est_template);\n\n    const rooms = useSelector((state: RootState) => roomsSelector(state, { roomIds: est_template.selectedRoomIds }));\n\n    this.EventingFactory.trackEvent(\"add estimate template\", {\n      estimate_template: est_template.id,\n      kind: \"interior\",\n      roomQty: rooms.size,\n      groupRooms: est_template.groupRooms,\n    });\n\n    if (est_template.groupRooms) {\n      this.spinnerPromise = est_template.addInteriorTemplate(\n        this.estimate,\n        this.EstimatorService,\n        this.fileQueue,\n        this.EventingFactory,\n        this.$q,\n        this.Flash,\n        rooms,\n      );\n    } else {\n      const promises = [];\n      rooms.forEach((r: RoomRecord, idx) => {\n        promises.push(\n          est_template.addInteriorTemplate(\n            this.estimate,\n            this.EstimatorService,\n            this.fileQueue,\n            this.EventingFactory,\n            this.$q,\n            this.Flash,\n            List([r]),\n            idx === rooms.size - 1, // only show message after last group is created\n          ),\n        );\n      });\n      this.spinnerPromise = this.$q.all(promises);\n    }\n  }\n\n  public add_occ_import(data, group): void {\n    this.EventingFactory.trackEvent(\"add occ import\", {});\n    const cmd = new AddEstimateFromOccImportCmd(\n      this.estimate,\n      data,\n      group,\n      this.fileQueue,\n      this.EstimatorService,\n      this.valid_kind,\n      this.valid_uom,\n      this.$q,\n    );\n    if (cmd.execute() === false) {\n      this.Flash.addMessage(FlashLevels.danger, \"There was an error importing the file. See Error Message!\");\n      cmd.errors.unshift(\"Check your import file and try again. Errors below:\");\n      this.ConfirmDialog.confirm(cmd.errors.join(\"\\n\").trim(), {\n        size: \"lg\",\n        template:\n          '<div class=\"confirm-modal modal-header\"><div class=\"modal-title\"><p>{{msg}}</p></div></div><div class=\"modal-footer\"><button class=\"btn btn-default\" type=\"button\" ng-click=\"$close()\">OK</button></div>',\n      });\n    } else if (cmd.errors.length > 0) {\n      this.Flash.addMessage(FlashLevels.danger, \"There was an error importing the file. See Error Message!\");\n      cmd.errors.unshift(\"Check your import file and try again. Errors below:\");\n      this.ConfirmDialog.confirm(cmd.errors.join(\"\\n\").trim(), {\n        size: \"lg\",\n        template:\n          '<div class=\"confirm-modal modal-header\"><div class=\"modal-title\"><p>{{msg}}</p></div></div><div class=\"modal-footer\"><button class=\"btn btn-default\" type=\"button\" ng-click=\"$close()\">OK</button></div>',\n      });\n    } else {\n      this.spinnerPromise = cmd.promise.then(() => {\n        this.Flash.addMessage(FlashLevels.success, \"The file was successfully imported!\");\n      });\n    }\n  }\n\n  public saveAsTemplate(): void {\n    if (this.lineItemEmitSave()) {\n      const listener = this.$rootScope.$on(\"estimateLineItem.confirmed\", (event, args: any) => {\n        if (args.continueOn) {\n          this.confirmSaveAsTemplate();\n        }\n        listener();\n      });\n    } else {\n      this.confirmSaveAsTemplate();\n    }\n  }\n\n  public confirmSaveAsTemplate() {\n    if (this.org.activated_price_list.id !== this.estimate.activated_price_list_id) {\n      this.Flash.addMessage(\n        FlashLevels.warning,\n        `Please use a new estimate to generate an estimate ${this.Pretty.name[\"template\"]}.`,\n      );\n      return;\n    }\n\n    this.EventingFactory.trackEvent(\"open template modal\", {});\n    this.selectorMode = false;\n    this.show += 1;\n  }\n\n  public saveAsCallback(selection: string | IEstimateTemplate, folderId: number, kind: string) {\n    _.each(this.estimate.lineItems(), (li) => {\n      this.fileQueue.cleanFileQueue(li, false);\n    });\n    if (_.isString(selection)) {\n      let template: IEstimateTemplateGroups;\n      try {\n        template = this.EstimatorService.setupNewTemplate();\n        if (kind === \"interior\") {\n          template.groups = [template.groups[0]];\n        }\n      } catch (err) {\n        this.Flash.addMessage(\n          FlashLevels.warning,\n          `Unable to Create My Estimate ${this.capitalizeTemplate}. If the problem persists, contact support.`,\n        );\n        console.error(err);\n        return;\n      }\n\n      if (folderId <= 0) {\n        folderId = null;\n      }\n\n      this.spinnerPromise = this.EstimatorService.createTemplate({\n        name: selection,\n        template: template,\n        folder_id: folderId,\n        kind,\n      })\n        .then((est_template) => {\n          this.EventingFactory.trackEvent(\"new template saved\", { estimate_template: est_template.id });\n          this.spinnerPromise = this.addFilesToTemplate(est_template).then(() => {\n            this.Flash.addMessage(FlashLevels.success, `My Estimate ${this.capitalizeTemplate} Successfully Created.`);\n          });\n        })\n        .catch(() => {\n          this.Flash.addMessage(\n            FlashLevels.warning,\n            `Unable to Create My Estimate ${this.capitalizeTemplate}. If the problem persists, contact support.`,\n          );\n        });\n    } else {\n      this.EventingFactory.trackEvent(\"edit existing template\", { estimate_template: selection.id });\n      try {\n        selection = this.EstimateTemplate.fromJSON(selection);\n        selection.template = this.EstimatorService.setupNewTemplate();\n\n        if (selection.kind === \"interior\") {\n          selection.template.groups = [selection.template.groups[0]];\n        }\n      } catch (err) {\n        this.Flash.addMessage(\n          FlashLevels.warning,\n          `Unable to Update My Estimate ${this.capitalizeTemplate}. If the problem persists, contact support.`,\n        );\n        console.error(err);\n        return;\n      }\n\n      this.spinnerPromise = this.EstimatorService.updateTemplate(selection)\n        .then((est_template) => {\n          return this.addFilesToTemplate(est_template).then(() => {\n            this.Flash.addMessage(FlashLevels.success, `My Estimate ${this.capitalizeTemplate} Successfully Updated.`);\n          });\n        })\n        .catch(() => {\n          this.Flash.addMessage(\n            FlashLevels.warning,\n            `Unable to Update My Estimate ${this.capitalizeTemplate}. If the problem persists, contact support.`,\n          );\n        });\n    }\n  }\n\n  public addFilesToTemplate(et: IEstimateTemplate): ng.IPromise<any> {\n    const promises = [];\n    promises.push(this.fileQueue.uploadFileQueue(et));\n    promises.push(\n      et.uploadFromLineItemFiles(this.estimate, this.fileQueue, this.$q, this.EventingFactory, this.EstimatorService),\n    );\n    return this.$q.all(promises);\n  }\n\n  public windowModal(\n    parentProduct: ProductRecord,\n    group: IEstimateGroup,\n    estimateLineItem: IEstimateLineItem = null,\n  ): ng.ui.bootstrap.IModalServiceInstance {\n    this.modalActive = true;\n    const parentChildren = useSelector((state) =>\n      cachedProducts(state, {\n        activatedPriceListId: this.estimate.activated_price_list_id,\n        productIds: parentProduct.children_ids,\n      }),\n    );\n    return this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n      animation: false,\n      ariaLabelledBy: \"modal-title\",\n      ariaDescribedBy: \"modal-body\",\n      controller: \"OpeningsWizard\",\n      controllerAs: \"$ctrl\",\n      backdrop: \"static\",\n      templateUrl: \"src/Estimator/openings_wizard.html\",\n      size: \"xl\",\n      windowClass: \"product-selector\",\n\n      resolve: {\n        estimate: this.estimate,\n        org: this.org,\n        parentProduct: parentProduct,\n        parentChildren: parentChildren,\n        group: group,\n        estimateLineItem: estimateLineItem,\n        eventingFactory: this.EventingFactory,\n        navDisplay: this.navDisplay,\n        groups: () => this.estimate.existingGroups(),\n      },\n    });\n  }\n\n  public addTemplate() {\n    if (this.lineItemEmitSave()) {\n      const listener = this.$rootScope.$on(\"estimateLineItem.confirmed\", (event, args: any) => {\n        if (args.continueOn) {\n          this.estimateTemplateModal();\n        }\n        listener();\n      });\n    } else {\n      this.estimateTemplateModal();\n    }\n  }\n\n  public estimateTemplateModal() {\n    this.selectorMode = true;\n    this.show += 1;\n  }\n\n  public selectTemplateCallback(selection: IEstimateTemplate) {\n    this._handle_template(this.EstimateTemplate.fromJSON(selection));\n  }\n\n  public productModal(type: string): ng.ui.bootstrap.IModalInstanceService {\n    this.modalActive = true;\n    return this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n      animation: true,\n      ariaLabelledBy: \"modal-title\",\n      ariaDescribedBy: \"modal-body\",\n      controller: \"ProductSelectorCtrl\",\n      controllerAs: \"ctrl\",\n      backdrop: \"static\",\n      templateUrl: \"src/Estimator/productSelector.html\",\n      size: \"lg\",\n      windowClass: \"product-selector\",\n\n      resolve: {\n        setup: { type: type },\n        navDisplay: this.navDisplay,\n        templates: this.templates,\n        org: this.org,\n        fileQueue: this.fileQueue,\n      },\n    });\n  }\n\n  public removeGroup(group: IEstimateGroup): void {\n    if (group.id > 0) {\n      group._destroy = true;\n    } else {\n      this.estimate.groups = _.filter(this.estimate.groups, (eg) => {\n        return eg.id !== group.id;\n      });\n    }\n  }\n\n  // if we have no estimate comparison, make one now\n  // but dont save here.\n  public async showEstimateComparisons() {\n    this.openDrawer += 1;\n  }\n\n  public addPaymentTermTemplate(template: PaymentTermTemplateRecord): void {\n    this.EventingFactory.trackEvent(\"payment term template added\", {\n      payment_term_template: template.id,\n    });\n\n    this.estimate.payment_terms = this.estimate.payment_terms.merge({\n      id: template.id,\n      name: template.name,\n      description: template.description,\n      payment_term_items: template.breakdown.items,\n    });\n    this.total();\n  }\n\n  public addPaymentTermItem(item: PaymentTermItemRecord): void {\n    this.EventingFactory.trackEvent(\"payment term added\", {\n      payment_term: JSON.parse(angular.toJson(item)),\n    });\n    this.estimate.payment_terms = this.estimate.payment_terms.update(\"payment_term_items\", (ptis) => {\n      return ptis.push(item);\n    });\n\n    this.total();\n  }\n\n  public removePaymentTermItem(item: PaymentTermItemRecord): void {\n    this.EventingFactory.trackEvent(\"payment term removed\", {\n      payment_term: JSON.parse(angular.toJson(item)),\n    });\n\n    this.estimate.payment_terms = this.estimate.payment_terms.update(\"payment_term_items\", (ptis) => {\n      return ptis.filter((pti) => pti.uuid !== item.uuid);\n    });\n\n    this.total();\n  }\n\n  public updatePaymentTermItem(item: PaymentTermItemRecord): void {\n    this.EventingFactory.trackEvent(\"payment term updated\", {\n      payment_term: JSON.parse(angular.toJson(item)),\n    });\n\n    const index: number = this.estimate.payment_terms.payment_term_items.findIndex((pti) => pti.uuid === item.uuid);\n    this.estimate.payment_terms = this.estimate.payment_terms.setIn([\"payment_term_items\", index], item);\n\n    this.total();\n  }\n\n  //noinspection JSUnusedGlobalSymbols\n  public discountAdded(discount: IDiscount): void {\n    this.EventingFactory.trackEvent(\"discount added\", {\n      discount: JSON.parse(angular.toJson(discount)),\n    });\n    this.estimate.discounts = this.estimate.discounts.concat([discount]);\n    this.estimate.updateTotal();\n  }\n\n  //noinspection JSUnusedGlobalSymbols\n  public discountUpdated(discount: IDiscount): void {\n    this.EventingFactory.trackEvent(\"discount updated\", {\n      discount: JSON.parse(angular.toJson(discount)),\n    });\n    _.find(this.estimate.discounts, (d: IDiscount, idx: number) => {\n      if (d.uuid === discount.uuid) {\n        this.estimate.discounts[idx] = discount;\n        return true;\n      }\n\n      return false;\n    });\n    this.estimate.updateTotal();\n  }\n\n  //noinspection JSUnusedGlobalSymbols\n  public discountRemoved(discount: IDiscount): void {\n    this.EventingFactory.trackEvent(\"discount removed\", {\n      discount: JSON.parse(angular.toJson(discount)),\n    });\n    this.estimate.discounts = _.filter(this.estimate.discounts, (d: IDiscount) => {\n      return d.uuid !== discount.uuid;\n    });\n    this.estimate.updateTotal();\n  }\n\n  public save(): ng.IPromise<void> {\n    if (this.lineItemEmitSave()) {\n      const listener = this.$rootScope.$on(\"estimateLineItem.confirmed\", (event, args: any) => {\n        listener();\n        if (args.continueOn) {\n          return this.saveEstimate();\n        }\n      });\n    } else {\n      return this.saveEstimate();\n    }\n  }\n\n  public saveEstimate(): ng.IPromise<any> {\n    const newEstimate = !(this.estimate.id > 0);\n    let validated = true;\n    let validation_results = [];\n    _.each(this.estimate.lineItems(), (li) => {\n      this.fileQueue.cleanFileQueue(li, true);\n      if (li.estimateGroup.included) {\n        validated = validated && li.validated;\n        if (!li.validated) {\n          validation_results = validation_results.concat(li.validation_results);\n        }\n      }\n    });\n\n    if (!validated) {\n      validationMessage(validation_results, this.ConfirmDialog);\n      return;\n    }\n\n    this.spinnerPromise = this.EstimatorService.saveEstimate()\n      .then(() => {\n        this.estimate = this.EstimatorService.estimate;\n        return this.fileQueue.uploadFileQueue(this.estimate).then(() => {\n          this.estimate = this.EstimatorService.receiveAndSetReduxEstimate(this.estimate);\n          this.estimate.line_items_count = this.estimate.lineItems().length;\n          return this.estimate.$promise.then(() => {\n            if (newEstimate) {\n              // Event category & action used for analytics job reporting - do not rename and keep upon refactor\n              this.EventingFactory.trackEvent(\"saved\", {\n                estimate: this.estimate.id,\n              });\n              this.$rootScope.$emit(\"job:estimate_added\", <IJobEstimateAddedEvent>{\n                id: this.estimate.job_id,\n                estimate: this.estimate,\n              });\n            } else {\n              this.EventingFactory.trackEvent(\"updated\", {});\n              this.$rootScope.$emit(\"job:estimate_updated\", <IJobEstimateAddedEvent>{\n                id: this.estimate.job_id,\n                estimate: this.estimate,\n              });\n            }\n\n            this.Flash.addMessage(FlashLevels.success, this.org.estimatorTitle() + \" was successfully saved.\");\n          });\n        });\n      })\n      .catch((err) => {\n        console.error(err);\n        this.Flash.addMessage(\n          FlashLevels.danger,\n          \"There was a problem saving the estimate. If the problem persists, contact support.\",\n        );\n      });\n\n    return this.spinnerPromise;\n  }\n\n  public close(): void {\n    if (this.check()) {\n      this.ConfirmDialog.confirm(\n        \"There are unsaved changes that will be lost.  Are you sure you want to navigate away?\",\n      )\n        .then(() => {\n          this.EstimatorService.reloadEstimate(this.estimate.id).$promise.then(() => {\n            this.EventingFactory.trackEvent(\"close dirty\", {});\n            this.closeEstimate();\n          });\n        })\n        .catch(() => {\n          this.EventingFactory.trackEvent(\"don't close\", {});\n        });\n    } else {\n      this.closeEstimate();\n    }\n  }\n\n  public closeEstimate(): void {\n    dispatch(jobActions.Actions.setSelectedEstimateId(null));\n    this.$state.go(\"job_header.job_show.estimates\", { id: this.estimate.job_id }, { notify: false });\n    this.EventingFactory.trackEvent(\"close\", {});\n  }\n\n  public pdf(doc_type): void {\n    if (!doc_type) {\n      doc_type = \"estimate\";\n    }\n    this.EstimatorService.savePdf(undefined, doc_type);\n  }\n\n  public hidePriceListCaution(nav_display: boolean): boolean {\n    if (nav_display) {\n      return this.priceListCurrent;\n    }\n    return true;\n  }\n\n  public collapseChanged(): void {\n    this.EventingFactory.trackEvent(\"overview collapse view toggled\", {\n      collapsedView: this.collapsedView,\n    });\n  }\n\n  public tourInit(): void {\n    this.EstimatorTourService.init({\n      estimateCtrl: this,\n    });\n  }\n\n  public checkTemplate() {\n    const templates = this.templates || { estimate_templates: [] };\n    return templates.estimate_templates.length === 0;\n  }\n\n  public markupUpdated(margins) {\n    this.estimate.product_markup = margins.product_markup;\n    this.estimate.labor_markup = margins.labor_markup;\n    this.estimate.lineItems().forEach((lineItem) => {\n      lineItem.calculate(this.estimate);\n      lineItem.options.forEach((opt) => {\n        opt.calculate(this.estimate);\n      });\n    });\n    this.$timeout(() => {\n      this.$scope.$digest();\n    });\n  }\n\n  public reset(): ng.IPromise<any> {\n    this.spinnerPromise = this.EstimatorService.reloadEstimate(this.estimate.id).$promise;\n    return this.spinnerPromise;\n  }\n\n  public check(): boolean {\n    if (!this.modalActive) {\n      return this.EstimatorService.checkEstimateState();\n    }\n  }\n\n  public trackEvent(action, props): void {\n    this.EventingFactory.trackEvent(action, props);\n  }\n\n  public duplicateEstimate(): void {\n    this.ConfirmDialog.confirm(`Are you sure you want to duplicate the estimate? ${this.estimate.name}`).then(\n      async () => {\n        const deferred: ng.IDeferred<void> = this.$q.defer();\n        this.spinnerPromise = deferred.promise;\n        try {\n          const newEstimateId = useSelector(estimateUnsavedId);\n          dispatch(estimateActions.Actions.duplicateEstimate(this.estimate.id));\n          const response = await dispatch(estimateActions.AsyncActions.updateOrCreateEstimate(newEstimateId));\n          deferred.resolve();\n          dispatch(push(`/jobs/${this.job.id}/estimates/${response.id}`));\n        } catch (e) {\n          deferred.resolve();\n          console.error(e);\n        }\n      },\n    );\n  }\n\n  public openEmailOrderCsv(): void {\n    this.trackEvent(\"open email order csv modal\", {});\n    dispatch(push(`/jobs/${this.estimate.job_id}/estimates/${this.estimate.id}/email_order_csv`));\n  }\n\n  public openManualTrigger(): void {\n    this.trackEvent(\"open manual trigger modal\", {});\n    dispatch(push(`/jobs/${this.estimate.job_id}/estimates/${this.estimate.id}/manual_trigger`));\n  }\n}\n\nexport class EstimateEditor implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    navDisplay: \"<\",\n    job: \"<\",\n  };\n  public templateUrl = \"src/Estimator/estimate_editor.html\";\n\n  constructor() {\n    this.controller = EstimateEditorCtrl;\n    this.controller.$inject = [\n      \"BaseConfig\",\n      \"EstimatorService\",\n      \"Image\",\n      \"Doc\",\n      \"Flash\",\n      \"Upload\",\n      \"EventingFactory\",\n      \"$uibModal\",\n      \"$stateParams\",\n      \"$scope\",\n      \"$rootScope\",\n      \"$q\",\n      \"$timeout\",\n      \"ConfirmDialog\",\n      \"$state\",\n      \"DirtyWatcher\",\n      \"EstimateTemplate\",\n      \"EstimatorTourService\",\n      \"FileQueueFactory\",\n      \"$http\",\n      \"valid_kind\",\n      \"valid_uom\",\n      \"Session\",\n      \"$document\",\n      \"Pretty\",\n      \"JobFetcher\",\n    ];\n  }\n}\n","import { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { parseFloatSafe } from \"app2/src/helpers/Number\";\n\nexport interface IProviaOrder {\n  ponumber: number;\n  orderno: number;\n  locationid: number;\n  locationname: string;\n  locationhandle: string;\n  vendor: string;\n  jobname: string;\n  enterdate: Date;\n  shipdate: Date;\n  status: string;\n  user1: string;\n  user2: string;\n  subtotal: number;\n  tax: number;\n  total: number;\n  sellprice: number;\n  sellpricelabor: number;\n  sellpricetax: number;\n  comments: string;\n  line: IProviaLineItem[];\n}\n\nexport interface IProviaLineItem {\n  lineno: number;\n  parentline: number;\n  parent: IProviaLineItem;\n  model: string;\n  description: string;\n  qty: number;\n  cost: number;\n  useprice: number;\n  extcost: number;\n  sellprice: number;\n  listprice: number;\n  extsellprice: number;\n  tagno: number;\n  imageurl: string;\n  comments: string;\n  options: IOptions;\n}\n\nexport interface IOptions {\n  option: string[];\n}\n\nexport interface IProviaApi {\n  username: string;\n  password: string;\n  portal: boolean;\n  orders: IProviaOrder[];\n\n  fetchOrders(portal: boolean): ng.IPromise<IProviaOrder[]>;\n  fetchOrderId(id: number, portal: boolean): ng.IPromise<IProviaOrder>;\n}\n\nexport class ProviaApi implements IProviaApi {\n  public username: string;\n  public password: string;\n  public orders: IProviaOrder[];\n  public order: IProviaOrder;\n  public portal: boolean;\n\n  constructor(\n    public $http: ng.IHttpService,\n    public $q: ng.IQService,\n    public org_id: number,\n    public BaseConfig: IBaseConfig,\n    public fileQueue: IFileQueueFactory,\n  ) {}\n\n  public fetchOrders(portal: boolean): ng.IPromise<IProviaOrder[]> {\n    const url = this.BaseConfig.BASE_URL + \"/integrations/provia_orders\";\n    const params = { params: { user: this.username, password: this.password, org_id: this.org_id, portal } };\n    return this.$http.get(url, params).then((resp) => {\n      this.transformMultipleOrders(resp);\n      return this.orders;\n    });\n  }\n\n  public fetchOrderId(order_number: number, portal: boolean): ng.IPromise<IProviaOrder> {\n    const url = this.BaseConfig.BASE_URL + \"/integrations/provia_order\";\n    const params = {\n      params: { user: this.username, password: this.password, order_number: order_number, org_id: this.org_id, portal },\n    };\n    return this.$http.get(url, params).then((resp) => {\n      return this.transformSingleOrder(resp);\n    });\n  }\n\n  public transformSingleOrder(resp) {\n    const order = resp.data.orderfile.order;\n\n    if (order.sellprice && !_.isNumber(order.sellprice)) {\n      order.sellprice = parseFloat(order.sellprice.replace(/\\,/g, \"\"));\n    } else {\n      order.sellprice = 0;\n    }\n\n    if (order.sellpricelabor && !_.isNumber(order.sellpricelabor)) {\n      order.sellpricelabor = parseFloat(order.sellpricelabor.replace(/\\,/g, \"\"));\n    } else {\n      order.sellpricelabor = 0;\n    }\n\n    if (!_.isArray(order.line)) {\n      const line = order.line;\n      order.line = [];\n      order.line.push(<IProviaLineItem>line);\n    }\n    _.each(order.line, (l: any) => {\n      if (!_.isNumber(l.qty)) {\n        l.qty = parseInt(l.qty);\n      }\n\n      if (l.sellprice && !_.isNumber(l.sellprice)) {\n        l.useprice = parseFloatSafe(l.sellprice.replace(/,/g, \"\"));\n      } else if (l.listprice) {\n        l.useprice = parseFloatSafe(l.listprice.replace(/,/g, \"\"));\n      } else if (l.extcost) {\n        l.useprice = parseFloatSafe(l.extcost.replace(/,/g, \"\"));\n      } else {\n        l.useprice = 0;\n      }\n\n      if (l.options.option) {\n        if (!_.isArray(l.options.option)) {\n          const option = l.options.option;\n          l.options.option = [];\n          l.options.option.push(option);\n        }\n      }\n    });\n    return order;\n  }\n\n  private transformMultipleOrders(resp) {\n    this.orders = resp.data.orders.order;\n    if (!_.isArray(this.orders)) {\n      const orders = this.orders;\n      this.orders = [];\n      this.orders.push(<IProviaOrder>orders);\n    }\n  }\n}\n","import { IEstimateTemplate, IEstimateTemplateResponse } from \"app/src/Models/EstimateTemplate\";\nimport { IProviaApi, ProviaApi } from \"app/src/Estimator/ProviaApi\";\nimport { IFlash, FlashLevels } from \"app/src/Common/FlashService\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport * as XLSX from \"xlsx\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { TokenRecord } from \"app2/src/records/Token\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\n\nexport class ProductSelectorCtrl {\n  public showTemplates = false;\n  public showProvia = true;\n  public showProviaLogin = false;\n  public portal = true;\n  public showProviaOrders = false;\n  public showProductFileUpload = true;\n  public showBack = false;\n  public showSearch = true;\n  public chooseTemplates = false;\n  public title: string = null;\n  public search: { name: string } = { name: \"\" };\n  public provia: IProviaApi;\n  public spinnerPromise: ng.IPromise<any>;\n  public order_number: number;\n\n  public static $inject = [\n    \"$uibModalInstance\",\n    \"EstimatorService\",\n    \"BaseConfig\",\n    \"navDisplay\",\n    \"templates\",\n    \"$http\",\n    \"Flash\",\n    \"$q\",\n    \"org\",\n    \"fileQueue\",\n    \"setup\",\n    \"Pretty\",\n  ];\n  constructor(\n    public $uibModalInstance: ng.ui.bootstrap.IModalServiceInstance,\n    public EstimatorService: EstimatorService,\n    public BaseConfig: IBaseConfig,\n    public navDisplay = true,\n    public templates: IEstimateTemplateResponse,\n    public $http: ng.IHttpService,\n    public Flash: IFlash,\n    public $q: ng.IQService,\n    public org: IOrg,\n    public fileQueue: IFileQueueFactory,\n    public setup: any,\n    public Pretty: IPretty,\n  ) {\n    switch (setup.type) {\n      case \"template\":\n        this.addTemplate();\n        break;\n      case \"import\":\n        this.showSearch = false;\n        this.title = \"Import\";\n        break;\n    }\n  }\n\n  public componentDidMount() {\n    dispatch(tokenActions.AsyncActions.getToken(this.org.id, \"provia\"));\n  }\n\n  public makeTemplateSelection(template: IEstimateTemplate) {\n    this.clearSearchText();\n    this.$uibModalInstance.close({ type: \"template\", data: template });\n  }\n\n  public makeProviaSelection(portal: boolean) {\n    this.portal = portal;\n    this.title = portal ? \"ProVia\" : \"ProVia (Non-Portal)\";\n    this.showProviaLogin = true;\n    this.showProvia = false;\n    this.showProductFileUpload = false;\n    this.showSearch = false;\n    this.showTemplates = false;\n    this.showBack = true;\n    this.provia = new ProviaApi(this.$http, this.$q, this.org.id, this.BaseConfig, this.fileQueue);\n  }\n\n  public proviaLogin() {\n    this.spinnerPromise = this.provia\n      .fetchOrders(this.portal)\n      .then(() => {\n        this.showProviaOrders = true;\n        this.showProviaLogin = false;\n      })\n      .catch((resp) => {\n        this.Flash.addMessage(FlashLevels.danger, \"ProVia \" + resp.data.errors + \" Please try again.\");\n      });\n  }\n\n  public selectOrder(order: number = this.order_number) {\n    this.spinnerPromise = this.provia\n      .fetchOrderId(order, this.portal)\n      .then((order_resp) => {\n        this.$uibModalInstance.close({ type: \"provia\", data: order_resp });\n      })\n      .catch((resp) => {\n        if (resp.data) {\n          this.Flash.addMessage(FlashLevels.danger, \"ProVia \" + resp.data.errors + \" Please try again.\");\n        } else {\n          this.Flash.addMessage(FlashLevels.danger, \"Something went wrong with that order. Please try again.\");\n        }\n      });\n  }\n\n  public back() {\n    this.title = \"Import\";\n    this.showProviaLogin = false;\n    this.showProviaOrders = false;\n    this.showProvia = true;\n    this.showProductFileUpload = true;\n    this.showSearch = false;\n    this.chooseTemplates = false;\n    this.showBack = false;\n  }\n\n  public clearSearchText() {\n    this.search.name = \"\";\n  }\n\n  public addTemplate() {\n    this.clearSearchText();\n    this.title = `My Estimate ${toTitleCase(this.Pretty.name[\"template\"])}s`;\n    this.showSearch = true;\n    this.showTemplates = false;\n    this.showProvia = false;\n    this.showProductFileUpload = false;\n    this.showBack = false;\n    this.chooseTemplates = true;\n  }\n\n  public cancel() {\n    this.$uibModalInstance.dismiss(\"cancel\");\n  }\n\n  public upload(file, invalidFiles) {\n    if (!file) {\n      if (invalidFiles.length > 0) {\n        this.Flash.addMessage(\n          FlashLevels.warning,\n          \"Invalid file: \" + invalidFiles[0].name + \". Upload size limited to 30mb.\",\n        );\n      }\n      return;\n    }\n\n    const type = this.fileType(file.name);\n\n    dispatch(\n      documentActions.AsyncActions.batchCreateDocument([file], {\n        documentableType: \"job\",\n        documentableId: this.EstimatorService.job.id,\n        disableFlash: true,\n      }),\n    );\n\n    const deferred = this.$q.defer();\n    const newFile = new FileReader();\n    if (type === \"xlsx\") {\n      this.readXlsxFile(newFile, file, deferred);\n    } else {\n      this.readXmlFile(newFile, file, deferred);\n    }\n\n    this.spinnerPromise = deferred.promise;\n  }\n\n  public readXmlFile(newFile, file, deferred) {\n    const app = this;\n    newFile.onload = function (e) {\n      //noinspection TypeScriptUnresolvedVariable\n      const fileString = e.target.result;\n      const xml = atob(fileString.split(\",\")[1]);\n      app.$uibModalInstance.close({ type: \"xml\", data: xml });\n\n      deferred.resolve();\n    };\n    newFile.readAsDataURL(file);\n  }\n\n  public readXlsxFile(newFile, file, deferred) {\n    const app = this;\n    newFile.onload = function (e) {\n      //noinspection TypeScriptUnresolvedVariable\n      const fileString = e.target.result;\n      const wb: XLSX.WorkBook = XLSX.read(fileString, { type: \"binary\" });\n      if (wb.Sheets[\"OCC_EXPORT\"]) {\n        const json = XLSX.utils.sheet_to_json(wb.Sheets[\"OCC_EXPORT\"], { header: 1 });\n        app.$uibModalInstance.close({ type: \"occ_import\", data: json });\n      } else {\n        const json = XLSX.utils.sheet_to_json(wb.Sheets[\"Sheet1\"], { header: 1 });\n        app.$uibModalInstance.close({ type: \"xlsx\", data: json });\n      }\n      deferred.resolve();\n    };\n    newFile.readAsBinaryString(file);\n  }\n\n  public fileType(filename) {\n    if (filename.indexOf(\".xls\") > 0) {\n      return \"xlsx\";\n    } else {\n      return \"xml\";\n    }\n  }\n\n  public getProviaData() {\n    const proviaToken = useSelector((state) => token(state, { kind: \"provia\" })) as TokenRecord;\n    const tokenData = proviaToken?.get(\"data\")?.toJSON() || {};\n\n    return tokenData;\n  }\n}\n","//noinspection TypeScriptCheckImport\nimport { Finance } from \"financejs\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport interface ILoanCalcCtrl {\n  loanCalcForm: ng.IFormController;\n  data: { amount: number; term: number; rate: number };\n  result: number;\n\n  calculate();\n}\n\nclass LoanCalcCtrl implements ILoanCalcCtrl {\n  public loanCalcForm: ng.IFormController;\n  public finance: Finance;\n  public data;\n\n  public result = 0;\n\n  constructor() {\n    this.finance = new Finance();\n  }\n\n  public calculate() {\n    if (this.data.rate === 0) {\n      this.result = roundToDecimals(this.data.amount / this.data.term, -2);\n    } else {\n      //noinspection TypeScriptUnresolvedFunction\n      this.result = this.finance.AM(this.data.amount, this.data.rate, this.data.term, 1);\n    }\n  }\n}\n\nexport class LoanCalc implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    data: \"<\",\n  };\n  public templateUrl = \"src/Estimator/loan_calc.html\";\n  /**/\n  constructor() {\n    this.controller = LoanCalcCtrl;\n    this.controller.$inject = [];\n  }\n}\n","import { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IDiscount, Discount } from \"app/src/Models/Discount\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { List } from \"immutable\";\nimport { EstimateDiscountRecord, fromJSON } from \"app2/src/records/EstimateDiscount\";\n\nclass DiscountEditorCtrl {\n  public added: (param: { discount: IDiscount }) => void;\n  public removed: (param: { discount: IDiscount }) => void;\n  public updated: (param: { discount: IDiscount }) => void;\n  public estimateId: number;\n  public params: any = { type: \"view\" };\n  public editorParams: any;\n  public discounts: List<EstimateDiscountRecord> = List();\n  public showHeaderText: boolean;\n\n  public showing = false;\n  public estimate: IEstimate;\n  public selectedDiscount: IDiscount;\n  public showLimit = false;\n  private creating = false;\n\n  constructor(\n    private $scope: ng.IScope,\n    private EstimatorService: EstimatorService,\n    private Session: ISession,\n  ) {\n    this.add = this.add.bind(this);\n    this.remove = this.remove.bind(this);\n    this.update = this.update.bind(this);\n  }\n\n  public $onInit() {\n    this.showing = this.editorParams.showing;\n  }\n\n  public $onChanges() {\n    if (this.estimateId && (!this.estimate || this.estimate.id !== this.estimateId)) {\n      this.estimate = this.EstimatorService.loadEstimate(this.estimateId);\n      this.estimate.$promise.then(() => {\n        this.setupDiscounts();\n      });\n    }\n  }\n\n  public setupDiscounts() {\n    this.discounts = List();\n    _.each(this.estimate.discounts, (dis) => {\n      const disRec = fromJSON(dis);\n      this.discounts = this.discounts.push(disRec);\n    });\n  }\n\n  public add(discount: any) {\n    this.added({ discount: Discount.fromJSON(discount) });\n    this.setupDiscounts();\n  }\n\n  public update(discount: EstimateDiscountRecord) {\n    this.$scope.$apply(() => {\n      this.estimate.discounts = this.estimate.discounts.map((d) => {\n        if (d.uuid === discount.uuid) {\n          return Discount.fromJSON(discount.toJSON());\n        }\n        return d;\n      });\n      this.estimate.updateTotal();\n      this.setupDiscounts();\n    });\n  }\n\n  public remove(discount: EstimateDiscountRecord) {\n    if (this.removed) {\n      this.removed({ discount: Discount.fromJSON(discount.toJSON()) });\n      this.setupDiscounts();\n    }\n  }\n\n  protected _findId(): number {\n    const currentMin = _.chain(this.estimate.discounts).pluck(\"id\").min().value();\n\n    return _.min([-1, currentMin - 1]);\n  }\n}\n\nexport class DiscountEditor implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    estimateId: \"<\",\n    editorParams: \"<\",\n    showHeaderText: \"<\",\n    added: \"&\",\n    updated: \"&\",\n    removed: \"&\",\n  };\n  public templateUrl = \"src/Estimator/Discounts/discount_editor.html\";\n  /**/\n  constructor() {\n    this.controller = DiscountEditorCtrl;\n    this.controller.$inject = [\"$scope\", \"EstimatorService\", \"Session\"];\n  }\n}\n","import { IDiscount, Discount } from \"app/src/Models/Discount\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { List } from \"immutable\";\nimport { EstimateDiscountRecord, fromJSON } from \"app2/src/records/EstimateDiscount\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\n\nclass GroupDiscountEditorCtrl {\n  public added: (param: { discount: IDiscount }) => void;\n  public removed: (param: { discount: IDiscount }) => void;\n  public updated: (param: { discount: IDiscount }) => void;\n  public estimateGroup: IEstimateGroup;\n  public params: any = { type: \"view\" };\n  public editorParams: any;\n  public discounts: List<EstimateDiscountRecord> = List();\n  public showHeaderText: boolean;\n\n  public showing = false;\n  public estimate: IEstimate;\n  public selectedDiscount: IDiscount;\n  public showLimit = false;\n\n  constructor(private $scope: ng.IScope) {\n    this.add = this.add.bind(this);\n    this.remove = this.remove.bind(this);\n    this.update = this.update.bind(this);\n  }\n\n  public $onInit() {\n    this.showing = this.editorParams.showing;\n  }\n\n  public $onChanges() {\n    this.setupDiscounts();\n  }\n\n  public setupDiscounts() {\n    this.discounts = List();\n    _.each(this.estimateGroup.discounts, (dis) => {\n      const disRec = fromJSON(dis);\n      this.discounts = this.discounts.push(disRec);\n    });\n  }\n\n  public add(discount: any) {\n    this.added({ discount: Discount.fromJSON(discount) });\n    this.setupDiscounts();\n  }\n\n  public update(discount: EstimateDiscountRecord) {\n    this.$scope.$apply(() => {\n      this.estimateGroup.discounts = this.estimateGroup.discounts.map((d) => {\n        if (d.uuid === discount.uuid) {\n          return Discount.fromJSON(discount.toJSON());\n        }\n        return d;\n      });\n      this.estimateGroup.updateTotal();\n      this.setupDiscounts();\n    });\n  }\n\n  public remove(discount: EstimateDiscountRecord) {\n    if (this.removed) {\n      this.removed({ discount: Discount.fromJSON(discount.toJSON()) });\n      this.setupDiscounts();\n    }\n  }\n\n  protected _findId(): number {\n    const currentMin = _.chain(this.estimateGroup.discounts).pluck(\"id\").min().value();\n\n    return _.min([-1, currentMin - 1]);\n  }\n}\n\nexport class GroupDiscountEditor implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    estimateGroup: \"<\",\n    editorParams: \"<\",\n    showHeaderText: \"<\",\n    added: \"&\",\n    updated: \"&\",\n    removed: \"&\",\n  };\n  public templateUrl = \"src/Estimator/Discounts/discount_editor.html\";\n  /**/\n  constructor() {\n    this.controller = GroupDiscountEditorCtrl;\n    this.controller.$inject = [\"$scope\"];\n  }\n}\n","export class SortableOptions implements ng.ui.UISortableOptions<any> {\n  public wscrolltop = 0;\n  public items: string;\n  public handle = \".dragHandle\";\n  public cursor = \"grabbing\";\n  public connectWith = \".connected-list\";\n  public distance = 15;\n  public update: (event: JQueryEventObject, ui: ng.ui.UISortableUIParams<any>) => any;\n  public stop: (event: JQueryEventObject, ui: ng.ui.UISortableUIParams<any>) => any;\n\n  protected sortableFirst = false;\n\n  public helper = (event: JQueryEventObject, ui: ng.IAugmentedJQuery) => {\n    const originals = ui.find(\"td\");\n    const helper = ui.clone();\n    helper.find(\"td\").each(function (index) {\n      $(this).width(originals.eq(index).width());\n    });\n    return helper;\n  };\n\n  public start = () => {\n    // first drag after load doesn't need offset\n    if (this.sortableFirst) {\n      this.wscrolltop = $(window).scrollTop();\n    }\n    this.sortableFirst = true;\n  };\n\n  public sort = (event: JQueryEventObject, ui: ng.ui.UISortableUIParams<any>) => {};\n  public remove = (event: JQueryEventObject, ui: ng.ui.UISortableUIParams<any>) => {};\n  public receive = (event: JQueryEventObject, ui: ng.ui.UISortableUIParams<any>) => {};\n\n  public change = () => {\n    // after the first drag change, we need the offset\n    this.sortableFirst = true;\n    this.wscrolltop = $(window).scrollTop();\n  };\n}\n","import { IEstimateTemplate, IEstimateTemplateResponse } from \"app/src/Models/EstimateTemplate\";\nimport { SortableOptions } from \"../Common/SortableOptions\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\n\nexport class TemplateEditorCtrl {\n  public name: string;\n  public templateName = \"\";\n  public sortableOptions = new SortableOptions();\n\n  public static $inject = [\"$uibModalInstance\", \"templates\", \"Pretty\"];\n  constructor(\n    public $uibModalInstance: ng.ui.bootstrap.IModalServiceInstance,\n    public templates: IEstimateTemplateResponse,\n    public Pretty: IPretty,\n  ) {\n    this.templateName = toTitleCase(this.Pretty.name[\"template\"]);\n\n    this.sortableOptions.stop = () => {\n      _.each(this.templates.estimate_templates, (et: IEstimateTemplate, index: number) => {\n        if (et.sort_order !== index) {\n          et.sort_order = index;\n          et.$update();\n        }\n      });\n      this.templates.estimate_templates = _.sortBy(this.templates.estimate_templates, \"sort_order\");\n    };\n  }\n\n  public removeTemplate(template) {\n    template.$delete().then(() => {\n      this.templates.estimate_templates = _.filter(this.templates.estimate_templates, (t) => {\n        return t.id !== template.id;\n      });\n    });\n  }\n\n  public updateName(template: IEstimateTemplate) {\n    template.$update();\n  }\n\n  public editTemplate(template: IEstimateTemplate) {\n    this.$uibModalInstance.close(template);\n  }\n\n  public save() {\n    this.$uibModalInstance.close(this.name);\n  }\n\n  public cancel() {\n    this.$uibModalInstance.dismiss(\"cancel\");\n  }\n}\n","import { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IOrg, OrgAclType } from \"app/src/Models/Org\";\nimport { IImage } from \"../Models/Image\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEventingFactory } from \"../Common/EventingFactory\";\nimport { IFileQueue, IFileQueueFactory, IFileQueueInit } from \"../Common/FileQueueFactory\";\nimport * as ng from \"angular\";\nimport { ISession } from \"../Common/SessionService\";\nimport { IFlash } from \"app/src/Common/FlashService\";\nimport { EditLineItemCmd } from \"app/src/Commands/Estimator/EditLineItemCmd\";\nimport { validationMessage } from \"app/src/Estimator/ValidationService\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { cachedProduct } from \"app2/src/selectors/product.selectors\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport { cachedProductOption } from \"app2/src/selectors/productOption.selectors\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { presentModePreferencesConfig } from \"app2/src/selectors/org.selectors\";\n\nexport class EstimateLineItemComponentCtrl implements ng.IComponentController {\n  public lineItem: IEstimateLineItem;\n  public estimate: IEstimate;\n  public remove: (args: any) => null;\n  public org: IOrg;\n  public navDisplay: boolean;\n  public collapsedView: boolean;\n  public columnWidths: any[];\n  public descriptionStyle: string;\n  public detailsStyle: string;\n  public quantityStyle: string;\n  public pricingStyle: string;\n  public hiddenLineItems: boolean;\n  public fileQueue: IFileQueueFactory;\n  public fullTitles = true;\n  public showPricingInLineItemEditor = false;\n  public product: ProductRecord;\n  public estimateGroup: IEstimateGroup;\n  [s: string]: any;\n\n  constructor(\n    public ConfirmDialog: IConfirmDialog,\n    public EstimatorService: EstimatorService,\n    public EventingFactory: IEventingFactory,\n    public FileQueue: IFileQueueInit,\n    public $rootScope: ng.IScope,\n    public Session: ISession,\n    public Flash: IFlash,\n    private $timeout: ng.ITimeoutService,\n    private $scope: ng.IScope,\n  ) {\n    this.fileQueue = FileQueue.getInstance();\n  }\n\n  public $onChanges() {\n    if (this.columnWidths) {\n      this.descriptionStyle = \"col-\" + this.columnWidths[0];\n      this.detailsStyle = this.columnWidths[1] > 0 ? \"col-\" + this.columnWidths[1] : \"d-none\";\n      this.quantityStyle = this.columnWidths[2];\n      this.pricingStyle = this.columnWidths[3];\n    }\n    if (this.org) {\n      this.fullTitles = _.include(this.org.fetchAcl(OrgAclType.estimator), \"full\");\n      this.showPricingInLineItemEditor = useSelector((state) =>\n        presentModePreferencesConfig(state, {\n          path: [\"estimator\", \"show_pricing\", \"line_item_editor\"],\n        }),\n      );\n      this.EventingFactory.init({\n        category: \"Estimate\",\n        estimate: this.estimate.id,\n        job: this.estimate.job_id,\n        org: this.org.id,\n        navDisplay: !this.navDisplay,\n      });\n    }\n  }\n\n  public lineItemImage(line_item: IEstimateLineItem) {\n    if (!this.product || line_item.product_id !== this.product.id) {\n      this.product = useSelector((state) =>\n        cachedProduct(state, {\n          productId: this.lineItem.product_id,\n          activatedPriceListId: this.estimate.activated_price_list_id,\n        }),\n      );\n    }\n\n    const images = _.filter(line_item.images, (img: IImage) => {\n      return !img._destroy;\n    });\n\n    if (images.length > 0) {\n      return images[0].getUrl(\"medium\");\n    }\n\n    if (this.product && this.product.images && this.product.images.size > 0) {\n      return getUrl(this.product.images.first(), \"medium\");\n    }\n\n    return false;\n  }\n\n  public lineItemOptionImage(option: IEstimateLineItemOption) {\n    let productOption: ProductOptionRecord;\n    if (option.product_option_id) {\n      productOption = useSelector((state) =>\n        cachedProductOption(state, {\n          activatedPriceListId: this.estimate.activated_price_list_id,\n          productOptionId: option.product_option_id,\n        }),\n      );\n    }\n    if (productOption && productOption.images && productOption.images.size > 0) {\n      return getUrl(productOption.images.first(), \"medium\");\n    }\n\n    return false;\n  }\n\n  public editLineItem() {\n    this.$scope.$emit(\"estimateLineItem.edit\", { estimateLineItem: this.lineItem });\n  }\n\n  public moveLineItemGroup(group: IEstimateGroup) {\n    const lineItem = this.lineItem.clone();\n    const cmd = new EditLineItemCmd(this.lineItem, lineItem, this.estimate.existingGroups(), group);\n    cmd.execute();\n    lineItem.calculate(this.estimate);\n  }\n\n  public saveLineItem(state) {\n    if (state.quantity === 0) {\n      this.ConfirmDialog.confirm(\"Are you sure you want to add a line item with a quantity of 0?\", {}).then(() => {\n        this.saveConfirmed(state);\n      });\n    } else {\n      this.saveConfirmed(state);\n    }\n  }\n\n  public saveConfirmed(state) {\n    this.lineItem.editing = false;\n    this.lineItem.newly_added = false;\n    state.newly_added = false;\n    const temp_queue = this.fileQueue.temp_queue;\n    this.$scope.$emit(\"estimateLineItem.edited\", {\n      newEstimateLineItem: state,\n      oldEstimateLineItem: this.lineItem,\n      estimateGroup: this.lineItem.estimateGroup,\n      temp_queue: temp_queue,\n    });\n    this.fileQueue.clearTempQueue();\n  }\n\n  public cancelEdit() {\n    this.lineItem.editing = false;\n    this.EventingFactory.trackEvent(\"cancel line item edit\", { category: \"EstimateLineItemComponent\" });\n    if (this.lineItem.newly_added) {\n      this.remove({ lineItem: this.lineItem });\n    }\n    this.$timeout(() => {\n      this.$scope.$digest();\n    });\n  }\n\n  public removeLineItem() {\n    this.ConfirmDialog.confirm(\"Are you sure you want to delete this line item?\", {}).then(() => {\n      this.lineItem.editing = false;\n      this.remove({ lineItem: this.lineItem });\n    });\n  }\n\n  public addOpening(product) {\n    this.$scope.$emit(\"estimateLineItem.add_opening\", { product: product, estimateGroup: this.lineItem.estimateGroup });\n    this.cancelEdit();\n  }\n\n  public importSelected() {\n    this.$scope.$emit(\"estimateLineItem.import_selected\", { estimateGroup: this.lineItem.estimateGroup });\n    this.cancelEdit();\n  }\n\n  public feneTechOrderSelected(data: any) {\n    this.$scope.$emit(\"estimateLineItem.fenetech_order\", { estimateGroup: this.lineItem.estimateGroup, data });\n    this.cancelEdit();\n  }\n\n  public onFileDestroy(file) {\n    return this.ConfirmDialog.confirm(\"Are you sure you want to delete the file?\", {}).then(() => {\n      file._destroy = true;\n      this.EventingFactory.trackEvent(\"destroy file\", {\n        file: file.id,\n        category: \"EstimateLineItemComponent\",\n      });\n    });\n  }\n\n  public onFileChange(value, file) {\n    file.display = value;\n    this.EventingFactory.trackEvent(\"file display value changed\", {\n      file: file.id,\n      display: value,\n      category: \"EstimateLineItemComponent\",\n    });\n  }\n\n  public validation() {\n    validationMessage(this.lineItem.validation_results, this.ConfirmDialog);\n  }\n}\n\nexport class EstimateLineItemComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/Estimator/estimate_line_item_component.html\";\n  public bindings: any = {\n    lineItem: \"<\",\n    estimate: \"<\",\n    navDisplay: \"<\",\n    remove: \"&\",\n    groupType: \"<\",\n    collapsedView: \"<\",\n    columnWidths: \"<\",\n    org: \"<\",\n    hiddenLineItems: \"<\",\n    estimateGroup: \"<\",\n  };\n  public replace = true;\n\n  constructor() {\n    this.controller = EstimateLineItemComponentCtrl;\n    this.controller.$inject = [\n      \"ConfirmDialog\",\n      \"EstimatorService\",\n      \"EventingFactory\",\n      \"FileQueueFactory\",\n      \"$rootScope\",\n      \"Session\",\n      \"Flash\",\n      \"$timeout\",\n      \"$scope\",\n    ];\n  }\n}\n\nexport interface IEstimateLineItemEvent {\n  estimateLineItem: IEstimateLineItem;\n}\n\nexport interface IEstimateLineItemGroupEvent {\n  newEstimateLineItem: IEstimateLineItem;\n  oldEstimateLineItem: IEstimateLineItem;\n  estimateGroup: IEstimateGroup;\n  temp_queue: IFileQueue;\n}\n\nexport interface IEstimateLineItemOpeningEvent {\n  product: ProductRecord;\n  estimateGroup: IEstimateGroup;\n}\n","import { ICommand } from \"app/src/Commands/Command\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\n\nexport class ReorderLineItems implements ICommand {\n  public originalOrder: IEstimateLineItem[];\n  public updatedOrder: IEstimateLineItem[];\n\n  constructor(lineItems: IEstimateLineItem[]) {\n    this.originalOrder = lineItems.slice(0);\n  }\n\n  public execute(lineItems: IEstimateLineItem[]): boolean {\n    for (const index in lineItems) {\n      lineItems[index].sort_order = parseInt(index);\n    }\n\n    this.updatedOrder = lineItems.slice(0);\n    return true;\n  }\n}\n","import { ICommand } from \"app/src/Commands/Command\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\n\nexport class RemoveEstimateLineItemCmd implements ICommand {\n  public removedLineItem: IEstimateLineItem;\n  public indexOf: number;\n\n  constructor(\n    public estimate: IEstimate,\n    public lineItem: IEstimateLineItem,\n  ) {}\n\n  public execute(): boolean {\n    if (this.lineItem.id < 0) {\n      const group: IEstimateGroup = _.find<IEstimateGroup>(this.estimate.existingGroups(), (g) => {\n        return g.id === this.lineItem.estimateGroup.id;\n      });\n\n      this.indexOf = _.findIndex(group.line_items, (li: IEstimateLineItem) => {\n        return li.id === this.lineItem.id;\n      });\n\n      this.removedLineItem = group.line_items.splice(this.indexOf, 1)[0];\n    } else {\n      this.removedLineItem = this.lineItem;\n      this.lineItem._destroy = true;\n    }\n\n    this.estimate.updateTotal();\n    return true;\n  }\n}\n","import { ICommand } from \"app/src/Commands/Command\";\nimport { IEstimateLineItem } from \"../../Models/EstimateLineItem\";\nimport { IEstimateGroup } from \"../../Models/EstimateGroup\";\n\nexport class EditLineItemGroupCmd implements ICommand {\n  constructor(\n    public lineItem: IEstimateLineItem,\n    public destGroup: IEstimateGroup,\n  ) {}\n\n  public execute(): boolean {\n    this.lineItem.estimate_group_id = this.destGroup.id;\n    this.lineItem.estimateGroup = this.destGroup;\n    return true;\n  }\n}\n","import { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { IEstimate, ISalesTaxable } from \"app/src/Models/Estimate\";\nimport { IEventingFactory } from \"app/src/Common/EventingFactory\";\nimport { SortableOptions } from \"app/src/Common/SortableOptions\";\nimport { ReorderLineItems } from \"app/src/Commands/Estimator/ReorderLineItems\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { RemoveEstimateLineItemCmd } from \"app/src/Commands/Estimator/RemoveEstimateLineItemCmd\";\nimport { EditLineItemGroupCmd } from \"app/src/Commands/Estimator/EditLineItemGroupCmd\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { EstimatorTourService } from \"app/src/Common/Tours/EstimatorTourService\";\nimport { EstimatorService } from \"./EstimatorService\";\nimport { PaymentTermItemRecord, PaymentTermTemplateRecord } from \"app2/src/records/PaymentTermTemplate\";\nimport { IDiscount } from \"app/src/Models/Discount\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { presentModePreferencesConfig } from \"app2/src/selectors/org.selectors\";\n\nclass EstimateGroupComponentCtrl implements ng.IComponentController {\n  public showLoanCalc = false;\n  public detailsStyle: string;\n  public pricingStyle: string;\n  public quantityStyle: string;\n  public descriptionStyle: string;\n  public editing = false;\n  public estimateGroup: IEstimateGroup;\n  public estimate: IEstimate;\n  public onRemove: (args: any) => void;\n  public editable: boolean;\n  public org: IOrg;\n  public navDisplay: boolean;\n  public eventingFactory: IEventingFactory;\n  public sortableOptions = new SortableOptions();\n  public collapsedView: boolean;\n  public columnWidths: any[];\n  public tourEditNameAction: boolean;\n  public prevTourEditNameAction: boolean;\n  public $index: any;\n  public hiddenLineItems: boolean;\n  public focusHere = 0;\n  public showGroupTitles = false;\n  public showDiscountAndPaymentEstimator = false;\n  public popups: any = {\n    estimated_start_opened: false,\n    estimated_end_opened: false,\n  };\n  public dateOptions: ng.ui.bootstrap.IDatepickerConfig = {\n    formatYear: \"yy\",\n    minDate: new Date(),\n    startingDay: 1,\n  };\n  public endDateOptions: ng.ui.bootstrap.IDatepickerConfig = {\n    formatYear: \"yy\",\n    minDate: \"ctrl.estimateGroup.estimated_start\",\n    startingDay: 1,\n  };\n  public showTotalSection = false;\n\n  private _reorderCommand: ReorderLineItems;\n\n  constructor(\n    public $uibModal: ng.ui.bootstrap.IModalService,\n    public $scope: ng.IScope,\n    public EstimatorTourService: EstimatorTourService,\n    public EstimatorService: EstimatorService,\n    public $timeout: ng.ITimeoutService,\n  ) {\n    this.sortableOptions.receive = (event: JQueryEventObject, ui: ng.ui.UISortableUIParams<any>) => {\n      const cmd = new EditLineItemGroupCmd(ui.item.sortable.model, this.estimateGroup);\n      cmd.execute();\n      ui.item.sortable.model.calculate(this.estimate);\n    };\n    this.sortableOptions.stop = (event: JQueryEventObject, ui: ng.ui.UISortableUIParams<any>) => {\n      if (!this._reorderCommand) {\n        // if a stop happens and nothing was changed this is called still\n        return;\n      }\n      const group: IEstimateGroup = _.find(this.estimate.existingGroups(), (g) => {\n        return g.id === ui.item.sortable.model.estimateGroup.id;\n      });\n\n      this._reorderCommand.execute(group.line_items);\n      this._reorderCommand = null;\n      group.line_items = _.sortBy(group.line_items, \"sort_order\");\n\n      this.eventingFactory.trackEvent(\"line items reordered\", {});\n    };\n    this.sortableOptions.connectWith = \".group-connect\";\n    this.sortableOptions.update = (event: JQueryEventObject, ui: ng.ui.UISortableUIParams<any>) => {\n      const group: IEstimateGroup = _.find(this.estimate.existingGroups(), (g) => {\n        return g.id === ui.item.sortable.model.estimateGroup.id;\n      });\n      this._reorderCommand = new ReorderLineItems(group.line_items);\n    };\n    this.sortableOptions.helper = (event: JQueryEventObject, ui: ng.IAugmentedJQuery) => {\n      return ui.clone();\n    };\n    this.sortableOptions.items = \"estimate-line-item\";\n\n    $scope.$on(\"estimateGroup.edit\", (event: ng.IAngularEvent, args: any) => {\n      if (args.estimateGroup.id === this.estimateGroup.id) {\n        this.editing = true;\n      }\n    });\n\n    this.prevTourEditNameAction = this.tourEditNameAction;\n    $scope.$watch(\"$ctrl.tourEditNameAction\", () => {\n      if (this.tourEditNameAction === true && this.prevTourEditNameAction === false) {\n        this.startGroupEdit();\n      } else if (this.tourEditNameAction === false && this.prevTourEditNameAction === true) {\n        this.saveGroupEdit();\n      }\n      this.prevTourEditNameAction = this.tourEditNameAction;\n    });\n\n    this.markupUpdated = this.markupUpdated.bind(this);\n    this.addPaymentTermTemplate = this.addPaymentTermTemplate.bind(this);\n    this.addPaymentTermItem = this.addPaymentTermItem.bind(this);\n    this.removePaymentTermItem = this.removePaymentTermItem.bind(this);\n    this.updatePaymentTermItem = this.updatePaymentTermItem.bind(this);\n  }\n\n  public $onChanges() {\n    if (this.org) {\n      this.setDiscountAndPaymentEstimator();\n      this.setTotalSection();\n      this.updateMinDate();\n      let descriptionColumns = 3;\n      let detailsColumns = 4;\n      this.hiddenLineItems = this.estimate.hidden_line_items();\n\n      if (!this.org.showDetailedMeasurements(!this.navDisplay)) {\n        descriptionColumns += 2;\n      }\n\n      if (!this.org.showDetailedUnitPrice(!this.navDisplay, this.getGroupType(), this.hiddenLineItems)) {\n        descriptionColumns += 1;\n      }\n\n      if (!this.org.showDetailedPricing(!this.navDisplay, this.getGroupType(), this.hiddenLineItems)) {\n        descriptionColumns += 1;\n      }\n\n      descriptionColumns = Math.min(5, descriptionColumns);\n      detailsColumns = detailsColumns - (descriptionColumns - 3);\n\n      if (this.collapsedView) {\n        // 2 for the existing product column + 2 to replace the img\n        descriptionColumns += 4;\n      }\n\n      this.columnWidths = [descriptionColumns, detailsColumns];\n      this.descriptionStyle = \"col-\" + this.columnWidths[0];\n      this.detailsStyle = this.columnWidths[1] > 0 ? \"col-\" + this.columnWidths[1] : \"d-none\";\n\n      if (\n        this.org.showDetailedMeasurements(!this.navDisplay) &&\n        (this.org.showDetailedUnitPrice(!this.navDisplay, this.getGroupType(), this.hiddenLineItems) ||\n          this.org.showDetailedPricing(!this.navDisplay, this.getGroupType(), this.hiddenLineItems))\n      ) {\n        this.quantityStyle = \"col-6\";\n      } else if (\n        this.org.showDetailedMeasurements(!this.navDisplay) &&\n        !(\n          this.org.showDetailedUnitPrice(!this.navDisplay, this.getGroupType(), this.hiddenLineItems) ||\n          this.org.showDetailedPricing(!this.navDisplay, this.getGroupType(), this.hiddenLineItems)\n        )\n      ) {\n        this.quantityStyle = \"col-12\";\n      } else if (!this.org.showDetailedMeasurements(!this.navDisplay)) {\n        this.quantityStyle = \"d-none\";\n      }\n\n      if (\n        (this.org.showDetailedUnitPrice(!this.navDisplay, this.getGroupType(), this.hiddenLineItems) ||\n          this.org.showDetailedPricing(!this.navDisplay, this.getGroupType(), this.hiddenLineItems)) &&\n        this.org.showDetailedMeasurements(!this.navDisplay)\n      ) {\n        this.pricingStyle = \"col-6\";\n      } else if (\n        (this.org.showDetailedUnitPrice(!this.navDisplay, this.getGroupType(), this.hiddenLineItems) ||\n          this.org.showDetailedPricing(!this.navDisplay, this.getGroupType(), this.hiddenLineItems)) &&\n        !this.org.showDetailedMeasurements(!this.navDisplay)\n      ) {\n        this.pricingStyle = \"col-12\";\n      } else if (\n        !this.org.showDetailedUnitPrice(!this.navDisplay, this.getGroupType(), this.hiddenLineItems) &&\n        !this.org.showDetailedPricing(!this.navDisplay, this.getGroupType(), this.hiddenLineItems)\n      ) {\n        this.pricingStyle = \"d-none\";\n      }\n\n      this.columnWidths.push(this.quantityStyle);\n      this.columnWidths.push(this.pricingStyle);\n      this.setDiscountAndPaymentEstimator();\n    }\n  }\n\n  public remove() {\n    this.eventingFactory.trackEvent(\"estimate group deleted\", {\n      estimate_group_name: this.estimateGroup.name,\n      estimate_group_id: this.estimateGroup.id,\n    });\n    if (this.estimateGroup.id > 0) {\n      this.estimateGroup._destroy = true;\n    } else {\n      this.onRemove({ group: this.estimateGroup });\n    }\n  }\n\n  public getGroupType() {\n    if (!this.estimateGroup) {\n      return;\n    }\n\n    return this.estimateGroup.included ? \"main\" : \"option\";\n  }\n\n  public groupTotal(): number {\n    if (this.estimateGroup) {\n      return this.estimateGroup.updateTotal();\n    }\n\n    return 0;\n  }\n\n  public removeLineItem(lineItem: IEstimateLineItem) {\n    const cmd = new RemoveEstimateLineItemCmd(this.estimate, lineItem);\n    cmd.execute();\n\n    this.eventingFactory.trackEvent(\"remove line item\", { category: \"EstimateLineItemComponent\" });\n  }\n\n  public collapseChanged() {\n    this.eventingFactory.trackEvent(\"group collapse view toggled\", { collapsedView: this.collapsedView });\n    this.$scope.$emit(\"estimateLineItem.collapse\", { collapsedView: this.collapsedView });\n  }\n\n  public startGroupEdit() {\n    this.editing = !this.editing;\n    if (this.tourEditNameAction === false) {\n      this.prevTourEditNameAction = true;\n      this.tourEditNameAction = true;\n      this.EstimatorTourService.next();\n    }\n    this.eventingFactory.trackEvent(\"editing group\", {\n      group_id: this.estimateGroup.id,\n      group_name: this.estimateGroup.name,\n      group_included: this.estimateGroup.included,\n    });\n    this.focusHere += 1;\n  }\n\n  public saveGroupEdit() {\n    this.editing = !this.editing;\n    this.estimate.orderGroups();\n    this.eventingFactory.trackEvent(\"saving group\", {\n      group_id: this.estimateGroup.id,\n      group_name: this.estimateGroup.name,\n      group_included: this.estimateGroup.included,\n    });\n  }\n\n  public hideTitles() {\n    const lineItemEditing = this.EstimatorService.lineItemEditorOpen();\n    return (\n      lineItemEditing &&\n      lineItemEditing.editing &&\n      lineItemEditing.sort_order === 0 &&\n      this.estimateGroup.id === lineItemEditing.estimateGroup.id\n    );\n  }\n\n  public salesTaxUpdated(salesTaxable: ISalesTaxable): void {\n    this.estimateGroup.updateSalesTax(salesTaxable);\n  }\n\n  public markupUpdated(margins) {\n    this.estimateGroup.product_markup = margins.product_markup;\n    this.estimateGroup.labor_markup = margins.labor_markup;\n    this.estimateGroup.existingLineItems().forEach((lineItem) => {\n      lineItem.calculate(this.estimate);\n      lineItem.options.forEach((opt) => {\n        opt.calculate(this.estimate);\n      });\n    });\n    this.$timeout(() => {\n      this.$scope.$digest();\n    });\n  }\n\n  public discountAdded(discount: IDiscount): void {\n    this.eventingFactory.trackEvent(\"group discount added\", {\n      discount: JSON.parse(angular.toJson(discount)),\n    });\n    this.estimateGroup.discounts = this.estimateGroup.discounts.concat([discount]);\n    this.groupTotal();\n  }\n\n  public toggleIncluded() {\n    if (!this.estimateGroup.included) {\n      this.estimateGroup.line_items.forEach((lineItem) => {\n        lineItem.validated = true;\n        lineItem.validation_results = [];\n      });\n    }\n  }\n\n  public discountUpdated(discount: IDiscount): void {\n    this.eventingFactory.trackEvent(\"group discount updated\", {\n      discount: JSON.parse(angular.toJson(discount)),\n    });\n    _.find(this.estimateGroup.discounts, (d: IDiscount, idx: number) => {\n      if (d.uuid === discount.uuid) {\n        this.estimateGroup.discounts[idx] = discount;\n        return true;\n      }\n\n      return false;\n    });\n    this.groupTotal();\n  }\n\n  public discountRemoved(discount: IDiscount): void {\n    this.eventingFactory.trackEvent(\"group discount removed\", {\n      discount: JSON.parse(angular.toJson(discount)),\n    });\n    this.estimateGroup.discounts = _.filter(this.estimateGroup.discounts, (d: IDiscount) => {\n      return d.uuid !== discount.uuid;\n    });\n    this.groupTotal();\n  }\n\n  public setDiscountAndPaymentEstimator() {\n    this.showDiscountAndPaymentEstimator = useSelector((state) =>\n      presentModePreferencesConfig(state, {\n        path: [\"estimator\", \"show_pricing\", \"discount_and_payment_estimator\"],\n      }),\n    );\n  }\n\n  public openDate(value): void {\n    this.popups[value] = !this.popups[value];\n  }\n\n  public updateMinDate(): void {\n    if (this.estimateGroup.estimated_start) {\n      this.endDateOptions.minDate = this.estimateGroup.estimated_start;\n\n      if (this.estimateGroup.estimated_start > this.estimateGroup.estimated_end || !this.estimateGroup.estimated_end) {\n        this.estimateGroup.estimated_end = this.estimateGroup.estimated_start;\n      }\n    } else {\n      this.endDateOptions.minDate = new Date();\n    }\n  }\n\n  public setTotalSection() {\n    this.showTotalSection = useSelector((state) =>\n      presentModePreferencesConfig(state, {\n        path: [\"estimator\", \"show_pricing\", \"total_section\"],\n      }),\n    );\n  }\n\n  public addPaymentTermTemplate(template: PaymentTermTemplateRecord): void {\n    this.eventingFactory.trackEvent(\"group payment term template added\", {\n      payment_term_template: template.id,\n    });\n\n    this.estimateGroup.payment_terms = this.estimateGroup.payment_terms.merge({\n      id: template.id,\n      name: template.name,\n      description: template.description,\n      payment_term_items: template.breakdown.items,\n    });\n    this.groupTotal();\n  }\n\n  public addPaymentTermItem(item: PaymentTermItemRecord): void {\n    this.eventingFactory.trackEvent(\"group payment term added\", {\n      payment_term: JSON.parse(angular.toJson(item)),\n    });\n    this.estimateGroup.payment_terms = this.estimateGroup.payment_terms.update(\"payment_term_items\", (ptis) => {\n      return ptis.push(item);\n    });\n\n    this.groupTotal();\n  }\n\n  public removePaymentTermItem(item: PaymentTermItemRecord): void {\n    this.eventingFactory.trackEvent(\"group payment term removed\", {\n      payment_term: JSON.parse(angular.toJson(item)),\n    });\n\n    this.estimateGroup.payment_terms = this.estimateGroup.payment_terms.update(\"payment_term_items\", (ptis) => {\n      return ptis.filter((pti) => pti.uuid !== item.uuid);\n    });\n\n    this.groupTotal();\n  }\n\n  public updatePaymentTermItem(item: PaymentTermItemRecord): void {\n    this.eventingFactory.trackEvent(\"group payment term updated\", {\n      payment_term: JSON.parse(angular.toJson(item)),\n    });\n\n    const index: number = this.estimateGroup.payment_terms.payment_term_items.findIndex(\n      (pti) => pti.uuid === item.uuid,\n    );\n    this.estimateGroup.payment_terms = this.estimateGroup.payment_terms.setIn([\"payment_term_items\", index], item);\n\n    this.groupTotal();\n  }\n}\n\nexport class EstimateGroupComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/Estimator/estimate_group_component.html\";\n  public bindings: any = {\n    estimateGroup: \"<\",\n    estimate: \"<\",\n    org: \"<\",\n    job: \"<\",\n    editable: \"<\",\n    eventingFactory: \"<\",\n    navDisplay: \"<\",\n    collapsedView: \"<\",\n    onRemove: \"&\",\n    addProduct: \"&\",\n    tourEditNameAction: \"<\",\n    $index: \"<\",\n  };\n\n  constructor() {\n    this.controller = EstimateGroupComponentCtrl;\n    this.controller.$inject = [\"$uibModal\", \"$scope\", \"EstimatorTourService\", \"EstimatorService\", \"$timeout\"];\n  }\n}\n","import * as ng from \"angular\";\nimport { IDefaultOption, IEstimate } from \"app/src/Models/Estimate\";\nimport { IOpening, IOpeningMetadata, Opening } from \"app/src/Models/Opening\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { AddEstimateLineItemCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemCmd\";\nimport { IEventingFactory } from \"app/src/Common/EventingFactory\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IOpeningEstimation } from \"app/src/Models/OpeningEstimation\";\nimport { RemoveEstimateLineItemCmd } from \"app/src/Commands/Estimator/RemoveEstimateLineItemCmd\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport { IMeasurement, IMeasurementResource } from \"app/src/Models/Measurement\";\nimport { AddEstimateLineItemOptionCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemOptionCmd\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport { IAnnotation } from \"../Models/Annotation\";\nimport { FlashLevels, IFlash } from \"app/src/Common/FlashService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { ProductRecord, findProductBracket } from \"app2/src/records/Product\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { cachedProduct, cachedProducts, cachedOpeningParentProducts } from \"app2/src/selectors/product.selectors\";\nimport { calculatePrice, ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { optionSelected, ProductOptionGroupRecord } from \"app2/src/records/ProductOptionGroup\";\nimport { cachedProductOptionGroup, cachedProductOptionGroups } from \"app2/src/selectors/productOptionGroup.selectors\";\nimport { cachedProductOptions } from \"app2/src/selectors/productOption.selectors\";\nimport { List } from \"immutable\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { presentModePreferencesConfig } from \"app2/src/selectors/org.selectors\";\n\nexport interface IOpeningGroup {\n  product: ProductRecord;\n  openings: IOpening[];\n  quantity: number;\n}\n\nexport class OpeningsWizard {\n  public editing = false;\n  public editingOpenings = false;\n  public editingEstimateLineItemOpenings = false;\n  public spinnerPromise: ng.IPromise<any>;\n\n  public activeOptionGroupTab = 0;\n  public measurement: IMeasurement;\n  public addingOpenings = false;\n  public addOpeningQuantity = 1;\n  public selectedOpening: IOpeningMetadata;\n  public activeStep: number;\n  public openings: IOpening[];\n  public openingFilter: any;\n  public filters: any[];\n  public selectedOpenings: IOpening[] = [];\n  public selectedAnnotations: IAnnotation[] = [];\n  public groupedOpenings: any;\n  public siblings: IOpeningGroup[];\n  public manualEstimation = false;\n  public switch_products: ProductRecord[] = [];\n  public show_switch = false;\n  public switch_search: ProductRecord;\n  public focusHere = 0;\n  public addingGroup: IOpeningGroup;\n  public updatingProduct = false;\n  public showQuantity = false;\n  public showMarkupable = false;\n  public markupableBool = true;\n  public showPricingInLineItemEditor = false;\n\n  protected measurementIncludes: string[] = [\"elevations\"];\n\n  private _originalState: string;\n\n  public static $inject = [\n    \"$timeout\",\n    \"$uibModalInstance\",\n    \"EstimatorService\",\n    \"eventingFactory\",\n    \"org\",\n    \"estimate\",\n    \"parentProduct\",\n    \"parentChildren\",\n    \"group\",\n    \"estimateLineItem\",\n    \"groups\",\n    \"ConfirmDialog\",\n    \"Flash\",\n    \"Measurement\",\n    \"Session\",\n    \"$anchorScroll\",\n  ];\n  constructor(\n    public $timeout: ng.ITimeoutService,\n    public $uibModalInstance: ng.ui.bootstrap.IModalInstanceService,\n    public EstimatorService: EstimatorService,\n    public eventingFactory: IEventingFactory,\n    public org: IOrg,\n    public estimate: IEstimate,\n    public parentProduct: ProductRecord,\n    public parentChildren: List<ProductRecord>,\n    public group: IEstimateGroup,\n    public estimateLineItem: IEstimateLineItem,\n    public groups: IEstimateGroup[],\n    public ConfirmDialog: IConfirmDialog,\n    public Flash: IFlash,\n    public Measurement: IMeasurementResource,\n    private Session: ISession,\n    protected $anchorScroll: ng.IAnchorScrollService,\n  ) {\n    this.measurement = this.Measurement.get({\n      id: EstimatorService.measurement.id,\n      \"include[]\": this.measurementIncludes,\n    });\n    this.spinnerPromise = this.measurement.$promise.then(() => {\n      this._setupOpenings();\n      this.groupOpenings();\n    });\n\n    this.showPricingInLineItemEditor = useSelector((state) =>\n      presentModePreferencesConfig(state, {\n        path: [\"estimator\", \"show_pricing\", \"line_item_editor\"],\n      }),\n    );\n\n    if (estimateLineItem) {\n      this.markupableBool = this.estimateLineItem.markupable !== \"no\";\n      this.showMarkupable = Acl.can(\"update_markup\", \"estimate\");\n      const product = useSelector((state) =>\n        cachedProduct(state, {\n          activatedPriceListId: estimate.activated_price_list_id,\n          productId: estimateLineItem.product_id,\n        }),\n      );\n      this.addingGroup = <IOpeningGroup>{\n        product: product,\n        openings: _.map(this.estimateLineItem.openingEstimations(), (oe: IOpeningEstimation) => oe.openable),\n        quantity: this.estimateLineItem.quantity,\n      };\n      this.selectAnnotations();\n\n      const quantity_compare = this.estimateLineItem.quantity !== this.estimateLineItem.openingEstimations().length;\n      this.manualEstimation = quantity_compare || this.estimateLineItem.quantity === 0;\n      this.editing = true;\n      this.gotoStep(2);\n    }\n\n    Session.can(\"update_option_quantity\", \"estimate\").then((value) => {\n      if (value) {\n        this.showQuantity = true;\n      }\n    });\n  }\n\n  public filterOpenings = (opening: IOpening) => {\n    if (this.estimateLineItem) {\n      const bracket: ProductRecord = findProductBracket(this.parentProduct, this.parentChildren, opening);\n\n      if (!bracket) {\n        return false;\n      }\n      if (this.parentProduct.bracket_type === \"per_sqft\") {\n        if (\n          bracket.id !== this.estimateLineItem.product_id ||\n          this.estimateLineItem.openingEstimations()[0].openable.area !== opening.area\n        ) {\n          return false;\n        }\n      } else if (this.parentProduct.bracket_type === \"per_ui\") {\n        if (\n          bracket.id !== this.estimateLineItem.product_id ||\n          this.estimateLineItem.openingEstimations()[0].openable.ui !== opening.ui\n        ) {\n          return false;\n        }\n      } else if (bracket.id !== this.estimateLineItem.product_id) {\n        return false;\n      }\n    }\n\n    if (!this.openingFilter) {\n      return true;\n    }\n\n    switch (this.openingFilter.type) {\n      case \"location\":\n        return opening.location === this.openingFilter.value;\n      case \"level\":\n        return opening.level === this.openingFilter.value;\n      case \"name\":\n        return opening.name === this.openingFilter.value;\n    }\n  };\n\n  public gotoStep(idx: number) {\n    this.$timeout(() => {\n      this.activeOptionGroupTab = 0;\n    });\n    this.activeStep = idx;\n    if (this.activeStep === 2) {\n      if (this.manualEstimation) {\n        this.switch_products = useSelector((state) =>\n          cachedOpeningParentProducts(state, {\n            activatedPriceListId: this.estimate.activated_price_list_id,\n            openings: [this.manualEstimationOpening()],\n          }),\n        ).toArray();\n      } else {\n        this.switch_products = useSelector((state) =>\n          cachedOpeningParentProducts(state, {\n            activatedPriceListId: this.estimate.activated_price_list_id,\n            openings: this.addingGroup.openings,\n          }),\n        ).toArray();\n      }\n    }\n  }\n\n  public select(opening: IOpening) {\n    this.eventingFactory.trackEvent(\"select opening\", {\n      category: \"Openings LineItemEditor\",\n      opening_id: opening.id,\n      selected_quantity: this.addingGroup ? this.addingGroup.openings.length : this.selectedOpenings.length,\n      parent_id: this.parentProduct.id,\n    });\n\n    if (this.addingGroup) {\n      this.addingGroup.openings.push(opening);\n    } else {\n      this.selectedOpenings.push(opening);\n      this.groupOpenings();\n    }\n  }\n\n  public selectAll() {\n    this.eventingFactory.trackEvent(\"select all opening\", {\n      category: \"Openings LineItemEditor\",\n      opening_filter: this.openingFilter,\n      estimate_line_item_id: this.estimateLineItem ? this.estimateLineItem.id : \"\",\n      selected_quantity: this.addingGroup ? this.addingGroup.openings.length : this.selectedOpenings.length,\n      parent_id: this.parentProduct.id,\n    });\n\n    if (this.addingGroup) {\n      _.each(this.openings, (o: IOpening) => {\n        if (this.filterOpenings(o) && !this.added(o)) {\n          if (!_.any(this.addingGroup.openings, (m) => m.id === o.id && m.kind === o.kind)) {\n            this.addingGroup.openings.push(o);\n          }\n        }\n      });\n    } else {\n      _.each(this.openings, (o: IOpening) => {\n        if (this.filterOpenings(o) && !this.added(o)) {\n          if (!_.any(this.selectedOpenings, (m) => m.id === o.id && m.kind === o.kind)) {\n            this.selectedOpenings.push(o);\n          }\n        }\n      });\n      this.groupOpenings();\n    }\n  }\n\n  public unselectAll() {\n    this.eventingFactory.trackEvent(\"unselect all opening\", {\n      category: \"Openings LineItemEditor\",\n      opening_filter: this.openingFilter,\n      estimate_line_item_id: this.estimateLineItem ? this.estimateLineItem.id : \"\",\n      selected_quantity: this.addingGroup ? this.addingGroup.openings.length : this.selectedOpenings.length,\n      parent_id: this.parentProduct.id,\n    });\n\n    if (this.addingGroup) {\n      _.each(this.openings, (o: IOpening) => {\n        if (this.filterOpenings(o)) {\n          this.addingGroup.openings = _.select(this.addingGroup.openings, (match: IOpening) => {\n            return o.id !== match.id || o.kind !== match.kind;\n          });\n        }\n      });\n    } else {\n      _.each(this.openings, (o: IOpening) => {\n        if (this.filterOpenings(o)) {\n          this.selectedOpenings = _.select(this.selectedOpenings, (match: IOpening) => {\n            return o.id !== match.id || o.kind !== match.kind;\n          });\n        }\n      });\n      this.groupOpenings();\n    }\n  }\n\n  public allSelected() {\n    let collection;\n    if (this.addingGroup) {\n      collection = this.addingGroup.openings;\n    } else {\n      collection = this.selectedOpenings;\n    }\n\n    return _.chain(this.openings)\n      .select((o) => this.filterOpenings(o))\n      .reject(_.bind(this.added, this))\n      .all((o: IOpening) => _.any(collection, (m: IOpening) => o.id === m.id && o.kind === m.kind))\n      .value();\n  }\n\n  public unselect(opening: IOpening) {\n    this.eventingFactory.trackEvent(\"unselect opening\", {\n      category: \"Openings LineItemEditor\",\n      opening_id: opening.id,\n      selected_quantity: this.addingGroup ? this.addingGroup.openings.length : this.selectedOpenings.length,\n      parent_id: this.parentProduct.id,\n    });\n\n    if (this.addingGroup) {\n      this.addingGroup.openings = _.select(this.addingGroup.openings, (o: IOpening) => {\n        return o.id !== opening.id;\n      });\n    } else {\n      this.selectedOpenings = _.select(this.selectedOpenings, (o: IOpening) => {\n        return o.id !== opening.id;\n      });\n      this.groupOpenings();\n    }\n  }\n\n  public selected(opening: IOpening) {\n    if (this.addingGroup) {\n      return _.any(this.addingGroup.openings, (o: IOpening) => o.id === opening.id && o.kind === opening.kind);\n    }\n\n    return _.any(this.selectedOpenings, (o: IOpening) => o.id === opening.id && o.kind === opening.kind);\n  }\n\n  public added(opening: IOpening) {\n    return _.any(this.group.existingLineItems(), (eli: IEstimateLineItem) => {\n      const match = _.any(eli.openingEstimations(), (oe: IOpeningEstimation) => {\n        return opening.id === oe.openable_id && opening.kind === oe.openable_type;\n      });\n\n      if (this.estimateLineItem) {\n        return match && this.estimateLineItem.id !== eli.id;\n      }\n\n      return match;\n    });\n  }\n\n  public selectOption(optionGroup: ProductOptionGroupRecord, option: ProductOptionRecord, quantity: number) {\n    if (optionGroup.selection_mode === \"single\") {\n      const elio: IEstimateLineItemOption = _.find(\n        this.estimateLineItem.existingOptions(),\n        (e: IEstimateLineItemOption) => {\n          return e.product_option_group_id === optionGroup.id;\n        },\n      );\n\n      if (elio) {\n        this.unselectOption(elio.product_option_id, elio.product_option_uuid);\n\n        this.eventingFactory.trackEvent(\"product option changed\", {\n          category: \"Openings LineItemEditor\",\n          product_option: option.id,\n        });\n      } else {\n        this.eventingFactory.trackEvent(\"product option added\", {\n          category: \"Openings LineItemEditor\",\n          product_option: option.id,\n        });\n      }\n\n      const cmd_po = new AddEstimateLineItemOptionCmd(option, optionGroup, this.estimateLineItem, this.estimate);\n      cmd_po.execute(quantity);\n    } else {\n      const cmd_po = new AddEstimateLineItemOptionCmd(option, optionGroup, this.estimateLineItem, this.estimate);\n      cmd_po.execute(quantity);\n      this.eventingFactory.trackEvent(\"product option added\", {\n        category: \"Openings LineItemEditor\",\n        product_option: option.id,\n      });\n    }\n  }\n\n  public selectedOption(optionGroup: ProductOptionGroupRecord, option: ProductOptionRecord) {\n    return _.chain(this.estimateLineItem.existingOptions())\n      .select((elio: IEstimateLineItemOption) => !elio._destroy)\n      .any((elio: IEstimateLineItemOption) => {\n        return elio.product_option_uuid === option.uuid;\n      })\n      .value();\n  }\n\n  public unselectOption(productOptionId: number, productOptionUuid: string) {\n    const addedOption = _.find(\n      this.estimateLineItem.existingOptions(),\n      (elio) => elio.product_option_uuid === productOptionUuid,\n    );\n\n    if (addedOption.id && addedOption.id > 0) {\n      addedOption._destroy = true;\n    } else {\n      this.estimateLineItem.options = _.select(this.estimateLineItem.options, (elio: IEstimateLineItemOption) => {\n        return elio._destroy === true || elio.product_option_uuid !== productOptionUuid;\n      });\n    }\n\n    this.eventingFactory.trackEvent(\"product option removed\", {\n      category: \"Openings LineItemEditor\",\n      product_option: productOptionId,\n    });\n  }\n\n  public initOptionQuantity(optionGroup: ProductOptionGroupRecord, productOption: ProductOptionRecord): number {\n    const elio: IEstimateLineItemOption = _.find(\n      this.estimateLineItem.existingOptions(),\n      (e: IEstimateLineItemOption) => {\n        return e.product_option_group_id === optionGroup.id && e.product_option_uuid === productOption.uuid;\n      },\n    );\n    if (elio) {\n      return elio.quantity;\n    }\n\n    return this.estimateLineItem.openingEstimationMeasurement(productOption.charge_type, 1);\n  }\n\n  public optionQuantityChanged(\n    optionGroup: ProductOptionGroupRecord,\n    productOption: ProductOptionRecord,\n    quantity: number,\n  ): void {\n    const elio: IEstimateLineItemOption = _.find(\n      this.estimateLineItem.existingOptions(),\n      (e: IEstimateLineItemOption) => {\n        return e.product_option_group_id === optionGroup.id && e.product_option_uuid === productOption.uuid;\n      },\n    );\n\n    if (elio) {\n      elio.quantity = quantity;\n      elio.calculate(this.estimate);\n    }\n  }\n\n  public pricingChanged() {\n    this.estimateLineItem.calculate(this.estimate);\n  }\n\n  public addProducts(group: IOpeningGroup) {\n    this.addingGroup = group;\n    this.selectAnnotations();\n\n    const cmd = new AddEstimateLineItemCmd(this.estimate, group.product, this.group, this.EstimatorService);\n    cmd.execute();\n\n    this.eventingFactory.trackEvent(\"opening product added\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n      product_id: group.product.id,\n      estimate_group_name: this.group.name,\n      estimate_group_id: this.group.id,\n      quantity: group.quantity,\n    });\n\n    this.estimateLineItem = cmd.lineItem;\n    this.estimateLineItem.quantity = group.quantity;\n    _.each(group.openings, (o: IOpening) => {\n      this.estimateLineItem.opening_estimations.push(<IOpeningEstimation>{\n        openable_type: o.kind,\n        openable_id: o.id,\n        openable: o,\n      });\n    });\n    this.EstimatorService.addDefaultOptions(cmd.lineItem, group.product);\n    const defaults = this.estimate.defaults;\n    if (_.isUndefined(defaults) || _.isUndefined(defaults.options) || Object.keys(defaults.options).length > 0) {\n      this.updateLineItemOptions();\n    }\n    this.estimateLineItem.windowPriceAdjustment(group.product);\n    this.estimateLineItem.calculate(this.estimate);\n\n    this.gotoStep(2);\n  }\n\n  public changeEliProduct() {\n    this.eventingFactory.trackEvent(\"change product\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n      product_id: this.estimateLineItem.product_id,\n      estimate_line_item_id: this.estimateLineItem.id > 0 ? this.estimateLineItem.id : \"new\",\n      new_product_id: this.addingGroup.product.id,\n    });\n\n    if (this.manualEstimation) {\n      this.changeEliProductAndOptions(this.addingGroup.product);\n    }\n  }\n\n  public changeEliProductAndOptions(newProduct: ProductRecord) {\n    this.updatingProduct = true;\n\n    const newOptionGroups = useSelector((state) =>\n      cachedProductOptionGroups(state, {\n        activatedPriceListId: this.estimate.activated_price_list_id,\n        productId: newProduct.id,\n      }),\n    );\n    const [new_options, quantities, rejected_options] = this.estimateLineItem.compareOptions(\n      this.estimate.activated_price_list_id,\n      newOptionGroups,\n    );\n\n    const changes = this.estimateLineItem.existingOptions().length - new_options.length;\n    if (changes !== 0) {\n      this.ConfirmDialog.confirm(\n        changes +\n          \" options will be lost. Are you sure you want to change products?\\n\\n\" +\n          rejected_options.join(\"\\n\").trim(),\n        {\n          size: \"md\",\n        },\n      ).then(\n        () => {\n          this.confirmedChangeProduct(new_options, quantities, newProduct);\n        },\n        () => (this.updatingProduct = false),\n      );\n    } else {\n      this.confirmedChangeProduct(new_options, quantities, newProduct);\n    }\n  }\n\n  public confirmedChangeProduct(\n    new_options: ProductOptionRecord[],\n    quantities: Map<number, number>,\n    product: ProductRecord,\n  ) {\n    this.addingGroup.product = product;\n    this.parentProduct = useSelector((state) =>\n      cachedProduct(state, {\n        activatedPriceListId: this.estimate.activated_price_list_id,\n        productId: product.parent_id,\n      }),\n    );\n    this.parentChildren = useSelector((state) =>\n      cachedProducts(state, {\n        activatedPriceListId: this.estimate.activated_price_list_id,\n        productIds: this.parentProduct.children_ids,\n      }),\n    );\n\n    this.estimateLineItem.setProduct(this.estimate.activated_price_list_id, this.addingGroup.product);\n    this.estimateLineItem.calculate(this.estimate);\n\n    _.each(this.estimateLineItem.existingOptions(), (elio) => {\n      this.unselectOption(elio.product_option_id, elio.product_option_uuid);\n    });\n\n    _.each(new_options, (new_opt: ProductOptionRecord) => {\n      const pog = useSelector((state) =>\n        cachedProductOptionGroup(state, {\n          activatedPriceListId: this.estimate.activated_price_list_id,\n          productId: new_opt.option_group_id,\n        }),\n      );\n      const quantity = quantities.get(new_opt.id);\n      this.selectOption(pog, new_opt, quantity);\n    });\n\n    this.eventingFactory.trackEvent(\"change product\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n      product_id: this.estimateLineItem.product_id,\n      estimate_line_item_id: this.estimateLineItem.id > 0 ? this.estimateLineItem.id : \"new\",\n      new_product_id: this.addingGroup.product.id,\n    });\n\n    this.$timeout(() => {\n      this.updatingProduct = false;\n      this.activeOptionGroupTab = 0;\n    });\n  }\n\n  public blurTypeAhead() {\n    this.$timeout(() => {\n      this.show_switch = false;\n    }, 500);\n  }\n\n  public finishAddProduct() {\n    const openings = this.addingGroup.openings;\n    const eli = this.estimateLineItem;\n    this.addingGroup.quantity = 0;\n    this.addingGroup = null;\n    this.estimateLineItem = null;\n\n    _.each(openings, (o: IOpening) => this.unselect(o));\n\n    this.eventingFactory.trackEvent(\"adding estimate line item\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n      product_id: eli.product_id,\n      openings: _.map(openings, (o: IOpening) => o.id),\n    });\n\n    if (_.keys(this.groupedOpenings).length > 0 || _.any(this.siblings, (s: IOpeningGroup) => s.quantity > 0)) {\n      this.gotoStep(1);\n    } else {\n      this.$uibModalInstance.close([eli, eli.estimateGroup]);\n    }\n  }\n\n  public cancelEditAndGoBack() {\n    this._cancel();\n    this.eventingFactory.trackEvent(\"cancel adding current group\", {\n      category: \"Openings LineItemEditor\",\n    });\n    this.selectedAnnotations = [];\n    this.gotoStep(1);\n  }\n\n  public cancelEditAndClose() {\n    this.eventingFactory.trackEvent(\"cancel editing line item\", {\n      category: \"Openings LineItemEditor\",\n      quantity: this.addOpeningQuantity,\n      estimate_line_item_id: this.estimateLineItem.id > 0 ? this.estimateLineItem.id : \"new\",\n    });\n    this._cancel();\n\n    this.$uibModalInstance.dismiss(\"cancel\");\n  }\n\n  public cancelAddProductAndClose() {\n    this.eventingFactory.trackEvent(\"cancel adding product\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n    });\n    this._cancel();\n\n    this.$uibModalInstance.dismiss(\"cancel\");\n  }\n\n  public productOptionGroupsByType(type: string): ProductOptionGroupRecord[] {\n    if (this.estimateLineItem && this.estimateLineItem.product_id) {\n      return useSelector((state) =>\n        cachedProductOptionGroups(state, {\n          activatedPriceListId: this.estimate.activated_price_list_id,\n          productId: this.estimateLineItem.product_id,\n          type: type,\n        }),\n      ).toArray();\n    } else {\n      return [];\n    }\n  }\n\n  public productOptions(productOptionIds: List<number>): ProductOptionRecord[] {\n    return useSelector((state) =>\n      cachedProductOptions(state, {\n        activatedPriceListId: this.estimate.activated_price_list_id,\n        productOptionIds,\n      }),\n    ).toArray();\n  }\n\n  public calculateProductOptionPrice(productOption: ProductOptionRecord) {\n    return calculatePrice(productOption, this.estimate, this.estimateLineItem);\n  }\n\n  public highlightGroup(group: IOpeningGroup) {\n    this.selectedAnnotations = _.chain(group.openings).pluck(\"annotation\").compact().value();\n  }\n\n  public startAddingOpening() {\n    this.cancelEditingOpening();\n    this.addingOpenings = true;\n    this.selectedOpening = <IOpeningMetadata>{ kind: \"Window\", quantity: 1 };\n    this.eventingFactory.trackEvent(\"editing opening measurements\", {\n      category: \"Openings LineItemEditor\",\n    });\n\n    this.saveState();\n  }\n\n  public startEditingOpening(opening) {\n    this.$anchorScroll(\"openingForm\");\n    this.cancelAddingOpening();\n    this.selectedOpening = _.clone(opening);\n    this.editingOpenings = true;\n    this.eventingFactory.trackEvent(\"edit opening measurement\", {\n      category: \"Openings LineItemEditor\",\n      opening_id: opening.id > 0 ? opening.id : \"new\",\n    });\n    this.saveState();\n  }\n\n  public cancelAddingOpening() {\n    this.selectedOpening = null;\n    this.addingOpenings = false;\n    this.$anchorScroll(\"startAdding\");\n  }\n\n  public cancelEditingOpening() {\n    this.selectedOpening = null;\n    this.editingOpenings = false;\n    this.$anchorScroll(\"startAdding\");\n  }\n\n  public saveOpening() {\n    this.eventingFactory.trackEvent(\"save opening measurement\", {\n      category: \"Openings LineItemEditor\",\n      opening_id: this.selectedOpening.id > 0 ? this.selectedOpening.id : \"new\",\n    });\n    Opening.addOpenings(this.measurement, this.selectedOpening);\n    this.editingOpenings = false;\n    this.selectedOpening = null;\n  }\n\n  public addOpenings() {\n    this.addingOpenings = false;\n\n    this.eventingFactory.trackEvent(\"adding manual opening measurement\", {\n      category: \"Openings LineItemEditor\",\n      quantity: this.selectedOpening.quantity,\n    });\n\n    Opening.addOpenings(this.measurement, this.selectedOpening);\n\n    this.selectedOpening = null;\n  }\n\n  public checkState() {\n    return this._originalState === JSON.stringify(JSON.decycle(this.selectedOpening));\n  }\n\n  public resetMeasurements() {\n    this.eventingFactory.trackEvent(\"cancel editing opening measurements\", {\n      category: \"Openings LineItemEditor\",\n    });\n    this.selectedOpening = null;\n    this.addingOpenings = false;\n    this.editingOpenings = false;\n    this.measurement.$get({ \"include[]\": this.measurementIncludes }, () => {\n      this._setupOpenings();\n      this.gotoStep(0);\n    });\n  }\n\n  public saveMeasurements() {\n    this.eventingFactory.trackEvent(\"save edits on opening measurements\", {\n      category: \"Openings LineItemEditor\",\n    });\n    this.measurement.$update({ \"include[]\": this.measurementIncludes }).then(() => {\n      this._setupOpenings();\n      this.gotoStep(0);\n    });\n  }\n\n  public goManual() {\n    this.manualEstimation = true;\n    this.eventingFactory.trackEvent(\"skip line item openings\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n    });\n    this.gotoStep(1);\n  }\n\n  public editEstimateLineItemOpenings() {\n    this.eventingFactory.trackEvent(\"edit line item openings\", {\n      category: \"Openings LineItemEditor\",\n      estimate_line_item_id: this.estimateLineItem.id > 0 ? this.estimateLineItem.id : \"new\",\n      parent_id: this.parentProduct.id,\n      product_id: this.estimateLineItem.product_id,\n      quantity: this.estimateLineItem.openingEstimations().length,\n    });\n    this.editingEstimateLineItemOpenings = true;\n    this.gotoStep(0);\n  }\n\n  public updateOpeningsSelection() {\n    this.estimateLineItem.opening_estimations = _.filter(\n      this.estimateLineItem.opening_estimations,\n      (oe: IOpeningEstimation) => {\n        const match = _.any(\n          this.addingGroup.openings,\n          (o: IOpening) => o.kind === oe.openable_type && o.id === oe.openable_id,\n        );\n\n        if (match) {\n          delete oe._destroy;\n          return true;\n        }\n\n        if (oe.id > 0) {\n          oe._destroy = true;\n          return true;\n        } else {\n          return false;\n        }\n      },\n    );\n\n    _.each(this.addingGroup.openings, (o: IOpening) => {\n      if (\n        _.any(\n          this.estimateLineItem.opening_estimations,\n          (oe: IOpeningEstimation) => oe.openable_id === o.id && oe.openable_type === o.kind,\n        )\n      ) {\n        return;\n      }\n\n      this.estimateLineItem.opening_estimations.push(<IOpeningEstimation>{\n        openable_type: o.kind,\n        openable_id: o.id,\n        openable: o,\n      });\n    });\n\n    this.estimateLineItem.quantity = this.estimateLineItem.openingEstimations().length;\n    this.estimateLineItem.windowPriceAdjustment(this.addingGroup.product);\n    this.estimateLineItem.calculate(this.estimate);\n    this.editingEstimateLineItemOpenings = false;\n\n    this.eventingFactory.trackEvent(\"line item openings edited\", {\n      category: \"Openings LineItemEditor\",\n      estimate_line_item_id: this.estimateLineItem.id > 0 ? this.estimateLineItem.id : \"new\",\n      parent_id: this.parentProduct.id,\n      product_id: this.estimateLineItem.product_id,\n      quantity: this.estimateLineItem.openingEstimations().length,\n    });\n    this.gotoStep(2);\n  }\n\n  public cancelOpeningsSelection() {\n    this.addingGroup.openings = _.map(\n      this.estimateLineItem.openingEstimations(),\n      (oe: IOpeningEstimation) => oe.openable,\n    );\n    this.editingEstimateLineItemOpenings = false;\n\n    this.eventingFactory.trackEvent(\"line item openings canceled\", {\n      category: \"Openings LineItemEditor\",\n      estimate_line_item_id: this.estimateLineItem.id > 0 ? this.estimateLineItem.id : \"new\",\n      parent_id: this.parentProduct.id,\n      product_id: this.estimateLineItem.product_id,\n      quantity: this.estimateLineItem.openingEstimations().length,\n    });\n    this.gotoStep(2);\n  }\n\n  public goBackToMeasurements() {\n    this.eventingFactory.trackEvent(\"back to measurements\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n    });\n\n    this.manualEstimation = false;\n    this.gotoStep(0);\n  }\n\n  public goToAddOpenings() {\n    this.eventingFactory.trackEvent(\"add opening measurements\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n    });\n\n    this.gotoStep(3);\n  }\n\n  public goToBrackets() {\n    this.eventingFactory.trackEvent(\"go to brackets\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n      openings: _.map(this.selectedOpenings, (o: IOpening) => o.id),\n    });\n\n    this.selectedAnnotations = [];\n    this.gotoStep(1);\n  }\n\n  public filterChanged() {\n    this.eventingFactory.trackEvent(\"opening filter selected\", {\n      category: \"Openings LineItemEditor\",\n      parent_id: this.parentProduct.id,\n      filter: this.openingFilter,\n    });\n  }\n\n  public toggleShowSwitch() {\n    this.switch_search = { ancestral_name: \"\" } as unknown as ProductRecord;\n    this.focusHere += 1;\n    this.show_switch = !this.show_switch;\n  }\n\n  public selectTypeAhead() {\n    this.show_switch = !this.show_switch;\n    const childProducts = useSelector((state) =>\n      cachedProducts(state, {\n        activatedPriceListId: this.estimate.activated_price_list_id,\n        productIds: this.switch_search.children_ids,\n      }),\n    );\n    let opening = this.addingGroup.openings[0];\n    if (this.manualEstimation) {\n      opening = this.manualEstimationOpening();\n    }\n    const product = findProductBracket(this.switch_search, childProducts, opening);\n\n    this.changeEliProductAndOptions(product);\n  }\n\n  public manualEstimationOpening() {\n    const opening_ui = (this.addingGroup.product.min_ui + this.addingGroup.product.max_ui) / 2;\n    return <IOpening>{ ui: opening_ui, width: opening_ui / 2, height: opening_ui / 2 };\n  }\n\n  public setDefaultOptions() {\n    this.estimate.defaults.options = {} as { string: IDefaultOption };\n    _.each(this.estimateLineItem.existingOptions(), (opt) => {\n      const productOptionGroup = useSelector((state) =>\n        cachedProductOptionGroup(state, {\n          activatedPriceListId: this.estimate.activated_price_list_id,\n          productOptionGroupId: opt.product_option_group_id,\n        }),\n      );\n      this.estimate.defaults.options[opt.product_option_match_id] = {\n        quantity: opt.quantity,\n        option_group_uuid: productOptionGroup.match_id,\n      };\n    });\n    this.Flash.addMessage(FlashLevels.success, \"Successfully set Estimate Default Options\");\n    this.eventingFactory.trackEvent(\"set estimate default options\", {\n      category: \"Openings LineItemEditor\",\n      estimate_line_item_id: this.estimateLineItem.id > 0 ? this.estimateLineItem.id : \"new\",\n      parent_id: this.parentProduct.id,\n      product_id: this.estimateLineItem.product_id,\n    });\n  }\n\n  public useDefaultOptions() {\n    this.updateLineItemOptions();\n    this.Flash.addMessage(FlashLevels.success, \"Successfully used Estimate Default Options\");\n  }\n\n  public updateLineItemOptions() {\n    _.each(this.estimateLineItem.existingOptions(), (elio) => {\n      this.unselectOption(elio.product_option_id, elio.product_option_uuid);\n    });\n\n    this.EstimatorService.addEstimateDefaultOptions(this.estimateLineItem);\n    this.eventingFactory.trackEvent(\"use estimate default options\", {\n      category: \"Openings LineItemEditor\",\n      estimate_line_item_id: this.estimateLineItem.id > 0 ? this.estimateLineItem.id : \"new\",\n      parent_id: this.parentProduct.id,\n      product_id: this.estimateLineItem.product_id,\n    });\n\n    // Hides then Shows Product Options Tabs to update quantities (runs ng-init)\n    this.updatingProduct = true;\n    this.$timeout(() => {\n      this.updatingProduct = false;\n    });\n  }\n\n  public optionSelected(optionGroup: ProductOptionGroupRecord, lineItem: IEstimateLineItem) {\n    return optionSelected(List(this.productOptions(optionGroup.option_ids)), lineItem);\n  }\n\n  public lineItemOptionImage(productOption: ProductOptionRecord) {\n    if (productOption && productOption.images && productOption.images.size > 0) {\n      return getUrl(productOption.images.first(), \"medium\");\n    }\n\n    return false;\n  }\n\n  public updateMarkupable() {\n    this.estimateLineItem.markupable = this.markupableBool ? \"yes\" : \"no\";\n    this.pricingChanged();\n  }\n\n  private _setupOpenings() {\n    this.openings = _.chain([this.measurement.windows || [], this.measurement.doors || []])\n      .flatten()\n      .compact()\n      .sortBy((o: IOpening) => {\n        return o.width;\n      })\n      .sortBy((o: IOpening) => {\n        return o.height;\n      })\n      .sortBy((o: IOpening) => {\n        return o.name;\n      })\n      .sortBy((o: IOpening) => {\n        return o.ui;\n      })\n      .value();\n\n    this.filters = _.chain(this.openings)\n      .map((o: IOpening) => {\n        return [\n          { type: \"location\", name: \"Location: \" + o.location, value: o.location },\n          { type: \"level\", name: \"Level: \" + o.level, value: o.level },\n          { type: \"name\", name: o.name, value: o.name },\n        ];\n      })\n      .unzip()\n      .map((list: any[]) => {\n        return _.sortBy(list, (obj: any) => {\n          return obj.name;\n        });\n      })\n      .flatten()\n      .select((v) => {\n        return v.value !== null && v.value !== undefined;\n      })\n      .uniq((a) => a.type.toString() + a.value.toString())\n      .value();\n  }\n\n  private saveState() {\n    this._originalState = JSON.stringify(JSON.decycle(this.selectedOpening));\n  }\n\n  private groupOpenings() {\n    this.groupedOpenings = _.chain(this.selectedOpenings)\n      .map((opening: IOpening) => {\n        const bracket: ProductRecord = findProductBracket(this.parentProduct, this.parentChildren, opening);\n        return [bracket || \"$nomatch\", opening];\n      })\n      .groupBy((value) => {\n        if (value[0] === \"$nomatch\") {\n          return value[0];\n        }\n        if ((value as any)[0].bracket_type === \"per_sqft\") {\n          return `${(value as any)[0].id}-${(value[1] as any).area}`;\n        }\n        if ((value as any)[0].bracket_type === \"per_ui\") {\n          return `${(value as any)[0].id}-${(value[1] as any).ui}`;\n        }\n        return (value as any)[0].id;\n      })\n      .mapObject((value) => {\n        return {\n          product: value[0][0],\n          openings: _.map(value, (v) => v[1]),\n          quantity: value.length,\n        };\n      })\n      //.tap((a) => console.info(\"tap\", a))\n      .value();\n\n    this.siblings = this.parentChildren\n      .filter((p: ProductRecord) => {\n        return _.isUndefined(this.groupOpenings[p.id]);\n      })\n      .map((p: ProductRecord) => {\n        return {\n          product: p,\n          openings: [],\n          quantity: 0,\n        };\n      })\n      .toArray();\n    this.selectAnnotations();\n  }\n\n  private selectAnnotations() {\n    if (this.addingGroup) {\n      this.selectedAnnotations = _.chain(this.addingGroup.openings).pluck(\"annotation\").compact().value();\n    } else {\n      this.selectedAnnotations = _.chain(this.selectedOpenings).pluck(\"annotation\").compact().value();\n    }\n  }\n\n  private _cancel() {\n    if (this.estimateLineItem && !this.editing) {\n      const cmd = new RemoveEstimateLineItemCmd(this.estimate, this.estimateLineItem);\n      cmd.execute();\n    }\n\n    this.addingGroup = null;\n    this.estimateLineItem = null;\n  }\n}\n","import { IOrg } from \"../Models/Org\";\nimport { IEstimate, ISalesTaxable } from \"../Models/Estimate\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { IEstimateGroup } from \"../Models/EstimateGroup\";\n\nclass SalesTaxEditorCtrl {\n  public salesTaxable: ISalesTaxable;\n  public estimateOrGroup: IEstimate | IEstimateGroup;\n  public org: IOrg;\n  public updated: (param: { salesTaxable: ISalesTaxable }) => void;\n  public showingTax = false;\n  public defaultTaxableAmountValues: string[] = [\"none\", \"product\", \"labor\", \"product_labor\"];\n\n  constructor(public Pretty: IPretty) {}\n\n  public $onInit() {\n    this.showingTax = false;\n  }\n\n  public $onChanges() {\n    if (this.estimateOrGroup) {\n      this.salesTaxable = this.estimateOrGroup.cloneSalesTax();\n    }\n  }\n\n  public $doCheck() {\n    if (this.estimateOrGroup && !angular.equals(this.salesTaxable, this.estimateOrGroup.cloneSalesTax())) {\n      // If it's already initialized, the default_taxable_amount is set, and the tax_rate or taxable_amount is undefined, then return\n      if (\n        this.salesTaxable.default_taxable_amount !== undefined &&\n        (this.salesTaxable.tax_rate === undefined || this.salesTaxable.taxable_amount === undefined)\n      ) {\n        return;\n      }\n      this.salesTaxable = this.estimateOrGroup.cloneSalesTax();\n    }\n  }\n\n  public updateTax() {\n    if (this.salesTaxable.tax_rate === undefined || this.salesTaxable.taxable_amount === undefined) {\n      return;\n    }\n\n    if (this.updated) {\n      if (angular.equals(this.salesTaxable, this.estimateOrGroup.cloneSalesTax())) {\n        return;\n      }\n      this.updated({ salesTaxable: this.salesTaxable });\n    }\n  }\n}\n\nexport class SalesTaxEditor implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    estimateOrGroup: \"<\",\n    updated: \"&\",\n    org: \"<\",\n  };\n  public templateUrl = \"src/Estimator/salesTaxEditor.html\";\n\n  constructor() {\n    this.controller = SalesTaxEditorCtrl;\n    this.controller.$inject = [\"Pretty\"];\n  }\n}\n","export class AbstractWizardController {\n  public activeStep = 0;\n\n  constructor() {}\n\n  public isStepValid(step) {\n    return this[`isStep${step}Valid`]();\n  }\n\n  public nextStep() {\n    this.activeStep += 1;\n  }\n\n  public gotoStep(step: number) {\n    this.activeStep = step;\n  }\n\n  public back() {\n    if (this.activeStep <= 0) this.activeStep = 0;\n    else {\n      this.activeStep -= 1;\n    }\n  }\n}\n","import { IWallFacadeData } from \"app2/src/records/WallFacade\";\n\nexport interface IWallFacade extends IWallFacadeData {\n  clone(): IWallFacade;\n}\n\nexport class WallFacade implements IWallFacade {\n  public id: number;\n  public name: string;\n  public designator: string;\n  public ref_id: string;\n  public location: string;\n  public level: string;\n  public orientation: number;\n  public pitch: number;\n  public area: number;\n  public ui: number;\n  public created_at: Date;\n  public updated_at: Date;\n\n  public _destroy?: boolean;\n\n  constructor() {}\n\n  public clone(): IWallFacade {\n    return WallFacade.fromJSON(Object.assign({}, this));\n  }\n\n  public static fromJSON = (data: any): IWallFacade => {\n    const wall_facade = new WallFacade();\n    for (const key in data) {\n      if (data.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        switch (key) {\n          case \"id\":\n          case \"measurement_id\":\n            data[key] = parseInt(data[key]);\n            break;\n          case \"area\":\n          case \"orientation\":\n          case \"pitch\":\n            data[key] = parseFloat(data[key]);\n            break;\n          case \"updated_at\":\n          case \"created_at\":\n            data[key] = new Date(data[key]);\n            break;\n        }\n\n        wall_facade[key] = data[key];\n      }\n    }\n    return wall_facade;\n  };\n}\n","import { AbstractWizardController } from \"app/src/Common/AbstractWizardController\";\nimport { IJob } from \"../Models/Job\";\nimport { IOrg } from \"../Models/Org\";\nimport { IImage } from \"../Models/Image\";\nimport { IElevation } from \"../Models/Elevation\";\nimport { IAnnotation } from \"../Models/Annotation\";\nimport { IMeasurement } from \"../Models/Measurement\";\nimport { IWallFacade, WallFacade } from \"../Models/WallFacade\";\nimport { IFlash } from \"../Common/FlashService\";\nimport { IOpening } from \"../Models/Opening\";\nimport { IAnnotationMeasuredEvent } from \"../Drawing/DrawingComponent\";\nimport { IRepository } from \"../Common/Repository\";\nimport { IPretty } from \"../Common/PrettyNameService\";\nimport { IMeasurementMetadata } from \"rsf-visualizer\";\nimport { dispatch, useSelector } from \"app2/src/storeRegistry\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { subscriber } from \"app2/src/helpers/Subscribe\";\nimport { currentMeasurementId } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { getMeasurementHydrated } from \"app2/src/selectors/measurement.selectors\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nenum Mode {\n  none = 0,\n  edit = 1,\n  create = 2,\n}\n\nclass WindowAnnotatingComponentCtrl extends AbstractWizardController implements ng.IComponentController {\n  public spinnerPromise: ng.IPromise<any>;\n  public saving = false;\n  public startRefreshing = 0;\n  public elevation: IElevation;\n  public job: IJob;\n  public org: IOrg;\n  public measurement: IMeasurement;\n  public measurementClone: IMeasurement;\n  public elevations: IElevation[] = [];\n  public abbrSet = false;\n  public elevationNames: string[] = [\"Front\", \"Right\", \"Left\", \"Back\"];\n  public close: (value: any) => void;\n  public dismiss: () => void;\n  public selectedAnnotations: IAnnotation[] = [];\n  public resolve: { org: IOrg; job: IJob };\n  public openingTypes: string[] = [\"window\", \"door\"];\n\n  protected mode: Mode = Mode.none;\n\n  private lastCall: Date;\n  private _currentId = -10;\n  private _sendInviteSubscribe: () => void;\n\n  public static $inject = [\"Repository\", \"Flash\", \"$scope\", \"$q\", \"$timeout\", \"$analytics\", \"Pretty\"];\n  constructor(\n    protected Repository: IRepository,\n    protected Flash: IFlash,\n    protected $scope: ng.IScope,\n    protected $q: ng.IQService,\n    protected $timeout: ng.ITimeoutService,\n    protected $analytics: angulartics.IAnalyticsService,\n    protected Pretty: IPretty,\n  ) {\n    super();\n\n    this._sendInviteSubscribe = subscriber.subscribe<number>(\"components.common.sendInvite.sent\", (sendInviteSent) => {\n      if (this.startRefreshing !== sendInviteSent) {\n        this.startRefreshing = sendInviteSent;\n        this.$timeout(() => {\n          this.$scope.$digest();\n        });\n      }\n    });\n\n    $scope.$on(\"$destroy\", () => {\n      this._sendInviteSubscribe();\n    });\n  }\n\n  public $onInit() {\n    this.job = this.resolve.job;\n    this.org = this.resolve.org;\n\n    this.setupMeasurement();\n    this.refreshImages();\n\n    if (this.measurement.locations) {\n      this.measurement.locations = _.uniq(\n        this.measurement.locations.concat(this.Repository.Measurement.defaultLocations),\n      );\n    } else {\n      this.measurement.locations = _.uniq(this.Repository.Measurement.defaultLocations);\n    }\n    if (this.measurement.levels) {\n      this.measurement.levels = _.uniq(this.measurement.levels.concat(this.Repository.Measurement.defaultLevels));\n    } else {\n      this.measurement.levels = _.uniq(this.Repository.Measurement.defaultLevels);\n    }\n\n    this.measurement.levels = _.sortBy(this.measurement.levels, function (n) {\n      return n.toLowerCase();\n    });\n    this.measurement.locations = _.sortBy(this.measurement.locations, function (n) {\n      return n.toLowerCase();\n    });\n\n    this._currentId = _.min([-10, _.chain(this.elevations).pluck(\"id\").min().value() - 1]);\n\n    this.$scope.$on(\"rsf:drawing:setmeasurements\", (_event: any, args: IAnnotationMeasuredEvent) => {\n      const annotation = _.find(this.allAnnotations(), (ann: IAnnotation) => ann.guid === args.annotation.guid);\n      annotation.width = args.width;\n      annotation.height = args.height;\n\n      if (this.selectedAnnotations.length > 0) {\n        this.propChanged(args.annotation, \"width\", args.width);\n        this.propChanged(args.annotation, \"height\", args.height);\n      } else {\n        this.$scope.$digest();\n      }\n    });\n\n    this.$scope.$on(\"rsf:drawing:updateshape\", (_event: any, args: { shape: IMeasurementMetadata }) => {\n      switch (args.shape.class) {\n        case \"PolygonShape\":\n          this._updateWallFacade(args.shape);\n          break;\n      }\n\n      this.$scope.$digest();\n    });\n  }\n\n  public noAnnotationImages(image: IImage) {\n    return !image.file.url.includes(\"Annotations.png\");\n  }\n\n  public addElevation(image: IImage) {\n    this.mode = Mode.create;\n    this.elevation = this.Repository.Elevation.fromJSON({ id: this._currentId, measurement: this.measurement });\n    this.elevation.src_image = image;\n    this.elevation.src_image_id = image.id;\n    this.abbrSet = false;\n\n    this._currentId -= 1;\n\n    this.elevations.push(this.elevation);\n\n    this.elevation = this.elevation.clone();\n\n    this.trackEvent(\"elevation added\", {\n      elevation: this.elevation.id,\n    });\n\n    this.nextStep();\n  }\n\n  public editElevation(elevation: IElevation) {\n    this.mode = Mode.edit;\n    this.elevation = elevation.clone();\n    this.trackEvent(\"start elevation edit\", {\n      elevation: this.elevation.id,\n    });\n    this.gotoStep(2);\n  }\n\n  public measureElevation(elevation: IElevation) {\n    this.mode = Mode.edit;\n\n    this.saveMeasurement();\n    this.measurementClone = this.measurement.clone();\n    this.elevation = _.find(this.measurementClone.elevations, (e: IElevation) => e.id === elevation.id);\n\n    this.trackEvent(\"start elevation measure\", {\n      elevation: this.elevation.id,\n    });\n    this.gotoStep(3);\n  }\n\n  public removeAnnotation(annotation: IAnnotation) {\n    this.elevation.removeAnnotation(annotation);\n\n    if (annotation.opening_id) {\n      this.trackEvent(\"remove annotation with opening\", {\n        opening: annotation.opening_id,\n        opening_type: annotation.opening_type,\n        elevation: annotation.elevation.id,\n      });\n    } else {\n      this.trackEvent(\"remove annotation\", {\n        opening_type: annotation.opening_type,\n        elevation: annotation.elevation.id,\n      });\n    }\n  }\n\n  public nameChanged() {\n    this.trackEvent(\"rename elevation\", {\n      elevation: this.elevation.id,\n    });\n\n    if (this.abbrSet) {\n      return;\n    }\n\n    this.elevation.abbr = this.elevation.name[0] || \"\";\n  }\n\n  public abbrChanged() {\n    this.trackEvent(\"abbrevation set - elevation\", {\n      elevation: this.elevation.id,\n    });\n    this.abbrSet = true;\n  }\n\n  public propChanged(annotation: IAnnotation, prop: string, value: any) {\n    if (\n      !_.any(\n        this.selectedAnnotations,\n        (a: IAnnotation) => a.id === annotation.id && a.elevation.name === annotation.elevation.name,\n      )\n    ) {\n      return;\n    }\n\n    this.trackEvent(\"mass edit annotations\", {\n      property_changed: prop,\n      elevation: annotation.elevation.id,\n      annotation: annotation.id,\n      annotation_count: this.selectedAnnotations.length,\n      annotation_ids: _.pluck(this.selectedAnnotations, \"id\"),\n    });\n\n    _.each(this.selectedAnnotations, (a: IAnnotation) => {\n      a[prop] = value;\n    });\n  }\n\n  public toggleOpeningType(annotation: IAnnotation) {\n    this.trackEvent(\"toggle annotation type\", {\n      elevation: annotation.elevation.id,\n      annotation: annotation.id,\n    });\n\n    if (annotation.opening_type === \"window\") {\n      annotation.opening_type = \"door\";\n      this.propChanged(annotation, \"opening_type\", \"door\");\n    } else {\n      annotation.opening_type = \"window\";\n      this.propChanged(annotation, \"opening_type\", \"window\");\n    }\n  }\n\n  /**\n   * Updates annotations on current elevation in place on existing objects\n   * @param annotations\n   */\n  public annotationsUpdated(annotations: IAnnotation[]) {\n    if (annotations.length <= this.elevation.annotations.length) {\n      this.trackEvent(\"annotation deleted\", {\n        elevation: this.elevation.id,\n        annotation_count: annotations.length,\n        annotation_ids: _.pluck(annotations, \"id\"),\n      });\n    }\n    const existingGuids = _.pluck(annotations, \"guid\");\n    this.elevation.annotations = _.select(this.elevation.annotations, (a: IAnnotation) =>\n      _.includes(existingGuids, a.guid),\n    );\n    const needToAdd = _.difference(existingGuids, _.pluck(this.elevation.annotations, \"guid\"));\n    _.each(this.elevation.annotations, (a: IAnnotation) => {\n      const src = _.find(annotations, (toMatch: IAnnotation) => toMatch.guid === a.guid);\n      a.update(src);\n    });\n    _.each(needToAdd, (guid: string) =>\n      this.elevation.annotations.push(_.find(annotations, (a: IAnnotation) => a.guid === guid)),\n    );\n\n    this.elevation.$hasChanged = true;\n    this.$scope.$digest();\n  }\n\n  public selectAll() {\n    if (this.anySelected()) {\n      this.trackEvent(\"annotation - select none\", {});\n      this.selectNone();\n      return;\n    }\n    this.selectedAnnotations = this.allAnnotations();\n    this.trackEvent(\"annotation - select all\", {\n      annotation_count: this.selectedAnnotations.length,\n      annotation_ids: _.pluck(this.selectedAnnotations, \"id\"),\n    });\n  }\n\n  public selectNone() {\n    this.selectedAnnotations = [];\n  }\n\n  public anySelected() {\n    return this.selectedAnnotations.length > 0;\n  }\n\n  public select(annotation: IAnnotation) {\n    if (\n      _.any(this.selectedAnnotations, (a: IAnnotation) => {\n        return a.id === annotation.id && a.elevation.id === annotation.elevation.id;\n      })\n    ) {\n      this.trackEvent(\"annotation - unselect\", {\n        annotation: annotation.id,\n      });\n      this.selectedAnnotations = _.select(this.selectedAnnotations, (a: IAnnotation) => {\n        return a.id !== annotation.id || a.elevation.id !== annotation.elevation.id;\n      });\n\n      return;\n    }\n    this.trackEvent(\"annotation - select\", {\n      annotation: annotation.id,\n    });\n\n    this.selectedAnnotations = this.selectedAnnotations.concat(annotation);\n  }\n\n  public selected(annotation: IAnnotation) {\n    return _.any(this.selectedAnnotations, (a: IAnnotation) => {\n      return a.id === annotation.id && a.elevation.id === annotation.elevation.id;\n    });\n  }\n\n  public saveAnnotations(showMeasurer: boolean) {\n    this.trackEvent(\"finish elevation edit\", {\n      elevation: this.elevation.id,\n    });\n    const idx: number = _.findIndex(this.elevations, (e: IElevation) => e.id === this.elevation.id);\n\n    this.elevations[idx] = this.elevation;\n\n    if (showMeasurer) {\n      this.measureElevation(this.elevation);\n    } else {\n      this.elevation = null;\n      this.gotoStep(0);\n    }\n\n    this.mode = Mode.none;\n  }\n\n  public saveMeasurements() {\n    this.$scope.$broadcast(\"rsf:measurements:save\", { elevation: this.elevation });\n\n    this.measurement = this.measurementClone;\n    this.elevations = this.measurement.elevations;\n\n    this.measurementClone = null;\n    this.elevation = null;\n\n    this.gotoStep(0);\n\n    this.mode = Mode.none;\n  }\n\n  public measurementsUpdated(annotations: IAnnotation[]) {\n    this.annotationsUpdated(annotations);\n    this.$scope.$digest();\n  }\n\n  public cancelAnnotations() {\n    if (this.mode === Mode.create) {\n      this.elevations = _.select(this.elevations, (e: IElevation) => e.id !== this.elevation.id);\n    }\n    this.elevation = null;\n    this.measurementClone = null;\n\n    this.mode = Mode.none;\n    this.gotoStep(0);\n  }\n\n  public cancelAddingElevation() {\n    this.trackEvent(\"elevation add canceled\", {});\n    this.gotoStep(0);\n  }\n\n  public allAnnotations() {\n    if (this.measurementClone) {\n      return _.chain(this.measurementClone.elevations)\n        .map((e: IElevation) => e.annotations)\n        .flatten()\n        .value();\n    }\n    return _.chain(this.elevations)\n      .map((e: IElevation) => e.annotations)\n      .flatten()\n      .value();\n  }\n\n  public allWallFacades() {\n    if (this.measurementClone) {\n      return _.chain(this.measurementClone.elevations)\n        .map((e: IElevation) => e.wallFacades)\n        .flatten()\n        .value();\n    }\n    return _.chain(this.elevations)\n      .map((e: IElevation) => e.wallFacades)\n      .flatten()\n      .value();\n  }\n\n  public save() {\n    this.trackEvent(\"save annotator\", {\n      elevation_count: this.elevations.length,\n      annotation_count: this.allAnnotations().length,\n    });\n    const deferred: ng.IDeferred<void> = this.$q.defer();\n    this.saveMeasurement();\n    const result = {\n      measurement: this.measurement,\n    };\n    const renderedElevations: any[] = [];\n\n    this.saving = true;\n    this.spinnerPromise = deferred.promise;\n\n    if (this.elevations.length === 0) {\n      deferred.resolve();\n      this.close({ $value: result });\n    }\n\n    this.$scope.$on(\"rsf:drawing:rendered\", (event, args: any) => {\n      renderedElevations.push(args);\n\n      if (renderedElevations.length === this.elevations.length) {\n        _.each(renderedElevations, (re: any) => {\n          const elevation = _.find(this.elevations, (e: IElevation) => e.id === re.id);\n          elevation.renderedDataUrl = re.dataUrl;\n        });\n        deferred.resolve();\n        this.close({ $value: result });\n      }\n    });\n\n    this.$timeout(() => {\n      _.each(this.elevations, (elevation: IElevation) => {\n        _.each(elevation.removedAnnotations, (annotation: IAnnotation) => {\n          const opening = _.find(this.measurement[`${annotation.opening_type}s`], (o: IOpening) => {\n            return o.id === annotation.opening_id;\n          });\n\n          if (opening) {\n            this.measurement[`delete${toTitleCase(annotation.opening_type)}`](opening);\n          }\n        });\n\n        _.each(elevation.removedWallFacades, (wf: IWallFacade) => {\n          const wallFacade = this.measurement.wall_facades.find((i) => i.id === wf.id);\n\n          if (wallFacade) {\n            this.measurement.deleteWallFacade(wallFacade);\n          }\n        });\n\n        elevation.removedAnnotations = [];\n        elevation.removedWallFacades = [];\n\n        this.$scope.$broadcast(\"rsf:drawing:render\", { id: elevation.id });\n      });\n    }, 10000);\n  }\n\n  public cancel() {\n    this.trackEvent(\"cancel annotator\", {});\n    this.dismiss();\n  }\n\n  public sendInvite() {\n    dispatch(commonActions.Actions.openSendInviteModal(\"image_uploader\", {}));\n  }\n\n  /**\n   * Callback for the Refresh Button\n   */\n  public refreshImages() {\n    const args = {\n      imageable_type_url: \"jobs\",\n      imageable_id: this.job.id,\n    };\n\n    if (this.lastCall) {\n      args[\"created_since\"] = this.lastCall;\n    }\n\n    this.lastCall = new Date();\n    const query = this.Repository.Image.query(args);\n\n    query.$promise.then((data: any) => {\n      const preImageCount = this.job.images.length;\n\n      _.each(data.images, (i: IImage) => this.job.images.push(i));\n      this.job.images = _.chain(this.job.images)\n        .uniq((i: IImage) => i.id)\n        // @ts-ignore\n        .sort((a: IImage, b: IImage): number => {\n          if (a.sort_order === b.sort_order) {\n            return 0;\n          }\n\n          if (a.sort_order === null) {\n            return 1;\n          }\n\n          if (b.sort_order === null) {\n            return -1;\n          }\n\n          if (a.sort_order < b.sort_order) {\n            return -1;\n          }\n\n          return 1;\n        })\n        .value();\n\n      return preImageCount !== this.job.images.length;\n    });\n\n    return query.$promise;\n  }\n\n  public trackEvent(action, props) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        category: \"Annotations\",\n        job: this.job.id,\n        org: this.job.org_id,\n      }),\n    );\n  }\n\n  public gotoStep(idx: number): void {\n    this.selectNone();\n    super.gotoStep(idx);\n  }\n\n  protected setupMeasurement(): void {\n    const measurementId = useSelector((state) => currentMeasurementId(state, {}));\n    const hydratedMeasurement = useSelector((state) => getMeasurementHydrated(state, { measurementId }));\n    this.measurement = this.Repository.Measurement.fromJSON(hydratedMeasurement.toJS());\n    this.elevations = this.measurement.elevations;\n  }\n\n  protected saveMeasurement(): void {\n    this.measurement.elevations = this.elevations;\n\n    if (this.allWallFacades().length > 0) {\n      const area = _.reduce(this.allWallFacades(), (memo, wf) => wf.area + memo, 0);\n\n      this.measurement.siding_total_area = roundToDecimals(area, -2);\n      this.measurement.siding_5pw_total_area = roundToDecimals(area * 1.05, -2);\n      this.measurement.siding_10pw_total_area = roundToDecimals(area * 1.1, -2);\n      this.measurement.siding_15pw_total_area = roundToDecimals(area * 1.15, -2);\n      this.measurement.siding_18pw_total_area = roundToDecimals(area * 1.18, -2);\n\n      this.allWallFacades().forEach((wf: IWallFacade) => {\n        const match = this.measurement.wall_facades.find((m) => m.ref_id === wf.ref_id);\n\n        if (match) {\n          match.area = roundToDecimals(wf.area, -2);\n        } else {\n          // use a clone for circular references\n          this.measurement.wall_facades.push(wf.clone());\n        }\n      });\n    }\n  }\n\n  private _updateWallFacade(shape: IMeasurementMetadata): void {\n    let facade = this.elevation.wallFacades.find((wf: IWallFacade) => {\n      return wf.ref_id === shape.guid;\n    });\n\n    if (!facade) {\n      facade = new WallFacade();\n      facade.name = `${this.elevation.abbr}-${this.elevation.wallFacades.length + 1}`;\n      facade.designator = facade.name;\n      facade.ref_id = shape.guid;\n\n      this.elevation.wallFacades.push(facade);\n    }\n\n    facade.area = shape.meta.measuredArea;\n  }\n}\n\nexport class WindowAnnotatingComponent implements ng.IComponentOptions {\n  public controller: ng.Injectable<ng.IControllerConstructor>;\n\n  public bindings: any = {\n    resolve: \"<\",\n    close: \"&\",\n    dismiss: \"&\",\n  };\n\n  public templateUrl = \"src/Estimator/window_annotating.html\";\n\n  constructor() {\n    this.controller = WindowAnnotatingComponentCtrl;\n  }\n}\n","import * as React from \"react\";\nimport * as FontAwesome from \"react-fontawesome\";\n\nexport interface SearchBoxProps {\n  searching: (query: string) => void;\n  placeholder: string;\n  query: string;\n  containerProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n  inputProps?: React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;\n  autoFocus?: boolean;\n}\n\nexport const SearchBox: React.FC<SearchBoxProps> = ({\n  searching,\n  placeholder,\n  query,\n  containerProps,\n  inputProps,\n  autoFocus = true,\n}) => {\n  const [localQuery, setLocalQuery] = React.useState(query);\n\n  const debouncedSearch = React.useCallback(_.debounce(searching, 500), []);\n\n  const searchChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n    const newQuery = e.target.value;\n    setLocalQuery(newQuery);\n    debouncedSearch(newQuery);\n  };\n\n  const clearSearch = (): void => {\n    const newQuery = \"\";\n    setLocalQuery(newQuery);\n    debouncedSearch(newQuery);\n  };\n\n  return (\n    <div className=\"search-box\" {...(containerProps || {})}>\n      <FontAwesome name=\"search\" className=\"fa-gray\" />\n      <input\n        id=\"estimate-product-search\"\n        onChange={searchChange}\n        type=\"text\"\n        autoFocus={autoFocus}\n        value={localQuery}\n        name=\"search\"\n        className=\"form-control\"\n        placeholder={placeholder}\n        {...(inputProps || {})}\n      />\n      {query.length > 0 && <FontAwesome title=\"clear search\" onClick={clearSearch} name=\"times\" className=\"fa-gray\" />}\n    </div>\n  );\n};\n","import { useEffect, useRef } from \"react\";\n\nexport const usePrevious = <T>(value: T): T => {\n  const ref = useRef<T>();\n  useEffect(() => {\n    ref.current = value;\n  }, [value]);\n  return ref.current;\n};\n","import { IFenetechListQuote, IFenetechQuoteFullResponse } from \"app2/src/lib/fene_tech/types\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nconst BASE_URL = \"\";\n\nconst fenetechFetcher = async (\n  url: string,\n  options: RequestInit = {},\n  flashDispatch?: RootDispatchType,\n): Promise<any> => {\n  const response = await fetch(url, { ...options, mode: \"cors\", credentials: \"include\" });\n\n  if (!response) return;\n\n  if (!response.ok) {\n    if (response.status === 401) {\n      handleErrors([\"Invalid credentials.\"], flashDispatch);\n    }\n    return;\n  }\n\n  const responseBody = await response.text();\n  return responseBody ? JSON.parse(responseBody) : {};\n};\n\nconst login = async (\n  baseUrl: string,\n  username: string,\n  password: string,\n  authType = \"standard\",\n  flashDispatch?: RootDispatchType,\n): Promise<void> => {\n  try {\n    const updatedUrl = new URL(`${baseUrl}/api/Auth/SignIn`);\n    const params = new URLSearchParams({ username, password, authType });\n\n    return await fenetechFetcher(`${updatedUrl}?${params}`, { method: \"GET\" }, flashDispatch);\n  } catch (response) {\n    errorHelper(response, flashDispatch);\n  }\n};\n\nconst getQuoteList = async (baseUrl: string, flashDispatch?: RootDispatchType): Promise<IFenetechListQuote[]> => {\n  try {\n    const quotesUrl = `${baseUrl}/api/Quotes/List`;\n\n    return await fenetechFetcher(quotesUrl, { method: \"GET\" }, flashDispatch);\n  } catch (response) {\n    errorHelper(response, flashDispatch);\n  }\n};\n\nconst getQuoteFull = async (\n  baseUrl: string,\n  oKey: number,\n  flashDispatch?: RootDispatchType,\n): Promise<IFenetechQuoteFullResponse> => {\n  try {\n    const url = `${baseUrl}/api/Quotes/${oKey}/QuoteFull`;\n\n    return await fenetechFetcher(url, { method: \"GET\" }, flashDispatch);\n  } catch (response) {\n    errorHelper(response, flashDispatch);\n  }\n};\n\nconst getLineItemImage = async (\n  baseUrl: string,\n  oKey: number,\n  odKey: number,\n  imageAccessKey: number,\n  flashDispatch?: RootDispatchType,\n  isOrder = false,\n): Promise<Blob> => {\n  try {\n    const url = `${baseUrl}/api/Images/Thumbnails/${oKey}/${odKey}/largest?accessKey=${imageAccessKey}&isOrder=${isOrder}`;\n    const response = await fetch(url, { method: \"GET\", mode: \"cors\", credentials: \"include\" });\n    if (!response.ok) {\n      handleErrors(response, flashDispatch);\n    }\n    const blob = await response.blob();\n    // @ts-ignore\n    blob.name = `${oKey}_${odKey}.png`;\n\n    return blob;\n  } catch (response) {\n    errorHelper(response, flashDispatch);\n  }\n};\n\nconst errorHelper = (response: any, flashDispatch?: RootDispatchType) => {\n  const errors = response.message ? [response.message] : response;\n  handleErrors(errors, flashDispatch);\n};\n\nexport { login, getQuoteList, getQuoteFull, getLineItemImage, BASE_URL };\n","import * as React from \"react\";\nimport { Modal, Button, Form, Table } from \"react-bootstrap\";\nimport { useEffect, useState } from \"react\";\nimport { usePrevious } from \"app2/src/hooks/usePrevious\";\nimport { useDispatch } from \"react-redux\";\nimport { login, getQuoteList, getQuoteFull, getLineItemImage, BASE_URL } from \"app2/src/lib/fene_tech/api\";\nimport { Spinner } from \"app2/src/components/SpinnerComponent\";\nimport { IFenetechLineItem, IFenetechQuoteFullResponse } from \"app2/src/lib/fene_tech/types\";\nimport { FeneTechManufacturerRecord } from \"app2/src/records/FeneTechManufacturer\";\nimport { Nullable } from \"app2/src/records\";\nexport interface FeneTechModalProps {\n  openFeneTech: number;\n  initialManufacturer: Nullable<FeneTechManufacturerRecord>;\n  makeSelection: (data: IFenetechQuoteFullResponse) => void;\n}\n\nexport const FeneTechModal: React.FC<FeneTechModalProps> = ({ openFeneTech, makeSelection, initialManufacturer }) => {\n  // Hooks\n  const previousTriggerOpen = usePrevious(openFeneTech);\n  const dispatch = useDispatch();\n\n  // Local State\n  const [open, setOpen] = useState(false);\n  const [loginUrl, setLoginUrl] = useState(BASE_URL);\n  const [username, setUsername] = useState(\"\");\n  const [password, setPassword] = useState(\"\");\n  const [showQuotesList, setShowQuotesList] = useState(false);\n  const [quotesList, setQuotesList] = useState([]);\n  const [isLoading, setIsLoading] = useState(true);\n\n  // Methods\n  const hide = () => {\n    setOpen(false);\n    setShowQuotesList(false);\n    setLoginUrl(BASE_URL);\n    setPassword(\"\");\n    setUsername(\"\");\n  };\n\n  const onSubmit = async (e) => {\n    e.preventDefault();\n\n    setIsLoading(true);\n\n    const response: any = await login(loginUrl, username, password, \"standard\", dispatch);\n\n    if (response && response.status !== 401) {\n      setShowQuotesList(true);\n\n      const quotesListResponse = await getQuoteList(loginUrl, dispatch);\n      setQuotesList(quotesListResponse);\n    }\n\n    setIsLoading(false);\n  };\n\n  const selectQuote = async (oKey: number) => {\n    setIsLoading(true);\n    const response = await getQuoteFull(loginUrl, oKey, dispatch);\n\n    const promises = [];\n\n    if (response.lineItems) {\n      response.lineItems.forEach((line) => {\n        const lineItem = line.lineItem;\n        if (lineItem.thumbnailImageExists) {\n          promises.push(getImage(line, oKey, response.permissions.imageAccessKey));\n        }\n      });\n    }\n\n    await Promise.all(promises);\n\n    makeSelection(response);\n    setIsLoading(false);\n    hide();\n  };\n\n  const getImage = async (line: IFenetechLineItem, oKey: number, imageAccessKey: number) => {\n    const response = await getLineItemImage(loginUrl, oKey, line.lineItem.odKey, imageAccessKey, dispatch);\n    line.imageBlob = response;\n    return;\n  };\n\n  // Life Cycle\n  useEffect(() => {\n    if (openFeneTech !== 0 && previousTriggerOpen !== openFeneTech) {\n      setOpen(true);\n      setIsLoading(false);\n      setLoginUrl(initialManufacturer?.url || BASE_URL);\n    }\n  }, [openFeneTech]);\n\n  return (\n    <Modal show={open} onHide={hide} size=\"lg\" backdrop=\"static\">\n      <Modal.Header closeButton>\n        <Modal.Title>{initialManufacturer?.name || \"FeneVision WEB\"}</Modal.Title>\n      </Modal.Header>\n\n      <Spinner localProperty={isLoading} />\n\n      {!showQuotesList ? (\n        <Form onSubmit={onSubmit}>\n          <Modal.Body>\n            <Form.Group>\n              <Form.Label htmlFor=\"loginURL\">Login URL</Form.Label>\n              <Form.Control\n                type=\"text\"\n                id=\"loginURL\"\n                name=\"loginURL\"\n                value={loginUrl}\n                onChange={(e) => setLoginUrl(e.target.value)}\n                required\n                disabled={initialManufacturer ? true : false}\n              />\n            </Form.Group>\n\n            <Form.Group>\n              <Form.Label htmlFor=\"fenevisionWebUsername\">Fenevision Web Username</Form.Label>\n              <Form.Control\n                type=\"text\"\n                id=\"fenevisionWebUsername\"\n                name=\"fenevisionWebUsername\"\n                value={username}\n                onChange={(e) => setUsername(e.target.value)}\n                required\n              />\n            </Form.Group>\n\n            <Form.Group>\n              <Form.Label htmlFor=\"password\">Password</Form.Label>\n              <Form.Control\n                type=\"password\"\n                id=\"password\"\n                name=\"password\"\n                value={password}\n                onChange={(e) => setPassword(e.target.value)}\n                required\n              />\n            </Form.Group>\n          </Modal.Body>\n\n          <Modal.Footer>\n            <Button type=\"submit\">Login</Button>\n            <Button className=\"btn-cancel\" onClick={hide}>\n              Cancel\n            </Button>\n          </Modal.Footer>\n        </Form>\n      ) : (\n        showQuotesList && (\n          <>\n            <Modal.Body>\n              <Table striped bordered hover>\n                <thead>\n                  <tr>\n                    <th>Quote #</th>\n                    <th>Customer Ref</th>\n                    <th>PO Number</th>\n                    <th>Customer</th>\n                  </tr>\n                </thead>\n\n                <tbody>\n                  {quotesList.map((quote) => (\n                    <tr className=\"link\" key={quote.oKey} onClick={() => selectQuote(quote.oKey)}>\n                      <td>{quote.orderNumber}</td>\n                      <td>{quote.customerRef}</td>\n                      <td>{quote.poNumber}</td>\n                      <td>{quote.webCenterCustomerName}</td>\n                    </tr>\n                  ))}\n                </tbody>\n              </Table>\n            </Modal.Body>\n            <Modal.Footer>\n              <Button className=\"btn-cancel\" onClick={hide}>\n                Cancel\n              </Button>\n            </Modal.Footer>\n          </>\n        )\n      )}\n    </Modal>\n  );\n};\n","import * as React from \"react\";\nimport { Fragment } from \"react\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { SearchBox } from \"../../Common/SearchBox\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { OrgAclType, OrgPrefType } from \"app/src/Models/Org\";\nimport track from \"react-tracking\";\nimport { UserPrefConfigType } from \"app/src/Models/UserPreference\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { List } from \"immutable\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport {\n  cachedRootProducts,\n  cachedProductChildren,\n  cachedProduct,\n  cachedProductLeaves,\n} from \"app2/src/selectors/product.selectors\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { TokenRecord } from \"app2/src/records/Token\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { FeneTechModal } from \"app2/src/components/LineItemEditor/components/FeneTechModal\";\nimport { FeneTechManufacturerRecord } from \"app2/src/records/FeneTechManufacturer\";\nimport { Nullable } from \"app2/src/records\";\n\ninterface ProductSelectorProps {\n  activatedPriceListId: number;\n  lineItemProductId: number;\n  controller: any;\n  handleProductSelected: any;\n  handleOpeningSelected: any;\n  handleImportSelected: any;\n}\n\ninterface ProductSelectorState {\n  listOpen: boolean;\n  rootTree: boolean;\n  searching: boolean;\n  noMatch: boolean;\n  selectedProduct: ProductRecord;\n  currentSelection: List<ProductRecord>;\n  parent: ProductRecord;\n  parentParent: ProductRecord;\n  searchSelection: List<ProductRecord>;\n  searchText: string;\n  openFeneTech: number;\n  chosenManufacturer: Nullable<FeneTechManufacturerRecord>;\n}\n\nconst mapStateToProps = (state: RootState, _ownProps) => {\n  return {\n    proviaToken: token(state, { kind: \"provia\" }) as TokenRecord,\n    feneTechToken: token(state, { kind: \"fene_tech\" }) as TokenRecord,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, _ownProps) => ({\n  getProviaToken: () => dispatch(tokenActions.AsyncActions.getToken(_ownProps.controller.org.id, \"provia\")),\n  getFeneTechToken: () => dispatch(tokenActions.AsyncActions.getToken(_ownProps.controller.org.id, \"fene_tech\")),\n});\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype ProviaData = {\n  portal?: boolean;\n  non_portal?: boolean;\n  portal_id: string;\n};\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ProductSelectorProps;\n\n@track({ component: \"Product Selector\" })\nclass ProductSelector extends React.Component<Props, ProductSelectorState> {\n  public props: Props;\n  public state: ProductSelectorState;\n  public rootProducts: List<ProductRecord>;\n  public productLeaves: List<ProductRecord>;\n  public node: any;\n  public eventListener: any;\n\n  constructor(props) {\n    super(props);\n\n    const app = this;\n    this.eventListener = function (e) {\n      app.handleClick(e);\n    };\n\n    const { controller, lineItemProductId, activatedPriceListId } = this.props;\n    this.rootProducts = cachedRootProducts(StoreRegistry.getStore().getState(), {\n      activatedPriceListId: activatedPriceListId,\n      includeParent: true,\n    });\n    this.productLeaves = cachedProductLeaves(StoreRegistry.getStore().getState(), {\n      activatedPriceListId: activatedPriceListId,\n    });\n    let currentSelection = this.rootProducts;\n    let rootTree = true;\n    let est_tour = false;\n    controller.Session.fetchUserPref(UserPrefConfigType.estimator_tour).then((tour) => {\n      est_tour = tour;\n    });\n    const listOpen =\n      _.isUndefined(lineItemProductId) &&\n      controller.org.fetchPref(OrgPrefType.estimator).show_product_selector === \"always\" &&\n      !est_tour;\n    if (listOpen) {\n      this.mount();\n    }\n\n    const lineItemProduct = cachedProduct(StoreRegistry.getStore().getState(), {\n      activatedPriceListId: activatedPriceListId,\n      productId: lineItemProductId,\n    });\n\n    let parent: ProductRecord;\n    let parentParent: ProductRecord;\n    if (lineItemProduct && lineItemProduct.parent_id) {\n      rootTree = false;\n      currentSelection = this.productChildren(lineItemProduct.parent_id);\n      parent = this.product(lineItemProduct.parent_id);\n      if (parent.parent_id) {\n        parentParent = this.product(parent.parent_id);\n      }\n    }\n    this.state = {\n      listOpen: listOpen,\n      rootTree: rootTree,\n      searching: false,\n      noMatch: false,\n      searchText: \"\",\n      selectedProduct: lineItemProduct,\n      currentSelection: currentSelection,\n      parent: parent,\n      parentParent: parentParent,\n      searchSelection: this.productLeaves,\n      openFeneTech: 0,\n      chosenManufacturer: null,\n    };\n    this.searching = this.searching.bind(this);\n    this.makeFenetechSelection = this.makeFenetechSelection.bind(this);\n  }\n\n  public componentDidMount() {\n    this.props.getProviaToken();\n    this.props.getFeneTechToken();\n  }\n\n  @track((props, state) => ({\n    action: `product selector ${!state.listOpen ? \"shown\" : \"hidden\"}`,\n  }))\n  public toggleList() {\n    if (this.state.listOpen) {\n      this.unmount();\n      this.setCurrentSelection();\n    } else {\n      this.mount();\n    }\n    this.setState((prevState) => ({\n      listOpen: !prevState.listOpen,\n      searching: false,\n    }));\n  }\n\n  public productChildren(product_id: number) {\n    const { activatedPriceListId } = this.props;\n    return cachedProductChildren(StoreRegistry.getStore().getState(), {\n      activatedPriceListId: activatedPriceListId,\n      productId: product_id,\n    });\n  }\n\n  public product(product_id: number) {\n    const { activatedPriceListId } = this.props;\n    return cachedProduct(StoreRegistry.getStore().getState(), {\n      activatedPriceListId: activatedPriceListId,\n      productId: product_id,\n    });\n  }\n\n  public makeSelection(product: ProductRecord) {\n    const { controller } = this.props;\n    const { parent, parentParent } = this.parents(product.id);\n\n    if (product.children_ids.size <= 0) {\n      this.setState({\n        listOpen: false,\n        selectedProduct: product,\n        parent: parent,\n        parentParent: parentParent,\n      });\n      this.unmount();\n      this.props.handleProductSelected(product);\n    } else if (\n      _.include(controller.org.fetchSettingsAcl(OrgAclType.estimator), \"window\") &&\n      (product.kind === \"window\" || product.kind === \"door\")\n    ) {\n      this.setState({\n        listOpen: false,\n        selectedProduct: product,\n        parent: parent,\n        parentParent: parentParent,\n      });\n      this.unmount();\n      this.props.handleOpeningSelected(product);\n    } else {\n      this.setState({\n        currentSelection: this.productChildren(product.id),\n        parent: parent,\n        parentParent: parentParent,\n        rootTree: false,\n      });\n    }\n  }\n\n  public parents(product_id: number) {\n    const parent = this.product(product_id);\n    let parentParent: ProductRecord;\n    if (parent.parent_id) {\n      parentParent = this.product(parent.parent_id);\n    }\n    return { parent, parentParent };\n  }\n\n  public makeImportSelection() {\n    this.setState({\n      listOpen: false,\n    });\n    this.unmount();\n    this.props.handleImportSelected();\n  }\n\n  public makeFenetechSelection(data: any) {\n    this.setState({\n      listOpen: false,\n    });\n    this.unmount();\n    this.props.controller.feneTechOrderSelected(data);\n  }\n\n  public openFeneTech(manufacturer: Nullable<FeneTechManufacturerRecord>) {\n    const { openFeneTech } = this.state;\n    this.setState({\n      listOpen: false,\n      openFeneTech: openFeneTech + 1,\n      chosenManufacturer: manufacturer,\n    });\n  }\n\n  public backSelection() {\n    const { parent, parentParent } = this.state;\n    if (!parent || !parentParent) {\n      this.setState({\n        currentSelection: this.rootProducts,\n        parent: null,\n        parentParent: null,\n        rootTree: true,\n      });\n    } else {\n      const { parent: newParent, parentParent: newParentParent } = this.parents(parentParent.id);\n      this.setState({\n        currentSelection: this.productChildren(parentParent.id),\n        parent: newParent,\n        parentParent: newParentParent,\n        rootTree: false,\n      });\n    }\n  }\n\n  public searching(query) {\n    const searching = query.length > 0;\n    this.setState({\n      searchText: query,\n    });\n\n    if (searching) {\n      const lowercaseQuery = query.toLowerCase();\n      let products = List();\n      // Limiting search results to 500 due to the performance on customer devices (setState rendering)\n      for (let i = 0; i < this.productLeaves.size && products.size < 500; i++) {\n        const leaf = this.productLeaves.get(i);\n        if (leaf.ancestral_name_lowercase.indexOf(lowercaseQuery) >= 0) {\n          products = products.push(leaf);\n        }\n      }\n\n      this.setState({\n        searchSelection: products,\n        noMatch: products.size === 0,\n        searching: searching,\n      });\n    } else {\n      this.setState({\n        searching: searching,\n      });\n    }\n  }\n\n  public setCurrentSelection() {\n    const { activatedPriceListId } = this.props;\n    const { selectedProduct } = this.state;\n    let currentSelection = this.rootProducts;\n    let rootTree = true;\n    let parent: ProductRecord;\n    let parentParent: ProductRecord;\n    if (selectedProduct && selectedProduct.parent_id) {\n      currentSelection = cachedProductChildren(StoreRegistry.getStore().getState(), {\n        activatedPriceListId: activatedPriceListId,\n        productId: selectedProduct.parent_id,\n        includeParent: true,\n      });\n      parent = this.product(selectedProduct.parent_id);\n      if (parent.parent_id) {\n        parentParent = this.product(parent.parent_id);\n      }\n      rootTree = false;\n    }\n\n    this.setState({\n      currentSelection: currentSelection,\n      parent: parent,\n      parentParent: parentParent,\n      rootTree: rootTree,\n    });\n  }\n\n  public mount() {\n    document.addEventListener(\"mousedown\", this.eventListener, false);\n  }\n\n  public unmount() {\n    document.removeEventListener(\"mousedown\", this.eventListener, false);\n  }\n\n  public handleClick(e) {\n    if (this.node && this.node.contains(e.target)) {\n      return;\n    }\n    this.toggleList();\n  }\n\n  public boxName(provia, fileImport) {\n    let boxName = \"\";\n    let importIcon = null;\n\n    if (provia && fileImport) {\n      boxName = \"ProVia/Import\";\n      importIcon = <img className=\"img-responsive\" src=\"/assets/images/image-tools/provia-product-selector.bd408849.png\" />;\n    } else if (provia) {\n      boxName = \"ProVia\";\n      importIcon = <img className=\"img-responsive\" src=\"/assets/images/image-tools/provia-product-selector.bd408849.png\" />;\n    } else if (fileImport) {\n      boxName = \"Import\";\n      importIcon = <i className=\"fa fa-file-o fa-2x fa-gray\" />;\n    }\n    return [boxName, importIcon];\n  }\n\n  public render() {\n    const {\n      listOpen,\n      noMatch,\n      selectedProduct,\n      parent,\n      parentParent,\n      currentSelection,\n      searchSelection,\n      rootTree,\n      searching,\n      openFeneTech,\n      chosenManufacturer,\n    } = this.state;\n    const { controller, proviaToken, feneTechToken } = this.props;\n    const proviaObj = (proviaToken?.get(\"data\")?.toJSON() || {}) as ProviaData;\n    const feneTechEnabled = feneTechToken?.get(\"data\")?.get(\"enabled\") || false;\n\n    const provia = proviaObj.portal || proviaObj.non_portal;\n    const fileImport = controller.org.fetchPref(\"estimator\").show_product_file_upload === \"always\";\n    const [boxName, importIcon] = this.boxName(provia, fileImport);\n    const importEnabled = provia || fileImport;\n    const feneTechManufacturers = feneTechToken?.getIn([\"data\", \"manufacturers\"], List());\n\n    return (\n      <div className=\"product-selector-dropdown\" ref={(node) => (this.node = node)}>\n        <div className=\"dd-wrapper\" id=\"tour-step-product-selector\">\n          <div className=\"dd-header form-control\" onClick={() => this.toggleList()}>\n            {selectedProduct ? <div className=\"dd-header-title\">{selectedProduct.name}</div> : \"-- Select Product --\"}\n            {listOpen ? (\n              <FontAwesome name=\"caret-down fa-gray\" size=\"lg\" />\n            ) : (\n              <FontAwesome name=\"caret-up fa-gray\" size=\"lg\" />\n            )}\n          </div>\n          {listOpen ? (\n            <ul className=\"dd-list\">\n              <li className=\"dd-list-item search\">\n                <SearchBox\n                  searching={this.searching}\n                  placeholder={\"Search Products\"}\n                  query=\"\"\n                  autoFocus={!BrowserDetection.isMobileIOS()}\n                />\n              </li>\n              {rootTree && !searching && feneTechEnabled ? (\n                <>\n                  {feneTechManufacturers.size === 0 && (\n                    <li className=\"dd-list-item product\" onClick={() => this.openFeneTech(null)}>\n                      <div className=\"row\">\n                        <div className=\"col-12\">\n                          <span className=\"product-image\">\n                            <img className=\"img-responsive\" src=\"/assets/images/fene_tech.c090fcbf.png\" />\n                          </span>\n                          <span>FeneVision WEB</span>\n                        </div>\n                      </div>\n                    </li>\n                  )}\n                  {feneTechManufacturers.map((manufacturer) => {\n                    const image = feneTechToken\n                      .get(\"images\")\n                      .find((img) => img.get(\"uuid\") === manufacturer.get(\"image\"));\n                    return (\n                      <li\n                        key={manufacturer?.id}\n                        className=\"dd-list-item product\"\n                        onClick={() => this.openFeneTech(manufacturer)}>\n                        <div className=\"row\">\n                          <div className=\"col-12\">\n                            <span className=\"product-image\">\n                              {image ? (\n                                <img className=\"img-responsive\" src={getUrl(image, \"small\")} />\n                              ) : (\n                                <img className=\"img-responsive\" src=\"/assets/images/fene_tech.c090fcbf.png\" />\n                              )}\n                            </span>\n                            <span>{manufacturer?.name}</span>\n                          </div>\n                        </div>\n                      </li>\n                    );\n                  })}\n                </>\n              ) : null}\n              {rootTree && !searching && importEnabled ? (\n                <li className=\"dd-list-item product\" onClick={() => this.makeImportSelection()}>\n                  <div className=\"row\">\n                    <div className=\"col-12\">\n                      <span className=\"product-image\">{importIcon}</span>\n                      <span>{boxName}</span>\n                    </div>\n                  </div>\n                </li>\n              ) : null}\n              {rootTree || searching ? null : (\n                <li className=\"dd-list-item back\" onClick={() => this.backSelection()}>\n                  &nbsp;« Back to\n                  {parentParent ? \" \" + parentParent.name : \" All Products\"}\n                </li>\n              )}\n              {currentSelection.get(0) && parent && !searching ? (\n                <li className=\"dd-list-item parent product\">\n                  <div className=\"row\">\n                    <div className=\"col-12\">\n                      <span className=\"product-image\">\n                        {parent.images.size > 0 ? (\n                          <img className=\"img-responsive\" src={getUrl(parent.images.first(), \"small\")} />\n                        ) : (\n                          <Fragment>&nbsp;</Fragment>\n                        )}\n                      </span>\n                      <span>\n                        {parent.name}\n                        <FontAwesome name=\"caret-down\" size=\"lg\" className=\"pull-right centerit fa-gray\" />\n                      </span>\n                    </div>\n                  </div>\n                </li>\n              ) : null}\n              {searching ? (\n                <span>\n                  {searchSelection.map((product) => (\n                    <li className=\"dd-list-item product\" key={product.id} onClick={() => this.makeSelection(product)}>\n                      <div className=\"row\">\n                        <div className=\"col-12\">\n                          <div>{product.ancestral_name}</div>\n                        </div>\n                      </div>\n                    </li>\n                  ))}\n                  {noMatch ? (\n                    <li className=\"dd-list-item product\">\n                      <div className=\"row\">\n                        <div className=\"col-12\">\n                          <div>No Matches</div>\n                        </div>\n                      </div>\n                    </li>\n                  ) : null}\n                </span>\n              ) : (\n                <span>\n                  {currentSelection.map((product) => (\n                    <li className=\"dd-list-item product\" key={product.id} onClick={() => this.makeSelection(product)}>\n                      <div className=\"row\">\n                        <div className=\"col\">\n                          <span className=\"product-image\">\n                            {product.images.size > 0 ? (\n                              <img className=\"img-responsive\" src={getUrl(product.images.first(), \"small\")} />\n                            ) : (\n                              <Fragment>&nbsp;</Fragment>\n                            )}\n                          </span>\n                          <span>{product.name}</span>\n                        </div>\n                      </div>\n                    </li>\n                  ))}\n                </span>\n              )}\n            </ul>\n          ) : null}\n        </div>\n        <FeneTechModal\n          initialManufacturer={chosenManufacturer}\n          openFeneTech={openFeneTech}\n          makeSelection={this.makeFenetechSelection}\n        />\n      </div>\n    );\n  }\n}\n\nexport default connector(ProductSelector);\n","import * as React from \"react\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { valid_uom } from \"app/src/Common/Constants\";\nimport { IImage } from \"app/src/Models/Image\";\nimport { Col, Row, FormControl, FormLabel, Form } from \"react-bootstrap\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { DecimalInputComponent } from \"../../Common/DecimalInputComponent\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport { cachedProduct } from \"app2/src/selectors/product.selectors\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { preferencesConfig, presentModePreferencesConfig } from \"app2/src/selectors/org.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: LineItemInputProps) => {\n  const config = preferencesConfig(state, ownProps);\n  let markupEnabled = false;\n  if (config && config.get(\"markup\")) {\n    markupEnabled = config.getIn([\"markup\", \"enabled\"]);\n  }\n  const showPricingInLineItemEditor = presentModePreferencesConfig(state, {\n    path: [\"estimator\", \"show_pricing\", \"line_item_editor\"],\n  });\n\n  if (ownProps.lineItem.product_id) {\n    return {\n      markupEnabled,\n      product: cachedProduct(state, {\n        activatedPriceListId: ownProps.activatedPriceListId,\n        productId: ownProps.lineItem.product_id,\n      }),\n      showPricingInLineItemEditor,\n    };\n  } else {\n    return {\n      markupEnabled,\n      product: null,\n      showPricingInLineItemEditor,\n    };\n  }\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: LineItemInputProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface LineItemInputProps {\n  lineItem: IEstimateLineItem;\n  forceRender: number;\n  activatedPriceListId: number;\n  orgId: number;\n  handleNumberInputChange: (value: number, name: string) => void;\n  handleInputChange: (event) => void;\n  full: boolean;\n}\n\nexport interface LineItemInputState {\n  priceEdit: boolean;\n  markup: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & LineItemInputProps;\n\nclass LineItemInput extends React.Component<Props, LineItemInputState> {\n  public props: Props;\n  public state: LineItemInputState;\n\n  constructor(props) {\n    super(props);\n    const { lineItem } = props;\n    this.state = {\n      priceEdit: lineItem.isCustom(),\n      markup: lineItem.markupable !== \"no\",\n    };\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const { product, lineItem } = this.props;\n\n    const priceEdit =\n      (product && product.product_price === 0 && product.labor_price === 0) || this.props.lineItem.isCustom();\n    if (priceEdit && !prevState.priceEdit) {\n      this.setState({\n        priceEdit: priceEdit,\n        markup: lineItem.markupable !== \"no\",\n      });\n    }\n  }\n\n  public lineItemImage(): string {\n    const { lineItem, product, full } = this.props;\n    const images = _.filter(lineItem.images, (img: IImage) => {\n      return !img._destroy;\n    });\n\n    if (images.length > 0 && full) {\n      return images[0].getUrl(\"medium\");\n    }\n\n    if (product && product.images && product.images.size > 0 && full) {\n      return getUrl(product.images.first(), \"medium\");\n    }\n\n    return \"false\";\n  }\n\n  public toggleEditing = () => {\n    if (this.props.lineItem.isCustom() || Acl.can(\"update_pricing\", \"estimate\")) {\n      this.setState((state: LineItemInputState) => {\n        return {\n          priceEdit: !state.priceEdit,\n        };\n      });\n    }\n  };\n\n  public handleMarkupChange = (event) => {\n    this.setState({ markup: event.target.checked });\n    event.target.value = event.target.checked ? \"yes\" : \"no\";\n    this.props.handleInputChange(event);\n  };\n\n  public productName() {\n    const { name } = this.props.lineItem;\n    const { handleInputChange } = this.props;\n\n    return (\n      <React.Fragment>\n        <FormControl\n          id=\"estimate-li-name\"\n          type=\"text\"\n          name=\"name\"\n          value={name}\n          title=\"Name\"\n          onChange={handleInputChange}\n        />\n        <br />\n        {this.lineItemImage() === \"false\" ? null : <img className=\"pull-right\" src={this.lineItemImage()} />}\n      </React.Fragment>\n    );\n  }\n\n  public render() {\n    const { description, quantity, uom, price, ext_price, base_product_price, base_labor_price } = this.props.lineItem;\n    const { handleInputChange, handleNumberInputChange, full, markupEnabled, showPricingInLineItemEditor } = this.props;\n    let pricing = null;\n    let descriptionRow = 6;\n    let descriptionCol = 3;\n    if (full) {\n      pricing = (\n        <Col md={5} className=\"no-padding\">\n          <Row>\n            <Col md={showPricingInLineItemEditor ? 6 : 12} lg={showPricingInLineItemEditor ? 5 : 12}>\n              <Row>\n                <Col lg={6}>\n                  <DecimalInputComponent\n                    id=\"estimate-li-quantity\"\n                    type=\"number\"\n                    name=\"quantity\"\n                    title=\"Quantity\"\n                    value={quantity}\n                    onNumberChange={handleNumberInputChange}\n                  />\n                </Col>\n                <Col lg={6}>\n                  <FormControl as=\"select\" name=\"uom\" id=\"uom\" value={uom} title=\"Unit\" onChange={handleInputChange}>\n                    {valid_uom.map((item) => (\n                      <option key={item} value={item}>\n                        {item}\n                      </option>\n                    ))}\n                  </FormControl>\n                </Col>\n              </Row>\n            </Col>\n            {showPricingInLineItemEditor ? (\n              <Col md={6} lg={7}>\n                <Row>\n                  <Col lg={6} onClick={this.toggleEditing}>\n                    {/*\n                     * https://tberrysoln.atlassian.net/browse/RSF-16026\n                     * Some browsers don't propagate/bubble events on 'disabled' inputs.\n                     * Firefox hasn't for a long time and we have reports and are able to reproduce similar in Chrome/Edge.\n                     * Adding this `pointer-events: none` fixes that swallowing of events.\n                     */}\n                    <FormControl\n                      type=\"number\"\n                      name=\"price\"\n                      value={price.toString()}\n                      disabled={true}\n                      style={{ \"pointer-events\": \"none\" } as any}\n                      title=\"Unit Price\"\n                    />\n                  </Col>\n                  <Col lg={6}>\n                    <FormControl\n                      type=\"number\"\n                      name=\"ext_price\"\n                      value={ext_price.toString()}\n                      disabled={true}\n                      title=\"Total Price\"\n                    />\n                  </Col>\n                </Row>\n              </Col>\n            ) : null}\n          </Row>\n          <Row>\n            {this.state.priceEdit && showPricingInLineItemEditor ? (\n              <Col lg={{ span: 7, offset: 5 }}>\n                <Row>\n                  <Col sm={6}>\n                    <FormLabel>Product</FormLabel>\n                    <DecimalInputComponent\n                      id=\"estimate_li_base_product_price\"\n                      type=\"number\"\n                      name=\"base_product_price\"\n                      min=\"-9999999\"\n                      max=\"9999999\"\n                      title=\"Product Price\"\n                      value={base_product_price}\n                      onNumberChange={handleNumberInputChange}\n                    />\n                  </Col>\n                  <Col sm={6}>\n                    <FormLabel>Labor</FormLabel>\n                    <DecimalInputComponent\n                      id=\"estimate_li_base_labor_price\"\n                      type=\"number\"\n                      name=\"base_labor_price\"\n                      min=\"-9999999\"\n                      max=\"9999999\"\n                      title=\"Labor Price\"\n                      value={base_labor_price}\n                      onNumberChange={handleNumberInputChange}\n                    />\n                  </Col>\n                </Row>\n                {Acl.can(\"update_markup\", \"estimate\") && markupEnabled && (\n                  <Row>\n                    <Col className=\"text-center\">\n                      <Form.Group>\n                        <Form.Check\n                          id=\"estimate_li_markup_checkbox\"\n                          name=\"markupable\"\n                          type=\"checkbox\"\n                          inline\n                          label=\"Markup\"\n                          checked={this.state.markup}\n                          onChange={this.handleMarkupChange}\n                        />\n                      </Form.Group>\n                    </Col>\n                  </Row>\n                )}\n              </Col>\n            ) : null}\n          </Row>\n        </Col>\n      );\n    } else {\n      descriptionRow = 3;\n      descriptionCol = 5;\n      pricing = (\n        <Col md={3}>\n          <FormControl\n            type=\"number\"\n            name=\"base_product_price\"\n            value={base_product_price.toString()}\n            title=\"Product Price\"\n            min=\"-9999999\"\n            max=\"9999999\"\n            onChange={handleInputChange}\n          />\n        </Col>\n      );\n    }\n\n    return (\n      <div className=\"line-item-input\">\n        <Row>\n          <Col md={4}>{this.productName()}</Col>\n          <Col md={descriptionCol}>\n            <FormControl\n              id=\"estimate-li-description\"\n              as=\"textarea\"\n              name=\"description\"\n              value={description}\n              onChange={handleInputChange}\n              title=\"Description\"\n              rows={descriptionRow}\n            />\n          </Col>\n          {pricing}\n        </Row>\n      </div>\n    );\n  }\n}\n\nexport default connector(LineItemInput);\n","import * as React from \"react\";\nimport { Card, Accordion, Table } from \"react-bootstrap\";\n\nexport interface MeasurementCardProps {\n  name: string;\n  children: JSX.Element;\n}\n\nexport const BaseMeasurementCard: React.FunctionComponent<MeasurementCardProps> = (props: MeasurementCardProps) => {\n  const { name, children } = props;\n\n  return (\n    <Card>\n      <Accordion>\n        <Accordion.Toggle data-testid=\"toggle\" className=\"link\" as={Card.Header} eventKey={name}>\n          {name}\n        </Accordion.Toggle>\n        <Accordion.Collapse eventKey={name} data-testid=\"collapse\">\n          <Card.Body>\n            <Table striped size=\"sm\">\n              <thead></thead>\n              <tbody data-testid=\"tbody-children\">{children}</tbody>\n            </Table>\n          </Card.Body>\n        </Accordion.Collapse>\n      </Accordion>\n    </Card>\n  );\n};\n","import * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\n\nexport interface UsageButtonsProps {\n  value: number;\n  uom: string;\n  handleClick: (value: number, action: string, uom: string) => void;\n}\n\nexport const UsageButtons: React.FunctionComponent<UsageButtonsProps> = (props: UsageButtonsProps) => {\n  const { value, uom, handleClick } = props;\n\n  return (\n    <>\n      <Button\n        data-testid=\"minus\"\n        className=\"opening-ui-minus\"\n        size=\"sm\"\n        onClick={() => {\n          handleClick(value, \"-\", uom);\n        }}>\n        -\n      </Button>\n      <Button\n        data-testid=\"use\"\n        className=\"opening-ui-use\"\n        size=\"sm\"\n        onClick={() => {\n          handleClick(value, \"use\", uom);\n        }}>\n        Use\n      </Button>\n      <Button\n        data-testid=\"plus\"\n        className=\"opening-ui-plus\"\n        size=\"sm\"\n        onClick={() => {\n          handleClick(value, \"+\", uom);\n        }}>\n        +\n      </Button>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Nullable } from \"app2/src/records\";\nimport { FencingRecord } from \"app2/src/records/measurements/Fencing\";\nimport { BaseMeasurementCard } from \"./BaseMeasurementCard\";\nimport { UsageButtons } from \"./UsageButtons\";\n\nexport interface FencingMeasurementCardProps {\n  fencing: FencingRecord;\n  handleClick: (value: number, action: string, uom: string) => void;\n}\n\nexport class FencingMeasurementCard extends React.Component<FencingMeasurementCardProps> {\n  public panels4: Nullable<number> = null;\n  public panels6: Nullable<number> = null;\n  public panels8: Nullable<number> = null;\n  public segmentCount: Nullable<number> = null;\n\n  public constructor(props) {\n    super(props);\n\n    this.panelsCount = this.panelsCount.bind(this);\n  }\n\n  public panelsCount(size: 4 | 6 | 8): number {\n    const { fencing } = this.props;\n\n    if (!this.segmentCount) {\n      this.segmentCount = fencing.fences.reduce((sum, f) => f.segmentIds.size + sum, 0);\n    }\n    switch (size) {\n      case 4:\n        if (!this.panels4) {\n          this.panels4 = fencing.linePosts4 + this.segmentCount;\n        }\n\n        return this.panels4;\n\n      case 6:\n        if (!this.panels6) {\n          this.panels6 = fencing.linePosts6 + this.segmentCount;\n        }\n\n        return this.panels6;\n      case 8:\n        if (!this.panels8) {\n          this.panels8 = fencing.linePosts8 + this.segmentCount;\n        }\n\n        return this.panels8;\n    }\n  }\n\n  public render() {\n    const { fencing, handleClick } = this.props;\n\n    return (\n      <BaseMeasurementCard name=\"Fencing\">\n        <>\n          <tr>\n            <td>Fencing Totals</td>\n            <td data-testid=\"line-posts-4\">4' Line Posts ({fencing.linePosts4})</td>\n            <td data-testid=\"line-posts-4-btns\">\n              <UsageButtons value={fencing.linePosts4} uom={\"ea\"} handleClick={handleClick} />\n            </td>\n            <td data-testid=\"panels-4\">4' Panels ({this.panelsCount(4)})</td>\n            <td data-testid=\"panels-4-btns\">\n              <UsageButtons value={this.panelsCount(4)} uom={\"ea\"} handleClick={handleClick} />\n            </td>\n          </tr>\n          <tr>\n            <td>Fencing Totals</td>\n            <td data-testid=\"line-posts-6\">6' Line Posts ({fencing.linePosts6})</td>\n            <td data-testid=\"line-posts-6-btns\">\n              <UsageButtons value={fencing.linePosts6} uom={\"ea\"} handleClick={handleClick} />\n            </td>\n            <td data-testid=\"panels-6\">6' Panels ({this.panelsCount(6)})</td>\n            <td data-testid=\"panels-6-btns\">\n              <UsageButtons value={this.panelsCount(6)} uom={\"ea\"} handleClick={handleClick} />\n            </td>\n          </tr>\n          <tr>\n            <td>Fencing Totals</td>\n            <td data-testid=\"line-posts-8\">8' Line Posts ({fencing.linePosts8})</td>\n            <td data-testid=\"line-posts-8-btns\">\n              <UsageButtons value={fencing.linePosts8} uom={\"ea\"} handleClick={handleClick} />\n            </td>\n            <td data-testid=\"panels-8\">8' Panels ({this.panelsCount(8)})</td>\n            <td data-testid=\"panels-8-btns\">\n              <UsageButtons value={this.panelsCount(8)} uom={\"ea\"} handleClick={handleClick} />\n            </td>\n          </tr>\n          <tr>\n            <td>Fencing Totals</td>\n            <td data-testid=\"terminal-posts\">Terminal Posts ({fencing.terminalPosts + fencing.gateCount * 2})</td>\n            <td data-testid=\"terminal-posts-btns\">\n              <UsageButtons\n                value={fencing.terminalPosts + fencing.gateCount * 2}\n                uom={\"ea\"}\n                handleClick={handleClick}\n              />\n            </td>\n            <td data-testid=\"corner-posts\">Corner Posts ({fencing.cornerPosts})</td>\n            <td data-testid=\"corner-posts-btns\">\n              <UsageButtons value={fencing.cornerPosts} uom={\"ea\"} handleClick={handleClick} />\n            </td>\n          </tr>\n          <tr>\n            <td>Fencing Totals</td>\n            <td data-testid=\"gate-count\">Gate Count ({fencing.gateCount})</td>\n            <td data-testid=\"gate-count-btns\">\n              <UsageButtons value={fencing.gateCount} uom={\"ea\"} handleClick={handleClick} />\n            </td>\n            <td data-testid=\"gate-length\">Gate Length ({fencing.gateLength}')</td>\n            <td data-testid=\"gate-length-btns\">\n              <UsageButtons value={fencing.gateLength} uom={\"ft\"} handleClick={handleClick} />\n            </td>\n          </tr>\n          <tr>\n            <td>Fencing Totals</td>\n            <td data-testid=\"net-length\">Net Length ({fencing.netLength}')</td>\n            <td data-testid=\"net-length-btns\">\n              <UsageButtons value={fencing.netLength} uom={\"ft\"} handleClick={handleClick} />\n            </td>\n            <td data-testid=\"total-length\">Total Length ({fencing.totalLength}')</td>\n            <td data-testid=\"total-length-btns\">\n              <UsageButtons value={fencing.totalLength} uom={\"ft\"} handleClick={handleClick} />\n            </td>\n          </tr>\n          {fencing.fences.map((fence, idx) => (\n            <React.Fragment key={idx}>\n              <tr>\n                <td>Fence {idx + 1}</td>\n                <td data-testid=\"fence-line-posts-4\">4' Line Posts ({fence.linePosts4})</td>\n                <td data-testid=\"fence-btns-line-posts-4\">\n                  <UsageButtons value={fence.linePosts4} uom={\"ea\"} handleClick={handleClick} />\n                </td>\n                <td data-testid=\"fence-panels-4\">4' Panels ({fence.linePosts4 + fence.segments.size})</td>\n                <td data-testid=\"fence-btns-panels-4\">\n                  <UsageButtons value={fence.linePosts4 + fence.segments.size} uom={\"ea\"} handleClick={handleClick} />\n                </td>\n              </tr>\n              <tr>\n                <td>Fence {idx + 1}</td>\n                <td data-testid=\"fence-line-posts-6\">6' Line Posts ({fence.linePosts6})</td>\n                <td data-testid=\"fence-btns-line-posts-6\">\n                  <UsageButtons value={fence.linePosts6} uom={\"ea\"} handleClick={handleClick} />\n                </td>\n                <td data-testid=\"fence-panels-6\">6' Panels ({fence.linePosts6 + fence.segments.size})</td>\n                <td data-testid=\"fence-btns-panels-6\">\n                  <UsageButtons value={fence.linePosts6 + fence.segments.size} uom={\"ea\"} handleClick={handleClick} />\n                </td>\n              </tr>\n              <tr>\n                <td>Fence {idx + 1}</td>\n                <td data-testid=\"fence-line-posts-8\">8' Line Posts ({fence.linePosts8})</td>\n                <td data-testid=\"fence-btns-line-posts-8\">\n                  <UsageButtons value={fence.linePosts8} uom={\"ea\"} handleClick={handleClick} />\n                </td>\n                <td data-testid=\"fence-panels-8\">8' Panels ({fence.linePosts8 + fence.segments.size})</td>\n                <td data-testid=\"fence-btns-panels-8\">\n                  <UsageButtons value={fence.linePosts8 + fence.segments.size} uom={\"ea\"} handleClick={handleClick} />\n                </td>\n              </tr>\n              <tr>\n                <td>Fence {idx + 1}</td>\n                <td data-testid=\"fence-terminal-posts\">Terminal Posts ({fence.terminalPosts + fence.gateCount * 2})</td>\n                <td data-testid=\"fence-btns-terminal-posts\">\n                  <UsageButtons\n                    value={fence.terminalPosts + fence.gateCount * 2}\n                    uom={\"ea\"}\n                    handleClick={handleClick}\n                  />\n                </td>\n                <td data-testid=\"fence-corner-posts\">Corner Posts ({fence.cornerPosts})</td>\n                <td data-testid=\"fence-btns-corner-posts\">\n                  <UsageButtons value={fence.cornerPosts} uom={\"ea\"} handleClick={handleClick} />\n                </td>\n              </tr>\n              <tr>\n                <td>Fence {idx + 1}</td>\n                <td data-testid=\"fence-gate-count\">Gate Count ({fence.gateCount})</td>\n                <td data-testid=\"fence-btns-gate-count\">\n                  <UsageButtons value={fence.gateCount} uom={\"ea\"} handleClick={handleClick} />\n                </td>\n                <td data-testid=\"fence-gate-length\">Gate Length ({fence.gateLength}')</td>\n                <td data-testid=\"fence-btns-gate-length\">\n                  <UsageButtons value={fence.gateLength} uom={\"ft\"} handleClick={handleClick} />\n                </td>\n              </tr>\n              <tr>\n                <td>Fence {idx + 1}</td>\n                <td data-testid=\"fence-net-length\">Net Length ({fence.netLength}')</td>\n                <td data-testid=\"fence-btns-net-length\">\n                  <UsageButtons value={fence.netLength} uom={\"ft\"} handleClick={handleClick} />\n                </td>\n                <td data-testid=\"fence-total-length\">Total Length ({fence.totalLength}')</td>\n                <td data-testid=\"fence-btns-total-length\">\n                  <UsageButtons value={fence.totalLength} uom={\"ft\"} handleClick={handleClick} />\n                </td>\n              </tr>\n              {fence.segments.map((segment, sidx) => (\n                <React.Fragment key={sidx}>\n                  <tr>\n                    <td>{segment.name}</td>\n                    <td data-testid=\"segment-line-posts-4\">4' Line Posts ({segment.linePosts4})</td>\n                    <td data-testid=\"segment-btns-line-posts-4\">\n                      <UsageButtons value={segment.linePosts4} uom={\"ea\"} handleClick={handleClick} />\n                    </td>\n                    <td data-testid=\"segment-panels-4\">4' Panels ({segment.linePosts4 + 1})</td>\n                    <td data-testid=\"segment-btns-panels-4\">\n                      <UsageButtons value={segment.linePosts4 + 1} uom={\"ea\"} handleClick={handleClick} />\n                    </td>\n                  </tr>\n                  <tr>\n                    <td>{segment.name}</td>\n                    <td data-testid=\"segment-line-posts-6\">6' Line Posts ({segment.linePosts6})</td>\n                    <td data-testid=\"segment-btns-line-posts-6\">\n                      <UsageButtons value={segment.linePosts6} uom={\"ea\"} handleClick={handleClick} />\n                    </td>\n                    <td data-testid=\"segment-panels-6\">6' Panels ({segment.linePosts6 + 1})</td>\n                    <td data-testid=\"segment-btns-panels-6\">\n                      <UsageButtons value={segment.linePosts6 + 1} uom={\"ea\"} handleClick={handleClick} />\n                    </td>\n                  </tr>\n                  <tr>\n                    <td>{segment.name}</td>\n                    <td data-testid=\"segment-line-posts-8\">8' Line Posts ({segment.linePosts8})</td>\n                    <td data-testid=\"segment-btns-line-posts-8\">\n                      <UsageButtons value={segment.linePosts8} uom={\"ea\"} handleClick={handleClick} />\n                    </td>\n                    <td data-testid=\"segment-panels-8\">8' Panels ({segment.linePosts8 + 1})</td>\n                    <td data-testid=\"segment-btns-panels-8\">\n                      <UsageButtons value={segment.linePosts8 + 1} uom={\"ea\"} handleClick={handleClick} />\n                    </td>\n                  </tr>\n                  <tr>\n                    <td>{segment.name}</td>\n                    <td data-testid=\"segment-net-length\">Net Length ({segment.netLength}')</td>\n                    <td data-testid=\"segment-btns-net-length\">\n                      <UsageButtons value={segment.netLength} uom={\"ft\"} handleClick={handleClick} />\n                    </td>\n                    <td data-testid=\"segment-total-length\">Total Length ({segment.length}')</td>\n                    <td data-testid=\"segment-btns-total-length\">\n                      <UsageButtons value={segment.length} uom={\"ft\"} handleClick={handleClick} />\n                    </td>\n                  </tr>\n                </React.Fragment>\n              ))}\n            </React.Fragment>\n          ))}\n        </>\n      </BaseMeasurementCard>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Accordion, Card, Table, Button } from \"react-bootstrap\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport track from \"react-tracking\";\nimport { getUoM, keysWithValues, MeasurementRecord } from \"app2/src/records/Measurement\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { roofFaces } from \"app2/src/selectors/roofFace.selectors\";\nimport { wallFacades } from \"app2/src/selectors/wallFacade.selectors\";\nimport { windows } from \"app2/src/selectors/window.selectors\";\nimport { doors } from \"app2/src/selectors/door.selectors\";\nimport { decks } from \"app2/src/selectors/deck.selectors\";\nimport { pools } from \"app2/src/selectors/pool.selectors\";\nimport { measurementIdFullFencing } from \"app2/src/selectors/measurements/fencing.selectors\";\nimport { FencingMeasurementCard } from \"./MeasurementCards/FencingMeasurementCard\";\nimport { MeasurementSection } from \"app2/src/records/OrgRecord\";\nimport { showMeasurementSection } from \"app2/src/selectors/measurement.selectors\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\nconst mapStateToProps = (state: RootState, ownProps: MeasurementsTabProps) => {\n  return {\n    roofFaces: roofFaces(state, { roofFaceIds: ownProps.measurement.roof_face_ids }),\n    wallFacades: wallFacades(state, { wallFacadeIds: ownProps.measurement.wall_facade_ids }),\n    windows: windows(state, { windowIds: ownProps.measurement.window_ids }),\n    doors: doors(state, { doorIds: ownProps.measurement.door_ids }),\n    decks: decks(state, { deckIds: ownProps.measurement.deck_ids }),\n    pools: pools(state, { poolIds: ownProps.measurement.pool_ids }),\n    fencing: measurementIdFullFencing(state, { measurementId: ownProps.measurement.id }),\n    showMeasurementSection: (section: MeasurementSection) =>\n      showMeasurementSection(state, { location: \"line_item_editor\", section }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: MeasurementsTabProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface MeasurementsTabProps {\n  measurement: MeasurementRecord;\n  handleUseMeasurement: (value: number, type: string, uom: string) => void;\n  tracking?: any;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & MeasurementsTabProps;\n\n@track({ component: \"Measurements Tab\" })\nclass MeasurementsTab extends React.Component<Props> {\n  public Pretty: IPretty;\n  public props: Props;\n  public uom: any;\n  public roofingKeys: string[];\n  public sidingKeys: string[];\n  public sunroomKeys: string[];\n\n  constructor(props) {\n    super(props);\n    const { measurement } = props;\n\n    this.uom = getUoM(measurement);\n    this.roofingKeys = keysWithValues(measurement, \"roof\");\n    this.sidingKeys = keysWithValues(measurement, \"siding\");\n    this.sunroomKeys = keysWithValues(measurement, \"sunroom\");\n    this.Pretty = StoreRegistry.get(\"Pretty\");\n    this.handleClick = this.handleClick.bind(this);\n  }\n\n  public handleClick(value: number, type: string, uom: string) {\n    this.props.tracking.trackEvent({\n      action: \"use measurement\",\n      quantity: value,\n      type: type,\n      uom: uom,\n    });\n    this.props.handleUseMeasurement(value, type, uom);\n  }\n\n  public measurementCard(name, rows) {\n    return (\n      <Card key={name}>\n        <Accordion.Toggle className=\"link\" as={Card.Header} eventKey={name}>\n          {name}\n        </Accordion.Toggle>\n        <Accordion.Collapse eventKey={name}>\n          <Card.Body>\n            <Table striped size=\"sm\">\n              <thead></thead>\n              <tbody>{rows}</tbody>\n            </Table>\n          </Card.Body>\n        </Accordion.Collapse>\n      </Card>\n    );\n  }\n\n  public measurementRow(key) {\n    const { measurement } = this.props;\n\n    return (\n      <tr key={key}>\n        <td>{this.Pretty.name[key]}</td>\n        <td>\n          {measurement.get(key)} {this.uom[key]}\n        </td>\n        <td>\n          <Button\n            className=\"measurement-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(measurement.get(key), \"-\", this.uom[key]);\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"measurement-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(measurement.get(key), \"use\", this.uom[key]);\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"measurement-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(measurement.get(key), \"+\", this.uom[key]);\n            }}>\n            +\n          </Button>\n        </td>\n      </tr>\n    );\n  }\n\n  public faceRow(face, include_pitch) {\n    return (\n      <tr key={face.id}>\n        <td>{face.designator}</td>\n        {include_pitch ? <td>{face.pitch}/12</td> : null}\n        <td>\n          {face.area} {this.uom[\"roof_face_area\"]}\n        </td>\n        <td>\n          <Button\n            className=\"face-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(face.area, \"-\", this.uom[\"roof_face_area\"]);\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"face-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(face.area, \"use\", this.uom[\"roof_face_area\"]);\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"face-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(face.area, \"+\", this.uom[\"roof_face_area\"]);\n            }}>\n            +\n          </Button>\n        </td>\n      </tr>\n    );\n  }\n\n  public openingRow(opening, include_ui) {\n    return (\n      <tr key={opening.id}>\n        <td>{opening.name}</td>\n        <td>\n          {opening.width}\"x{opening.height}\"\n        </td>\n        {include_ui ? <td>{opening.ui}\" UI</td> : null}\n        {include_ui ? (\n          <td>\n            <Button\n              className=\"opening-ui-minus\"\n              size=\"sm\"\n              onClick={() => {\n                this.handleClick(opening.ui, \"-\", \"ui\");\n              }}>\n              -\n            </Button>\n            <Button\n              className=\"opening-ui-use\"\n              size=\"sm\"\n              onClick={() => {\n                this.handleClick(opening.ui, \"use\", \"ui\");\n              }}>\n              Use\n            </Button>\n            <Button\n              className=\"opening-ui-plus\"\n              size=\"sm\"\n              onClick={() => {\n                this.handleClick(opening.ui, \"+\", \"ui\");\n              }}>\n              +\n            </Button>\n          </td>\n        ) : null}\n        <td>{opening.area} sqft</td>\n        <td>\n          <Button\n            className=\"opening-area-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(opening.area, \"-\", \"sqft\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"opening-area-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(opening.area, \"use\", \"sqft\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"opening-area-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(opening.area, \"+\", \"sqft\");\n            }}>\n            +\n          </Button>\n        </td>\n      </tr>\n    );\n  }\n\n  public deckRow(deck) {\n    return (\n      <tr key={deck.id}>\n        <td>{deck.name}</td>\n        <td>\n          Area: {deck.area} sqft\n          <br />\n          <Button\n            className=\"deck-area-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.area, \"-\", \"sqft\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"deck-area-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.area, \"use\", \"sqft\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"deck-area-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.area, \"+\", \"sqft\");\n            }}>\n            +\n          </Button>\n        </td>\n        <td>\n          Perimeter: {deck.perimeter} lft\n          <br />\n          <Button\n            className=\"deck-perimeter-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.perimeter, \"-\", \"lft\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"deck-perimeter-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.perimeter, \"use\", \"lft\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"deck-perimeter-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.perimeter, \"+\", \"lft\");\n            }}>\n            +\n          </Button>\n        </td>\n        <td>\n          Wall Length: {deck.wall_length} lft\n          <br />\n          <Button\n            className=\"deck-wl-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.wall_length, \"-\", \"lft\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"deck-wl-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.wall_length, \"use\", \"lft\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"deck-wl-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.wall_length, \"+\", \"lft\");\n            }}>\n            +\n          </Button>\n        </td>\n        <td>\n          Railing Length: {deck.railing_length}\n          <br />\n          <Button\n            className=\"deck-rl-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.railing_length, \"-\", \"ea\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"deck-rl-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.railing_length, \"use\", \"ea\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"deck-rl-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.railing_length, \"+\", \"ea\");\n            }}>\n            +\n          </Button>\n        </td>\n        <td>\n          Railing Area: {deck.railing_area}\n          <br />\n          <Button\n            className=\"deck-ra-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.railing_area, \"-\", \"ea\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"deck-ra-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.railing_area, \"use\", \"ea\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"deck-ra-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(deck.railing_area, \"+\", \"ea\");\n            }}>\n            +\n          </Button>\n        </td>\n      </tr>\n    );\n  }\n\n  public poolRow(pool) {\n    return (\n      <tr key={pool.id}>\n        <td>{pool.name}</td>\n        <td>\n          Area: {pool.area} sqft\n          <br />\n          <Button\n            className=\"pool-area-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.area, \"-\", \"sqft\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"pool-area-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.area, \"use\", \"sqft\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"pool-area-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.area, \"+\", \"sqft\");\n            }}>\n            +\n          </Button>\n        </td>\n        <td>\n          Perimeter: {pool.perimeter} lft\n          <br />\n          <Button\n            className=\"pool-perimeter-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.perimeter, \"-\", \"lft\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"pool-perimeter-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.perimeter, \"use\", \"lft\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"pool-perimeter-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.perimeter, \"+\", \"lft\");\n            }}>\n            +\n          </Button>\n        </td>\n        <td>\n          Average Pool Depth: {pool.average_depth} lft\n          <br />\n          <Button\n            className=\"pool-ad-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.average_depth, \"-\", \"lft\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"pool-ad-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.average_depth, \"use\", \"lft\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"pool-ad-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.average_depth, \"+\", \"lft\");\n            }}>\n            +\n          </Button>\n        </td>\n        <td>\n          Gallons: {pool.volume}\n          <br />\n          <Button\n            className=\"pool-volume-minus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.volume, \"-\", \"ea\");\n            }}>\n            -\n          </Button>\n          <Button\n            className=\"pool-volume-use\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.volume, \"use\", \"ea\");\n            }}>\n            Use\n          </Button>\n          <Button\n            className=\"pool-volume-plus\"\n            size=\"sm\"\n            onClick={() => {\n              this.handleClick(pool.volume, \"+\", \"ea\");\n            }}>\n            +\n          </Button>\n        </td>\n      </tr>\n    );\n  }\n\n  public showMeasurement(what) {\n    return this.props.showMeasurementSection(what);\n  }\n\n  public render() {\n    const { roofFaces, wallFacades, windows, doors, decks, pools, fencing } = this.props;\n    const panels = [];\n\n    if (this.roofingKeys.length > 0 && this.showMeasurement(\"roofing\")) {\n      const rows = [];\n      this.roofingKeys.map((k) => {\n        rows.push(this.measurementRow(k));\n      });\n      panels.push(this.measurementCard(\"Roofing\", rows));\n    }\n    if (this.sidingKeys.length > 0 && this.showMeasurement(\"siding\")) {\n      const rows = [];\n      this.sidingKeys.map((k) => {\n        rows.push(this.measurementRow(k));\n      });\n      panels.push(this.measurementCard(\"Siding\", rows));\n    }\n    if (windows && windows.size > 0 && this.showMeasurement(\"windows\")) {\n      const rows = [];\n      windows.map((win) => {\n        rows.push(this.openingRow(win, true));\n      });\n      panels.push(this.measurementCard(`Windows (${rows.length})`, rows));\n    }\n    if (doors && doors.size > 0 && this.showMeasurement(\"doors\")) {\n      const rows = [];\n      doors.map((door) => {\n        rows.push(this.openingRow(door, false));\n      });\n      panels.push(this.measurementCard(`Doors (${rows.length})`, rows));\n    }\n    if (roofFaces && roofFaces.size > 0 && this.showMeasurement(\"roof_faces\")) {\n      const rows = [];\n      roofFaces.map((rf) => {\n        rows.push(this.faceRow(rf, true));\n      });\n      panels.push(this.measurementCard(`Roof Faces (${rows.length})`, rows));\n    }\n    if (wallFacades && wallFacades.size > 0 && this.showMeasurement(\"walls\")) {\n      const rows = [];\n      wallFacades.map((wf) => {\n        rows.push(this.faceRow(wf, false));\n      });\n      panels.push(this.measurementCard(`Walls (${rows.length})`, rows));\n    }\n    if (this.sunroomKeys.length > 0 && this.showMeasurement(\"sunroom\")) {\n      const rows = [];\n      this.sunroomKeys.map((k) => {\n        rows.push(this.measurementRow(k));\n      });\n      panels.push(this.measurementCard(\"Sunroom\", rows));\n    }\n    if (decks && decks.size > 0 && this.showMeasurement(\"decks\")) {\n      const rows = [];\n      decks.map((deck) => {\n        rows.push(this.deckRow(deck));\n      });\n      panels.push(this.measurementCard(`Decks (${rows.length})`, rows));\n    }\n    if (pools && pools.size > 0 && this.showMeasurement(\"pools\")) {\n      const rows = [];\n      pools.map((pool) => {\n        rows.push(this.poolRow(pool));\n      });\n      panels.push(this.measurementCard(`Pools (${rows.length})`, rows));\n    }\n    if (fencing && fencing.fenceIds.size > 0 && this.showMeasurement(\"fencing\")) {\n      panels.push(<FencingMeasurementCard key=\"fencing\" fencing={fencing} handleClick={this.handleClick} />);\n    }\n\n    return <Accordion id=\"measurement_accordian\">{panels}</Accordion>;\n  }\n}\n\nexport default connector(MeasurementsTab);\n","import * as React from \"react\";\nimport Files from \"react-files\";\nimport { Row, Col, Button, Table, FormControl } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IDoc } from \"app/src/Models/Doc\";\nimport { IImage } from \"app/src/Models/Image\";\nimport track from \"react-tracking\";\nimport { FlashLevels } from \"app/src/Common/FlashService\";\nimport { EstimateLineItemComponentCtrl } from \"app/src/Estimator/EstimateLineItemComponent\";\n\nexport interface FilesTabProps {\n  lineItem: IEstimateLineItem;\n  handleFile: any;\n  controller: EstimateLineItemComponentCtrl;\n  handleFileDestroy: any;\n  handleFileChange: any;\n}\n\nexport interface FilesTabState {\n  images: IImage[];\n  documents: IDoc[];\n}\n\n@track({ component: \"Files Tab\" })\nexport class FilesTab extends React.Component<FilesTabProps, FilesTabState> {\n  constructor(props) {\n    super(props);\n    this.state = {\n      images: this.props.lineItem.images,\n      documents: this.props.lineItem.documents,\n    };\n  }\n\n  public onFilesUpload = (files) => {\n    if (files.length > 0) {\n      this.props.handleFile(files[0]).then(() => {\n        this.setState((state, props: FilesTabProps) => {\n          return { images: props.lineItem.images, documents: props.lineItem.documents };\n        });\n      });\n    }\n  };\n\n  public onFilesError = (error, file) => {\n    this.props.controller.Flash.addMessage(FlashLevels.danger, error.message);\n    this.props.controller.$rootScope.$digest();\n  };\n\n  public resourceList() {\n    const files = [];\n    this.state.images.map((image) => {\n      if (!image._destroy) {\n        files.push(this.fileRow(image));\n      }\n    });\n    this.state.documents.map((doc) => {\n      if (!doc._destroy) {\n        files.push(this.fileRow(doc));\n      }\n    });\n    return files;\n  }\n\n  public onFileChange(event, file) {\n    this.props.handleFileChange(event.target.value, file);\n  }\n\n  public onFileDestroy(file) {\n    this.props.handleFileDestroy(file);\n  }\n\n  public fileRow(file) {\n    return (\n      <tr key={file.id}>\n        <td>{file.name}</td>\n        <td>{file.created_at.toLocaleString()}</td>\n        <td>\n          {file.type === \"document\" ? (\n            <FormControl\n              as=\"select\"\n              placeholder=\"select\"\n              value={file.display}\n              onChange={(ev) => {\n                this.onFileChange(ev, file);\n              }}>\n              <option value=\"estimate\">Estimate</option>\n              <option value=\"contract\">Contract</option>\n              <option value=\"both\">Both</option>\n              <option value=\"do_not_display\">Do Not Display</option>\n            </FormControl>\n          ) : null}\n        </td>\n        <td>\n          <FontAwesome\n            className=\"fa-66 fa-gray link\"\n            name=\"trash\"\n            title=\"Delete File\"\n            onClick={() => {\n              this.onFileDestroy(file);\n            }}\n          />\n        </td>\n      </tr>\n    );\n  }\n\n  public render() {\n    const resourceList = this.resourceList();\n    let noFiles = null;\n    if (resourceList.length === 0) {\n      noFiles = (\n        <Col md={12} className=\"form-section blank-state\">\n          <h2>No files added. Let's add one.</h2>\n        </Col>\n      );\n    }\n\n    return (\n      <div className=\"files-tab\">\n        <Row>\n          <Col md={12}>\n            <Table striped>\n              <thead>\n                <tr>\n                  <th>Name</th>\n                  <th>Created</th>\n                  <th>Display</th>\n                  <th>\n                    <Files\n                      className=\"files-dropzone pull-right\"\n                      onChange={this.onFilesUpload}\n                      onError={this.onFilesError}\n                      accepts={[\"image/*\", \".pdf\"]}\n                      multiple={false}\n                      maxFileSize={30000000}\n                      minFileSize={0}\n                      clickable>\n                      <Button variant=\"default\">\n                        <FontAwesome name=\"plus\" /> Add Files\n                      </Button>\n                    </Files>\n                  </th>\n                </tr>\n              </thead>\n              <tbody>{resourceList}</tbody>\n            </Table>\n            {noFiles}\n          </Col>\n        </Row>\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { IEstimateLineItem, IsOptionSelected } from \"app/src/Models/EstimateLineItem\";\nimport { Button, Row, Col, OverlayTrigger, Tooltip, FormControl } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport * as CurrencyFormatter from \"react-currency-formatter\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { ProductOptionGroupRecord } from \"app2/src/records/ProductOptionGroup\";\nimport { calculatePrice, ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { List } from \"immutable\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { presentModePreferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { parseFloatSafe } from \"app2/src/helpers/Number\";\n\nconst mapStateToProps = (state: RootState, ownProps: ProductOptionsTabProps) => {\n  return {\n    showPricingInLineItemEditor: presentModePreferencesConfig(state, {\n      path: [\"estimator\", \"show_pricing\", \"line_item_editor\"],\n    }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ProductOptionsTabProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface ProductOptionsTabProps {\n  estimate: IEstimate;\n  lineItem: IEstimateLineItem;\n  optionGroup: ProductOptionGroupRecord;\n  options: List<ProductOptionRecord>;\n  selectOption: any;\n  unselectOption: any;\n  handleQtyChange: any;\n  Session: ISession;\n}\n\nexport interface ProductOptionsTabState {\n  optionsById: any;\n  showQuantity: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ProductOptionsTabProps;\n\nclass ProductOptionsTab extends React.Component {\n  public props: Props;\n  public state: ProductOptionsTabState;\n\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      optionsById: {},\n      showQuantity: false,\n    };\n    props.options.map((opt: ProductOptionRecord) => {\n      const elio = this.checkOptionQuantity(opt);\n      if (elio) {\n        this.state.optionsById[opt.id] = elio.quantity;\n      } else {\n        this.state.optionsById[opt.id] = 1;\n      }\n    });\n\n    this.props.Session.can(\"update_option_quantity\", \"estimate\").then((value) => {\n      if (value) {\n        this.setState({\n          showQuantity: true,\n        });\n      }\n    });\n  }\n\n  public checkOptionQuantity(opt: ProductOptionRecord) {\n    const { lineItem } = this.props;\n    return _.find(lineItem.existingOptions(), (e: IEstimateLineItemOption) => {\n      return e.product_option_id === opt.id;\n    });\n  }\n\n  public select(optionGroup, option) {\n    this.props.selectOption(optionGroup, option, this.state.optionsById[option.id]);\n  }\n\n  public unselect(optionGroup, option) {\n    this.props.unselectOption(option);\n  }\n\n  public handleQtyChange(event, opt) {\n    const { optionGroup } = this.props;\n    const eventName = event.target.name;\n    const eventValue = event.target.value;\n    this.setState((state: ProductOptionsTabState) => {\n      const editedOptionsById: any = state.optionsById;\n      editedOptionsById[eventName] = parseFloatSafe(eventValue);\n\n      this.props.handleQtyChange(optionGroup, opt, editedOptionsById[eventName]);\n      return {\n        optionsById: editedOptionsById,\n      };\n    });\n  }\n\n  public optionRow(opt: ProductOptionRecord) {\n    const { optionGroup, lineItem, estimate, showPricingInLineItemEditor } = this.props;\n    const { showQuantity } = this.state;\n\n    return (\n      <Row key={opt.id.toString()} data-name={opt.id.toString()}>\n        <Col xs={12}>\n          <div className=\"form-section\">\n            <Row className=\"row-eq-height\">\n              <Col xs={6} md={4}>\n                {opt.charge_type === \"per\" ? (\n                  <OverlayTrigger\n                    //@ts-ignore\n                    placement=\"right\"\n                    overlay={<Tooltip id=\"Charge\">Charge Per Line Item</Tooltip>}>\n                    <FontAwesome name=\"info-circle\" />\n                  </OverlayTrigger>\n                ) : null}\n                &nbsp;{opt.name}\n              </Col>\n              <Col xs={6} md={2}>\n                {opt.images[0] ? (\n                  <img className=\"img-responsive img-product\" src={opt.images[0].file.medium.url} />\n                ) : null}\n              </Col>\n              <Col xs={6} md={2}>\n                {showQuantity ? (\n                  <FormControl\n                    name={opt.id.toString()}\n                    type=\"number\"\n                    min=\"-9999999\"\n                    max=\"9999999\"\n                    value={this.state.optionsById[opt.id]}\n                    onChange={(e) => {\n                      this.handleQtyChange(e, opt);\n                    }}\n                  />\n                ) : null}\n              </Col>\n              <Col xs={6} md={2}>\n                {showPricingInLineItemEditor ? (\n                  opt.uom === \"percent\" ? (\n                    <span>{opt.price}%</span>\n                  ) : (\n                    <CurrencyFormatter quantity={calculatePrice(opt, estimate, lineItem)} />\n                  )\n                ) : null}\n              </Col>\n              <Col xs={6} md={2}>\n                {IsOptionSelected(lineItem, opt) ? (\n                  <Button\n                    variant=\"add\"\n                    onClick={() => {\n                      this.unselect(optionGroup, opt);\n                    }}>\n                    Selected\n                  </Button>\n                ) : (\n                  <Button\n                    variant=\"outline-success\"\n                    onClick={() => {\n                      this.select(optionGroup, opt);\n                    }}>\n                    Select\n                  </Button>\n                )}\n              </Col>\n            </Row>\n          </div>\n        </Col>\n      </Row>\n    );\n  }\n\n  public render() {\n    const { optionGroup, options, showPricingInLineItemEditor } = this.props;\n    const { showQuantity } = this.state;\n\n    const optionRows = [];\n    options.map((opt) => {\n      optionRows.push(this.optionRow(opt));\n    });\n\n    return (\n      <div className=\"options-select\">\n        <Row className=\"table-header\">\n          <Col xs={12}>\n            <Row>\n              <Col md={4} xs={6}>\n                Description\n              </Col>\n              <Col md={2} xs={6}></Col>\n              <Col md={2} xs={6}>\n                {showQuantity ? <span>Quantity Per</span> : null}\n              </Col>\n              <Col md={2} xs={6}>\n                {showPricingInLineItemEditor ? \"Unit Price\" : null}\n              </Col>\n              <Col md={2} xs={6}>\n                {optionGroup.selection_mode === \"single\" ? \"Select One\" : \"Select\"}\n              </Col>\n            </Row>\n          </Col>\n        </Row>\n        {optionRows}\n      </div>\n    );\n  }\n}\n\nexport default connector(ProductOptionsTab);\n","import * as React from \"react\";\nimport { IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { Tabs, Tab } from \"react-bootstrap\";\nimport MeasurementsTab from \"app2/src/components/LineItemEditor/components/MeasurementsTab\";\nimport { FilesTab } from \"app2/src/components/LineItemEditor/components/FilesTab\";\nimport ProductOptionsTab from \"app2/src/components/LineItemEditor/components/ProductOptionsTab\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport track from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { EstimateLineItemComponentCtrl } from \"app/src/Estimator/EstimateLineItemComponent\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { cachedProduct } from \"app2/src/selectors/product.selectors\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { cachedProductOptionGroup, cachedProductOptionGroups } from \"app2/src/selectors/productOptionGroup.selectors\";\nimport { cachedProductOptions } from \"app2/src/selectors/productOption.selectors\";\nimport { hasMeasurements } from \"app2/src/selectors/measurement.selectors\";\nimport { optionSelected, ProductOptionGroupRecord } from \"app2/src/records/ProductOptionGroup\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { List } from \"immutable\";\nimport { MeasurementRecord } from \"app2/src/records/Measurement\";\n\nconst mapStateToProps = (state: RootState, ownProps: LineItemEditorTabsProps) => {\n  if (ownProps.lineItem.product_id) {\n    return {\n      product: cachedProduct(state, {\n        activatedPriceListId: ownProps.estimate.activated_price_list_id,\n        productId: ownProps.lineItem.product_id,\n      }),\n      productOptionGroups: cachedProductOptionGroups(state, {\n        activatedPriceListId: ownProps.estimate.activated_price_list_id,\n        productId: ownProps.lineItem.product_id,\n        type: \"default\",\n      }),\n      hasMeasurements: hasMeasurements(state, { measurementId: ownProps.measurement.id, location: \"line_item_editor\" }),\n    };\n  } else {\n    return {\n      product: null,\n      productOptionGroups: null,\n      hasMeasurements: hasMeasurements(state, { measurementId: ownProps.measurement.id, location: \"line_item_editor\" }),\n    };\n  }\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: LineItemEditorTabsProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface LineItemEditorTabsProps {\n  lineItem: IEstimateLineItem;\n  forceRender: number;\n  estimate: IEstimate;\n  measurement: MeasurementRecord;\n  controller: EstimateLineItemComponentCtrl;\n  handleUseMeasurement: (value: number, type: string, uom: string, product: ProductRecord) => void;\n  selectOption: (optionGroup: ProductOptionGroupRecord, option: ProductOptionRecord, quantity: number) => void;\n  unselectOption: (option: ProductOptionRecord) => void;\n  handleQtyChange: (optionGroup, option, qty) => void;\n  handleFile: (file) => any;\n  handleFileDestroy: (file) => any;\n  handleFileChange: (value, file) => any;\n}\n\nexport interface LineItemEditorTabsState {\n  activeTab: string;\n  activeTabs: string[];\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & LineItemEditorTabsProps;\n\n@track(\n  (props) => {\n    return {\n      category: \"Line Item Editor\",\n      estimate: props.estimate.id,\n      job: props.estimate.job_id,\n      org: props.controller.org.id,\n      navDisplay: !props.controller.navDisplay,\n      lineItemId: props.lineItem.id,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n    dispatchOnMount: (cd) => ({ action: \"shown\" }),\n  },\n)\nclass LineItemEditorTabs extends React.Component<Props, LineItemEditorTabsState> {\n  public props: Props;\n  public state: LineItemEditorTabsState;\n  public eventListener: any;\n\n  constructor(props) {\n    super(props);\n    const { lineItem } = this.props;\n    const active_tabs = this.getActiveTabs(lineItem);\n    this.state = {\n      activeTab: active_tabs[0],\n      activeTabs: active_tabs,\n    };\n    this.handleUseMeasurement = this.handleUseMeasurement.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: Props, prevState: LineItemEditorTabsState) {\n    const { forceRender, hasMeasurements } = this.props;\n    if (prevProps.forceRender !== forceRender || prevProps.hasMeasurements !== hasMeasurements) {\n      const { lineItem } = this.props;\n      const active_tabs = this.getActiveTabs(lineItem);\n      if (!_.isEqual(active_tabs, prevState.activeTabs)) {\n        this.setState({ activeTab: active_tabs[0], activeTabs: active_tabs });\n      }\n    }\n  }\n\n  public getActiveTabs(lineItem: IEstimateLineItem) {\n    const { product, productOptionGroups, hasMeasurements } = this.props;\n    const active_tabs = [];\n\n    if (hasMeasurements) {\n      active_tabs.push(\"measurements\");\n    }\n\n    let pogs = List();\n    if (product && productOptionGroups) {\n      pogs = productOptionGroups;\n    }\n    if (product && pogs.size > 0) {\n      pogs.map((pog: ProductOptionGroupRecord) => {\n        active_tabs.push(pog.id.toString());\n      });\n    }\n    const noProduct = _.isNull(lineItem.product_id) || _.isUndefined(lineItem.product_id);\n    if (noProduct) {\n      active_tabs.push(\"files\");\n    }\n    return active_tabs;\n  }\n\n  public handleTabSelect = (tab) => {\n    this.setState({\n      activeTab: tab,\n    });\n  };\n\n  public handleUseMeasurement = (value: number, type: string, uom: string) => {\n    const { product } = this.props;\n    this.props.handleUseMeasurement(value, type, uom, product);\n  };\n\n  public render() {\n    const { activeTabs } = this.state;\n    const active_tabs = [];\n    activeTabs.forEach((tab) => {\n      if (_.includes([\"measurements\", \"files\"], tab)) {\n        active_tabs.push(this[\"_get_\" + tab]());\n      } else {\n        active_tabs.push(this._get_options(tab));\n      }\n    });\n\n    let options_tab = null;\n    if (active_tabs.length > 0) {\n      options_tab = (\n        <Tabs\n          className=\"line-item-editor-tabs\"\n          id=\"tabs\"\n          activeKey={this.state.activeTab}\n          onSelect={this.handleTabSelect}>\n          {active_tabs}\n        </Tabs>\n      );\n    }\n\n    return <div>{options_tab}</div>;\n  }\n\n  private _get_measurements() {\n    const { measurement } = this.props;\n    return (\n      <Tab key=\"measurements\" eventKey=\"measurements\" title=\"Measurements\">\n        <MeasurementsTab measurement={measurement} handleUseMeasurement={this.handleUseMeasurement} />\n      </Tab>\n    );\n  }\n\n  private _get_files() {\n    const { controller, lineItem, handleFile, handleFileChange, handleFileDestroy } = this.props;\n    return (\n      <Tab key=\"files\" eventKey=\"files\" title=\"Files\">\n        <FilesTab\n          lineItem={lineItem}\n          handleFile={handleFile}\n          controller={controller}\n          handleFileChange={handleFileChange}\n          handleFileDestroy={handleFileDestroy}\n        />\n      </Tab>\n    );\n  }\n\n  private _get_options(pog_id: string) {\n    const { controller, estimate, lineItem, selectOption, unselectOption, handleQtyChange } = this.props;\n    const pog = cachedProductOptionGroup(StoreRegistry.getStore().getState(), {\n      productOptionGroupId: parseInt(pog_id),\n      activatedPriceListId: estimate.activated_price_list_id,\n    });\n    const options = cachedProductOptions(StoreRegistry.getStore().getState(), {\n      productOptionIds: pog.option_ids,\n      activatedPriceListId: estimate.activated_price_list_id,\n    });\n\n    let title: any;\n    if (optionSelected(options, lineItem)) {\n      title = (\n        <span>\n          {pog.name} <FontAwesome name=\"check\" className=\"checkmark\" />\n        </span>\n      );\n    } else {\n      title = <span>{pog.name}</span>;\n    }\n    return (\n      <Tab key={pog_id} eventKey={pog_id} title={title}>\n        <ProductOptionsTab\n          lineItem={lineItem}\n          estimate={estimate}\n          Session={controller.Session}\n          optionGroup={pog}\n          options={options}\n          selectOption={selectOption}\n          unselectOption={unselectOption}\n          handleQtyChange={handleQtyChange}\n        />\n      </Tab>\n    );\n  }\n}\n\nexport default connector(LineItemEditorTabs);\n","import * as React from \"react\";\nimport { Col, Row, Button } from \"react-bootstrap\";\nimport { EstimateLineItem, IEstimateLineItem } from \"app/src/Models/EstimateLineItem\";\nimport { IEstimate, AddLineItemOption, RemoveLineItemOption } from \"app/src/Models/Estimate\";\nimport ProductSelector from \"./components/ProductSelector\";\nimport LineItemInput from \"./components/LineItemInput\";\nimport track from \"react-tracking\";\nimport * as angulartics from \"angulartics\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { OrgAclType } from \"app/src/Models/Org\";\nimport { IEstimateLineItemOption } from \"app/src/Models/EstimateLineItemOption\";\nimport { EstimateLineItemComponentCtrl } from \"app/src/Estimator/EstimateLineItemComponent\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ProductOptionGroupRecord } from \"app2/src/records/ProductOptionGroup\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport LineItemEditorTabs from \"app2/src/components/LineItemEditor/components/LineItemEditorTabs\";\nimport { MeasurementRecord } from \"app2/src/records/Measurement\";\nimport { measurement } from \"app2/src/selectors/measurement.selectors\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nconst mapStateToProps = (state: RootState, ownProps: LineItemEditorProps) => {\n  return {\n    measurement: measurement(state, { measurementId: parseInt(ownProps.measurementId) }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: LineItemEditorProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface LineItemEditorProps {\n  lineItem: IEstimateLineItem;\n  estimate: IEstimate;\n  measurementId: string;\n  controller: EstimateLineItemComponentCtrl;\n  $analytics: angulartics.IAnalyticsService;\n  estimateGroup?: IEstimateGroup;\n}\n\nexport interface LineItemEditorState {\n  lineItem: IEstimateLineItem;\n  forceRender: number;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & LineItemEditorProps;\n\n@track(\n  (props) => {\n    return {\n      category: \"Line Item Editor\",\n      estimate: props.estimate.id,\n      job: props.estimate.job_id,\n      org: props.controller.org.id,\n      navDisplay: !props.controller.navDisplay,\n      lineItemId: props.lineItem.id,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n    dispatchOnMount: (cd) => ({ action: \"shown\" }),\n  },\n)\nclass LineItemEditor extends React.Component<Props, LineItemEditorState> {\n  public props: Props;\n  public state: LineItemEditorState;\n  public eventListener: any;\n\n  constructor(props) {\n    super(props);\n    const { lineItem, controller } = this.props;\n    const editLineItem = EstimateLineItem.fromJSON(lineItem.estimateGroup, lineItem);\n    this.state = {\n      lineItem: editLineItem,\n      forceRender: 0,\n    };\n    this.eventListener = controller.$rootScope.$on(\"estimateLineItem.save.\" + lineItem.id, () => {\n      const props = angular.toJson(lineItem.transformRequest());\n      const state = angular.toJson(this.state.lineItem.transformRequest());\n      if (props === state) {\n        this.handleCancel();\n        controller.$rootScope.$broadcast(\"estimateLineItem.confirmed\", { continueOn: true });\n      } else {\n        controller.ConfirmDialog.confirm(\"Would you like to save your line item?\", {})\n          .then(() => {\n            this.handleSave();\n            controller.$rootScope.$broadcast(\"estimateLineItem.confirmed\", { continueOn: true });\n          })\n          .catch(() => {\n            controller.$rootScope.$broadcast(\"estimateLineItem.confirmed\", { continueOn: false });\n          });\n      }\n    });\n  }\n\n  public componentWillUnmount() {\n    this.eventListener();\n  }\n\n  public handleSave = () => {\n    this.props.controller.saveLineItem(this.state.lineItem);\n  };\n\n  public handleCancel = () => {\n    this.props.controller.cancelEdit();\n  };\n\n  public handleDelete = () => {\n    this.props.controller.removeLineItem();\n  };\n\n  public handleNumberInputChange = (value, name) => {\n    const { forceRender } = this.state;\n    const { estimate } = this.props;\n    switch (name) {\n      case \"base_product_price\":\n        const base_product_price = roundToDecimals(+value, -2);\n        this.setState((state: LineItemEditorState) => {\n          const editedLineItem: IEstimateLineItem = state.lineItem;\n          editedLineItem.base_product_price = base_product_price;\n          editedLineItem.calculate(estimate);\n          return {\n            lineItem: editedLineItem,\n            forceRender: forceRender + 1,\n          };\n        });\n        break;\n      case \"base_labor_price\":\n        const base_labor_price = roundToDecimals(+value, -2);\n        this.setState((state: LineItemEditorState) => {\n          const editedLineItem: IEstimateLineItem = state.lineItem;\n          editedLineItem.base_labor_price = base_labor_price;\n          editedLineItem.calculate(estimate);\n          return {\n            lineItem: editedLineItem,\n            forceRender: forceRender + 1,\n          };\n        });\n        break;\n      case \"quantity\":\n        const quantity = roundToDecimals(+value, -2);\n        this.setState((state: LineItemEditorState) => {\n          const editedLineItem: IEstimateLineItem = state.lineItem;\n          editedLineItem.quantity = quantity;\n          editedLineItem.calculate(estimate);\n          return {\n            lineItem: editedLineItem,\n            forceRender: forceRender + 1,\n          };\n        });\n        break;\n      default:\n        this.setState((state: LineItemEditorState) => {\n          const editedLineItem: IEstimateLineItem = state.lineItem;\n          editedLineItem[name] = value;\n          return {\n            lineItem: editedLineItem,\n            forceRender: forceRender + 1,\n          };\n        });\n    }\n  };\n\n  public handleInputChange = (event) => {\n    const { forceRender } = this.state;\n    const { estimate } = this.props;\n    const value = event.target.value;\n    const name = event.target.name;\n\n    this.setState((state: LineItemEditorState) => {\n      const editedLineItem: IEstimateLineItem = state.lineItem;\n      editedLineItem[name] = value;\n      editedLineItem.calculate(estimate);\n      return {\n        lineItem: editedLineItem,\n        forceRender: forceRender + 1,\n      };\n    });\n  };\n\n  public handleProductSelected = (product) => {\n    const { forceRender } = this.state;\n    const { controller, estimate, estimateGroup } = this.props;\n    controller.EventingFactory.trackEvent(\"select product\", { category: \"EstimateLineItemComponent\" });\n    const editedLineItem = this.state.lineItem;\n    editedLineItem.quantity = controller.EstimatorService.addMeasurementLink(\n      product,\n      editedLineItem.quantity,\n      true,\n      estimateGroup,\n    );\n    editedLineItem.setProduct(estimate.activated_price_list_id, product, true);\n    editedLineItem.calculate(estimate);\n    controller.EstimatorService.addDefaultOptions(editedLineItem, product);\n    this.setState({\n      lineItem: editedLineItem,\n      forceRender: forceRender + 1,\n    });\n  };\n\n  public handleOpeningSelected = (product) => {\n    this.props.controller.addOpening(product);\n  };\n\n  public handleImportSelected = () => {\n    this.props.controller.importSelected();\n  };\n\n  public handleUseMeasurement = (value: number, type: string, uom: string, product: ProductRecord): void => {\n    const { controller, estimate } = this.props;\n    const { lineItem, forceRender } = this.state;\n\n    let quantity = _.clone(lineItem.quantity);\n    const convertedValue = controller.EstimatorService.Conversion.convert(value, uom, lineItem.uom, product);\n\n    switch (type) {\n      case \"+\":\n        quantity += convertedValue;\n        break;\n      case \"-\":\n        quantity -= convertedValue;\n        break;\n      case \"use\":\n        quantity = convertedValue;\n        break;\n    }\n\n    quantity = roundToDecimals(quantity, -2);\n    this.setState((state: LineItemEditorState) => {\n      const editedLineItem: IEstimateLineItem = state.lineItem;\n      editedLineItem.quantity = quantity;\n      editedLineItem.calculate(estimate);\n      return {\n        lineItem: editedLineItem,\n        forceRender: forceRender + 1,\n      };\n    });\n  };\n\n  public selectOption = (\n    optionGroup: ProductOptionGroupRecord,\n    option: ProductOptionRecord,\n    quantity: number,\n  ): void => {\n    let editedLineItem = this.state.lineItem;\n    const { controller, estimate } = this.props;\n    const { forceRender } = this.state;\n\n    if (optionGroup.selection_mode === \"single\") {\n      if (editedLineItem.existingSingleSelectOption(optionGroup.id)) {\n        controller.EventingFactory.trackEvent(\"product option changed\", {\n          product_option: option.id,\n        });\n      } else {\n        controller.EventingFactory.trackEvent(\"product option added\", {\n          product_option: option.id,\n        });\n      }\n    } else {\n      controller.EventingFactory.trackEvent(\"product option added\", {\n        product_option: option.id,\n      });\n    }\n\n    editedLineItem = AddLineItemOption(editedLineItem, option, optionGroup, quantity, estimate);\n\n    this.setState({\n      lineItem: editedLineItem,\n      forceRender: forceRender + 1,\n    });\n  };\n\n  public unselectOption = (option: ProductOptionRecord): void => {\n    let editedLineItem = this.state.lineItem;\n    const { forceRender } = this.state;\n\n    editedLineItem = RemoveLineItemOption(editedLineItem, option.uuid);\n\n    this.props.controller.EventingFactory.trackEvent(\"product option removed\", {\n      product_option: option.id,\n    });\n\n    this.setState({\n      lineItem: editedLineItem,\n      forceRender: forceRender + 1,\n    });\n  };\n\n  public handleQtyChange = (optionGroup, option, qty): void => {\n    const { estimate } = this.props;\n    const { lineItem, forceRender } = this.state;\n    const editedLineItem = lineItem;\n    const elio: IEstimateLineItemOption = _.find(editedLineItem.existingOptions(), (e: IEstimateLineItemOption) => {\n      return e.product_option_group_id === optionGroup.id && e.product_option_uuid === option.uuid;\n    });\n\n    if (elio) {\n      elio.quantity = qty;\n      elio.calculate(estimate);\n      this.props.controller.EventingFactory.trackEvent(\"product option quantity changed\", {\n        product_option: elio.id,\n        quantity: qty,\n      });\n      this.setState({\n        lineItem: editedLineItem,\n        forceRender: forceRender + 1,\n      });\n    }\n  };\n\n  public handleFile = (file): any => {\n    const { forceRender } = this.state;\n    // Not Ideal - breaks rule of immutable\n    return this.props.controller.fileQueue.getObject(file, this.state.lineItem, \"both\").then(() => {\n      this.setState((state: LineItemEditorState) => {\n        return {\n          lineItem: state.lineItem,\n          forceRender: forceRender + 1,\n        };\n      });\n    });\n  };\n\n  public handleFileDestroy = (file): any => {\n    const { forceRender } = this.state;\n    // Not Ideal - breaks rule of immutable\n    this.props.controller.onFileDestroy(file).then(() => {\n      this.setState((state: LineItemEditorState) => {\n        return {\n          lineItem: state.lineItem,\n          forceRender: forceRender + 1,\n        };\n      });\n    });\n  };\n\n  public handleFileChange = (value, file): any => {\n    const { forceRender } = this.state;\n    // Not Ideal - breaks rule of immutable\n    this.props.controller.onFileChange(value, file);\n    this.setState((state: LineItemEditorState) => {\n      return {\n        lineItem: state.lineItem,\n        forceRender: forceRender + 1,\n      };\n    });\n  };\n\n  public footerButtons() {\n    return (\n      <div className=\"editable-footer\">\n        <Button id=\"eli-save-changes\" variant=\"save\" className=\"tour-save-button\" onClick={this.handleSave}>\n          Save Changes\n        </Button>\n        <Button id=\"eli-cancel\" variant=\"cancel\" onClick={this.handleCancel}>\n          Cancel\n        </Button>\n        <Button variant=\"delete\" className=\"pull-right\" onClick={this.handleDelete}>\n          Delete Item\n        </Button>\n      </div>\n    );\n  }\n\n  public render() {\n    const { controller, estimate, measurement } = this.props;\n    const { lineItem, forceRender } = this.state;\n    const full = _.include(controller.org.fetchAcl(OrgAclType.estimator), \"full\");\n    if (full) {\n      let productSelector = null;\n      if (!this.state.lineItem.isCustom() || this.state.lineItem.newly_added) {\n        productSelector = (\n          <Row>\n            <Col xs={8} sm={8} md={6} lg={4}>\n              <ProductSelector\n                lineItemProductId={lineItem.product_id}\n                controller={this.props.controller}\n                activatedPriceListId={estimate.activated_price_list_id}\n                handleProductSelected={this.handleProductSelected}\n                handleOpeningSelected={this.handleOpeningSelected}\n                handleImportSelected={this.handleImportSelected}\n              />\n            </Col>\n          </Row>\n        );\n      }\n\n      return (\n        <div className=\"line-item-editor\">\n          {productSelector}\n          <LineItemInput\n            lineItem={lineItem}\n            forceRender={forceRender}\n            activatedPriceListId={estimate.activated_price_list_id}\n            handleInputChange={this.handleInputChange}\n            orgId={controller.org.id}\n            handleNumberInputChange={this.handleNumberInputChange}\n            full={full}\n          />\n          <LineItemEditorTabs\n            lineItem={lineItem}\n            forceRender={forceRender}\n            estimate={estimate}\n            measurement={measurement}\n            controller={controller}\n            handleUseMeasurement={this.handleUseMeasurement}\n            selectOption={this.selectOption}\n            unselectOption={this.unselectOption}\n            handleQtyChange={this.handleQtyChange}\n            handleFile={this.handleFile}\n            handleFileDestroy={this.handleFileDestroy}\n            handleFileChange={this.handleFileChange}\n          />\n          {this.footerButtons()}\n        </div>\n      );\n    } else {\n      return (\n        <div className=\"line-item-editor\">\n          <LineItemInput\n            lineItem={lineItem}\n            forceRender={forceRender}\n            activatedPriceListId={estimate.activated_price_list_id}\n            handleInputChange={this.handleInputChange}\n            orgId={controller.org.id}\n            handleNumberInputChange={this.handleNumberInputChange}\n            full={full}\n          />\n          {this.footerButtons()}\n        </div>\n      );\n    }\n  }\n}\n\nexport default connector(LineItemEditor);\n","import * as React from \"react\";\nimport { Row, Col, FormControl, Form } from \"react-bootstrap\";\nimport { useState, useEffect } from \"react\";\nimport {\n  PaymentTermItemRecord,\n  PaymentTermItemKinds,\n  PaymentTermItemKindList,\n} from \"app2/src/records/PaymentTermTemplate\";\nimport { DecimalInputComponent } from \"../Common/DecimalInputComponent\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { UppercaseWord, CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { useSelector } from \"react-redux\";\nimport { presentModePreferencesConfig } from \"app2/src/selectors/org.selectors\";\n\nexport interface ItemEditorProps {\n  item: PaymentTermItemRecord;\n  changeAmount: (pti: PaymentTermItemRecord, amount: number) => void;\n  changeDesc: (pti: PaymentTermItemRecord, desc: string) => void;\n  changeKind: (pti: PaymentTermItemRecord, kind: PaymentTermItemKinds) => void;\n  changePaymentMethod: (pti: PaymentTermItemRecord, paymentMethod: \"cash\" | \"financed\") => void;\n  deleteItem: (pti: PaymentTermItemRecord) => void;\n}\n\nexport const ItemEditor: React.FunctionComponent<ItemEditorProps> = ({\n  item,\n  changeAmount,\n  changeDesc,\n  changeKind,\n  changePaymentMethod,\n  deleteItem,\n}) => {\n  const [amount, setAmount] = useState(item.amount);\n  const [description, setDesc] = useState(item.description);\n  const [kind, setKind] = useState(item.type);\n  const [paymentMethod, setPaymentMethod] = useState(item.paymentMethod);\n\n  const showPaymentTermEditorPricing = useSelector((state) =>\n    presentModePreferencesConfig(state, { path: [\"estimator\", \"show_pricing\", \"payment_term_editor\"] }),\n  );\n\n  useEffect(() => {\n    if (item.amount !== amount) {\n      setAmount(item.amount);\n    }\n\n    if (item.description !== description) {\n      setDesc(item.description);\n    }\n\n    if (item.type !== kind) {\n      setKind(item.type);\n    }\n\n    if (item.paymentMethod !== paymentMethod) {\n      setPaymentMethod(item.paymentMethod);\n    }\n  }, [item.amount, item.description, item.type, item.paymentMethod]);\n\n  return (\n    <div>\n      <Row>\n        <Col sm={12}>\n          <label className=\"control-label\">Description</label>\n          <FormControl\n            type=\"text\"\n            className=\"item-description\"\n            onChange={(e) => {\n              changeDesc(item, e.target.value);\n              setDesc(e.target.value);\n            }}\n            value={description}\n          />\n        </Col>\n      </Row>\n      <br />\n      <Row>\n        <Col sm={3}>\n          <label className=\"control-label\">Amount</label>\n          <DecimalInputComponent\n            type=\"number\"\n            className=\"item-amount\"\n            value={amount}\n            onNumberChange={(value) => {\n              changeAmount(item, value);\n              setAmount(value);\n            }}\n          />\n        </Col>\n        <Col sm={3}>\n          <label className=\"control-label\">Type</label>\n          <select\n            className=\"form-control item-kind\"\n            onChange={(e) => {\n              changeKind(item, e.target.value as any as PaymentTermItemKinds);\n              setKind(e.target.value as any as PaymentTermItemKinds);\n            }}\n            value={kind}>\n            {PaymentTermItemKindList.map((kind, idx) => {\n              return (\n                <option key={idx} value={kind}>\n                  {UppercaseWord(kind)}\n                </option>\n              );\n            })}\n          </select>\n        </Col>\n        <Col sm={2} className=\"centered\">\n          <label className=\"control-label\">Financed</label>\n          <Form.Check\n            checked={paymentMethod === \"financed\"}\n            onChange={(e) => {\n              changePaymentMethod(item, e.target.checked ? \"financed\" : \"cash\");\n              setPaymentMethod(e.target.checked ? \"financed\" : \"cash\");\n            }}\n          />\n        </Col>\n        <Col sm={3} className=\"my-auto align-middle\">\n          {showPaymentTermEditorPricing ? CurrencyFormat(item.calculated) : null}\n        </Col>\n        <Col sm={1} className=\"align-middle\">\n          <ConfirmDialog title={\"Are you sure you want to delete this payment term?\"}>\n            {(confirm) => <i className=\"rsf-delete-link rsf-base-66\" onClick={confirm((_e) => deleteItem(item))} />}\n          </ConfirmDialog>\n        </Col>\n      </Row>\n      <hr className=\"hr-spacing\" />\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { Row, Col, Button, FormControl, FormGroup } from \"react-bootstrap\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { PaymentTermRecord } from \"app2/src/records/PaymentTerm\";\nimport {\n  PaymentTermTemplateRecord,\n  PaymentTermItemRecord,\n  PaymentTermItemKinds,\n  paymentTermItemFromJSON,\n} from \"app2/src/records/PaymentTermTemplate\";\nimport { getOrgPaymentTermTemplates } from \"app2/src/selectors/paymentTermTemplate.selectors\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { ItemEditor } from \"./ItemEditor\";\nimport track from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { presentModePreferencesConfig } from \"app2/src/selectors/org.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: ChooserProps) => {\n  return {\n    paymentTermTemplates: getOrgPaymentTermTemplates(state, ownProps),\n    showPaymentTermDisplay: presentModePreferencesConfig(state, {\n      path: [\"estimator\", \"show_pricing\", \"payment_term_display\"],\n    }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ChooserProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ChooserProps {\n  orgId: number;\n  paymentTerm: PaymentTermRecord;\n  doneButton?: boolean;\n  showHeaderText?: boolean;\n  view: string;\n  addItem: (pti: PaymentTermItemRecord) => void;\n  addTemplate: (ptt: PaymentTermTemplateRecord) => void;\n  removeItem: (pti: PaymentTermItemRecord) => void;\n  updateItem: (pti: PaymentTermItemRecord) => void;\n}\n\nexport interface ChooserState {\n  paymentTerm: PaymentTermRecord;\n  previousView: string;\n  view: string;\n  showHeaderText: boolean; // this is not dynamically updated, current workflow assumes it's set at mount\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ChooserProps;\n\n@track(\n  () => {\n    return {\n      component: \"PaymentTermChooser\",\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n  },\n)\nexport class Chooser extends React.Component<Props, ChooserState> {\n  protected debouncedUpdate: (ptir: PaymentTermItemRecord) => void;\n\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      previousView: null,\n      view: props.view,\n      showHeaderText: true,\n      paymentTerm: props.paymentTerm,\n    };\n\n    this.debouncedUpdate = _.debounce(props.updateItem, 100);\n    this.renderDisplay = this.renderDisplay.bind(this);\n    this.renderEdit = this.renderEdit.bind(this);\n    this.renderEasyEdit = this.renderEasyEdit.bind(this);\n    this.changeView = this.changeView.bind(this);\n    this.templateChanged = this.templateChanged.bind(this);\n    this.changeDescription = this.changeDescription.bind(this);\n    this.changeKind = this.changeKind.bind(this);\n    this.changeNumber = this.changeNumber.bind(this);\n    this.changePaymentMethod = this.changePaymentMethod.bind(this);\n    this.deleteItem = this.deleteItem.bind(this);\n    this.addItem = this.addItem.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: Props) {\n    const prev = prevProps.paymentTerm ? JSON.stringify(prevProps.paymentTerm) : \"\";\n    const current = this.props.paymentTerm ? JSON.stringify(this.props.paymentTerm) : \"\";\n\n    if (prev === current) {\n      return;\n    }\n\n    this.setState({\n      paymentTerm: this.props.paymentTerm,\n    });\n  }\n\n  public componentDidMount() {\n    const { showHeaderText } = this.props;\n\n    if (showHeaderText !== null && showHeaderText !== undefined) {\n      this.setState({ showHeaderText });\n    }\n  }\n\n  public render() {\n    const { view } = this.state;\n    if (view === \"fullEdit\") {\n      return this.renderEdit();\n    } else if (view === \"easyEdit\") {\n      return this.renderEasyEdit();\n    } else {\n      // must be \"display\"\n      return this.renderDisplay();\n    }\n  }\n\n  public renderDisplay() {\n    const { showHeaderText, paymentTerm } = this.state;\n    const { showPaymentTermDisplay } = this.props;\n\n    const amountDescriptionCol = showPaymentTermDisplay ? 8 : 12;\n\n    return (\n      <div className=\"form-section\">\n        <div className=\"form-section-heading\">\n          {showHeaderText && <h3>Payment Terms</h3>}\n          {paymentTerm &&\n            paymentTerm.payment_term_items.map((pti, idx) => {\n              let col1 = <span></span>;\n              if (pti.type === \"percent\") {\n                col1 = (\n                  <Col sm={amountDescriptionCol}>\n                    {pti.amount}% - {pti.description}\n                  </Col>\n                );\n              } else if (pti.type === \"amount\") {\n                col1 = <Col sm={amountDescriptionCol}>{pti.description}</Col>;\n              }\n\n              return (\n                <Row key={idx} className=\"fix-margin-left bottom-margin-5\">\n                  {col1}\n                  {showPaymentTermDisplay ? <Col sm={4}>{CurrencyFormat(pti.calculated)}</Col> : null}\n                </Row>\n              );\n            })}\n          <Row>\n            <Col sm={12}>\n              <Button variant=\"default\" id=\"edit\" onClick={() => this.changeView(\"fullEdit\")}>\n                Edit\n              </Button>\n            </Col>\n          </Row>\n        </div>\n      </div>\n    );\n  }\n\n  public renderEdit() {\n    const { paymentTermTemplates } = this.props;\n    let { doneButton } = this.props;\n    const { showHeaderText, paymentTerm } = this.state;\n\n    if (doneButton === undefined || doneButton === null) {\n      doneButton = true;\n    }\n\n    let doneElement = null;\n    if (doneButton) {\n      doneElement = (\n        <Row>\n          <Col sm={12}>\n            <Button variant=\"default\" onClick={() => this.changeView(\"display\")}>\n              Done\n            </Button>\n          </Col>\n        </Row>\n      );\n    }\n\n    let paymentTermElement = null;\n    if (paymentTermTemplates.count() > 0) {\n      paymentTermElement = (\n        <Row>\n          <Col sm={12}>\n            <FormGroup>\n              <FormControl\n                as=\"select\"\n                id=\"template\"\n                onChange={(e) => this.templateChanged(parseFloat((e.target as any).value))}>\n                <option value=\"\">--Payment Term Templates--</option>\n                {paymentTermTemplates.map((pt, idx) => {\n                  return (\n                    <option key={idx} value={pt.id}>\n                      {pt.description}\n                    </option>\n                  );\n                })}\n              </FormControl>\n            </FormGroup>\n          </Col>\n        </Row>\n      );\n    }\n\n    return (\n      <div className=\"form-section\">\n        <div className=\"form-section-heading\">\n          <Row>\n            {showHeaderText && (\n              <Col lg={5}>\n                <h3>Payment Terms</h3>\n              </Col>\n            )}\n            <Col lg={showHeaderText ? 7 : 12}>{paymentTermElement}</Col>\n          </Row>\n        </div>\n        <div className=\"form-section-content\">\n          {paymentTerm.payment_term_items.map((pti, idx) => {\n            return (\n              <ItemEditor\n                key={idx}\n                item={pti}\n                deleteItem={this.deleteItem}\n                changeAmount={this.changeNumber}\n                changeDesc={this.changeDescription}\n                changeKind={this.changeKind}\n                changePaymentMethod={this.changePaymentMethod}\n              />\n            );\n          })}\n          <Row>\n            <Col md={{ offset: 11, span: 1 }}>\n              <i className=\"rsf-plus-link rsf-base-66\" title=\"Add Payment Term\" onClick={this.addItem} />\n            </Col>\n          </Row>\n          {doneElement}\n        </div>\n      </div>\n    );\n  }\n\n  public renderEasyEdit() {\n    const { paymentTermTemplates } = this.props;\n    const { showHeaderText, paymentTerm } = this.state;\n    let paymentTermElement = null;\n    if (paymentTermTemplates.count() > 0) {\n      paymentTermElement = (\n        <Row>\n          <Col sm={12}>\n            <FormGroup>\n              <FormControl\n                as=\"select\"\n                id=\"template\"\n                onChange={(e) => this.templateChanged(parseFloat((e.target as any).value))}>\n                <option value=\"\">--Payment Term Templates--</option>\n                {paymentTermTemplates.map((pt, idx) => {\n                  return (\n                    <option key={idx} value={pt.id}>\n                      {pt.description}\n                    </option>\n                  );\n                })}\n              </FormControl>\n            </FormGroup>\n          </Col>\n        </Row>\n      );\n    }\n\n    return (\n      <div className=\"form-section\">\n        <div className=\"form-section-heading\">\n          <Row>\n            {showHeaderText && (\n              <Col lg={5}>\n                <h3>Payment Terms</h3>\n              </Col>\n            )}\n            <Col lg={showHeaderText ? 7 : 12}>{paymentTermElement}</Col>\n          </Row>\n          {paymentTerm &&\n            paymentTerm.payment_term_items.map((pti, idx) => {\n              let col1 = <span></span>;\n              if (pti.type === \"percent\") {\n                col1 = (\n                  <Col sm={8}>\n                    {pti.amount}% - {pti.description}\n                  </Col>\n                );\n              } else if (pti.type === \"amount\") {\n                col1 = <Col sm={8}>{pti.description}</Col>;\n              }\n\n              return (\n                <Row key={idx} className=\"fix-margin-left bottom-margin-5\">\n                  {col1}\n                  <Col sm={4}>{CurrencyFormat(pti.calculated)}</Col>\n                </Row>\n              );\n            })}\n          <Row>\n            <Col sm={12}>\n              <Button variant=\"default\" id=\"edit\" onClick={() => this.changeView(\"fullEdit\")}>\n                Edit\n              </Button>\n            </Col>\n          </Row>\n        </div>\n      </div>\n    );\n  }\n\n  @track((_props, _state, [view]) => ({ action: `view changed ${view}` }))\n  public changeView(newView) {\n    const { view, previousView } = this.state;\n    if (previousView === null) {\n      this.setState({\n        previousView: view,\n        view: newView,\n      });\n    } else {\n      this.setState({\n        view: previousView,\n        previousView: view,\n      });\n    }\n  }\n\n  public changeNumber(pti: PaymentTermItemRecord, value: number): void {\n    pti = pti.set(\"amount\", value);\n    this.debouncedUpdate(pti);\n    this.updateState(pti);\n  }\n\n  public changeDescription(pti: PaymentTermItemRecord, desc: string): void {\n    pti = pti.set(\"description\", desc);\n    this.debouncedUpdate(pti);\n    this.updateState(pti);\n  }\n\n  public changeKind(pti: PaymentTermItemRecord, kind: PaymentTermItemKinds): void {\n    pti = pti.set(\"type\", kind);\n    this.debouncedUpdate(pti);\n    this.updateState(pti);\n  }\n\n  public changePaymentMethod(pti: PaymentTermItemRecord, paymentMethod: \"cash\" | \"financed\") {\n    pti = pti.set(\"paymentMethod\", paymentMethod);\n    this.debouncedUpdate(pti);\n    this.updateState(pti);\n  }\n\n  public deleteItem(pti: PaymentTermItemRecord): void {\n    const { removeItem } = this.props;\n    removeItem(pti);\n  }\n\n  public updateState(pti: PaymentTermItemRecord): void {\n    const { paymentTerm } = this.state;\n    const index: number = paymentTerm.payment_term_items.findIndex((toMatch) => toMatch.uuid === pti.uuid);\n    this.setState({\n      paymentTerm: paymentTerm.setIn([\"payment_term_items\", index], pti),\n    });\n  }\n\n  public addItem(): void {\n    const { addItem } = this.props;\n    addItem(paymentTermItemFromJSON({}));\n  }\n\n  public templateChanged(templateId: number) {\n    const { addTemplate, paymentTermTemplates } = this.props;\n\n    if ((templateId as any) === \"\") {\n      return;\n    }\n\n    addTemplate(paymentTermTemplates.find((pt) => pt.id === templateId));\n  }\n}\n\nexport default connector(Chooser);\n","import * as React from \"react\";\nimport { Form, Row, Col, InputGroup } from \"react-bootstrap\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport track from \"react-tracking\";\n\nconst mapStateToProps = () => {\n  return {};\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: IInlineEditorProps) => {\n  return {\n    editEstimateName: (name: string) => dispatch(estimateActions.Actions.editEstimateName(ownProps.estimateId, name)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IInlineEditorProps {\n  estimateId: number;\n  name: string;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IInlineEditorProps;\n\nexport interface IInlineEditorState {\n  editing: boolean;\n}\n\n@track({ component: \"InlineEditor\" })\nexport class InlineEditor extends React.Component<Props, IInlineEditorState> {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      editing: false,\n    };\n\n    this.edit = this.edit.bind(this);\n    this.save = this.save.bind(this);\n  }\n\n  @track((props) => ({ action: \"edit estimate name\", estimateName: props.name }))\n  public edit(): void {\n    this.setState({ editing: true });\n  }\n\n  @track((props) => ({ action: \"save estimate name\", estimateName: props.name }))\n  public save(): void {\n    this.setState({ editing: false });\n  }\n\n  public getHeaderElement() {\n    const { editEstimateName, name } = this.props;\n    const { editing } = this.state;\n\n    if (editing) {\n      return (\n        <InputGroup className=\"estimate-name-editor\">\n          <Form.Control\n            type=\"text\"\n            defaultValue={name}\n            onChange={(e) => editEstimateName((e.target as HTMLTextAreaElement).value)}\n          />\n          <InputGroup.Append>\n            <InputGroup.Text>\n              <FontAwesome\n                className=\"link\"\n                name=\"save fa-gray\"\n                title=\"Save estimate name\"\n                size=\"lg\"\n                onClick={this.save}\n              />\n            </InputGroup.Text>\n          </InputGroup.Append>\n        </InputGroup>\n      );\n    } else {\n      return (\n        <React.Fragment>\n          <div className=\"centered\">\n            <span className=\"align-middle text-largest estimate-name\">{name}</span>\n            <FontAwesome\n              className=\"link\"\n              name=\"edit fa-gray\"\n              title=\"Edit estimate name\"\n              size=\"lg\"\n              onClick={this.edit}\n            />\n          </div>\n        </React.Fragment>\n      );\n    }\n  }\n\n  public render() {\n    return (\n      <Row className=\"inline-editor\">\n        <Col>{this.getHeaderElement()}</Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(InlineEditor);\n","import * as React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { EstimateLineItemRecord, splitName } from \"app2/src/records/EstimateLineItem\";\nimport { useSelector } from \"react-redux\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport { estimateLineItemImage } from \"app2/src/selectors/estimateLineItem.selectors\";\n\nexport interface ILineItemProps {\n  lineItem: EstimateLineItemRecord;\n  activatedPriceListId: number;\n}\n\nexport default function LineItem(props: ILineItemProps) {\n  const { lineItem, activatedPriceListId } = props;\n\n  const name = splitName(lineItem);\n  const image = useSelector((state: RootState) =>\n    estimateLineItemImage(state, { activatedPriceListId, estimateLineItemId: lineItem.id }),\n  );\n\n  return (\n    <React.Fragment>\n      <Row>\n        <Col sm={3} className=\"line-item-image-container\">\n          {image && <img className=\"img-responsive\" src={getUrl(image, \"small\")} />}\n        </Col>\n        <Col sm={9} className=\"line-item-text-container\">\n          {name.map((part, index) => (\n            <p key={index} className=\"line-item-text text-small ellipsify\">\n              {part}\n            </p>\n          ))}\n        </Col>\n      </Row>\n      <hr className=\"line-item-separator\" />\n    </React.Fragment>\n  );\n}\n","import * as React from \"react\";\nimport { Row, Col, Button, Tooltip, OverlayTrigger } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { FinanceOptionRecord, getUrl, PrequalificationProviders } from \"app2/src/records/FinanceOption\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport track from \"react-tracking\";\n\nexport interface IApplicationButtonsProps {\n  financeOption: FinanceOptionRecord;\n  estimate: EstimateRecord;\n  applyNowValidator: (financeOption: FinanceOptionRecord) => Array<string>;\n}\n\nexport interface IApplicationButtonsState {\n  showPrequalificationButton: boolean;\n}\n\n@track({ component: \"ApplicationButtons\" })\nexport class ApplicationButtons extends React.Component<IApplicationButtonsProps, IApplicationButtonsState> {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      showPrequalificationButton: PrequalificationProviders.includes(props.financeOption.provider),\n    };\n  }\n\n  @track((_props, _state, [_financeOption, queryParams]) => ({ action: \"Apply Now\", queryParams }))\n  public applyNow(financeOption: FinanceOptionRecord, queryParams: string) {\n    const { estimate } = this.props;\n    window.open(getUrl(financeOption, estimate) + queryParams, \"_blank\");\n  }\n\n  public addToolTip(id: any, errors: Array<string>, element: JSX.Element) {\n    return (\n      <OverlayTrigger\n        key={id}\n        placement=\"top\"\n        delay={{ show: 100, hide: 400 }}\n        overlay={<Tooltip id=\"toolip\">Missing Required Fields:&#013;{errors.join(\", \")}</Tooltip>}>\n        <span>{element}</span>\n      </OverlayTrigger>\n    );\n  }\n\n  public render() {\n    const { financeOption, estimate, applyNowValidator } = this.props;\n    const { showPrequalificationButton } = this.state;\n\n    if (getUrl(financeOption, estimate) === \"\") {\n      return null;\n    }\n\n    const errors = applyNowValidator(financeOption);\n\n    let applyNowBtn = (\n      <Button\n        disabled={errors.length > 0}\n        variant=\"light\"\n        className=\"width-100\"\n        style={errors.length > 0 ? { pointerEvents: \"none\" } : {}}\n        onClick={() => this.applyNow(financeOption, \"\")}>\n        Apply Now\n        {financeOption.provider !== \"\" && (\n          <>\n            &nbsp;&nbsp;\n            <FontAwesome data-testid=\"step-forward-apply\" name=\"step-forward\" />\n          </>\n        )}\n      </Button>\n    );\n\n    if (errors.length > 0) {\n      applyNowBtn = this.addToolTip(financeOption.id, errors, applyNowBtn);\n    }\n\n    return (\n      <Row>\n        {showPrequalificationButton && (\n          <Col sm={6}>\n            <Button\n              disabled={errors.length > 0}\n              variant=\"light\"\n              className=\"width-100\"\n              onClick={() => this.applyNow(financeOption, \"?pq=1\")}>\n              Prequalify\n              {financeOption.provider !== \"\" && (\n                <>\n                  &nbsp;&nbsp;\n                  <FontAwesome data-testid=\"step-forward-pq\" name=\"step-forward\" />\n                </>\n              )}\n            </Button>\n          </Col>\n        )}\n        <Col sm={showPrequalificationButton ? 6 : 12}>{applyNowBtn}</Col>\n      </Row>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Fragment } from \"react\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { Button, Col } from \"react-bootstrap\";\nimport { FinanceOptionRecord } from \"app2/src/records/FinanceOption\";\nimport { CalculatedFinancingRecord } from \"app2/src/records/CalculatedFinancing\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { List } from \"immutable\";\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: FinanceOptionDisplayProps) => {\n  return {\n    calculateFinanceOptions: (financeOptionIds: List<number>) =>\n      dispatch(\n        estimateActions.AsyncActions.reduxCalculateCalculatedFinancing(ownProps.estimateId, financeOptionIds, true),\n      ),\n  };\n};\n\nconst connector = connect(null, mapDispatchToProps);\ninterface FinanceOptionDisplayProps {\n  estimateId: number;\n  financeOption: FinanceOptionRecord;\n  calculatedFinancing: CalculatedFinancingRecord;\n  kind: string;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & FinanceOptionDisplayProps;\n\nexport class FinanceOptionDisplay extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n  }\n\n  public render() {\n    const { financeOption, calculatedFinancing, kind, calculateFinanceOptions } = this.props;\n    let payment = 0;\n    if (calculatedFinancing && !calculatedFinancing.loading) {\n      payment = calculatedFinancing.monthly_payment;\n      if (kind === \"promo\") {\n        payment = calculatedFinancing.promo_payment;\n      }\n    }\n    let term = financeOption.term;\n\n    let rate = financeOption.rate;\n    if (kind === \"promo\") {\n      term = financeOption.promo_term;\n      rate = financeOption.promo_rate;\n    }\n    return (\n      <Fragment>\n        <Col sm={4} lg={4} className=\"no-padding-col\">\n          {!calculatedFinancing || calculatedFinancing.loading ? (\n            <div style={{ height: \"36px\", width: \"36px\" }} data-testid=\"spinner\">\n              <SpinnerComponent inline localProperty={true} />\n            </div>\n          ) : (\n            <Fragment>\n              {calculatedFinancing?.error ? (\n                <Button variant=\"link\" onClick={() => calculateFinanceOptions(List([financeOption.id]))}>\n                  <FontAwesome name=\"refresh fa-gray\" size=\"lg\" title={calculatedFinancing?.error} />\n                </Button>\n              ) : (\n                <Fragment>\n                  <span className=\"text-larger\">{CurrencyFormat(payment, 0)}*</span>\n                  <span className=\"finance-label text-smallest\">/month</span>\n                </Fragment>\n              )}\n            </Fragment>\n          )}\n        </Col>\n        <Col sm={3} lg={3} className=\"no-padding-col\">\n          {!financeOption.formula && (\n            <Fragment>\n              <span className=\"finance-value text-large\">{term}</span>\n              <span className=\"finance-label text-smallest\">months</span>\n            </Fragment>\n          )}\n        </Col>\n        <Col sm={4} lg={4} className=\"no-padding-col\">\n          {!financeOption.formula && (\n            <Fragment>\n              <span className=\"finance-value text-large\">{rate}%</span>\n              <span className=\"finance-label text-smallest\">Interest Rate</span>\n            </Fragment>\n          )}\n        </Col>\n      </Fragment>\n    );\n  }\n}\n\nexport default connector(FinanceOptionDisplay);\n","import * as React from \"react\";\nimport { Fragment } from \"react\";\nimport { Row, Col, Form } from \"react-bootstrap\";\nimport { FinanceOptionRecord, hasRequiredApplicationData } from \"app2/src/records/FinanceOption\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { List } from \"immutable\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport * as estimateFinanceOptionActions from \"app2/src/reducers/estimateFinanceOption.actions\";\nimport * as estimateFinanceOptionSelector from \"app2/src/selectors/estimateFinanceOption.selectors\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { sortedFilteredFinanceOptions } from \"app2/src/selectors/financeOption.selectors\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { EstimateFinanceOptionRecord } from \"app2/src/records/EstimateFinanceOption\";\nimport track from \"react-tracking\";\nimport { ApplicationButtons } from \"./ApplicationButtons\";\nimport { calculatedFinancings } from \"app2/src/selectors/calculatedFinancing.selectors\";\nimport { CalculatedFinancingRecord } from \"app2/src/records/CalculatedFinancing\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { job as jobById } from \"app2/src/selectors/job.selectors\";\nimport FinanceOptionDisplay from \"app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/PaymentOptions/PaymentOptionsList/FinanceOptionDisplay\";\n\nconst mapStateToProps = (state: RootState, ownProps: IPaymentOptionsListProps) => {\n  const ids = ownProps.estimate.finance_option_ids;\n  const sortedFinanceOptions = sortedFilteredFinanceOptions(state, {\n    orgId: ownProps.orgId,\n    sort: ownProps.sort,\n    reverse: ownProps.reverse,\n    estimate: ownProps.estimate,\n    filterValidation: true,\n  });\n  const financedAmount = ownProps.estimate.getIn([\"payment_terms\", \"financed_amount\"]);\n  return {\n    financedAmount,\n    estimateFinanceOptions: estimateFinanceOptionSelector.estimateFinanceOptions(state, {\n      estimateFinanceOptionIds: ids,\n    }),\n    sortedFinanceOptions: sortedFinanceOptions,\n    calculatedFinancings: calculatedFinancings(state, {\n      financeOptionIds: sortedFinanceOptions.map((fo) => fo.id),\n      financedAmount,\n    }),\n    currentJob: jobById(state, { jobId: ownProps.estimate.get(\"job_id\") }),\n  };\n};\n\nconst mapDispatchToProps = (\n  dispatch: ThunkDispatch<RootState, {}, RootActions>,\n  ownProps: IPaymentOptionsListProps,\n) => {\n  return {\n    addFinanceOption: (estimateId: number, financeOptionId: number) =>\n      dispatch(estimateFinanceOptionActions.AsyncActions.addFinanceOption(estimateId, financeOptionId)),\n    removeFinanceOption: (estimateId: number, financeOptionId: number) =>\n      dispatch(estimateFinanceOptionActions.Actions.removeFinanceOption(estimateId, financeOptionId)),\n    calculateFinanceOptions: (financeOptionIds) =>\n      dispatch(estimateActions.AsyncActions.reduxCalculateCalculatedFinancing(ownProps.estimate.id, financeOptionIds)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IPaymentOptionsListProps {\n  orgId: number;\n  estimate: EstimateRecord;\n  sort: string;\n  reverse: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IPaymentOptionsListProps;\n\n@track({ component: \"Payment Options List\" })\nclass PaymentOptionsList extends React.Component<Props> {\n  public financeOptionHasRequiredData: (efo: FinanceOptionRecord) => Array<string>;\n\n  constructor(props) {\n    super(props);\n\n    this.addOrRemoveFinanceOption = this.addOrRemoveFinanceOption.bind(this);\n\n    this.financeOptionHasRequiredData = (efo: FinanceOptionRecord) => hasRequiredApplicationData(efo, props.currentJob);\n  }\n\n  @track({ action: \"Add or Remove Finance Option\" })\n  public addOrRemoveFinanceOption(event: any) {\n    const checkValue = event.target.checked;\n    const financeOptionId = parseInt(event.target.id);\n    const { addFinanceOption, removeFinanceOption, estimateFinanceOptions, estimate } = this.props;\n\n    if (checkValue) {\n      addFinanceOption(estimate.id, financeOptionId);\n    } else {\n      const estimateFinanceOption = estimateFinanceOptions.find((efo) => efo.finance_option_id === financeOptionId);\n      removeFinanceOption(estimate.id, estimateFinanceOption.id);\n    }\n  }\n\n  public componentDidMount() {\n    const { calculateFinanceOptions, sortedFinanceOptions } = this.props;\n    calculateFinanceOptions(sortedFinanceOptions.map((fo) => fo.id));\n  }\n\n  public componentDidUpdate(prevProps: Props) {\n    const { financedAmount: prevFinancedAmount } = prevProps;\n    const { financedAmount, calculateFinanceOptions, sortedFinanceOptions } = this.props;\n    if (prevFinancedAmount !== financedAmount) {\n      calculateFinanceOptions(sortedFinanceOptions.map((fo) => fo.id));\n    }\n  }\n\n  public render() {\n    const { sortedFinanceOptions, estimateFinanceOptions, estimate, calculatedFinancings } = this.props;\n    const estimateFOIds = estimateFinanceOptions.map((efo) => efo.finance_option_id);\n    if (sortedFinanceOptions.size <= 0) {\n      return <p>None Available</p>;\n    }\n\n    return (\n      <Fragment>\n        {sortedFinanceOptions.map((financeOption, idx) => {\n          const calculatedFinancing = calculatedFinancings.get(idx);\n\n          return (\n            <Fragment key={idx}>\n              {financeOption.promo_term > 0 && (\n                <Row className=\"payment-options v-align-middle\">\n                  <FinanceOptionDisplay\n                    estimateId={estimate.id}\n                    financeOption={financeOption}\n                    calculatedFinancing={calculatedFinancing}\n                    kind=\"promo\"\n                  />\n                </Row>\n              )}\n              <Row className=\"payment-options v-align-middle\" key={idx}>\n                <Col sm={12} lg={12} className=\"ellipsify payment-name\">\n                  <span title={financeOption.name}>{financeOption.name}</span>\n                </Col>\n                <FinanceOptionDisplay\n                  estimateId={estimate.id}\n                  financeOption={financeOption}\n                  calculatedFinancing={calculatedFinancing}\n                  kind=\"default\"\n                />\n                <Col sm={1} lg={1} className=\"select-finance-option\">\n                  {calculatedFinancing && !calculatedFinancing.loading && (\n                    <Form.Check\n                      id={financeOption.id.toString()}\n                      type=\"checkbox\"\n                      onChange={this.addOrRemoveFinanceOption}\n                      checked={estimateFOIds.contains(financeOption.id)}\n                    />\n                  )}\n                </Col>\n              </Row>\n              <Row className=\"payment-options v-align-middle\">\n                <Col sm={12}>\n                  <ApplicationButtons\n                    financeOption={financeOption}\n                    estimate={estimate}\n                    applyNowValidator={this.financeOptionHasRequiredData}\n                  />\n                </Col>\n              </Row>\n              <hr />\n            </Fragment>\n          );\n        })}\n        <span>\n          *{\" \"}\n          <span className=\"text-smaller\">\n            {\" \"}\n            Payment amounts shown are estimates. Payments may vary based on customer's credit and eligibility. Complete\n            loan terms including required monthly payments and promotional product details will be disclosed in your\n            loan agreement.\n          </span>\n        </span>\n      </Fragment>\n    );\n  }\n}\n\nexport default connector(PaymentOptionsList);\n","import * as React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport PaymentOptionsList from \"app2/src/components/PriceDrawer/DrawerContainer/Comparator/EstimateView/PaymentOptions/PaymentOptionsList\";\nimport track from \"react-tracking\";\n\nconst mapStateToProps = (state: RootState, ownProps: IPaymentOptionsProps) => {\n  return {};\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IPaymentOptionsProps {\n  orgId: number;\n  estimate: EstimateRecord;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IPaymentOptionsProps;\n\nexport type SortKey = \"name\" | \"payment\" | \"term\" | \"rate\";\n\nexport interface IPaymentOptionsState {\n  sort: SortKey;\n  reverse: boolean;\n}\n\n@track({ component: \"Payment Options\" })\nclass PaymentOptions extends React.Component<Props, IPaymentOptionsState> {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      sort: \"payment\",\n      reverse: false,\n    };\n\n    this.editSort = this.editSort.bind(this);\n  }\n\n  @track({ action: \"Edit Sort\" })\n  public editSort(newSort: SortKey) {\n    const { sort, reverse } = this.state;\n\n    if (sort === newSort) {\n      this.setState({ reverse: !reverse });\n    } else {\n      this.setState({ sort: newSort, reverse: false });\n    }\n  }\n\n  public render() {\n    const { estimate, orgId } = this.props;\n    const { sort, reverse } = this.state;\n\n    return (\n      <Row>\n        <Col>\n          <Row className=\"payment-options v-align-middle\">\n            <Col\n              sm={12}\n              lg={4}\n              className=\"link centered nowrap md-padding-bottom\"\n              onClick={() => this.editSort(\"name\")}>\n              <span className=\"text-small\">\n                <strong>Name</strong>\n              </span>\n              <FontAwesome\n                className=\"sort\"\n                name={`sort${sort === \"name\" ? (reverse ? \"-down\" : \"-up\") : \"\"} fa-gray`}\n                title=\"Sort by name\"\n              />\n            </Col>\n            <Col sm={4} lg={3} className=\"link centered nowrap\" onClick={() => this.editSort(\"payment\")}>\n              <span className=\"text-small\">\n                <strong>Payment</strong>\n              </span>\n              <FontAwesome\n                className=\"sort\"\n                name={`sort${sort === \"payment\" ? (reverse ? \"-down\" : \"-up\") : \"\"} fa-gray`}\n                title=\"Sort by payment\"\n              />\n            </Col>\n            <Col sm={4} lg={2} className=\"link centered nowrap\" onClick={() => this.editSort(\"term\")}>\n              <span className=\"text-small\">\n                <strong>Term</strong>\n              </span>\n              <FontAwesome\n                className=\"sort\"\n                name={`sort${sort === \"term\" ? (reverse ? \"-down\" : \"-up\") : \"\"} fa-gray`}\n                title=\"Sort by term\"\n              />\n            </Col>\n            <Col sm={4} lg={3} className=\"link centered nowrap\" onClick={() => this.editSort(\"rate\")}>\n              <span className=\"text-small\">\n                <strong>Rate</strong>\n              </span>\n              <FontAwesome\n                className=\"sort\"\n                name={`sort${sort === \"rate\" ? (reverse ? \"-down\" : \"-up\") : \"\"} fa-gray`}\n                title=\"Sort by rate\"\n              />\n            </Col>\n          </Row>\n          <hr />\n          <PaymentOptionsList orgId={orgId} estimate={estimate} sort={sort} reverse={reverse} />\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(PaymentOptions);\n","import * as React from \"react\";\nimport Chooser from \"app2/src/components/PaymentTerm/Chooser\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { PaymentTermTemplateRecord, PaymentTermItemRecord } from \"app2/src/records/PaymentTermTemplate\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport track from \"react-tracking\";\n\nconst mapStateToProps = () => {\n  return {};\n};\n\nconst mapDispatchToProps = (\n  dispatch: ThunkDispatch<RootState, {}, RootActions>,\n  ownProps: IPaymentChooserWrapperProps,\n) => {\n  const { estimate } = ownProps;\n  return {\n    addPaymentTermTemplate: (template: PaymentTermTemplateRecord) =>\n      dispatch(estimateActions.AsyncActions.addPaymentTermTemplate(estimate.id, template)),\n    addPaymentTermItem: (item: PaymentTermItemRecord) =>\n      dispatch(estimateActions.AsyncActions.addPaymentTermItem(estimate.id, item)),\n    removePaymentTermItem: (item: PaymentTermItemRecord) =>\n      dispatch(estimateActions.AsyncActions.removePaymentTermItem(estimate.id, item)),\n    updatePaymentTermItem: (item: PaymentTermItemRecord) =>\n      dispatch(estimateActions.AsyncActions.updatePaymentTermItem(estimate.id, item)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IPaymentChooserWrapperProps {\n  orgId: number;\n  estimate: EstimateRecord;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IPaymentChooserWrapperProps;\n\n@track(() => {\n  return {\n    component: \"PaymentChooserWrapper\",\n  };\n})\nclass PaymentChooserWrapper extends React.Component<Props> {\n  constructor(props) {\n    super(props);\n\n    this.addTemplate = this.addTemplate.bind(this);\n    this.addItem = this.addItem.bind(this);\n    this.removeItem = this.removeItem.bind(this);\n    this.updateItem = this.updateItem.bind(this);\n  }\n\n  @track((_props, _state, [template]) => ({\n    action: \"payment term template added\",\n    payment_term_template: template.toJS(),\n  }))\n  public addTemplate(template: PaymentTermTemplateRecord) {\n    this.props.addPaymentTermTemplate(template);\n  }\n\n  @track((_props, _state, [item]) => ({ action: \"payment term added\", payment_term: item.toJS() }))\n  public addItem(item: PaymentTermItemRecord) {\n    this.props.addPaymentTermItem(item);\n  }\n\n  @track((_props, _state, [item]) => ({ action: \"payment term removed\", payment_term: item.toJS() }))\n  public removeItem(item: PaymentTermItemRecord) {\n    this.props.removePaymentTermItem(item);\n  }\n\n  @track((_props, _state, [item]) => ({ action: \"payment term updated\", payment_term: item.toJS() }))\n  public updateItem(item: PaymentTermItemRecord) {\n    this.props.updatePaymentTermItem(item);\n  }\n\n  public render() {\n    const { orgId, estimate } = this.props;\n\n    return (\n      <Chooser\n        orgId={orgId}\n        addItem={this.addItem}\n        addTemplate={this.addTemplate}\n        removeItem={this.removeItem}\n        paymentTerm={estimate.payment_terms}\n        updateItem={this.updateItem}\n        view={\"easyEdit\"}\n        doneButton={true}\n      />\n    );\n  }\n}\n\nexport default connector(PaymentChooserWrapper);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { org } from \"app2/src/selectors/org.selectors\";\nimport { rangeFinanceOptions } from \"app2/src/selectors/financeOption.selectors\";\nimport { calculatedFinancingsLoading, range } from \"app2/src/selectors/calculatedFinancing.selectors\";\nimport { estimateFinancedAmount } from \"app2/src/selectors/estimate.selectors\";\nimport { getFinanceName } from \"app2/src/records/OrgRecord\";\n\nconst mapStateToProps = (state: RootState, ownProps: RangeProps) => {\n  const financedAmount = estimateFinancedAmount(state, ownProps);\n  const financeOptions = rangeFinanceOptions(state, ownProps);\n\n  const financeOptionIds = financeOptions.map((fo) => fo.id);\n  let rangeString = \"\";\n  const loading = calculatedFinancingsLoading(state, { financeOptionIds, financedAmount });\n  if (!loading) {\n    rangeString = range(state, { financedAmount, financeOptionIds });\n  }\n\n  return {\n    loading,\n    range: rangeString,\n    org: org(state, ownProps),\n  };\n};\n\nconst connector = connect(mapStateToProps, null);\n\ninterface RangeProps {\n  orgId: number;\n  estimateId: number;\n  asterisk: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & RangeProps;\n\nexport class Range extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n  }\n\n  public render() {\n    const { range, loading, org, asterisk } = this.props;\n\n    if (loading) {\n      return (\n        <div className=\"range-spinner\" data-testid=\"inline-spinner\">\n          <SpinnerComponent inline localProperty={true} />\n        </div>\n      );\n    }\n\n    return (\n      <Row>\n        <Col className=\"text-center\">\n          <h1 className=\"mb-0\">\n            {range}\n            {`${asterisk ? \"*\" : \"\"}`}\n          </h1>\n          <p>{` ${getFinanceName(org)}`}</p>\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(Range);\n","import { connect, ConnectedProps } from \"app2/src/connect\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { getTotalName, OrgRecord, getPrefConfig, getFinanceOptionsName } from \"app2/src/records/OrgRecord\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Accordion, Card, Col, Row } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport InlineEditor from \"./InlineEditor\";\nimport LineItem from \"./LineItem\";\nimport PaymentOptions from \"./PaymentOptions\";\nimport PaymentChooserWrapper from \"./PaymentChooserWrapper\";\nimport DiscountChooserWrapper from \"./DiscountChooserWrapper\";\nimport * as estimateComparisonActions from \"app2/src/reducers/estimateComparison.actions\";\nimport { EstimateLineItemRecord } from \"app2/src/records/EstimateLineItem\";\nimport { lineItemsEstimate, estimate } from \"app2/src/selectors/estimate.selectors\";\nimport { org } from \"app2/src/selectors/org.selectors\";\nimport Range from \"app2/src/components/FinanceOption/Range\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport track from \"react-tracking\";\n\nconst mapStateToProps = (state: RootState, ownProps: IEstimateViewProps) => {\n  const est = estimate(state, { estimateId: ownProps.estimateId });\n  let lineItems = List();\n  if (est && !est.loading) {\n    lineItems = lineItemsEstimate(state, { ...ownProps, included: true });\n  }\n\n  return {\n    org: org(state, ownProps),\n    estimate: est,\n    lineItems: lineItems,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>) => {\n  return {\n    removeEstimateComparisonLink: (estimateId: number, jobId: number) =>\n      dispatch(estimateComparisonActions.Actions.removeEstimateComparisonLink(estimateId, jobId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IEstimateViewProps {\n  orgId: number;\n  estimateId: number;\n  activeKey: AccordionActiveKey;\n  goToEstimate: (estimateId: number) => void;\n  accordionToggle: (source: AccordionActiveKey) => void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IEstimateViewProps;\n\nexport type AccordionActiveKey = \"\" | \"overview\" | \"total\";\nexport type OtherAccordionActiveKey = \"\" | \"other\";\n\nexport interface IEstimateViewState {\n  showAllItems: boolean;\n  otherActiveKey: OtherAccordionActiveKey;\n}\n\n@track({ component: \"Estimate View\" })\nexport class EstimateView extends React.Component<Props, IEstimateViewState> {\n  constructor(props) {\n    super(props);\n\n    this.toggleAllLineItems = this.toggleAllLineItems.bind(this);\n    this.toggleOtherActiveKey = this.toggleOtherActiveKey.bind(this);\n    this.navigateToEstimate = this.navigateToEstimate.bind(this);\n\n    this.state = {\n      showAllItems: false,\n      otherActiveKey: \"\",\n    };\n  }\n\n  public getFinancedTotalDisplay() {\n    const { estimate } = this.props;\n    return <h4>Total Financed Amount: {CurrencyFormat(estimate.payment_terms.financed_amount)}</h4>;\n  }\n\n  @track((props, state) => ({ action: `${state.showAllItems ? \"Hide\" : \"Show\"} Line Items` }))\n  public toggleAllLineItems() {\n    const { showAllItems } = this.state;\n\n    this.setState({ showAllItems: !showAllItems });\n  }\n\n  public getLineItemsDisplay() {\n    const { lineItems, estimate } = this.props;\n    const { showAllItems } = this.state;\n\n    let lineItemDisplay = null;\n\n    if (showAllItems) {\n      lineItemDisplay = lineItems.map((item, index) => (\n        <LineItem key={index} lineItem={item} activatedPriceListId={estimate.activated_price_list_id} />\n      ));\n    } else {\n      lineItemDisplay = lineItems\n        .slice(0, 3)\n        .map((item, index) => (\n          <LineItem key={index} lineItem={item} activatedPriceListId={estimate.activated_price_list_id} />\n        ));\n    }\n\n    return (\n      <React.Fragment>\n        {lineItemDisplay}\n        {lineItems.size > 3 && (\n          <h1 className=\"centered show-more\" onClick={this.toggleAllLineItems}>\n            ...\n          </h1>\n        )}\n      </React.Fragment>\n    );\n  }\n\n  public navigateToEstimate() {\n    const { goToEstimate, estimateId } = this.props;\n    goToEstimate(estimateId);\n  }\n\n  @track({ action: \"Toggle Other\" })\n  public toggleOtherActiveKey() {\n    const { otherActiveKey } = this.state;\n    if (otherActiveKey === \"\") {\n      this.setState({ otherActiveKey: \"other\" });\n    } else {\n      this.setState({ otherActiveKey: \"\" });\n    }\n  }\n\n  public render() {\n    const { org, orgId, estimate, estimateId, removeEstimateComparisonLink, activeKey, accordionToggle } = this.props;\n    const { otherActiveKey } = this.state;\n\n    if (!estimate || estimate.loading) {\n      return <Spinner localProperty={true} inline={true} />;\n    }\n\n    const params = { type: \"view\" };\n    return (\n      <Card className=\"comparator-card\">\n        <Card.Header className=\"comparator-header\">\n          <Row>\n            <Col sm={2} className=\"link\" onClick={this.navigateToEstimate}>\n              <FontAwesome name=\"angle-down fa-gray fa-2x\" title=\"Go to estimate\" size=\"2x\" />\n            </Col>\n            <Col sm={8}>\n              <InlineEditor estimateId={estimate.id} name={estimate.name} />\n            </Col>\n            <Col sm={2} className=\"delete-estimate\">\n              <ConfirmDialog title={\"Are you sure you want to remove this from the comparison?\"}>\n                {(confirm) => (\n                  <FontAwesome\n                    className=\"link pull-right\"\n                    name=\"times fa-gray\"\n                    title=\"Remove this estimate from the comparison\"\n                    size=\"lg\"\n                    onClick={confirm(() => removeEstimateComparisonLink(estimate.id, estimate.job_id))}\n                  />\n                )}\n              </ConfirmDialog>\n            </Col>\n          </Row>\n        </Card.Header>\n        <Card.Body className=\"comparator-body\">\n          <Row>\n            <Col className=\"range\">\n              {getPrefConfig(org, [\"price_presentation\", \"finance_range\"]) && (\n                <Range orgId={orgId} estimateId={estimateId} asterisk={true} />\n              )}\n            </Col>\n          </Row>\n          <Accordion id=\"estimate-accordion\" defaultActiveKey=\"overview\" activeKey={activeKey}>\n            <Card>\n              <Accordion.Toggle\n                as={Card.Header}\n                eventKey=\"overview\"\n                className=\"toggle-header\"\n                onClick={() => accordionToggle(\"overview\")}>\n                <div>\n                  <span>Overview</span>\n                  <span className=\"pull-right\">\n                    <FontAwesome\n                      name={`${activeKey === \"overview\" ? \"angle-down\" : \"angle-up\"}`}\n                      title=\"Expand\"\n                      size=\"lg\"\n                      className=\"pull-right\"\n                    />\n                  </span>\n                </div>\n              </Accordion.Toggle>\n            </Card>\n            <Accordion.Collapse eventKey=\"overview\">\n              <Card className=\"overview-card\">\n                <Card.Body>\n                  <Row className=\"toggle-body\">\n                    <Col>{this.getLineItemsDisplay()}</Col>\n                  </Row>\n                </Card.Body>\n              </Card>\n            </Accordion.Collapse>\n            <Card>\n              <Accordion.Toggle\n                as={Card.Header}\n                eventKey=\"total\"\n                className=\"toggle-header\"\n                onClick={() => accordionToggle(\"total\")}>\n                <div className=\"small-header\">\n                  <span>\n                    {getTotalName(org)}: {CurrencyFormat(estimate.total)}\n                  </span>\n                  <span className=\"pull-right\">\n                    <FontAwesome\n                      name={`${activeKey === \"total\" ? \"angle-down\" : \"angle-up\"}`}\n                      title=\"Expand\"\n                      size=\"lg\"\n                      className=\"pull-right\"\n                    />\n                  </span>\n                </div>\n              </Accordion.Toggle>\n            </Card>\n            <Accordion.Collapse eventKey=\"total\">\n              <Row className=\"toggle-body\">\n                <Col>\n                  <PaymentChooserWrapper orgId={orgId} estimate={estimate} />\n                  <Accordion className=\"other-accordion\" defaultActiveKey={\"\"} activeKey={otherActiveKey}>\n                    <Card>\n                      <Accordion.Toggle\n                        as={Card.Header}\n                        eventKey=\"other\"\n                        className=\"toggle-header\"\n                        onClick={this.toggleOtherActiveKey}>\n                        <div className=\"small-header\">\n                          <span>Other</span>\n                          <span className=\"pull-right\">\n                            <FontAwesome\n                              name={`${otherActiveKey === \"other\" ? \"angle-down\" : \"angle-up\"}`}\n                              title=\"Expand\"\n                              size=\"lg\"\n                              className=\"pull-right\"\n                            />\n                          </span>\n                        </div>\n                      </Accordion.Toggle>\n                    </Card>\n                    <Accordion.Collapse eventKey=\"other\">\n                      <Row className=\"toggle-body\">\n                        <Col>\n                          <DiscountChooserWrapper orgId={orgId} estimate={estimate} params={params} />\n                        </Col>\n                      </Row>\n                    </Accordion.Collapse>\n                  </Accordion>\n                </Col>\n              </Row>\n            </Accordion.Collapse>\n          </Accordion>\n          {getPrefConfig(org, [\"price_presentation\", \"finance_options_section\"]) && (\n            <Card className=\"finance-card\">\n              <Card.Body>\n                <Row className=\"finance-content finance-container\">\n                  <Col className=\"centered\">\n                    <span className=\"text-larger\">{getFinanceOptionsName(org)}</span>\n                    <div>\n                      <React.Fragment>\n                        <div className=\"centered finance-content\">{this.getFinancedTotalDisplay()}</div>\n                        <PaymentOptions orgId={orgId} estimate={estimate} />\n                      </React.Fragment>\n                    </div>\n                  </Col>\n                </Row>\n              </Card.Body>\n            </Card>\n          )}\n        </Card.Body>\n      </Card>\n    );\n  }\n}\n\nexport default connector(EstimateView);\n","import { Record, List } from \"immutable\";\nimport { EstimateGroupRecord } from \"./EstimateGroup\";\nimport { EstimateFinanceOptionRecord } from \"./EstimateFinanceOption\";\nimport { EstimateLineItemOptionRecord } from \"app2/src/records/EstimateLineItemOption\";\nimport { EstimateLineItemRecord } from \"app2/src/records/EstimateLineItem\";\nimport { OpeningEstimationRecord } from \"app2/src/records/OpeningEstimation\";\nimport { ImageRecord } from \"app2/src/records/Image\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\nimport { EstimateRecord, fromJSON as estimateFromJSON } from \"app2/src/records/Estimate\";\n\nexport interface IRecordsForEstimateRecord {\n  estimate: EstimateRecord;\n  estimateFinanceOptions: List<EstimateFinanceOptionRecord>;\n  estimateGroups: List<EstimateGroupRecord>;\n  estimateLineItems: List<EstimateLineItemRecord>;\n  estimateLineItemOptions: List<EstimateLineItemOptionRecord>;\n  estimateLineItemOpeningEstimations: List<OpeningEstimationRecord>;\n  estimateLineItemImages: List<ImageRecord>;\n  estimateLineItemDocuments: List<DocumentRecord>;\n}\n\nconst defaultRecordsForEstimateProps: IRecordsForEstimateRecord = {\n  estimate: estimateFromJSON({}),\n  estimateFinanceOptions: List<EstimateFinanceOptionRecord>(),\n  estimateGroups: List<EstimateGroupRecord>(),\n  estimateLineItems: List<EstimateLineItemRecord>(),\n  estimateLineItemOptions: List<EstimateLineItemOptionRecord>(),\n  estimateLineItemOpeningEstimations: List<OpeningEstimationRecord>(),\n  estimateLineItemImages: List<ImageRecord>(),\n  estimateLineItemDocuments: List<DocumentRecord>(),\n};\n\nexport class RecordsForEstimateRecord\n  extends Record(defaultRecordsForEstimateProps)\n  implements IRecordsForEstimateRecord {}\n","import { DocumentRecord } from \"app2/src/records/Document\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { EstimateFinanceOptionRecord } from \"app2/src/records/EstimateFinanceOption\";\nimport { EstimateGroupRecord } from \"app2/src/records/EstimateGroup\";\nimport { EstimateLineItemRecord } from \"app2/src/records/EstimateLineItem\";\nimport { EstimateLineItemOptionRecord } from \"app2/src/records/EstimateLineItemOption\";\nimport { ImageRecord } from \"app2/src/records/Image\";\nimport { RootState } from \"app2/src/reducers\";\nimport { estimate, lastSavedEstimate } from \"app2/src/selectors/estimate.selectors\";\nimport * as estimateFinanceOptionSelectors from \"app2/src/selectors/estimateFinanceOption.selectors\";\nimport * as estimateGroupSelectors from \"app2/src/selectors/estimateGroup.selectors\";\nimport * as estimateLineItemSelectors from \"app2/src/selectors/estimateLineItem.selectors\";\nimport * as estimateLineItemOptionSelectors from \"app2/src/selectors/estimateLineItemOption.selectors\";\nimport * as imageSelectors from \"app2/src/selectors/image.selectors\";\nimport * as documentSelectors from \"app2/src/selectors/document.selectors\";\nimport * as openingEstimationSelectors from \"app2/src/selectors/openingEstimation.selectors\";\n\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { OpeningEstimationRecord } from \"app2/src/records/OpeningEstimation\";\n\nexport const estimateGroups = createSelector(\n  [estimate, (state: RootState) => state],\n  (estimate: EstimateRecord, state: any): List<EstimateGroupRecord> => {\n    if (!estimate) {\n      return null;\n    }\n    return estimateGroupSelectors.estimateGroups(state, { estimateGroupIds: estimate.group_ids, fullEstimate: true });\n  },\n);\n\nexport const lastSavedEstimateGroups = createSelector(\n  [lastSavedEstimate, (state: RootState) => state],\n  (estimate: EstimateRecord, state: any): List<EstimateGroupRecord> => {\n    if (!estimate) {\n      return null;\n    }\n    return estimateGroupSelectors.lastSavedEstimateGroups(state, {\n      estimateGroupIds: estimate.group_ids,\n      fullEstimate: true,\n    });\n  },\n);\n\nexport const estimateFinanceOptions = createSelector(\n  [estimate, (state: RootState) => state],\n  (estimate: EstimateRecord, state: any): List<EstimateFinanceOptionRecord> => {\n    if (!estimate) {\n      return null;\n    }\n    return estimateFinanceOptionSelectors.estimateFinanceOptions(state, {\n      estimateFinanceOptionIds: estimate.finance_option_ids,\n    });\n  },\n);\n\nexport const lastSavedEstimateFinanceOptions = createSelector(\n  [lastSavedEstimate, (state: RootState) => state],\n  (estimate: EstimateRecord, state: any): List<EstimateFinanceOptionRecord> => {\n    if (!estimate) {\n      return null;\n    }\n    return estimateFinanceOptionSelectors.lastSavedEstimateFinanceOptions(state, {\n      estimateFinanceOptionIds: estimate.finance_option_ids,\n    });\n  },\n);\n\nexport const estimateLineItems = createSelector(\n  [estimateGroups, (state: RootState) => state],\n  (estimateGroups: List<EstimateGroupRecord>, state: any): List<EstimateLineItemRecord> => {\n    if (!estimateGroups) {\n      return null;\n    }\n    return estimateLineItemSelectors.estimateLineItems(state, {\n      estimateLineItemIds: estimateLineItemIds(estimateGroups),\n    });\n  },\n);\n\nexport const lastSavedEstimateLineItems = createSelector(\n  [lastSavedEstimateGroups, (state: RootState) => state],\n  (estimateGroups: List<EstimateGroupRecord>, state: any): List<EstimateLineItemRecord> => {\n    if (!estimateGroups) {\n      return null;\n    }\n\n    return estimateLineItemSelectors.lastSavedEstimateLineItems(state, {\n      estimateLineItemIds: estimateLineItemIds(estimateGroups),\n      fullEstimate: true,\n    });\n  },\n);\n\nexport const estimateLineItemOptions = createSelector(\n  [estimateLineItems, (state: RootState) => state],\n  (estimateLineItems: List<EstimateLineItemRecord>, state: any): List<EstimateLineItemOptionRecord> => {\n    if (!estimateLineItems) {\n      return null;\n    }\n    return estimateLineItemOptionSelectors.estimateLineItemOptions(state, {\n      estimateLineItemOptionIds: estimateLineItemOptionIds(estimateLineItems),\n    });\n  },\n);\n\nexport const lastSavedEstimateLineItemOptions = createSelector(\n  [lastSavedEstimateLineItems, (state: RootState) => state],\n  (estimateLineItems: List<EstimateLineItemRecord>, state: any): List<EstimateLineItemOptionRecord> => {\n    if (!estimateLineItems) {\n      return null;\n    }\n    return estimateLineItemOptionSelectors.lastSavedEstimateLineItemOptions(state, {\n      estimateLineItemOptionIds: estimateLineItemOptionIds(estimateLineItems),\n    });\n  },\n);\n\nexport const estimateLineItemImages = createSelector(\n  [estimateLineItems, (state: RootState) => state],\n  (estimateLineItems: List<EstimateLineItemRecord>, state: any): List<ImageRecord> => {\n    if (!estimateLineItems) {\n      return null;\n    }\n    return imageSelectors.images(state, {\n      imageIds: estimateLineItemImageIds(estimateLineItems),\n    });\n  },\n);\n\nexport const lastSavedEstimateLineItemImages = createSelector(\n  [lastSavedEstimateLineItems, (state: RootState) => state],\n  (estimateLineItems: List<EstimateLineItemRecord>, state: any): List<ImageRecord> => {\n    if (!estimateLineItems) {\n      return null;\n    }\n    return imageSelectors.lastSavedImages(state, {\n      imageIds: estimateLineItemImageIds(estimateLineItems),\n    });\n  },\n);\n\nexport const estimateLineItemDocuments = createSelector(\n  [estimateLineItems, (state: RootState) => state],\n  (estimateLineItems: List<EstimateLineItemRecord>, state: any): List<DocumentRecord> => {\n    if (!estimateLineItems) {\n      return null;\n    }\n    return documentSelectors.documents(state, {\n      documentIds: estimateLineItemDocumentIds(estimateLineItems),\n    });\n  },\n);\n\nexport const lastSavedEstimateLineItemDocuments = createSelector(\n  [lastSavedEstimateLineItems, (state: RootState) => state],\n  (estimateLineItems: List<EstimateLineItemRecord>, state: any): List<DocumentRecord> => {\n    if (!estimateLineItems) {\n      return null;\n    }\n    // documents are not editable, so use current documents\n    return documentSelectors.documents(state, {\n      documentIds: estimateLineItemDocumentIds(estimateLineItems),\n    });\n  },\n);\n\nexport const estimateLineItemOpeningEstimations = createSelector(\n  [estimateLineItems, (state: RootState) => state],\n  (estimateLineItems: List<EstimateLineItemRecord>, state: any): List<OpeningEstimationRecord> => {\n    if (!estimateLineItems) {\n      return null;\n    }\n    return openingEstimationSelectors.openingEstimations(state, {\n      openingEstimationIds: openingEstimationIds(estimateLineItems),\n    });\n  },\n);\n\nexport const lastSavedEstimateLineItemOpeningEstimations = createSelector(\n  [lastSavedEstimateLineItems, (state: RootState) => state],\n  (estimateLineItems: List<EstimateLineItemRecord>, state: any): List<OpeningEstimationRecord> => {\n    if (!estimateLineItems) {\n      return null;\n    }\n    return openingEstimationSelectors.lastSavedOpeningEstimations(state, {\n      openingEstimationIds: openingEstimationIds(estimateLineItems),\n    });\n  },\n);\n\nconst estimateLineItemIds = (estimateGroups: List<EstimateGroupRecord>): List<number> => {\n  return estimateGroups\n    .map((group) => {\n      return group.line_item_ids;\n    })\n    .flatten()\n    .toList();\n};\n\nconst estimateLineItemOptionIds = (estimateLineItems: List<EstimateLineItemRecord>): List<number> => {\n  return estimateLineItems\n    .map((eli) => {\n      return eli.option_ids;\n    })\n    .flatten()\n    .toList();\n};\n\nconst estimateLineItemImageIds = (estimateLineItems: List<EstimateLineItemRecord>): List<number> => {\n  return estimateLineItems\n    .map((eli) => {\n      return eli.image_ids;\n    })\n    .flatten()\n    .toList();\n};\n\nconst estimateLineItemDocumentIds = (estimateLineItems: List<EstimateLineItemRecord>): List<number> => {\n  return estimateLineItems\n    .map((eli) => {\n      return eli.document_ids;\n    })\n    .flatten()\n    .toList();\n};\n\nconst openingEstimationIds = (estimateLineItems: List<EstimateLineItemRecord>): List<number> => {\n  return estimateLineItems\n    .map((eli) => {\n      return eli.opening_estimation_ids;\n    })\n    .flatten()\n    .toList();\n};\n","import { RecordsForEstimateRecord } from \"app2/src/records/RecordsForEstimate\";\nimport { estimate, lastSavedEstimate } from \"app2/src/selectors/estimate.selectors\";\nimport {\n  estimateFinanceOptions,\n  estimateGroups,\n  estimateLineItems,\n  estimateLineItemOptions,\n  estimateLineItemImages,\n  estimateLineItemDocuments,\n  estimateLineItemOpeningEstimations,\n  lastSavedEstimateFinanceOptions,\n  lastSavedEstimateGroups,\n  lastSavedEstimateLineItems,\n  lastSavedEstimateLineItemOptions,\n  lastSavedEstimateLineItemImages,\n  lastSavedEstimateLineItemDocuments,\n  lastSavedEstimateLineItemOpeningEstimations,\n} from \"app2/src/selectors/estimateAccessor.selectors\";\nimport { createSelector } from \"reselect\";\n\n/**\n * Fetches all the records associated with a specific Estimate\n *\n * @param {RootState} state\n * @param {estimateId: number} params\n * @returns {RecordsForEstimateRecord}\n */\nexport const recordsForEstimate = createSelector(\n  [\n    estimate,\n    estimateFinanceOptions,\n    estimateGroups,\n    estimateLineItems,\n    estimateLineItemOptions,\n    estimateLineItemImages,\n    estimateLineItemDocuments,\n    estimateLineItemOpeningEstimations,\n  ],\n  (\n    estimate,\n    estimateFinanceOptions,\n    estimateGroups,\n    estimateLineItems,\n    estimateLineItemOptions,\n    estimateLineItemImages,\n    estimateLineItemDocuments,\n    estimateLineItemOpeningEstimations,\n  ) => {\n    return new RecordsForEstimateRecord({\n      estimate,\n      estimateFinanceOptions,\n      estimateGroups,\n      estimateLineItems,\n      estimateLineItemOptions,\n      estimateLineItemImages,\n      estimateLineItemDocuments,\n      estimateLineItemOpeningEstimations,\n    });\n  },\n);\n\n/**\n * Fetches all the lastSavedById records associated with a specific Estimate\n *\n * @param {RootState} state\n * @param {estimateId: number} params\n * @returns {RecordsForEstimateRecord}\n */\nexport const lastSavedRecordsForEstimate = createSelector(\n  [\n    lastSavedEstimate,\n    lastSavedEstimateFinanceOptions,\n    lastSavedEstimateGroups,\n    lastSavedEstimateLineItems,\n    lastSavedEstimateLineItemOptions,\n    lastSavedEstimateLineItemImages,\n    lastSavedEstimateLineItemDocuments,\n    lastSavedEstimateLineItemOpeningEstimations,\n  ],\n  (\n    estimate,\n    estimateFinanceOptions,\n    estimateGroups,\n    estimateLineItems,\n    estimateLineItemOptions,\n    estimateLineItemImages,\n    estimateLineItemDocuments,\n    estimateLineItemOpeningEstimations,\n  ) => {\n    return new RecordsForEstimateRecord({\n      estimate,\n      estimateFinanceOptions,\n      estimateGroups,\n      estimateLineItems,\n      estimateLineItemOptions,\n      estimateLineItemImages,\n      estimateLineItemDocuments,\n      estimateLineItemOpeningEstimations,\n    });\n  },\n);\n\n/**\n * compares current Estimate records against lastSavedById records and returns {true} if they are different {false} if they are the same\n *\n * @param {RootState} state\n * @param {estimateId: number} params\n * @returns {boolean}\n */\nexport const estimateRecordsDirty = createSelector(\n  [recordsForEstimate, lastSavedRecordsForEstimate],\n  (estimateRecords: RecordsForEstimateRecord, lastSavedEstimateRecords: RecordsForEstimateRecord) =>\n    !estimateRecords.equals(lastSavedEstimateRecords),\n);\n","import { EstimateComparisonLinkRecord } from \"app2/src/records/EstimateComparisonLink\";\nimport { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { lastSavedRecordsForEstimate, recordsForEstimate } from \"app2/src/selectors/recordsForEstimate.selectors\";\n\nexport const estimateComparison = (state: RootState, props: any) =>\n  state.getIn([\"estimateComparisons\", \"byJobId\", props.jobId]);\nexport const lastSavedEstimateComparison = (state: RootState, props: any) =>\n  state.getIn([\"estimateComparisons\", \"lastSavedByJobId\", props.jobId]);\nexport const jobEstimateComparisonLinks = (state: RootState, props: any) =>\n  state.getIn([\"estimateComparisons\", \"byJobId\", props.jobId, \"estimate_comparison_links\"]);\nexport const expandDrawer = (state: RootState) => state.getIn([\"estimateComparisons\", \"expandDrawer\"]);\n\nexport const estimateComparisonLinks = createSelector(\n  [jobEstimateComparisonLinks],\n  (jobEstimateComparisonLinks: List<EstimateComparisonLinkRecord>) => {\n    return jobEstimateComparisonLinks.filter((ecl) => !ecl._destroy);\n  },\n);\n\nexport const estimateComparisonChange = createSelector(\n  [estimateComparison, lastSavedEstimateComparison, (state: RootState) => state],\n  (estimateComparison, lastSavedEstimateComparison, state): boolean => {\n    if (!lastSavedEstimateComparison) {\n      return true;\n    }\n    if (estimateComparison.equals(lastSavedEstimateComparison)) {\n      // returns false if all estimates are the same as their last saved version, true otherwise\n      return (\n        estimateComparison.estimate_comparison_links.find((ecl) => {\n          const currentEstimate = recordsForEstimate(state, { estimateId: ecl.estimate_id });\n          if (!currentEstimate) {\n            return false;\n          }\n          const lastSavedEstimate = lastSavedRecordsForEstimate(state, { estimateId: ecl.estimate_id });\n          // returns a value if true, undefined otherwise\n          return !currentEstimate.equals(lastSavedEstimate);\n        }) !== undefined\n      );\n    }\n    return true;\n  },\n);\n","import * as React from \"react\";\nimport EstimateView, { AccordionActiveKey } from \"./EstimateView\";\nimport { Button, Row, Col, Form } from \"react-bootstrap\";\nimport { List } from \"immutable\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Actions } from \"app2/src/reducers/estimate.actions\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as estimateComparisonActions from \"app2/src/reducers/estimateComparison.actions\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { EstimateComparisonLinkRecord } from \"app2/src/records/EstimateComparisonLink\";\nimport { estimateComparisonLinks } from \"app2/src/selectors/estimateComparison.selectors\";\nimport { EstimateOverviewRecord } from \"app2/src/records/EstimateOverview\";\nimport { jobOverviewEstimates, estimateUnsavedId } from \"app2/src/selectors/estimate.selectors\";\nimport { getEstimatorName, OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { org } from \"app2/src/selectors/org.selectors\";\nimport track from \"react-tracking\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nconst mapStateToProps = (state: RootState, ownProps: IComparatorProps) => {\n  const { jobId } = ownProps;\n  return {\n    org: org(state, ownProps),\n    unsavedEstimateId: estimateUnsavedId(state),\n    jobOverviewEstimates: jobOverviewEstimates(state, { jobId }),\n    estimateComparisonLinks: estimateComparisonLinks(state, { jobId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: IComparatorProps) => {\n  const { jobId, orgId } = ownProps;\n  return {\n    duplicateEstimate: (estimateId: number) => dispatch(Actions.duplicateEstimate(estimateId)),\n    addEstimateComparisonLink: (estimateId: number) =>\n      dispatch(estimateComparisonActions.Actions.addEstimateComparisonLink(estimateId, jobId)),\n    getEstimate: (estimateId: number) => dispatch(estimateActions.AsyncActions.getEstimate(estimateId, orgId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IComparatorProps {\n  orgId: number;\n  jobId: number;\n  goToEstimate: (estimateId: number) => void;\n}\n\nexport interface IComparatorState {\n  activeKey: AccordionActiveKey;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IComparatorProps;\n\n@track({ component: \"Comparator\" })\nclass Comparator extends React.Component<Props, IComparatorState> {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      activeKey: \"overview\",\n    };\n\n    this.duplicate = this.duplicate.bind(this);\n    this.selectEstimate = this.selectEstimate.bind(this);\n    this.accordionToggle = this.accordionToggle.bind(this);\n  }\n\n  @track({ action: \"Duplicate\" })\n  public duplicate() {\n    const { unsavedEstimateId, estimateComparisonLinks, duplicateEstimate, addEstimateComparisonLink } = this.props;\n    duplicateEstimate(estimateComparisonLinks.first<EstimateComparisonLinkRecord>().estimate_id);\n    addEstimateComparisonLink(unsavedEstimateId);\n  }\n\n  @track({ action: \"Select Estimate\" })\n  public async selectEstimate(e) {\n    const { addEstimateComparisonLink, getEstimate } = this.props;\n    const id = parseInt(e.target.value);\n    try {\n      await getEstimate(id);\n      addEstimateComparisonLink(id);\n    } catch {}\n  }\n\n  @track((_props, state, [newKey]) => ({ action: \"Accordion Toggle\", activeKey: state.activeKey, newKey }))\n  public accordionToggle(newKey: AccordionActiveKey) {\n    const { activeKey } = this.state;\n\n    if (activeKey === newKey) {\n      this.setState({ activeKey: \"\" });\n    } else {\n      this.setState({ activeKey: newKey });\n    }\n  }\n\n  public render() {\n    const { orgId, org, jobOverviewEstimates, estimateComparisonLinks, goToEstimate } = this.props;\n    const { activeKey } = this.state;\n\n    const estimateIds = estimateComparisonLinks.map((ecl) => ecl.estimate_id);\n\n    return (\n      <Row className=\"comparator\">\n        {estimateIds.map((estimateId, index) => {\n          return (\n            <Col key={index} sm={4}>\n              <EstimateView\n                key={index}\n                activeKey={activeKey}\n                orgId={orgId}\n                accordionToggle={this.accordionToggle}\n                estimateId={estimateId}\n                goToEstimate={goToEstimate}\n              />\n            </Col>\n          );\n        })}\n        {estimateIds.count() === 1 && <Col sm={4} />}\n        {estimateIds.count() < 3 && (\n          <Col sm={4} className=\"add-estimate-column\">\n            {estimateIds.count() > 0 && (\n              <React.Fragment>\n                <Button onClick={this.duplicate}>Duplicate</Button>\n                <h5 className=\"lined-title grey-text\"> OR </h5>\n              </React.Fragment>\n            )}\n            <Form.Control as=\"select\" className=\"estimate-select\" onChange={this.selectEstimate}>\n              <option value=\"\">--Select Existing {getEstimatorName(org)}--</option>\n              {jobOverviewEstimates.map((d, idx) => {\n                return (\n                  <option key={idx} value={d.id} disabled={estimateIds.includes(d.id)}>\n                    {d.name}\n                  </option>\n                );\n              })}\n            </Form.Control>\n          </Col>\n        )}\n      </Row>\n    );\n  }\n}\n\nexport default connector(Comparator);\n","import * as React from \"react\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { Accordion, Card, Button, Row, Col } from \"react-bootstrap\";\nimport Comparator from \"./Comparator\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport {\n  estimateComparison,\n  estimateComparisonLinks,\n  expandDrawer,\n} from \"app2/src/selectors/estimateComparison.selectors\";\nimport { List } from \"immutable\";\nimport { EstimateComparisonLinkRecord } from \"app2/src/records/EstimateComparisonLink\";\nimport { org } from \"app2/src/selectors/org.selectors\";\nimport { getPricePresentationName, OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { EstimateComparisonRecord } from \"app2/src/records/EstimateComparison\";\nimport track from \"react-tracking\";\nimport { calculatedFinancingsEstimatesLoading } from \"app2/src/selectors/calculatedFinancing.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nfunction mapStateToProps(state: RootState, ownProps: IDrawerContainerProps): ReduxProps {\n  const { jobId, orgId } = ownProps;\n  const comparison = estimateComparison(state, { jobId: jobId });\n  const estimateIds = comparison.estimate_comparison_links.map((ecl) => ecl.estimate_id);\n  return {\n    expandDrawer: expandDrawer(state),\n    estimateComparisonLinks: estimateComparisonLinks(state, { jobId: jobId }),\n    estimateComparison: comparison,\n    calculatedFinancingsEstimatesLoading: calculatedFinancingsEstimatesLoading(state, { estimateIds }),\n    org: org(state, { orgId: orgId }),\n  };\n}\n\nfunction mapDispatchToProps(dispatch: RootDispatchType, ownProps: IDrawerContainerProps) {\n  const { orgId } = ownProps;\n  return {\n    getEstimate: (estimateId: number) => dispatch(estimateActions.AsyncActions.getEstimate(estimateId, orgId)),\n  };\n}\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IDrawerContainerProps {\n  orgId: number;\n  jobId: number;\n  dirty: boolean;\n  goToEstimate: (estimateId: number) => void;\n  drawerToggle: () => void;\n  saveComparison: (e: any) => void;\n}\n\ninterface DispatchProps {\n  getEstimate(id: number): Promise<void>;\n}\n\ninterface ReduxProps {\n  expandDrawer: boolean;\n  estimateComparison: EstimateComparisonRecord;\n  estimateComparisonLinks: List<EstimateComparisonLinkRecord>;\n  calculatedFinancingsEstimatesLoading: boolean;\n  org: OrgRecord;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IDrawerContainerProps & DispatchProps & ReduxProps;\n\n@track({ component: \"Drawer Container\" })\nclass DrawerContainer extends React.Component<Props> {\n  constructor(props) {\n    super(props);\n\n    this.onRefresh = this.onRefresh.bind(this);\n  }\n\n  public componentDidMount() {\n    const { expandDrawer } = this.props;\n\n    if (expandDrawer) {\n      window.addEventListener(\"beforeunload\", this.onRefresh);\n      this.loadEstimates();\n    }\n  }\n\n  public componentDidUpdate(prevProps: Props) {\n    const { expandDrawer } = this.props;\n    if (expandDrawer && !prevProps.expandDrawer) {\n      window.addEventListener(\"beforeunload\", this.onRefresh);\n      this.loadEstimates();\n    } else if (!expandDrawer && prevProps.expandDrawer) {\n      window.removeEventListener(\"beforeunload\", this.onRefresh);\n    }\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener(\"beforeunload\", this.onRefresh);\n  }\n\n  @track({ action: \"beforeunload onRefresh\" })\n  public onRefresh(e) {\n    if (!this.props.dirty) {\n      return undefined;\n    } else {\n      const msg = \"There are unsaved changes that will not show in the compare. Would you like to save changes?\";\n      e.returnValue = msg;\n      return msg;\n    }\n  }\n\n  @track({ action: \"Load Estimates\" })\n  public loadEstimates() {\n    const { estimateComparisonLinks, getEstimate } = this.props;\n    estimateComparisonLinks.forEach((ecl) => {\n      if (ecl.estimate_id > 0) {\n        getEstimate(ecl.estimate_id);\n      }\n    });\n  }\n\n  public render() {\n    const {\n      orgId,\n      org,\n      jobId,\n      expandDrawer,\n      estimateComparison,\n      calculatedFinancingsEstimatesLoading,\n      dirty,\n      drawerToggle,\n      goToEstimate,\n      saveComparison,\n    } = this.props;\n\n    return (\n      <React.Fragment>\n        <Accordion className=\"bottom\" activeKey={expandDrawer ? \"0\" : \"\"}>\n          <Card>\n            <Accordion.Toggle\n              as={Card.Header}\n              eventKey=\"0\"\n              onClick={drawerToggle}\n              className=\"drawer-header\"\n              data-testid=\"accordion-toggle\">\n              <Row>\n                <Col sm={11}>\n                  <h2>{getPricePresentationName(org)}</h2>\n                </Col>\n                <Col sm={1}>\n                  {expandDrawer ? (\n                    <Button\n                      className=\"save-estimate-comparison\"\n                      onClick={saveComparison}\n                      disabled={!dirty || estimateComparison.loading || calculatedFinancingsEstimatesLoading}>\n                      {estimateComparison.loading || calculatedFinancingsEstimatesLoading ? (\n                        <FontAwesome name=\"spinner\" className=\"fa-pulse\" data-testid=\"button-spinner\" />\n                      ) : (\n                        \"Save\"\n                      )}\n                    </Button>\n                  ) : null}\n                  <FontAwesome\n                    name={`${expandDrawer ? \"angle-down\" : \"angle-up\"}`}\n                    data-testid={`${expandDrawer ? \"angle-down\" : \"angle-up\"}`}\n                    title=\"Expand\"\n                    size=\"2x\"\n                    className=\"drawer-arrow\"\n                  />\n                </Col>\n              </Row>\n            </Accordion.Toggle>\n            <Accordion.Collapse eventKey=\"0\">\n              <Card.Body>\n                {expandDrawer && <Comparator orgId={orgId} jobId={jobId} goToEstimate={goToEstimate} />}\n              </Card.Body>\n            </Accordion.Collapse>\n          </Card>\n        </Accordion>\n        {expandDrawer && <div className=\"background-overlay\" />}\n      </React.Fragment>\n    );\n  }\n}\n\nexport default connector(DrawerContainer);\n","import { IEstimate } from \"app/src/Models/Estimate\";\nimport * as React from \"react\";\nimport DrawerContainer from \"./DrawerContainer\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { EstimateComparisonRecord } from \"app2/src/records/EstimateComparison\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport * as estimateComparisonActions from \"app2/src/reducers/estimateComparison.actions\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport {\n  estimateComparison,\n  expandDrawer,\n  estimateComparisonChange,\n} from \"app2/src/selectors/estimateComparison.selectors\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport track from \"react-tracking\";\n\nconst mapStateToProps = (state: RootState, ownProps: IDrawerProps) => {\n  return {\n    estimateComparison: estimateComparison(state, { jobId: ownProps.jobId }),\n    expandDrawer: expandDrawer(state),\n    dirty: estimateComparisonChange(state, { jobId: ownProps.jobId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>) => {\n  return {\n    viewEstimateComparison: (jobId: number) =>\n      dispatch(estimateComparisonActions.Actions.viewEstimateComparison(jobId)),\n    showDrawer: () => dispatch(estimateComparisonActions.Actions.showDrawer()),\n    hideDrawer: () => dispatch(estimateComparisonActions.Actions.hideDrawer()),\n    buildEstimateComparison: (jobId: number, estimateId: number) =>\n      dispatch(estimateComparisonActions.Actions.buildEstimateComparison(jobId, [estimateId])),\n    receiveEstimateComparison: (estimate_comparison: EstimateComparisonRecord) =>\n      dispatch(estimateComparisonActions.Actions.receiveEstimateComparison(estimate_comparison)),\n    saveEstimateComparison: (estimateComparison) =>\n      dispatch(estimateComparisonActions.AsyncActions.saveEstimateComparison(estimateComparison)),\n    getJob: (id: number) => dispatch(jobActions.AsyncActions.getJob(id)),\n    getJobEstimates: (jobId: number) => dispatch(estimateActions.AsyncActions.getJobEstimates(jobId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IDrawerProps {\n  orgId: number;\n  jobId: number;\n  openDrawer: number;\n  currentEstimate: IEstimate;\n  $state: ng.ui.IStateService;\n  EstimatorService: EstimatorService;\n  ConfirmDialog: IConfirmDialog;\n  saveEditorEstimate: () => Promise<void>;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IDrawerProps;\n\n@track(\n  (props) => {\n    return {\n      category: \"Price Comparison\",\n      component: \"Price Drawer Wrapper\",\n      action: \"show\",\n      estimate: props.currentEstimate.id,\n      job: props.jobId,\n      org: props.orgId,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n    dispatchOnMount: (cd) => ({ action: \"shown\" }),\n  },\n)\nclass PriceDrawer extends React.Component<Props> {\n  constructor(props) {\n    super(props);\n\n    this.goToEstimate = this.goToEstimate.bind(this);\n    this.openDrawer = this.openDrawer.bind(this);\n    this.drawerToggle = this.drawerToggle.bind(this);\n    this.saveComparison = this.saveComparison.bind(this);\n  }\n\n  componentDidMount() {\n    const { jobId, buildEstimateComparison, receiveEstimateComparison, currentEstimate, getJobEstimates, getJob } =\n      this.props;\n\n    getJobEstimates(jobId);\n    getJob(jobId).then((job) => {\n      if (job.estimate_comparison.id !== 0) {\n        receiveEstimateComparison(job.estimate_comparison);\n      } else {\n        if (currentEstimate) {\n          currentEstimate.$promise.then(() => {\n            buildEstimateComparison(jobId, currentEstimate.id);\n          });\n        }\n      }\n    });\n  }\n\n  componentDidUpdate(prevProps: Props) {\n    const { openDrawer } = this.props;\n\n    if (openDrawer !== prevProps.openDrawer) {\n      this.openDrawer();\n    }\n  }\n\n  @track({ action: \"Open Drawer\" })\n  public openDrawer() {\n    const { jobId, viewEstimateComparison, showDrawer, EstimatorService, ConfirmDialog } = this.props;\n    if (EstimatorService.checkEstimateState()) {\n      ConfirmDialog.confirm(\"There are unsaved changes that will be lost.  Are you sure you want to continue?\").then(\n        () => {\n          viewEstimateComparison(jobId);\n          showDrawer();\n        },\n      );\n    } else {\n      viewEstimateComparison(jobId);\n      showDrawer();\n    }\n  }\n\n  @track({ action: \"Close Drawer\" })\n  public closeDrawer() {\n    const { hideDrawer, dirty, ConfirmDialog, currentEstimate, EstimatorService } = this.props;\n    if (dirty) {\n      ConfirmDialog.confirm(\"There are unsaved changes that will be lost.  Are you sure you want to continue?\").then(\n        () => {\n          EstimatorService.loadEstimate(currentEstimate.id);\n          hideDrawer();\n        },\n      );\n    } else {\n      EstimatorService.loadEstimate(currentEstimate.id);\n      hideDrawer();\n    }\n  }\n\n  @track({ action: \"Go To Estimate\" })\n  public goToEstimate(estimateId: number): void {\n    const { jobId, $state, hideDrawer, ConfirmDialog, dirty, EstimatorService } = this.props;\n\n    if (estimateId > 0 && !dirty) {\n      EstimatorService.loadEstimate(estimateId);\n      hideDrawer();\n      $state.go(\"job_header.job_show.estimate\", { id: jobId, estimate_id: estimateId });\n    } else {\n      ConfirmDialog.confirm(\"There are unsaved changes that could be lost. Would you like to save changes?\").then(\n        () => {\n          this.saveAndHideDrawer(estimateId, () =>\n            $state.go(\"job_header.job_show.estimate\", { id: jobId, estimate_id: estimateId }),\n          );\n        },\n      );\n    }\n  }\n\n  @track({ action: \"Save and Hide Drawer\" })\n  public saveAndHideDrawer(estimateId: number, go = () => {}) {\n    const { hideDrawer, EstimatorService } = this.props;\n    this.saveComparison().then(() => {\n      if (estimateId > 0) {\n        EstimatorService.loadEstimate(estimateId);\n        hideDrawer();\n        go();\n      }\n    });\n  }\n\n  public drawerToggle() {\n    const { expandDrawer } = this.props;\n    if (expandDrawer) {\n      this.closeDrawer();\n    } else {\n      this.openDrawer();\n    }\n  }\n\n  @track({ action: \"Save Comparison\" })\n  public async saveComparison(e: any = null) {\n    const { estimateComparison, saveEstimateComparison } = this.props;\n    if (e) {\n      e.stopPropagation();\n    }\n    await saveEstimateComparison(estimateComparison);\n  }\n\n  public render() {\n    const { estimateComparison, orgId, jobId, dirty } = this.props;\n\n    if (estimateComparison && estimateComparison.show) {\n      return (\n        <DrawerContainer\n          orgId={orgId}\n          jobId={jobId}\n          goToEstimate={this.goToEstimate}\n          drawerToggle={this.drawerToggle}\n          saveComparison={this.saveComparison}\n          dirty={dirty}\n        />\n      );\n    } else {\n      return null;\n    }\n  }\n}\n\nexport default connector(PriceDrawer);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Form, Col, Row, Button, Card } from \"react-bootstrap\";\nimport { DecimalInputComponent } from \"app2/src/components/Common/DecimalInputComponent\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport InputNumber from \"rc-input-number\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\n\nconst mapStateToProps = (state: RootState, ownProps: MarkupEditorProps) => {\n  const config = preferencesConfig(state, ownProps);\n  if (!config || !config.get(\"markup\")) {\n    return {\n      product_min: 0,\n      product_max: 0,\n      labor_min: 0,\n      labor_max: 0,\n      enabled: false,\n    };\n  }\n  const { product_min, product_max, labor_min, labor_max, enabled } = config.get(\"markup\").toJS();\n  return {\n    product_min: product_min || 0,\n    product_max: product_max || 0,\n    labor_min: labor_min || 0,\n    labor_max: labor_max || 0,\n    enabled,\n  };\n};\n\nconst connector = connect(mapStateToProps, null);\n\ninterface MarkupEditorProps {\n  orgId: number;\n  estimateOrGroup: IEstimate | IEstimateGroup;\n  lineItemEditorOpen: boolean;\n  updated: (markups: any) => void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & MarkupEditorProps;\n\nexport interface MarkupEditorState {\n  show: boolean;\n  product_markup: number;\n  labor_markup: number;\n}\n\nexport class MarkupEditor extends React.Component<Props, MarkupEditorState> {\n  protected debouncedUpdate: (markups: any) => void;\n\n  constructor(props: Props) {\n    super(props);\n    const { product_markup, labor_markup } = props.estimateOrGroup;\n\n    this.state = {\n      show: false,\n      product_markup,\n      labor_markup,\n    };\n\n    this.debouncedUpdate = _.debounce(props.updated, 1000);\n    this.handleNumberChange = this.handleNumberChange.bind(this);\n    this.toggleShow = this.toggleShow.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: Props) {\n    const { product_markup, labor_markup } = prevProps.estimateOrGroup;\n    const { estimateOrGroup } = this.props;\n\n    const prev = { product_markup, labor_markup };\n    const current = { product_markup: estimateOrGroup.product_markup, labor_markup: estimateOrGroup.labor_markup };\n\n    if (JSON.stringify(prev) === JSON.stringify(current)) {\n      return;\n    }\n\n    this.setState(current);\n  }\n\n  public handleNumberChange(value: number, name: string) {\n    const { product_min, product_max, labor_min, labor_max } = this.props;\n    const markups = this.state;\n    markups[name] = value;\n    const product_markup = _.min([_.max([markups.product_markup, product_min]), product_max]);\n    const labor_markup = _.min([_.max([markups.labor_markup, labor_min]), labor_max]);\n\n    this.debouncedUpdate({ product_markup, labor_markup });\n    this.setState({\n      product_markup,\n      labor_markup,\n    });\n  }\n\n  public toggleShow() {\n    this.setState((state) => ({\n      show: !state.show,\n    }));\n  }\n\n  public displayEditor() {\n    const { product_markup, labor_markup } = this.state;\n    const { product_min, product_max, labor_min, labor_max, lineItemEditorOpen } = this.props;\n    return (\n      <Card>\n        <Card.Body>\n          <Row>\n            <Col md={3}>\n              <Form.Group>\n                <Form.Label>Product Markup</Form.Label>\n                <InputNumber\n                  data-testid=\"productMarkupInput\"\n                  type=\"number\"\n                  min={product_min}\n                  step=\"1\"\n                  id=\"product_markup\"\n                  max={product_max}\n                  required\n                  name=\"product_markup\"\n                  value={product_markup}\n                  disabled={lineItemEditorOpen}\n                  onChange={(value: number) => this.handleNumberChange(value, \"product_markup\")}\n                />\n              </Form.Group>\n            </Col>\n            <Col md={9}>\n              <Form.Group>\n                <Form.Label className=\"width-100\">\n                  {product_min} <div className=\"pull-right\">{product_max}</div>\n                </Form.Label>\n                <DecimalInputComponent\n                  title={product_markup?.toString()}\n                  data-testid=\"productMarkupRange\"\n                  type=\"range\"\n                  min={product_min}\n                  step=\"1\"\n                  id=\"product_markup\"\n                  max={product_max}\n                  required\n                  name=\"product_markup\"\n                  value={product_markup}\n                  disabled={lineItemEditorOpen}\n                  onNumberChange={this.handleNumberChange}\n                />\n              </Form.Group>\n            </Col>\n          </Row>\n          <Row>\n            <Col md={3}>\n              <Form.Group>\n                <Form.Label>Labor Markup</Form.Label>\n                <InputNumber\n                  data-testid=\"laborMarkupInput\"\n                  type=\"number\"\n                  min={labor_min}\n                  step=\"1\"\n                  id=\"labor_markup\"\n                  max={labor_max}\n                  required\n                  name=\"labor_markup\"\n                  value={labor_markup}\n                  disabled={lineItemEditorOpen}\n                  onChange={(value: number) => this.handleNumberChange(value, \"labor_markup\")}\n                />\n              </Form.Group>\n            </Col>\n            <Col md={9}>\n              <Form.Group>\n                <Form.Label className=\"width-100\">\n                  {labor_min} <div className=\"pull-right\">{labor_max}</div>\n                </Form.Label>\n                <DecimalInputComponent\n                  title={labor_markup?.toString()}\n                  data-testid=\"laborMarkupRange\"\n                  type=\"range\"\n                  min={labor_min}\n                  step=\"1\"\n                  id=\"labor_markup\"\n                  max={labor_max}\n                  required\n                  name=\"labor_markup\"\n                  value={labor_markup}\n                  disabled={lineItemEditorOpen}\n                  onNumberChange={this.handleNumberChange}\n                />\n              </Form.Group>\n            </Col>\n          </Row>\n        </Card.Body>\n      </Card>\n    );\n  }\n\n  public render() {\n    const { orgId, enabled } = this.props;\n    const { show } = this.state;\n\n    if (!enabled || !Acl.can(\"update_markup\", \"estimate\")) {\n      return null;\n    }\n\n    if (!orgId) {\n      return (\n        <div data-testid=\"inline-spinner\">\n          <SpinnerComponent inline localProperty={true} />\n        </div>\n      );\n    }\n\n    return (\n      <>\n        <Row>\n          <Col>\n            <Button id=\"estimate-mark-up-expand\" variant=\"link\" onClick={this.toggleShow} data-testid=\"markup-button\">\n              MARKUPS&nbsp;\n              {show ? (\n                <FontAwesome name=\"minus\" data-testid=\"minus-icon\" />\n              ) : (\n                <FontAwesome name=\"plus\" data-testid=\"plus-icon\" />\n              )}\n            </Button>\n          </Col>\n        </Row>\n        {show && this.displayEditor()}\n      </>\n    );\n  }\n}\n\nexport default connector(MarkupEditor);\n","import * as React from \"react\";\nimport { Form as FinalForm, FormSpy } from \"react-final-form\";\nimport arrayMutators from \"final-form-arrays\";\nimport { fromJS } from \"immutable\";\nimport { FormState } from \"final-form\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport interface RsfFinalFormProps {\n  initialValues: any;\n  formUpdate: (values: any) => void;\n  onSubmit: (formData: any) => void;\n  children: (formProps: any) => React.ReactNode;\n}\n\ninterface RsfFinalFormState {\n  lastUpdatedValues: any;\n}\n\nexport default class RsfFinalForm extends React.Component<RsfFinalFormProps, RsfFinalFormState> {\n  protected debouncedUpdate: (state: FormState<any, any>) => void;\n\n  constructor(props: RsfFinalFormProps) {\n    super(props);\n    this.state = { lastUpdatedValues: fromJS(props.initialValues) };\n\n    this.formUpdate = this.formUpdate.bind(this);\n    // Debounce formUpdate\n    this.debouncedUpdate = _.debounce(this.formUpdate, 300);\n  }\n\n  public formUpdate(state: FormState<any, any>): void {\n    const { formUpdate } = this.props;\n    const { lastUpdatedValues } = this.state;\n    const { active, values } = state;\n\n    // Only allow events through that are active and the values have changed since last update\n    if (isNullOrUndefined(active) || fromJS(values).equals(lastUpdatedValues)) {\n      return;\n    }\n\n    formUpdate(values);\n    this.setState({ lastUpdatedValues: fromJS(values) });\n  }\n\n  public render(): React.ReactNode {\n    const { onSubmit, children, initialValues } = this.props;\n\n    // https://github.com/final-form/react-final-form/issues/246#issuecomment-466029308\n    // Keeping keepDirtyOnReinitialize = true, but need initialValuesEqual = () => true in order to prevent FieldArray bug\n    return (\n      <FinalForm\n        onSubmit={onSubmit}\n        mutators={{\n          ...arrayMutators,\n        }}\n        keepDirtyOnReinitialize\n        initialValuesEqual={() => true}\n        initialValues={initialValues}>\n        {(formProps) => (\n          <form onSubmit={formProps.handleSubmit}>\n            <FormSpy subscription={{ active: true, values: true }} onChange={this.debouncedUpdate} />\n            {children(formProps)}\n          </form>\n        )}\n      </FinalForm>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { FieldRenderProps } from \"react-final-form\";\n\nexport const BootstrapInputAdapter = ({\n  input,\n  meta,\n  children,\n  storevalue,\n  append,\n  ...rest\n}: FieldRenderProps<string>): JSX.Element => {\n  const customOnChange = rest[\"onChange\"];\n  const { value, ...inputCopy } = { ...input };\n\n  return (\n    <>\n      <Form.Control\n        {...inputCopy}\n        {...rest}\n        value={input.value || storevalue || \"\"}\n        onChange={(event) => {\n          if (customOnChange) {\n            customOnChange(event);\n          }\n          input.onChange(event.target.value);\n        }}>\n        {children}\n      </Form.Control>\n      {append}\n      <span className=\"has-error\" style={{ flexBasis: \"100%\" }}>\n        {(meta.error || meta.submitError) && meta.touched && <span>{meta.error || meta.submitError}</span>}\n      </span>\n    </>\n  );\n};\n","import { DateFormat } from \"app2/src/helpers/Format\";\nimport * as React from \"react\";\nimport { Card, Dropdown, DropdownButton, InputGroup, Button } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as folderActions from \"app2/src/reducers/folder.actions\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { folder, folderChanged, lastSavedFolder } from \"app2/src/selectors/folder.selectors\";\nimport track from \"react-tracking\";\nimport DirtyWatcher from \"app2/src/components/Common/DirtyWatcher\";\nimport RsfFinalForm from \"app2/src/components/RsfForms/RsfFinalForm\";\nimport { Field } from \"react-final-form\";\nimport { BootstrapInputAdapter } from \"app2/src/components/RsfForms/BootstrapInputAdapter\";\nimport { required } from \"app2/src/helpers/FinalFormValidator\";\n\nconst mapStateToProps = (state: RootState, ownProps: FolderProps) => {\n  return {\n    folder: folder(state, { folderId: ownProps.folderId }),\n    lastSavedFolder: lastSavedFolder(state, { folderId: ownProps.folderId }),\n    folderChanged: folderChanged(state, { folderId: ownProps.folderId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: FolderProps) => {\n  return {\n    editName: (folderId: number, name: string) => dispatch(folderActions.Actions.editName(folderId, name)),\n    updateOrCreateFolder: (folderId: number) => dispatch(folderActions.AsyncActions.updateOrCreateFolder(folderId)),\n    archiveFolder: (folderId: number) => dispatch(folderActions.AsyncActions.archiveFolder(folderId)),\n    removeFolder: () => dispatch(folderActions.Actions.archiveFolder(ownProps.folderId)),\n    resetFolder: () => dispatch(folderActions.Actions.resetFolder(ownProps.folderId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface FolderState {\n  editing: boolean;\n}\n\ninterface FolderProps {\n  folderId: number;\n  dragHandle: any;\n  dragLock: boolean;\n  readOnly?: boolean;\n  navigate: (id: number) => void;\n  setDragLock: (dragLock: boolean) => void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & FolderProps;\n\n@track((props) => {\n  return {\n    component: \"Folder\",\n    folder: props.folderId,\n  };\n})\nclass Folder extends React.Component<Props, FolderState> {\n  public componentRef: any;\n  public confirm: any;\n  public submit: any;\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      editing: props.folderId <= 0,\n    };\n\n    this.componentRef = React.createRef();\n    this.edit = this.edit.bind(this);\n    this.delete = this.delete.bind(this);\n    this.save = this.save.bind(this);\n    this.onSubmit = this.onSubmit.bind(this);\n    this.navigate = this.navigate.bind(this);\n    this.stopPropagation = this.stopPropagation.bind(this);\n    this.handleNameChange = this.handleNameChange.bind(this);\n    this.cancel = this.cancel.bind(this);\n    this.handleClickOutside = this.handleClickOutside.bind(this);\n    this.check = this.check.bind(this);\n  }\n\n  public componentDidMount(): void {\n    const { editing } = this.state;\n    const { setDragLock } = this.props;\n    if (editing) {\n      this.addEventListener();\n      setDragLock(true);\n    }\n  }\n\n  public componentWillUnmount(): void {\n    this.removeEventListener();\n  }\n\n  public addEventListener(): void {\n    document.addEventListener(\"mousedown\", this.handleClickOutside);\n  }\n\n  public removeEventListener(): void {\n    document.removeEventListener(\"mousedown\", this.handleClickOutside);\n  }\n\n  public handleClickOutside(event: any): void {\n    if (this.componentRef && !this.componentRef.current.contains(event.target)) {\n      const event = new Event(\"build\");\n\n      this.confirm(() => {\n        this.submit(new Event(\"submit\", { cancelable: true, bubbles: true }));\n      })(event);\n    }\n  }\n\n  @track(() => ({\n    action: \"edit folder\",\n  }))\n  public edit(): void {\n    const { setDragLock } = this.props;\n    this.addEventListener();\n    this.setState({ editing: true });\n    setDragLock(true);\n  }\n\n  @track(() => ({\n    action: \"archive folder\",\n  }))\n  public delete(): void {\n    const { folder, archiveFolder } = this.props;\n    archiveFolder(folder.id);\n  }\n\n  @track(() => ({\n    action: \"save folder\",\n  }))\n  public save(): void {\n    const { updateOrCreateFolder, folder } = this.props;\n    this.closeEditing();\n    updateOrCreateFolder(folder.id);\n  }\n\n  public onSubmit(formData): void {\n    if (formData.name === \"\") {\n      return;\n    }\n    this.handleNameChange(formData);\n    this.save();\n  }\n\n  public navigate(): void {\n    const { folder, navigate } = this.props;\n    const { editing } = this.state;\n\n    if (!editing && folder.id > 0) {\n      navigate(folder.id);\n    }\n  }\n\n  public handleNameChange(formData): void {\n    const { folder, editName } = this.props;\n    editName(folder.id, formData.name);\n  }\n\n  public stopPropagation(e): void {\n    e.stopPropagation();\n  }\n\n  @track(() => ({\n    action: \"cancel\",\n  }))\n  public cancel(): void {\n    const { folderId, resetFolder, removeFolder } = this.props;\n    if (folderId > 0) {\n      resetFolder();\n    } else {\n      removeFolder();\n    }\n    this.closeEditing();\n  }\n\n  public closeEditing(): void {\n    const { setDragLock } = this.props;\n    this.setState({ editing: false });\n    this.removeEventListener();\n    setDragLock(false);\n  }\n\n  public check(): boolean {\n    const { folderChanged } = this.props;\n\n    return folderChanged;\n  }\n\n  public render(): React.ReactNode {\n    const { lastSavedFolder, folder, dragHandle, readOnly, dragLock, resetFolder } = this.props;\n    const { editing } = this.state;\n\n    return (\n      <Card className=\"folder-card\" data-testid=\"folder-card\" onClick={this.navigate} ref={this.componentRef}>\n        <ConfirmDialog title=\"There are unsaved folder changes that will be lost. Would you like to save changes?\">\n          {(confirm) => {\n            this.confirm = confirm;\n            return null;\n          }}\n        </ConfirmDialog>\n        <Card.Body>\n          <FontAwesome className=\"card-icon-top fa-gray\" name=\"folder-open-o\" />\n          <Card.Title className=\"mb-0\">\n            {editing ? (\n              <>\n                <DirtyWatcher check={this.check} reset={resetFolder} />\n                <RsfFinalForm\n                  onSubmit={this.onSubmit}\n                  formUpdate={this.handleNameChange}\n                  initialValues={{ name: lastSavedFolder.name }}>\n                  {({ handleSubmit }) => {\n                    this.submit = handleSubmit;\n                    return (\n                      <InputGroup>\n                        <Field\n                          autoFocus\n                          name=\"name\"\n                          data-testid=\"name-editing\"\n                          component={BootstrapInputAdapter}\n                          aria-label=\"Folder Name\"\n                          placeholder=\"Folder Name\"\n                          validate={required}\n                          append={\n                            <InputGroup.Append>\n                              <Button type=\"submit\" data-testid=\"save-button\" title=\"Save Folder\">\n                                <FontAwesome name=\"save\" />\n                              </Button>\n                              <Button\n                                onClick={this.cancel}\n                                variant=\"light\"\n                                data-testid=\"cancel-button\"\n                                title=\"Cancel Editing\">\n                                <FontAwesome name=\"times\" />\n                              </Button>\n                            </InputGroup.Append>\n                          }\n                        />\n                      </InputGroup>\n                    );\n                  }}\n                </RsfFinalForm>\n              </>\n            ) : (\n              folder.name\n            )}\n          </Card.Title>\n          {!readOnly && !editing && (\n            <>\n              {!dragLock && (\n                <Button\n                  aria-label=\"drag\"\n                  className=\"top-right-1\"\n                  variant=\"link\"\n                  {...dragHandle}\n                  onClick={this.stopPropagation}>\n                  <FontAwesome data-testid=\"drag-handle\" name=\"bars\" size=\"lg\" />\n                </Button>\n              )}\n              <DropdownButton\n                onClick={this.stopPropagation}\n                drop=\"left\"\n                className=\"top-right-2\"\n                title={\n                  <FontAwesome data-testid=\"dropdown-button\" name=\"ellipsis-v\" size=\"lg\" style={{ width: \"16px\" }} />\n                }\n                variant=\"link\">\n                <Dropdown.Item href=\"#\" onClick={this.edit}>\n                  <FontAwesome name=\"pencil\" />\n                  &nbsp;Edit\n                </Dropdown.Item>\n                <ConfirmDialog\n                  title={`Are you sure you want to delete the folder named ${folder.name} and all of the contents?`}>\n                  {(confirm) => (\n                    <Dropdown.Item href=\"#\" onClick={confirm(this.delete)}>\n                      <FontAwesome name=\"trash\" />\n                      &nbsp;Delete\n                    </Dropdown.Item>\n                  )}\n                </ConfirmDialog>\n              </DropdownButton>\n            </>\n          )}\n        </Card.Body>\n        <Card.Footer>\n          <small>\n            Last Updated: {DateFormat(folder.updated_at, \"shortName\")}\n            <FontAwesome name=\"arrow-right\" className=\"float-right fa-gray\" />\n          </small>\n        </Card.Footer>\n      </Card>\n    );\n  }\n}\n\nexport default connector(Folder);\n","import * as React from \"react\";\nimport { Card } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport { folder } from \"app2/src/selectors/folder.selectors\";\nimport track from \"react-tracking\";\n\nconst mapStateToProps = (state: RootState, ownProps: MiniFolderProps) => {\n  return {\n    folder: folder(state, { folderId: ownProps.folderId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: MiniFolderProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface MiniFolderProps {\n  folderId: number;\n  navigate: (id: number) => void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & MiniFolderProps;\n\n@track((props) => {\n  return {\n    component: \"MiniFolder\",\n    folder: props.folderId,\n  };\n})\nclass MiniFolder extends React.Component<Props> {\n  public componentRef: any;\n  public confirm: any;\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      editing: props.folderId <= 0,\n    };\n\n    this.navigate = this.navigate.bind(this);\n  }\n\n  public navigate(): void {\n    const { folder, navigate } = this.props;\n    navigate(folder.id);\n  }\n\n  public render(): React.ReactNode {\n    const { folder } = this.props;\n\n    return (\n      <Card className=\"mini-folder-card\" data-testid=\"mini-folder-card\" onClick={this.navigate}>\n        <Card.Body>\n          <Card.Title className=\"mb-0 ellipsify\" title={folder.name}>\n            <FontAwesome className=\"fa-gray float-left\" name=\"folder-open-o\" />\n            &nbsp;{folder.name}\n          </Card.Title>\n        </Card.Body>\n      </Card>\n    );\n  }\n}\n\nexport default connector(MiniFolder);\n","import * as React from \"react\";\nimport { useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useState } from \"react\";\nimport { List } from \"immutable\";\nimport {\n  DndContext,\n  closestCenter,\n  KeyboardSensor,\n  PointerSensor,\n  useSensor,\n  useSensors,\n  DragOverlay,\n} from \"@dnd-kit/core\";\nimport { SortableContext, sortableKeyboardCoordinates, rectSortingStrategy, useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { restrictToWindowEdges } from \"@dnd-kit/modifiers\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport interface SortableProps<TContainerComponent extends React.ComponentType<any>> {\n  items: List<number>;\n  renderItem: (props: any) => React.ReactNode;\n  disableDrag?: boolean;\n  Container?: TContainerComponent;\n  containerProps?: React.ComponentProps<TContainerComponent>;\n  onDragEnd?(oldIndex: number, newIndex: number);\n  dragHandle?: boolean;\n  children?: React.ReactNode;\n}\n\nconst DefaultContainer: React.FC<{}> = (props) => (\n  <Row className=\"table-body\">\n    <Col>{props.children}</Col>\n  </Row>\n);\n\nexport const Sortable = <TContainerComponent extends React.ComponentType<any>>({\n  Container,\n  items,\n  renderItem,\n  onDragEnd,\n  disableDrag = false,\n  dragHandle = false,\n  children,\n  containerProps,\n}: SortableProps<TContainerComponent>) => {\n  const sortableItems = items.map((i) => i.toString()).toArray();\n  const [activeId, setActiveId] = useState(null);\n  const sensors = useSensors(\n    useSensor(PointerSensor),\n    useSensor(KeyboardSensor, {\n      coordinateGetter: sortableKeyboardCoordinates,\n    }),\n  );\n\n  const handleDragEnd = (event) => {\n    const { active, over } = event;\n    setActiveId(null);\n    if (active.id !== over.id) {\n      const oldIndex = sortableItems.indexOf(active.id);\n      const newIndex = sortableItems.indexOf(over.id);\n\n      onDragEnd(oldIndex, newIndex);\n    }\n  };\n\n  let ItemContainer: React.ComponentType<any> = DefaultContainer;\n  if (!isNullOrUndefined(Container)) {\n    ItemContainer = Container;\n  }\n\n  return (\n    <DndContext\n      sensors={sensors}\n      collisionDetection={closestCenter}\n      onDragStart={({ active }) => {\n        if (!active) {\n          return;\n        }\n\n        setActiveId(active.id);\n      }}\n      onDragCancel={() => setActiveId(null)}\n      onDragEnd={handleDragEnd}\n      modifiers={[restrictToWindowEdges]}>\n      <SortableContext items={sortableItems} strategy={rectSortingStrategy}>\n        <ItemContainer {...containerProps}>\n          <>\n            {sortableItems.map((item) => (\n              <SortableItem\n                key={item}\n                id={item}\n                item={item}\n                renderItem={renderItem}\n                dragHandle={dragHandle}\n                disableDrag={disableDrag}\n              />\n            ))}\n            {children}\n          </>\n        </ItemContainer>\n\n        {createPortal(\n          <DragOverlay zIndex={3000} style={{ cursor: \"grabbing\" }}>\n            {activeId && renderItem({ item: parseInt(activeId) })}\n          </DragOverlay>,\n          document.body,\n        )}\n      </SortableContext>\n    </DndContext>\n  );\n};\n\nexport const SortableItem = (props) => {\n  const { renderItem, item, dragHandle, disableDrag } = props;\n  const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: item });\n\n  useEffect(() => {\n    if (!isDragging) {\n      return;\n    }\n\n    document.body.style.cursor = \"grabbing\";\n\n    return () => {\n      document.body.style.cursor = \"\";\n    };\n  }, [isDragging]);\n\n  const style = {\n    transform: CSS.Transform.toString(transform),\n    transition,\n    opacity: isDragging ? 0.3 : 1,\n    cursor: dragHandle || disableDrag ? \"inherit\" : \"grab\",\n    outline: \"none\",\n  };\n\n  props = {\n    item: parseInt(item),\n    dragHandle: {\n      ...(!dragHandle || disableDrag ? undefined : listeners),\n      style: { cursor: !dragHandle ? \"inherit\" : \"grab\", display: disableDrag ? \"none\" : \"\" },\n    },\n  };\n  return (\n    <div ref={setNodeRef} style={style} {...attributes} {...(dragHandle || disableDrag ? undefined : listeners)}>\n      {renderItem(props)}\n    </div>\n  );\n};\n","import * as React from \"react\";\n\nexport interface GridContainerProps {\n  columnWidth?: number;\n}\n\nexport const GridContainer: React.FC<GridContainerProps> = ({ children, columnWidth = 240 }) => {\n  return (\n    <div\n      className=\"grid-container\"\n      data-testid=\"gridContainer\"\n      style={{ gridTemplateColumns: `repeat(auto-fill, minmax(${columnWidth}px, 1fr))` }}>\n      {children}\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { List } from \"immutable\";\nimport track from \"react-tracking\";\n\ninterface BreadCrumbsProps {\n  parents: List<any>;\n  showRoot?: boolean;\n  navigate: (id: number) => void;\n}\n\n// Supports Closure Tree Objects with an ID\n@track((props) => {\n  return {\n    component: \"Folder\",\n    folder: props.folderId,\n  };\n})\nexport default class BreadCrumbs extends React.Component<BreadCrumbsProps> {\n  constructor(props: BreadCrumbsProps) {\n    super(props);\n    this.handleClick = this.handleClick.bind(this);\n  }\n\n  @track((props, _state, [idx]) => ({\n    action: \"navigate\",\n    folder: props.parents.getIn([idx, \"id\"]),\n  }))\n  public handleClick(idx: number): void {\n    const { showRoot, navigate, parents } = this.props;\n    if (idx === 0 && showRoot) {\n      navigate(undefined);\n      return;\n    }\n\n    navigate(parents.get(idx).id);\n  }\n\n  public render(): React.ReactNode {\n    const { parents } = this.props;\n\n    return (\n      <span data-testid=\"BreadCrumbs\">\n        {parents.map((parent, idx) => (\n          <span key={parent.id.toString()} data-testid={`parent-${idx}`}>\n            <a href=\"#\" onClick={() => this.handleClick(idx)}>\n              {parent.name}\n            </a>\n            {parents.size !== idx + 1 && <span>&nbsp;{\">\"}&nbsp;</span>}\n          </span>\n        ))}\n      </span>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport BreadCrumbs from \"app2/src/components/Common/BreadCrumbs\";\nimport { ancestors } from \"app2/src/selectors/folder.selectors\";\nimport { Row, Col } from \"react-bootstrap\";\n\nconst mapStateToProps = (state: RootState, ownProps: BreadCrumbWrapperProps) => {\n  return {\n    parents: ancestors(state, { folderId: ownProps.folderParentId }).slice(1),\n  };\n};\n\nconst connector = connect(mapStateToProps, null);\n\ninterface BreadCrumbWrapperProps {\n  folderParentId: number;\n  navigate: (id: number) => void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & BreadCrumbWrapperProps;\n\nclass BreadCrumbWrapper extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n  }\n\n  public render() {\n    const { folderParentId, parents, navigate } = this.props;\n    return (\n      <Row>\n        <Col>\n          <h4>\n            <BreadCrumbs showRoot={!!folderParentId} parents={parents} navigate={navigate} />\n          </h4>\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(BreadCrumbWrapper);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { Row, Col, Card, Button } from \"react-bootstrap\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport * as folderActions from \"app2/src/reducers/folder.actions\";\nimport { ids, pageRecord, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport Folder from \"app2/src/components/Folders/Folder\";\nimport MiniFolder from \"app2/src/components/Folders/MiniFolder\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { Sortable } from \"app2/src/components/Common/Sortable\";\nimport { GridContainer } from \"app2/src/components/Common/GridContainer\";\nimport BreadCrumbWrapper from \"app2/src/components/Folders/BreadCrumbWrapper\";\nimport { DocumentableType } from \"app2/src/api/document.service\";\nimport { capitalizeString } from \"app2/src/services/string.service\";\nimport track from \"react-tracking\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"folder\",\n    page = 1;\n  return {\n    folderIds: ids(state, { modelName }),\n    page: pageRecord(state, { modelName, page }),\n    queryParams: queryParams(state, { modelName }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: FoldersProps) => {\n  const folderable_id = ownProps.documentableType === \"job\" ? ownProps.jobId : ownProps.orgId;\n  const folderable_type = capitalizeString(ownProps.documentableType);\n  return {\n    createFolder: (id: number) =>\n      dispatch(\n        folderActions.Actions.createFolder(id, {\n          folderable_id,\n          folderable_type,\n          parent_name: FileTypeFolderName[ownProps.fileType],\n        }),\n      ),\n    onSortEnd: (oldIndex: number, newIndex: number) =>\n      dispatch(folderActions.AsyncActions.onSortEnd(oldIndex, newIndex)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport type FileType = \"images\" | \"documents\" | \"presentations\" | \"estimateTemplates\";\nconst FileTypeFolderName = {\n  images: \"Photos\",\n  documents: \"Documents\",\n  presentations: \"Presentations\",\n  estimateTemplates: \"Estimate Templates\",\n};\ninterface FoldersProps {\n  jobId?: number;\n  orgId?: number;\n  fileType: FileType;\n  folderParentId: number;\n  documentableType: DocumentableType;\n  navigate: (folderId: number) => void;\n  readOnly?: boolean;\n  miniView?: boolean;\n}\n\ninterface FoldersState {\n  dragLock: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & FoldersProps;\n\nclass Folders extends React.Component<Props, FoldersState> {\n  constructor(props: Props) {\n    super(props);\n    this.state = { dragLock: false };\n\n    this.navigate = this.navigate.bind(this);\n    this.handleCreate = this.handleCreate.bind(this);\n    this.onSortEnd = this.onSortEnd.bind(this);\n    this.setDragLock = this.setDragLock.bind(this);\n  }\n\n  @track((_props, _state, [folderId]) => ({\n    action: \"navigate\",\n    folder: folderId,\n  }))\n  public navigate(folderId: number): void {\n    this.props.navigate(folderId);\n  }\n\n  @track(() => ({\n    action: \"create folder\",\n  }))\n  public handleCreate(): void {\n    const { folderParentId, createFolder } = this.props;\n    createFolder(folderParentId);\n  }\n\n  @track((props, _state, [oldIndex, newIndex]) => ({\n    action: \"onDragEnd\",\n    oldIndex: oldIndex,\n    newIndex: newIndex,\n    folders: props.folderIds.toArray(),\n  }))\n  public onSortEnd(oldIndex: number, newIndex: number): void {\n    const { onSortEnd } = this.props;\n\n    onSortEnd(oldIndex, newIndex);\n  }\n\n  public setDragLock(dragLock: boolean): void {\n    this.setState({ dragLock });\n  }\n\n  public render(): React.ReactNode {\n    const { folderIds, page, folderParentId, readOnly, miniView } = this.props;\n    const { dragLock } = this.state;\n\n    if (page?.loading) {\n      return (\n        <span data-testid=\"spinner\">\n          <SpinnerComponent localProperty={true} />\n        </span>\n      );\n    }\n\n    if (isNullOrUndefined(folderIds)) {\n      return null;\n    }\n\n    return (\n      <>\n        <BreadCrumbWrapper folderParentId={folderParentId} navigate={this.navigate} />\n        <Row>\n          <Col>\n            <Sortable\n              items={folderIds}\n              Container={GridContainer}\n              containerProps={{ columnWidth: 245 }}\n              onDragEnd={this.onSortEnd}\n              dragHandle\n              renderItem={(props) => {\n                const { item, dragHandle } = props;\n                if (miniView) {\n                  return <MiniFolder folderId={item} navigate={this.navigate} />;\n                }\n                return (\n                  <Folder\n                    folderId={item}\n                    navigate={this.navigate}\n                    dragHandle={dragHandle}\n                    readOnly={readOnly}\n                    dragLock={dragLock}\n                    setDragLock={this.setDragLock}\n                  />\n                );\n              }}>\n              {folderIds.size <= 24 && !readOnly && (\n                <Card className=\"folder-card create\" onClick={this.handleCreate}>\n                  <Card.Body className=\"text-center\" data-testid=\"create-folder\">\n                    <FontAwesome className=\"card-icon-top fa-gray\" name=\"folder-open-o\" />\n                    <Card.Title>Create a New Folder</Card.Title>\n                  </Card.Body>\n                </Card>\n              )}\n            </Sortable>\n          </Col>\n        </Row>\n      </>\n    );\n  }\n}\n\nexport default connector(Folders);\n","import * as React from \"react\";\nimport { Row, Col, Pagination } from \"react-bootstrap\";\nimport track from \"react-tracking\";\n\nexport interface StandardPaginationProps {\n  pageChanged: (page: number) => void;\n  metadata: any;\n}\n\nexport interface StandardPaginationState {}\n\n@track(() => {\n  return {\n    component: \"StandardPagination\",\n  };\n})\nexport class StandardPagination extends React.Component<StandardPaginationProps, StandardPaginationState> {\n  constructor(props) {\n    super(props);\n\n    this.handlePageChange = this.handlePageChange.bind(this);\n  }\n\n  @track((_props, _state, [page]) => ({\n    action: \"pagination page changed\",\n    page: page,\n  }))\n  public handlePageChange(page: number): void {\n    this.props.pageChanged(page);\n  }\n\n  public render() {\n    const { metadata } = this.props;\n\n    if (!metadata) {\n      return (\n        <Row>\n          <Col md={12}>\n            <Pagination className=\"justify-content-center\">\n              <Pagination.First />\n              <Pagination.Last />\n            </Pagination>\n          </Col>\n        </Row>\n      );\n    }\n\n    let { total_pages, current_page } = metadata;\n\n    let preEllipsis = null,\n      preArrow = null;\n    let postEllipsis = null,\n      postArrow = null;\n\n    current_page = parseInt(current_page || 1);\n    total_pages = parseInt(total_pages || 1);\n\n    if (total_pages === 1) {\n      return (\n        <Row>\n          <Col md={12}>\n            <Pagination className=\"justify-content-center\">\n              <Pagination.Ellipsis />\n            </Pagination>\n          </Col>\n        </Row>\n      );\n    }\n\n    const pre = [],\n      post = [];\n\n    if (current_page > 1) {\n      const preNumber = Math.max(1, current_page - 2);\n\n      for (let i = preNumber; i < current_page; i++) {\n        pre.push(\n          <Pagination.Item key={i} onClick={() => this.handlePageChange(i)}>\n            {i}\n          </Pagination.Item>,\n        );\n      }\n\n      if (preNumber > 1) {\n        preEllipsis = <Pagination.Ellipsis />;\n      }\n\n      preArrow = <Pagination.Prev onClick={() => this.handlePageChange(current_page - 1)} />;\n    }\n\n    if (current_page < total_pages) {\n      const available = 4 - pre.length;\n      const postNumber = Math.min(total_pages, current_page + available);\n\n      for (let i = current_page + 1; i <= postNumber; i++) {\n        post.push(\n          <Pagination.Item key={i} onClick={() => this.handlePageChange(i)}>\n            {i}\n          </Pagination.Item>,\n        );\n      }\n\n      if (postNumber < total_pages) {\n        postEllipsis = <Pagination.Ellipsis />;\n      }\n\n      postArrow = <Pagination.Next onClick={() => this.handlePageChange(current_page + 1)} />;\n    }\n\n    return (\n      <Row>\n        <Col md={12}>\n          <Pagination className=\"justify-content-center\">\n            <Pagination.First disabled={current_page === 1} onClick={() => this.handlePageChange(1)} />\n            {preArrow}\n            {preEllipsis}\n            {pre}\n            <Pagination.Item active onClick={() => this.handlePageChange(current_page)}>\n              {current_page}\n            </Pagination.Item>\n            {post}\n            {postEllipsis}\n            {postArrow}\n            <Pagination.Last\n              disabled={current_page === total_pages}\n              onClick={() => this.handlePageChange(total_pages)}\n            />\n          </Pagination>\n        </Col>\n      </Row>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Form } from \"react-bootstrap\";\n\nexport interface IncludeCheckBoxProps {\n  checked: boolean;\n  name: string;\n  label?: string;\n  onChange: (event) => void;\n}\n\nexport const IncludeCheckBox = ({ checked, label, name, onChange }: IncludeCheckBoxProps): JSX.Element => {\n  return (\n    <Form.Check\n      data-testid={name}\n      type=\"checkbox\"\n      name={name}\n      inline\n      label={label}\n      checked={checked}\n      onChange={onChange}\n    />\n  );\n};\n","import * as React from \"react\";\nimport { Row, Col, InputGroup, Button, FormControl, ButtonGroup, OverlayTrigger, Popover } from \"react-bootstrap\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport DateTime from \"app2/src/components/Common/DateTime\";\nimport { estimateTemplate } from \"app2/src/selectors/estimateTemplate.selectors\";\nimport { EstimateTemplateRecord } from \"app2/src/records/EstimateTemplate\";\nimport * as estimateTemplateActions from \"app2/src/reducers/estimateTemplate.actions\";\nimport { IncludeCheckBox } from \"app2/src/components/Common/IncludeCheckBox\";\nimport { List } from \"immutable\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport track from \"react-tracking\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport DirtyWatcher from \"app2/src/components/Common/DirtyWatcher\";\nimport { estimateTemplateChanged } from \"app2/src/selectors/estimateTemplate.selectors\";\nimport { IEstimateTemplate } from \"app/src/Models/EstimateTemplate\";\nimport { CamelToSnakeKeys } from \"app2/src/helpers/Format\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState, ownProps: EstimateTemplateProps) => {\n  return {\n    estimateTemplate: estimateTemplate(state, { estimateTemplateId: ownProps.estimateTemplateId }),\n    estimateTemplateChanged: estimateTemplateChanged(state, { estimateTemplateId: ownProps.estimateTemplateId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: EstimateTemplateProps) => {\n  return {\n    destroyEstimateTemplate: (estimateTemplate: EstimateTemplateRecord) =>\n      dispatch(estimateTemplateActions.AsyncActions.destroyEstimateTemplate(estimateTemplate)),\n    editSelected: (value: boolean) =>\n      dispatch(estimateTemplateActions.Actions.editSelected(ownProps.estimateTemplateId, value)),\n    updateEstimateTemplate: () =>\n      dispatch(estimateTemplateActions.AsyncActions.batchUpdateEstimateTemplate(List([ownProps.estimateTemplateId]))),\n    editName: (estimateTemplateId: number, name: string) =>\n      dispatch(estimateTemplateActions.Actions.editName(estimateTemplateId, name)),\n    resetEstimateTemplate: () =>\n      dispatch(estimateTemplateActions.Actions.resetEstimateTemplate(ownProps.estimateTemplateId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface EstimateTemplateState {\n  editing: boolean;\n}\n\ninterface EstimateTemplateProps {\n  estimateTemplateId: number;\n  readOnly: boolean;\n  saveAs: (selection: string | IEstimateTemplate) => void;\n  select: (selection: IEstimateTemplate) => void;\n  dragHandle?: any;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & EstimateTemplateProps;\n@track((props) => {\n  return {\n    component: \"EstimateTemplate\",\n    estimateTemplate: props.estimateTemplateId,\n  };\n})\nclass EstimateTemplate extends React.Component<Props, EstimateTemplateState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      editing: false,\n    };\n\n    this.checkBoxOnChange = this.checkBoxOnChange.bind(this);\n    this.destroyEstimateTemplate = this.destroyEstimateTemplate.bind(this);\n    this.edit = this.edit.bind(this);\n    this.check = this.check.bind(this);\n    this.handleNameChange = this.handleNameChange.bind(this);\n    this.handleKeyPress = this.handleKeyPress.bind(this);\n    this.save = this.save.bind(this);\n    this.saveAs = this.saveAs.bind(this);\n    this.selectTemplate = this.selectTemplate.bind(this);\n  }\n\n  @track((_props, _state, [event]) => ({\n    action: \"checkBoxChanged\",\n    category: \"CheckBox\",\n    label: \"\",\n    type: event.target.name,\n    value: event.target.checked,\n    checkboxType: event.target.name,\n  }))\n  public checkBoxOnChange(event: any): void {\n    const { editSelected } = this.props;\n    editSelected(event.target.checked);\n  }\n\n  @track(() => ({\n    action: \"edit org estimateTemplate name\",\n  }))\n  public edit(): void {\n    this.setState({ editing: true });\n  }\n\n  public handleNameChange(event): void {\n    const { estimateTemplate, editName } = this.props;\n    editName(estimateTemplate.id, event.target.value);\n  }\n\n  @track((props) => ({\n    action: \"save org estimateTemplate name\",\n    doc: props.estimateTemplate.name,\n  }))\n  public save(): void {\n    const { updateEstimateTemplate } = this.props;\n    this.setState({ editing: false });\n    updateEstimateTemplate();\n  }\n\n  @track((props) => ({\n    action: \"save over estimateTemplate\",\n    doc: props.estimateTemplate.name,\n  }))\n  public saveAs(): void {\n    const { saveAs, estimateTemplate } = this.props;\n    saveAs(CamelToSnakeKeys(estimateTemplate.toJS()));\n  }\n\n  public handleKeyPress(target): void {\n    if (target.charCode === 13) {\n      this.save();\n    }\n  }\n\n  @track(() => ({\n    action: \"estimateTemplate deleted\",\n  }))\n  public async destroyEstimateTemplate() {\n    const { estimateTemplate, destroyEstimateTemplate } = this.props;\n    await destroyEstimateTemplate(estimateTemplate);\n  }\n\n  @track(() => ({\n    action: \"estimateTemplate selected\",\n  }))\n  public selectTemplate() {\n    const { select, estimateTemplate } = this.props;\n    select(CamelToSnakeKeys(estimateTemplate.toJS()));\n  }\n\n  public check(): boolean {\n    const { estimateTemplateChanged } = this.props;\n\n    return estimateTemplateChanged;\n  }\n\n  public render() {\n    const { readOnly, estimateTemplate, dragHandle, resetEstimateTemplate } = this.props;\n    const { editing } = this.state;\n\n    if (isNullOrUndefined(estimateTemplate)) {\n      return null;\n    }\n\n    return (\n      <>\n        <SpinnerComponent localProperty={estimateTemplate.loading} />\n        <Row\n          className=\"table-row\"\n          data-testid=\"EstimateTemplate\"\n          onClick={readOnly ? this.selectTemplate : null}\n          style={{ cursor: readOnly ? \"pointer\" : \"default\" }}>\n          <Col sm={2}>\n            {!readOnly && (\n              <Can resource=\"estimate_template\" permission=\"update\">\n                <IncludeCheckBox name=\"selected\" checked={estimateTemplate.selected} onChange={this.checkBoxOnChange} />\n                {dragHandle && <img {...dragHandle} src=\"/assets/images/icons/ic_sort.ea6f8933.png\" />}\n              </Can>\n            )}\n          </Col>\n          <Col className=\"break-word\">\n            {readOnly ? (\n              <div className=\"d-flex align-items-center\">\n                {estimateTemplate.name}\n                {estimateTemplate.kind === \"interior\" && (\n                  <OverlayTrigger\n                    trigger={[\"hover\", \"focus\"]}\n                    placement=\"right\"\n                    overlay={\n                      <Popover id={\"interior-popover-\" + estimateTemplate.id}>\n                        <Popover.Content>Interior measurement template</Popover.Content>\n                      </Popover>\n                    }>\n                    <img\n                      style={{ width: \"22px\" }}\n                      className=\"ml-1 mb-1\"\n                      src=\"/assets/images/icons/interior-measurement.de7e8aee.png\"\n                      alt=\"(Interior Template)\"\n                    />\n                  </OverlayTrigger>\n                )}\n              </div>\n            ) : (\n              <>\n                {editing ? (\n                  <InputGroup>\n                    <DirtyWatcher check={this.check} reset={resetEstimateTemplate} />\n                    <FormControl\n                      autoFocus\n                      data-testid=\"name-editing\"\n                      placeholder=\"EstimateTemplate Name\"\n                      name=\"name\"\n                      value={estimateTemplate.name}\n                      onChange={this.handleNameChange}\n                      onKeyPress={this.handleKeyPress}\n                    />\n                    <InputGroup.Append>\n                      <Button onClick={this.save} data-testid=\"save-button\">\n                        <FontAwesome name=\"save\" />\n                      </Button>\n                    </InputGroup.Append>\n                  </InputGroup>\n                ) : (\n                  <div className=\"d-flex align-items-center\">\n                    <Can resource=\"estimate_template\" permission=\"update\">\n                      <a className=\"action-button\" href=\"#\" title=\"Edit Name\" onClick={this.edit}>\n                        <i className=\"rsf-edit-link rsf-base-66\"></i>\n                      </a>\n                    </Can>\n                    {estimateTemplate.name}\n                    {estimateTemplate.kind === \"interior\" && (\n                      <OverlayTrigger\n                        trigger={[\"hover\", \"focus\"]}\n                        placement=\"right\"\n                        overlay={\n                          <Popover id={\"interior-popover-\" + estimateTemplate.id}>\n                            <Popover.Title>Interior Measurement</Popover.Title>\n                            <Popover.Content>This is an interior measurement template.</Popover.Content>\n                          </Popover>\n                        }>\n                        <img\n                          style={{ width: \"22px\" }}\n                          className=\"ml-1 mb-1\"\n                          src=\"/assets/images/icons/interior-measurement.de7e8aee.png\"\n                          alt=\"(Interior Template)\"\n                        />\n                      </OverlayTrigger>\n                    )}\n                  </div>\n                )}\n              </>\n            )}\n          </Col>\n          <Col sm={3}>\n            <DateTime date={estimateTemplate.updatedAt} variant=\"vertical\" />\n          </Col>\n          {!readOnly && (\n            <Col sm={2}>\n              <ButtonGroup>\n                <Can resource=\"estimate_template\" permission=\"update\">\n                  <a className=\"action-button\" data-testid=\"save\" title=\"Save Estimate Template\" onClick={this.saveAs}>\n                    <i className=\"rsf-save-link rsf-base-66\"></i>\n                  </a>\n                  <ConfirmDialog title={`Are you sure you want to delete estimate template: ${estimateTemplate.name}?`}>\n                    {(confirm) => (\n                      <a\n                        className=\"action-button\"\n                        data-testid=\"destroy\"\n                        title=\"Delete Estimate Template\"\n                        onClick={confirm(this.destroyEstimateTemplate)}>\n                        <i className=\"rsf-delete-link rsf-base-66\"></i>\n                      </a>\n                    )}\n                  </ConfirmDialog>\n                </Can>\n              </ButtonGroup>\n            </Col>\n          )}\n        </Row>\n      </>\n    );\n  }\n}\n\nexport default connector(EstimateTemplate);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport * as estimateTemplateActions from \"app2/src/reducers/estimateTemplate.actions\";\nimport { ids, pageRecord, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { Row, Col, Button } from \"react-bootstrap\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { Sortable } from \"app2/src/components/Common/Sortable\";\nimport { StandardPagination } from \"app2/src/components/Pagination/Standard\";\nimport { List } from \"immutable\";\nimport track from \"react-tracking\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { IncludeCheckBox } from \"app2/src/components/Common/IncludeCheckBox\";\nimport EstimateTemplate from \"app2/src/components/JobTabs/EstimateTab/EstimateTemplateModal/EstimateTemplates/EstimateTemplate\";\nimport { IEstimateTemplate } from \"app/src/Models/EstimateTemplate\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"estimateTemplate\",\n    templateQueryParams = queryParams(state, { modelName });\n  const page = templateQueryParams.get(\"page\");\n  const estimateTemplateIds = ids(state, { modelName });\n  return {\n    estimateTemplateIds,\n    page: pageRecord(state, { modelName, page }),\n    pagination: pagination(state, { modelName, page }),\n    templateQueryParams,\n    orgId: currentOrgId(state),\n    selectedCheck: false,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: EstimateTemplatesProps) => {\n  return {\n    listEstimateTemplates: (orgId: number, queryParams: QueryParamsRecord) =>\n      dispatch(\n        estimateTemplateActions.AsyncActions.listEstimateTemplates(\n          {\n            id: orgId,\n            folderId: ownProps.folderParentId,\n          },\n          queryParams,\n        ),\n      ),\n    onSortEnd: (oldIndex: number, newIndex: number) =>\n      dispatch(estimateTemplateActions.AsyncActions.onSortEnd(oldIndex, newIndex)),\n    batchEditSelected: (estimateTemplateIds: List<number>, value: boolean) =>\n      dispatch(estimateTemplateActions.Actions.batchEditSelected(estimateTemplateIds, value)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface EstimateTemplatesProps {\n  folderParentId: number;\n  readOnly: boolean;\n  templateName: string;\n  saveAs: (selection: string | IEstimateTemplate) => void;\n  select: (selection: IEstimateTemplate) => void;\n  setReadOnly: () => void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & EstimateTemplatesProps;\n\n@track(() => {\n  return {\n    component: \"EstimateTemplates\",\n  };\n})\nclass EstimateTemplates extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.queryEstimateTemplates = this.queryEstimateTemplates.bind(this);\n    this.onDragEnd = this.onDragEnd.bind(this);\n    this.checkBoxOnChange = this.checkBoxOnChange.bind(this);\n  }\n\n  @track((_props, _state, [page]) => ({\n    action: \"queryEstimateTemplates\",\n    page: page,\n  }))\n  public queryEstimateTemplates(page: number): void {\n    const { listEstimateTemplates, templateQueryParams, orgId } = this.props;\n    const newQueryParams = templateQueryParams.setIn([\"page\"], page);\n\n    listEstimateTemplates(orgId, newQueryParams);\n  }\n\n  @track((props, _state, [oldIndex, newIndex]) => ({\n    action: \"onDragEnd\",\n    oldIndex: oldIndex,\n    newIndex: newIndex,\n    estimateTemplates: props.estimateTemplateIds.toArray(),\n  }))\n  public onDragEnd(oldIndex: number, newIndex: number): void {\n    const { onSortEnd } = this.props;\n\n    onSortEnd(oldIndex, newIndex);\n  }\n\n  @track((props, _state, [event]) => ({\n    action: \"checkAll\",\n    category: \"CheckBox\",\n    label: \"\",\n    type: event.target.name,\n    value: event.target.checked,\n    checkboxType: event.target.name,\n    estimateTemplates: props.estimateTemplateIds.toArray(),\n  }))\n  public checkBoxOnChange(event: any): void {\n    const { estimateTemplateIds, batchEditSelected } = this.props;\n    batchEditSelected(estimateTemplateIds, event.target.checked);\n  }\n\n  public render(): React.ReactNode {\n    const {\n      readOnly,\n      estimateTemplateIds,\n      page,\n      pagination,\n      selectedCheck,\n      templateQueryParams,\n      templateName,\n      saveAs,\n      select,\n      setReadOnly,\n    } = this.props;\n\n    if (page?.loading) {\n      return <SpinnerComponent localProperty={true} />;\n    }\n\n    if (isNullOrUndefined(page) || estimateTemplateIds.size === 0) {\n      return (\n        <Row>\n          <Col>\n            <div className=\"form-section blank-state\">\n              <img src=\"/assets/images/icons-large/docs.33cddf3f.png\" />\n              <h2>\n                No Estimate {templateName}s.{\" \"}\n                <Can resource=\"estimate_template\" permission=\"update\">\n                  Let's add one\n                </Can>\n              </h2>\n              <Can resource=\"estimate_template\" permission=\"update\">\n                {!readOnly && <p>Add a name below and click save.</p>}\n              </Can>\n              <Can resource=\"estimate_template\" permission=\"update\" inverse>\n                <p>Contact your organization administrator to add them.</p>\n              </Can>\n              <Can resource=\"estimate_template\" permission=\"update\">\n                {readOnly && <Button onClick={setReadOnly}>Add Estimate Template</Button>}\n              </Can>\n            </div>\n          </Col>\n        </Row>\n      );\n    }\n\n    return (\n      <Row>\n        <Col>\n          <div className=\"standard-rl-margin\">\n            <Row className=\"table-header\">\n              <Col sm={2} style={{ paddingLeft: \"15px\" }}>\n                {!readOnly && (\n                  <IncludeCheckBox name=\"selected\" checked={selectedCheck} onChange={this.checkBoxOnChange} />\n                )}\n              </Col>\n              <Col>Name</Col>\n              <Col sm={3}>Updated On</Col>\n              {!readOnly && <Col sm={2}>Actions</Col>}\n            </Row>\n            <Sortable\n              dragHandle\n              disableDrag={templateQueryParams.get(\"page\") !== 1}\n              items={estimateTemplateIds}\n              onDragEnd={this.onDragEnd}\n              renderItem={({ item, dragHandle }) => {\n                return (\n                  <EstimateTemplate\n                    saveAs={saveAs}\n                    select={select}\n                    readOnly={readOnly}\n                    estimateTemplateId={item}\n                    dragHandle={dragHandle}\n                  />\n                );\n              }}\n            />\n            <StandardPagination metadata={pagination} pageChanged={this.queryEstimateTemplates} />\n            <br />\n          </div>\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(EstimateTemplates);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { folder } from \"app2/src/selectors/folder.selectors\";\nimport { Dropdown } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { FileType } from \"app2/src/components/Folders\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport * as folderActions from \"app2/src/reducers/folder.actions\";\nimport track from \"react-tracking\";\n\nconst mapStateToProps = (state: RootState, ownProps: DropdownItemProps) => {\n  return {\n    folder: folder(state, { folderId: ownProps.folderId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: DropdownItemProps) => {\n  return {\n    moveFiles: () => dispatch(folderActions.AsyncActions.moveFiles(ownProps.folderId, ownProps.fileType)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface DropdownItemProps {\n  icon: string;\n  folderId: number;\n  fileType: FileType;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & DropdownItemProps;\n\n@track((props) => {\n  return {\n    component: \"DropdownItem\",\n    folder: props.folderId,\n    folderName: props.folder.name,\n    fileType: props.fileType,\n  };\n})\nclass DropdownItem extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.moveFiles = this.moveFiles.bind(this);\n  }\n\n  @track(() => ({\n    action: \"move files\",\n  }))\n  public moveFiles() {\n    const { moveFiles } = this.props;\n    moveFiles();\n  }\n\n  public render() {\n    const { folder, icon } = this.props;\n    return (\n      <Dropdown.Item data-testid=\"dropdown-item\" href=\"#\" onClick={this.moveFiles}>\n        <FontAwesome name={icon} data-testid={icon} />\n        &nbsp;&nbsp;\n        {folder.name}\n      </Dropdown.Item>\n    );\n  }\n}\n\nexport default connector(DropdownItem);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ancestors } from \"app2/src/selectors/folder.selectors\";\nimport { DropdownButton } from \"react-bootstrap\";\nimport { FileType } from \"app2/src/components/Folders\";\nimport DropdownItem from \"app2/src/components/Folders/MoveFilesDropdown/DropdownItem\";\nimport { ids } from \"app2/src/selectors/pagination.selectors\";\nimport track from \"react-tracking\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\n\nconst mapStateToProps = (state: RootState, ownProps: MoveFilesDropdownProps) => {\n  const modelName = \"folder\";\n  return {\n    folderIds: ids(state, { modelName }),\n    parents: ancestors(state, { folderId: ownProps.folderParentId }).slice(1, -1),\n  };\n};\n\nconst connector = connect(mapStateToProps, null);\n\ninterface MoveFilesDropdownProps {\n  fileType: FileType;\n  folderParentId: number;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & MoveFilesDropdownProps;\n\n@track(() => {\n  return {\n    component: \"MoveFilesDropdown\",\n  };\n})\nclass MoveFilesDropdown extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.onToggle = this.onToggle.bind(this);\n  }\n\n  @track((props, _state, [isOpen]) => ({\n    action: `toggle move ${props.fileType} dropdown`,\n    open: isOpen,\n  }))\n  public onToggle(_isOpen: boolean): void {}\n\n  public render() {\n    const { folderIds, parents, fileType } = this.props;\n    return (\n      <DropdownButton\n        data-testid=\"move-button\"\n        className=\"pull-right\"\n        title={`Move ${toTitleCase(fileType)} To  `}\n        variant=\"default\"\n        onToggle={this.onToggle}>\n        {parents.map((parent) => (\n          <DropdownItem key={parent.id.toString()} folderId={parent.id} icon=\"angle-left\" fileType={fileType} />\n        ))}\n        {folderIds.map((folderId) => (\n          <DropdownItem key={folderId.toString()} folderId={folderId} icon=\"angle-right\" fileType={fileType} />\n        ))}\n      </DropdownButton>\n    );\n  }\n}\n\nexport default connector(MoveFilesDropdown);\n","import * as React from \"react\";\nimport { Form, Table } from \"react-bootstrap\";\nimport { currentMeasurementRooms } from \"app2/src/selectors/room.selectors\";\nimport { useSelector } from \"react-redux\";\nimport { RootState } from \"app2/src/reducers\";\nimport { List, Map } from \"immutable\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { imperial_uom } from \"app/src/Common/Constants\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\nexport interface SelectRoomsProps {\n  selectedRoomIds: List<number>;\n  groupRooms: boolean;\n  toggleRoom: (roomId: number) => void;\n  toggleGroupRooms: () => void;\n  toggleAllRooms: (ids: List<number>) => void;\n}\n\nexport const SelectRooms: React.FC<SelectRoomsProps> = ({\n  selectedRoomIds,\n  groupRooms,\n  toggleRoom,\n  toggleGroupRooms,\n  toggleAllRooms,\n}) => {\n  const pretty: IPretty = StoreRegistry.get(\"Pretty\");\n  const rooms = useSelector((state: RootState) => currentMeasurementRooms(state, {}));\n  const roomIds = React.useMemo(() => rooms.map((r) => r.id), [rooms]);\n\n  const keys = List([\"floor_plan_area\", \"wall_total_area\", \"ceiling_area\", \"floor_plan_perimeter\"]);\n  const roomValuesById = React.useMemo(() => {\n    if (rooms?.size < 1) return List([]);\n\n    let byId = Map<number, any>();\n\n    rooms.forEach((r) => {\n      byId = byId.set(\n        r.id,\n        keys.map((key) => ({\n          label: pretty.name[key],\n          value: r[key]?.toFixed(2),\n          uom: imperial_uom[`interior_${key}`],\n        })),\n      );\n    });\n\n    return byId;\n  }, [rooms]);\n\n  React.useEffect(() => {\n    if (selectedRoomIds.size <= 1 && groupRooms) {\n      toggleGroupRooms();\n    }\n  }, [selectedRoomIds]);\n\n  return (\n    <>\n      <h4 className=\"font-weight-bold mb-1\">Select Rooms</h4>\n      <p className=\"font-weight-light\">Rooms will be added as groups (based on pre-defined measurements)</p>\n\n      {rooms?.size > 0 ? (\n        <>\n          <div className=\"overflow-y-scroll rooms-table-container\">\n            <Table bordered striped className=\"mb-0\">\n              <thead>\n                <tr>\n                  <td className=\"px-4\">\n                    <Form.Check\n                      type=\"checkbox\"\n                      inline\n                      checked={selectedRoomIds.size === rooms.size}\n                      onChange={() => toggleAllRooms(roomIds)}\n                      id=\"select-all-checkbox\"\n                    />\n                  </td>\n                  <td>Name</td>\n                  {keys.map((k) => (\n                    <td key={k}>{pretty.name[k]}</td>\n                  ))}\n                </tr>\n              </thead>\n              <tbody>\n                {rooms?.map((r, idx) => (\n                  <tr key={idx}>\n                    <td style={{ width: \"40px\" }}>\n                      <Form.Check\n                        type=\"checkbox\"\n                        checked={selectedRoomIds.includes(r.id)}\n                        onChange={() => toggleRoom(r.id)}\n                        id={\"room-checkbox-\" + idx}\n                      />\n                    </td>\n                    <td>{r.name}</td>\n                    {roomValuesById.get(r.id).map((obj) => (\n                      <td key={obj.label}>\n                        {obj.value} {obj.uom}\n                      </td>\n                    ))}\n                  </tr>\n                ))}\n              </tbody>\n            </Table>\n          </div>\n\n          <div className=\"d-flex align-items-center mt-4\">\n            <Form.Check\n              type=\"checkbox\"\n              inline\n              className=\"mr-1\"\n              checked={groupRooms}\n              onChange={toggleGroupRooms}\n              id=\"groupRooms-checkbox\"\n              disabled={selectedRoomIds.size <= 1}\n            />\n            <Form.Label className=\"mb-0\">Group rooms together</Form.Label>\n          </div>\n        </>\n      ) : (\n        <div className=\"form-section blank-state\">\n          <img src=\"/assets/images/icons-large/design-tools.78d514fb.png\" />\n          <h2>No rooms were found.</h2>\n          <p>Please add a room in the Measurements tab to use this Estimate Template.</p>\n        </div>\n      )}\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { connect } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Button, Modal, Form, Row, Col } from \"react-bootstrap\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { ConnectedProps } from \"react-redux\";\nimport track from \"react-tracking\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport Folders from \"app2/src/components/Folders\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport EstimateTemplates from \"app2/src/components/JobTabs/EstimateTab/EstimateTemplateModal/EstimateTemplates\";\nimport { IEstimateTemplate } from \"app/src/Models/EstimateTemplate\";\nimport MoveFilesDropdown from \"app2/src/components/Folders/MoveFilesDropdown\";\nimport { estimateTemplatesSelected } from \"app2/src/selectors/estimateTemplate.selectors\";\nimport { SearchBox } from \"app2/src/components/Common/SearchBox\";\nimport * as estimateTemplateActions from \"app2/src/reducers/estimateTemplate.actions\";\nimport * as folderActions from \"app2/src/reducers/folder.actions\";\nimport { queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { queryParamsFromJSON, QueryParamsRecord } from \"app2/src/records/Page\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { OrgAclType } from \"app/src/Models/Org\";\nimport { List } from \"immutable\";\nimport { SelectRooms } from \"./SelectRooms\";\nimport { currentEstimateGroups } from \"app2/src/selectors/estimateGroup.selectors\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"estimateTemplate\",\n    templateQueryParams = queryParams(state, { modelName });\n\n  return {\n    folderParentId: queryParams(state, { modelName: \"folder\" }).getIn([\"folder_id\"]),\n    orgId: currentOrgId(state),\n    jobId: currentJobId(state),\n    estimateTemplatesSelected: estimateTemplatesSelected(state, {}),\n    templateQueryParams,\n    estimateGroups: currentEstimateGroups(state, {}),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    listFolders: (folderParentId: number) =>\n      dispatch(\n        folderActions.AsyncActions.listFolders(folderParentId, { folderable_type: \"Org\", name: \"Estimate Templates\" }),\n      ),\n    listEstimateTemplates: (folderId: number, orgId: number, queryParams: QueryParamsRecord) =>\n      dispatch(\n        estimateTemplateActions.AsyncActions.listEstimateTemplates(\n          {\n            id: orgId,\n            folderId,\n          },\n          queryParams,\n        ),\n      ),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface EstimateTemplateModalState {\n  show: boolean;\n  folderParentId: number;\n  name: string;\n  interior: boolean;\n  searching: boolean;\n  readOnly: boolean;\n  selectedInteriorTemplate: IEstimateTemplate;\n  selectedRoomIds: List<number>;\n  groupRooms: boolean;\n}\n\nexport interface EstimateTemplateModalProps {\n  show: number;\n  saveAs: (selection: string | IEstimateTemplate, folderId: number, kind: string) => void;\n  select: (selection: IEstimateTemplate, interior?: boolean) => void;\n  readOnly?: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & EstimateTemplateModalProps;\n\n@track(\n  (props) => {\n    return {\n      category: \"EstimateTemplates\",\n      component: \"EstimateTemplateModal\",\n      action: \"show\",\n      job: props.jobId,\n      org: props.orgId,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n  },\n)\nclass EstimateTemplateModal extends React.Component<Props, EstimateTemplateModalState> {\n  public Pretty: IPretty;\n\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      show: false,\n      folderParentId: null,\n      name: \"\",\n      interior: false,\n      searching: false,\n      readOnly: props.readOnly,\n      selectedInteriorTemplate: null,\n      selectedRoomIds: List(),\n      groupRooms: false,\n    };\n\n    this.Pretty = StoreRegistry.get(\"Pretty\");\n\n    this.handleShow = this.handleShow.bind(this);\n    this.handleClose = this.handleClose.bind(this);\n    this.handleSave = this.handleSave.bind(this);\n    this.navigate = this.navigate.bind(this);\n    this.handleNameChange = this.handleNameChange.bind(this);\n    this.handleInteriorChange = this.handleInteriorChange.bind(this);\n    this.handleKeyPress = this.handleKeyPress.bind(this);\n    this.handleSelect = this.handleSelect.bind(this);\n    this.handleSaveAs = this.handleSaveAs.bind(this);\n    this.queryEstimateTemplates = this.queryEstimateTemplates.bind(this);\n    this.setReadOnly = this.setReadOnly.bind(this);\n    this.cancelRooms = this.cancelRooms.bind(this);\n    this.handleInteriorAdd = this.handleInteriorAdd.bind(this);\n    this.toggleRoom = this.toggleRoom.bind(this);\n    this.toggleGroupRooms = this.toggleGroupRooms.bind(this);\n    this.toggleAllRooms = this.toggleAllRooms.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: Props): void {\n    const { show, folderParentId, listEstimateTemplates, orgId } = this.props;\n\n    if (show !== prevProps.show && !this.state.show) {\n      this.handleShow();\n    }\n\n    if (this.state.show && !isNullOrUndefined(folderParentId) && prevProps.folderParentId !== folderParentId) {\n      const params = Acl.orgCan(\"setting\", OrgAclType.estimator, \"interiors\")\n        ? queryParamsFromJSON({\n            parameters: { kind: [\"interior\", \"standard\"] },\n          })\n        : new QueryParamsRecord();\n\n      listEstimateTemplates(folderParentId, orgId, params);\n    }\n  }\n\n  @track({ action: \"close\" })\n  public handleClose() {\n    this.setState({\n      show: false,\n      searching: false,\n      selectedInteriorTemplate: null,\n      selectedRoomIds: List([]),\n      groupRooms: false,\n    });\n  }\n\n  @track({ action: \"cancel rooms\" })\n  public cancelRooms() {\n    this.setState({ selectedInteriorTemplate: null });\n  }\n\n  @track({ action: \"show\" })\n  public handleShow() {\n    const { listFolders } = this.props;\n\n    listFolders(null);\n    this.setState({\n      show: true,\n      folderParentId: null,\n      name: \"\",\n      searching: false,\n      readOnly: this.props.readOnly,\n    });\n  }\n\n  @track({ action: \"save\" })\n  public async handleSave(e: React.FormEvent<any>) {\n    const { name } = this.state;\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.handleSaveAs(name);\n  }\n\n  public navigate(folderId: number): void {\n    const { listFolders } = this.props;\n    listFolders(folderId);\n    this.setState({ folderParentId: folderId });\n  }\n\n  public handleNameChange(event): void {\n    this.setState({ name: event.target.value });\n  }\n\n  @track((_props, _state, [event]) => ({\n    action: \"toggle interior template checkbox\",\n    check: event.target.checked,\n  }))\n  public handleInteriorChange(event): void {\n    this.setState({ interior: event.target.checked });\n  }\n\n  public handleKeyPress(target): void {\n    if (target.charCode === 13) {\n      const { name } = this.state;\n      this.handleSaveAs(name);\n    }\n  }\n\n  public handleSaveAs(selection: string | IEstimateTemplate): void {\n    const { folderParentId, interior } = this.state;\n    const { saveAs } = this.props;\n    const kind = interior ? \"interior\" : \"standard\";\n\n    saveAs(selection, folderParentId, kind);\n    this.handleClose();\n  }\n\n  public handleSelect(selection: IEstimateTemplate) {\n    if (selection.kind === \"standard\") {\n      const { select } = this.props;\n      select(selection);\n      this.handleClose();\n    } else {\n      this.setState({ selectedInteriorTemplate: selection });\n    }\n  }\n\n  public handleInteriorAdd() {\n    const { selectedInteriorTemplate, selectedRoomIds, groupRooms } = this.state;\n    this.props.select({\n      ...selectedInteriorTemplate,\n      selectedRoomIds,\n      groupRooms,\n    } as IEstimateTemplate);\n    this.handleClose();\n  }\n\n  @track((props, _state, [room]) => ({\n    action: \"toggle room\",\n    room,\n  }))\n  public toggleRoom(roomId: number) {\n    const { selectedRoomIds } = this.state;\n    if (selectedRoomIds.includes(roomId)) {\n      this.setState({\n        selectedRoomIds: selectedRoomIds.filter((id) => id !== roomId),\n      });\n    } else {\n      this.setState({\n        selectedRoomIds: selectedRoomIds.push(roomId),\n      });\n    }\n  }\n\n  @track({ action: \"toggle group rooms\" })\n  public toggleGroupRooms() {\n    const { groupRooms } = this.state;\n    this.setState({ groupRooms: !groupRooms });\n  }\n\n  @track({ action: \"toggle all rooms\" })\n  public toggleAllRooms(ids: List<number>) {\n    const { selectedRoomIds } = this.state;\n    if (selectedRoomIds.size !== ids.size) {\n      this.setState({ selectedRoomIds: ids });\n    } else {\n      this.setState({ selectedRoomIds: List([]) });\n    }\n  }\n\n  @track({ action: \"setReadOnly\" })\n  public setReadOnly() {\n    this.setState({ readOnly: false });\n  }\n\n  @track((_props, _state, [query]) => ({\n    action: \"queryEstimateTemplates\",\n    query,\n  }))\n  public queryEstimateTemplates(query: string): void {\n    if (query.length > 0) {\n      this.setState({ searching: true });\n    } else {\n      this.setState({ searching: false });\n    }\n    const { listEstimateTemplates, templateQueryParams, orgId } = this.props;\n    let newQueryParams = templateQueryParams.setIn([\"page\"], 1).setIn([\"query\"], query);\n    if (Acl.orgCan(\"setting\", OrgAclType.estimator, \"interiors\")) {\n      newQueryParams = newQueryParams.setIn([\"parameters\", \"kind\"], List([\"standard\", \"interior\"]));\n    }\n\n    listEstimateTemplates(null, orgId, newQueryParams);\n  }\n\n  public render() {\n    const {\n      show,\n      folderParentId,\n      name,\n      interior,\n      searching,\n      readOnly,\n      selectedInteriorTemplate,\n      selectedRoomIds,\n      groupRooms,\n    } = this.state;\n    const { estimateTemplatesSelected, estimateGroups } = this.props;\n\n    const capitalizeTemplate = toTitleCase(this.Pretty.name[\"template\"]);\n    const editableFolder = Acl.can(\"update\", \"org\");\n    const interiorEnabled = Acl.orgCan(\"setting\", OrgAclType.estimator, \"interiors\");\n\n    return (\n      <Modal size=\"xl\" show={show} onHide={this.handleClose}>\n        <Modal.Header closeButton>\n          <Row>\n            <Col>\n              <h3>My Estimate {capitalizeTemplate}s</h3>\n            </Col>\n            {selectedInteriorTemplate == null && (\n              <Col>\n                <div className=\"pull-right\">\n                  <SearchBox\n                    searching={this.queryEstimateTemplates}\n                    placeholder={`Search ${capitalizeTemplate}s`}\n                    query=\"\"\n                  />\n                </div>\n              </Col>\n            )}\n          </Row>\n        </Modal.Header>\n        <Modal.Body>\n          {selectedInteriorTemplate === null ? (\n            <>\n              {!readOnly && interiorEnabled && (\n                <div className=\"alert-info p-4\">\n                  Note: This new estimate template contains multiple groups. Saving this as an Interior Template will\n                  only save the first group \"{estimateGroups.first()?.name}\" to the estimate template.\n                </div>\n              )}\n              {!readOnly && (\n                <Row className=\"sticky-template\">\n                  <Col>\n                    {estimateTemplatesSelected ? (\n                      <MoveFilesDropdown folderParentId={folderParentId} fileType=\"estimateTemplates\" />\n                    ) : (\n                      <div style={{ height: \"35px\" }}></div>\n                    )}\n                  </Col>\n                </Row>\n              )}\n              <div\n                className=\"estimate-template-body\"\n                style={{ height: readOnly ? \"100%\" : `calc(100% - ${interiorEnabled ? 200 : 150}px)` }}>\n                {!searching && (\n                  <Folders\n                    {...this.props}\n                    folderParentId={folderParentId}\n                    navigate={this.navigate}\n                    documentableType=\"org\"\n                    fileType=\"estimateTemplates\"\n                    readOnly={readOnly || !editableFolder}\n                  />\n                )}\n                <br />\n                <EstimateTemplates\n                  saveAs={this.handleSaveAs}\n                  select={this.handleSelect}\n                  setReadOnly={this.setReadOnly}\n                  readOnly={readOnly}\n                  folderParentId={folderParentId}\n                  templateName={capitalizeTemplate}\n                />\n              </div>\n              {!readOnly && (\n                <Row className=\"estimate-template-name\">\n                  <Col>\n                    <div className=\"d-flex align-items-center\">\n                      <Form.Group className=\"w-100\">\n                        <Form.Label htmlFor=\"name\">New {capitalizeTemplate}</Form.Label>\n                        <Form.Control\n                          placeholder={`Estimate ${capitalizeTemplate} Name`}\n                          id=\"name\"\n                          name=\"name\"\n                          value={name}\n                          onChange={this.handleNameChange}\n                          onKeyPress={this.handleKeyPress}\n                        />\n                      </Form.Group>\n                      {!readOnly && interiorEnabled && (\n                        <Form.Group className=\"mb-0 ml-3\" style={{ flexShrink: 0 }}>\n                          <Form.Label htmlFor=\"name\" className=\"mr-1\">\n                            Interior {capitalizeTemplate}\n                          </Form.Label>\n                          <Form.Check\n                            type=\"checkbox\"\n                            inline\n                            id=\"interior\"\n                            name=\"interior\"\n                            checked={interior}\n                            onChange={this.handleInteriorChange}\n                          />\n                        </Form.Group>\n                      )}\n                    </div>\n                  </Col>\n                </Row>\n              )}\n            </>\n          ) : (\n            <SelectRooms\n              selectedRoomIds={selectedRoomIds}\n              groupRooms={groupRooms}\n              toggleRoom={this.toggleRoom}\n              toggleGroupRooms={this.toggleGroupRooms}\n              toggleAllRooms={this.toggleAllRooms}\n            />\n          )}\n        </Modal.Body>\n        <Modal.Footer>\n          {!readOnly && (\n            <Button variant=\"primary\" onClick={this.handleSave} disabled={name.length === 0}>\n              Save\n            </Button>\n          )}\n          {selectedInteriorTemplate !== null && (\n            <Button variant=\"primary\" onClick={this.handleInteriorAdd} disabled={selectedRoomIds.size === 0}>\n              Add Template\n            </Button>\n          )}\n          <Button variant=\"cancel\" onClick={selectedInteriorTemplate !== null ? this.cancelRooms : this.handleClose}>\n            Cancel\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    );\n  }\n}\n\nexport default connector(EstimateTemplateModal);\n","import * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport track from \"react-tracking\";\nimport { push } from \"connected-react-router/immutable\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { getAuthorization } from \"app2/src/selectors/token.selectors\";\nimport { crmUserCheck, currentUser } from \"app2/src/selectors/user.selectors\";\nimport { AsyncActions } from \"app2/src/reducers/user.actions\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  const orgId = currentUser(state).get(\"org_id\");\n  return {\n    currentJobId: currentJobId(state),\n    fnMktAuthorized: getAuthorization(state, { orgId, integration: \"fin_mkt\" }),\n    fmUserCheck: crmUserCheck(state, { crmUserType: \"FmUser\" }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    push: (path: string) => dispatch(push(path)),\n    crmUserCheck: () => dispatch(AsyncActions.crmUserCheck(\"FmUser\")),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface FinanceOptionsButtonState {\n  editing: boolean;\n}\n\ninterface FinanceOptionsButtonProps {\n  estimateId: number | string;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & FinanceOptionsButtonProps;\n\n@track((props) => {\n  return {\n    component: \"FinanceOptionsButton\",\n    estimate: props.estimateId,\n  };\n})\nclass FinanceOptionsButton extends React.Component<Props, FinanceOptionsButtonState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.navigate = this.navigate.bind(this);\n  }\n\n  public componentDidMount(): void {\n    this.props.crmUserCheck();\n  }\n\n  public navigate(): void {\n    const { currentJobId, estimateId, push } = this.props;\n    push(`/jobs/${currentJobId}/estimates/${estimateId}/homevest`);\n  }\n\n  public render(): React.ReactNode {\n    const { fmUserCheck, estimateId, fnMktAuthorized } = this.props;\n\n    if (!fmUserCheck || !fnMktAuthorized || isNullOrUndefined(estimateId) || estimateId === \"new\") {\n      return null;\n    }\n\n    return <Button onClick={this.navigate}>Finance Options</Button>;\n  }\n}\n\nexport default connector(FinanceOptionsButton);\n","import * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentJobId, jobAssignedUserId } from \"app2/src/selectors/job.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Col, Form, Row } from \"react-bootstrap\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { AsyncActions } from \"app2/src/reducers/access.actions\";\nimport { accessConfig } from \"app2/src/selectors/access.selectors\";\nimport { settingsConfig, currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { AsyncActions as estimateAsyncActions } from \"app2/src/reducers/estimate.actions\";\nimport {\n  calculateEstimateCost,\n  isEstimateLoading as isEstimateLoadingSelector,\n} from \"app2/src/selectors/estimate.selectors\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { Parser } from \"hot-formula-parser\";\n\nexport interface FormulaProps {\n  estimateTotal: number;\n  estimateId: number;\n}\n\nexport const Formula: React.FC<FormulaProps> = ({ estimateTotal, estimateId }) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const formula = useSelector((state: RootState) =>\n    settingsConfig(state, { orgId: currentOrgId(state), path: [\"estimator\", \"commission_calculator\", \"formula\"] }),\n  );\n  const assignedUserId = useSelector((state: RootState) => jobAssignedUserId(state, { jobId: currentJobId(state) }));\n  const overhead = useSelector((state: RootState) =>\n    accessConfig(state, {\n      userId: assignedUserId,\n      orgId: currentOrgId(state),\n      path: [\"commission_calculator\", \"overhead\"],\n      notSet: 0,\n    }),\n  );\n  const commissionRate = useSelector((state: RootState) =>\n    accessConfig(state, {\n      userId: assignedUserId,\n      orgId: currentOrgId(state),\n      path: [\"commission_calculator\", \"commission_rate\"],\n      notSet: 0,\n    }),\n  );\n  const cost = useSelector((state: RootState) => calculateEstimateCost(state, estimateId));\n\n  // Local state\n  const [formulaResult, setFormulaResult] = React.useState(\"\");\n\n  // Lifecycle\n  React.useEffect(() => {\n    if (assignedUserId) {\n      dispatch(AsyncActions.getAccess(assignedUserId));\n    }\n  }, [assignedUserId, dispatch]);\n\n  React.useEffect(() => {\n    parseFormula();\n  }, [formula, estimateTotal, cost, overhead, commissionRate]);\n\n  // Methods\n  const parseFormula = () => {\n    if (!formula) return;\n\n    const parser = new Parser();\n    parser.setVariable(\"sale_price\", estimateTotal);\n    parser.setVariable(\"cost\", cost);\n    parser.setVariable(\"overhead_rate\", overhead);\n    parser.setVariable(\"commission_rate\", commissionRate);\n    const parserResult = parser.parse(formula).result;\n\n    if (parserResult) setFormulaResult(CurrencyFormat(parserResult));\n  };\n\n  const formulaWithValues = () => {\n    return formula\n      .replace(\"sale_price\", CurrencyFormat(estimateTotal))\n      .replace(\"cost\", CurrencyFormat(cost))\n      .replace(\"overhead_rate\", overhead.toString())\n      .replace(\"commission_rate\", commissionRate.toString());\n  };\n\n  const prettyFormula = () => {\n    return formula\n      .replace(\"sale_price\", \"Sale Price\")\n      .replace(\"cost\", \"Cost\")\n      .replace(\"overhead_rate\", \"Overhead Rate\")\n      .replace(\"commission_rate\", \"Commission Rate\");\n  };\n\n  if (!commissionRate)\n    return (\n      <p className=\"text-center mt-4\">Commission Rate is set to 0. Please verify the job's assigned user's settings</p>\n    );\n\n  return (\n    <Row className=\"pl-lg-4\">\n      <Col lg={8}>\n        <Form>\n          <Form.Group>\n            <Form.Label htmlFor=\"formula\">Formula</Form.Label>\n            <Form.Control type=\"text\" value={prettyFormula()} disabled id=\"formula\" />\n          </Form.Group>\n        </Form>\n        <div className=\"mt-2 text-monospace\">\n          <span>{formulaWithValues()} = </span>\n          <span className=\"font-weight-bold\">{formulaResult}</span>\n        </div>\n      </Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentJobId, jobAssignedUserId } from \"app2/src/selectors/job.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Accordion, Card, Col, Container, Form, Row } from \"react-bootstrap\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { AsyncActions } from \"app2/src/reducers/access.actions\";\nimport { accessConfig } from \"app2/src/selectors/access.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { calculateEstimateCost } from \"app2/src/selectors/estimate.selectors\";\n\nexport interface MarginWithOverheadProps {\n  estimateTotal: number;\n  estimateId: number;\n}\n\nexport const MarginWithOverhead: React.FC<MarginWithOverheadProps> = ({ estimateTotal, estimateId }) => {\n  // Hooks\n  const dispatch = useDispatch();\n\n  const assignedUserId = useSelector((state: RootState) => jobAssignedUserId(state, { jobId: currentJobId(state) }));\n  const overhead: number = useSelector((state: RootState) =>\n    accessConfig(state, {\n      userId: assignedUserId,\n      orgId: currentOrgId(state),\n      path: [\"commission_calculator\", \"overhead\"],\n      notSet: 0,\n    }),\n  );\n  const commissionRate: number = useSelector((state: RootState) =>\n    accessConfig(state, {\n      userId: assignedUserId,\n      orgId: currentOrgId(state),\n      path: [\"commission_calculator\", \"commission_rate\"],\n      notSet: 0,\n    }),\n  );\n  const cost = useSelector((state: RootState) => calculateEstimateCost(state, estimateId));\n\n  // Lifecycle\n  React.useEffect(() => {\n    if (assignedUserId) {\n      dispatch(AsyncActions.getAccess(assignedUserId));\n    }\n  }, [assignedUserId]);\n\n  if (!commissionRate)\n    return (\n      <p className=\"text-center mt-4\">Commission Rate is set to 0. Please verify the job's assigned user's settings</p>\n    );\n\n  return (\n    <Accordion>\n      <Card>\n        <Card.Header>\n          <Accordion.Toggle as={Container} fluid eventKey=\"0\">\n            <Row className=\"pb-0\">\n              <Col>Sale Price</Col>\n              <Col sm={4}>{CurrencyFormat(estimateTotal)}</Col>\n            </Row>\n          </Accordion.Toggle>\n        </Card.Header>\n        <Accordion.Collapse eventKey=\"0\">\n          <Card.Body>This includes existing discounts</Card.Body>\n        </Accordion.Collapse>\n      </Card>\n      <Card>\n        <Card.Header>\n          <Accordion.Toggle as={Container} fluid eventKey=\"1\">\n            <Row className=\"pb-0\">\n              <Col>After Overhead</Col>\n              <Col sm={4}>{CurrencyFormat(estimateTotal * (1 - overhead / 100))}</Col>\n            </Row>\n          </Accordion.Toggle>\n        </Card.Header>\n        <Accordion.Collapse eventKey=\"1\">\n          <Card.Body>This represents the Sale Price minus {overhead}%</Card.Body>\n        </Accordion.Collapse>\n      </Card>\n      <Card>\n        <Card.Header>\n          <Accordion.Toggle as={Container} fluid eventKey=\"2\">\n            <Row className=\"pb-0\">\n              <Col>After Cost</Col>\n              <Col sm={4}>{CurrencyFormat(estimateTotal * (1 - overhead / 100) - cost)}</Col>\n            </Row>\n          </Accordion.Toggle>\n        </Card.Header>\n        <Accordion.Collapse eventKey=\"2\">\n          <Card.Body>Subtracting the total cost of {CurrencyFormat(cost)}</Card.Body>\n        </Accordion.Collapse>\n      </Card>\n      <Card>\n        <Card.Header>\n          <Accordion.Toggle as={Container} fluid eventKey=\"3\">\n            <Row className=\"pb-0\">\n              <Col>Estimated Commission</Col>\n              <Col sm={4} className=\"font-weight-bolder\">\n                {CurrencyFormat((estimateTotal * (1 - overhead / 100) - cost) * (commissionRate / 100))} (\n                {commissionRate.toFixed(2)}%)\n              </Col>\n            </Row>\n          </Accordion.Toggle>\n        </Card.Header>\n        <Accordion.Collapse eventKey=\"3\">\n          <Card.Body>This represents {commissionRate.toFixed(2)}% of the Sale Price after Overhead and Cost</Card.Body>\n        </Accordion.Collapse>\n      </Card>\n    </Accordion>\n  );\n};\n","import * as React from \"react\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useDispatch } from \"react-redux\";\nimport { AsyncActions } from \"app2/src/reducers/estimate.actions\";\n\nexport interface DownloadCommissionButtonProps {\n  estimateId: number;\n}\n\nexport const DownloadCommissionButton: React.FC<DownloadCommissionButtonProps> = ({ estimateId }) => {\n  const dispatch = useDispatch();\n\n  const downloadPdf = () => {\n    dispatch(AsyncActions.getCommissionPdf(estimateId));\n  };\n\n  return (\n    <Can resource=\"estimate\" permission=\"commission_pdf\">\n      <FontAwesome\n        name=\"download\"\n        className=\"rsf-base-link rsf-base-66 action-button\"\n        title=\"Download Commission Sheet\"\n        onClick={() => downloadPdf()}\n      />\n    </Can>\n  );\n};\n","import { CommissionMethod } from \"../records/Estimate\";\nimport { EstimateCommissionRecord } from \"../records/EstimateCommission\";\nimport { RootState } from \"../reducers\";\n\n/**\n * Returns an array with calculated commmission data\n *\n * @param {RootState} state\n * @returns {string[]}\n */\nexport const estimateCommission = (state: RootState): EstimateCommissionRecord =>\n  state.getIn([\"estimates\", \"calculatedCommission\"]);\n\n/**\n * Returns a summary from the estimate commission\n *\n * @param {RootState} state\n * @returns {string}\n */\nexport const estimateCommissionSummary = (state: RootState, commissionMethod = \"\"): string => {\n  let output: any;\n  if (commissionMethod === CommissionMethod.custom) {\n    output = state\n      .getIn([\"estimates\", \"calculatedCommission\", \"output\", \"verbose_output_objects\"], [])\n      .map((obj) => obj[\"formatted\"]);\n  } else {\n    output = state.getIn([\"estimates\", \"calculatedCommission\", \"output\", \"verbose_output\"]);\n  }\n  return (output || []).join(\"\\n\");\n};\n","import * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Table } from \"react-bootstrap\";\nimport { estimateCommission as estimateCommissionSelector } from \"app2/src/selectors/estimateCommission.selectors\";\n\nexport const Calculations: React.FC = () => {\n  const estimateCommission = useSelector(estimateCommissionSelector);\n\n  return (\n    <Table striped bordered hover>\n      <thead>\n        <tr>\n          <th style={{ paddingLeft: \"24px\" }}>User</th>\n          <th style={{ paddingLeft: \"24px\" }}>{estimateCommission.generated_by_user_name}</th>\n        </tr>\n      </thead>\n\n      <tbody className=\"pb-0\">\n        {estimateCommission.output?.verbose_output_objects?.map((obj) => (\n          <tr key={obj.title}>\n            <td>{obj.title}</td>\n            <td>{obj.value}</td>\n          </tr>\n        ))}\n      </tbody>\n    </Table>\n  );\n};\n","import * as FontAwesome from \"react-fontawesome\";\nimport { useEffect, useState } from \"react\";\nimport * as React from \"react\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { useDispatch } from \"react-redux\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport interface CopyToClipboardButtonProps {\n  content: string;\n  contentDescription?: string;\n}\n\nexport const CopyToClipboardButton: React.FC<CopyToClipboardButtonProps> = ({ content, contentDescription }) => {\n  const title = contentDescription ? `Copy ${contentDescription} to clipboard` : \"Copy to clipboard\";\n  const dispatch = useDispatch();\n\n  const copyToClipboard = () => {\n    navigator.clipboard.writeText(content);\n    dispatch(\n      commonActions.Actions.flashAddAlert(\n        FlashLevels.success,\n        `${contentDescription || \"Content\"} successfully copied.`,\n      ),\n    );\n  };\n\n  return (\n    <FontAwesome\n      name=\"file-text-o\"\n      className=\"rsf-base-link rsf-base-66 action-button\"\n      title={title}\n      onClick={copyToClipboard}\n    />\n  );\n};\n","import * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Button, Modal, OverlayTrigger, Popover, Row } from \"react-bootstrap\";\nimport { Formula } from \"./Formula\";\nimport { MarginWithOverhead } from \"./MarginWithOverhead\";\nimport { DateFormat } from \"app2/src/helpers/Format\";\nimport { currentJobName } from \"app2/src/selectors/job.selectors\";\nimport { currentOrg, currentOrgId, settingsConfig } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { DownloadCommissionButton } from \"./DownloadCommissionButton\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { AsyncActions } from \"app2/src/reducers/estimate.actions\";\nimport { estimate as estimateSelector } from \"app2/src/selectors/estimate.selectors\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { isEstimateLoading as isEstimateLoadingSelector } from \"app2/src/selectors/estimate.selectors\";\nimport { Calculations } from \"./Calculations\";\nimport { CommissionMethod } from \"app2/src/records/Estimate\";\nimport { CopyToClipboardButton } from \"app2/src/components/Clipboard/CopyToClipboardButton\";\nimport {\n  estimateCommission as estimateCommissionSelector,\n  estimateCommissionSummary as estimateCommissionSummarySelector,\n} from \"app2/src/selectors/estimateCommission.selectors\";\n\nexport interface CommissionCalculatorModalProps {\n  show: boolean;\n  close: () => void;\n  estimateId: number;\n}\n\nexport const CommissionCalculatorModal: React.FC<CommissionCalculatorModalProps> = ({ show, close, estimateId }) => {\n  const dispatch = useDispatch();\n\n  const isEstimateLoading = useSelector((state: RootState) => isEstimateLoadingSelector(state, estimateId));\n  const jobName = useSelector(currentJobName);\n  const calculatorMethod = useSelector((state: RootState) =>\n    settingsConfig(state, {\n      orgId: currentOrgId(state),\n      path: [\"estimator\", \"commission_calculator\", \"method\"],\n      notSet: \"off\",\n    }),\n  );\n  const org = useSelector(currentOrg);\n  const estimate = useSelector((state: RootState) => estimateSelector(state, { estimateId }));\n  const estimateCommissionSummary = useSelector((state: RootState) =>\n    estimateCommissionSummarySelector(state, calculatorMethod),\n  );\n  const estimateCommission = useSelector(estimateCommissionSelector);\n\n  React.useEffect(() => {\n    dispatch(AsyncActions.getEstimate(estimateId));\n    if (calculatorMethod === CommissionMethod.greenline || calculatorMethod === CommissionMethod.custom) {\n      dispatch(AsyncActions.calculateEstimateCommission(estimateId));\n    }\n  }, [estimateId]);\n\n  const popover = (\n    <Popover id=\"warn-message\">\n      <Popover.Content>This estimate was not generated with the current activated price list</Popover.Content>\n    </Popover>\n  );\n\n  const isActivatedPriceList =\n    estimate?.activated_price_list_id === (org.activated_price_list as any)?.id &&\n    (calculatorMethod !== CommissionMethod.greenline || estimateCommission.apl_current);\n  const showOverlay = !isEstimateLoading && !isActivatedPriceList;\n\n  return (\n    <Modal size=\"lg\" show={show} onHide={close} backdrop=\"static\">\n      <Modal.Header closeButton>\n        <Modal.Title>Commission Calculator - Estimate</Modal.Title>\n      </Modal.Header>\n      <Modal.Body className=\"position-relative\">\n        <div style={{ top: 0, right: 0 }} className=\"d-flex position-absolute pt-2 pr-2\">\n          {showOverlay && (\n            <OverlayTrigger overlay={popover} trigger={[\"hover\", \"focus\"]} placement=\"left\">\n              <FontAwesome\n                id=\"price_list_error\"\n                name=\"exclamation-triangle\"\n                className=\"rsf-base-link rsf-base-66 action-button mr-2\"\n              />\n            </OverlayTrigger>\n          )}\n          <div>\n            {(calculatorMethod === CommissionMethod.greenline || calculatorMethod === CommissionMethod.custom) && (\n              <CopyToClipboardButton content={estimateCommissionSummary} contentDescription=\"Commission Sheet\" />\n            )}\n            <DownloadCommissionButton estimateId={estimateId} />\n          </div>\n        </div>\n\n        <div className=\"mb-3 pl-lg-4\">\n          <h4 className=\"mb-1\">Job Name: {jobName}</h4>\n          <h5 className=\"mb-2\">Estimate: {estimate?.name}</h5>\n          <div>{DateFormat(new Date())}</div>\n        </div>\n\n        {isEstimateLoading ? (\n          <Row style={{ height: \"140px\" }} className=\"pb-0\">\n            <SpinnerComponent inline localProperty={true} />\n          </Row>\n        ) : (\n          <>\n            {calculatorMethod === CommissionMethod.formula && (\n              <Formula estimateTotal={estimate?.total} estimateId={estimateId} />\n            )}\n\n            {calculatorMethod === CommissionMethod.marginWithOverhead && (\n              <MarginWithOverhead estimateTotal={estimate?.total} estimateId={estimateId} />\n            )}\n\n            {(calculatorMethod === CommissionMethod.greenline || calculatorMethod === CommissionMethod.custom) && (\n              <Calculations />\n            )}\n          </>\n        )}\n      </Modal.Body>\n      <Modal.Footer>\n        <Button onClick={close}>Close</Button>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n","import { connectFC } from \"app2/src/connect\";\nimport * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { currentOrgId, settingsConfig } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { CommissionCalculatorModal } from \"./CommissionCalculatorModal\";\nimport { DownloadCommissionButton } from \"./DownloadCommissionButton\";\n\nexport interface CommissionActionsProps {\n  estimateId: number;\n}\n\nconst CommissionActions: React.FC<CommissionActionsProps> = ({ estimateId }) => {\n  const [showModal, setShowModal] = React.useState(false);\n\n  const calculatorMethod = useSelector((state: RootState) =>\n    settingsConfig(state, {\n      orgId: currentOrgId(state),\n      path: [\"estimator\", \"commission_calculator\", \"method\"],\n      notSet: \"off\",\n    }),\n  );\n\n  if (calculatorMethod === \"off\") return null;\n  return (\n    <>\n      <Can resource=\"estimate\" permission=\"commission\">\n        <FontAwesome\n          name=\"usd\"\n          className=\"rsf-base-link rsf-base-66 action-button\"\n          title=\"Calculate Commission\"\n          onClick={() => setShowModal(true)}\n        />\n        {showModal && (\n          <CommissionCalculatorModal show={showModal} close={() => setShowModal(false)} estimateId={estimateId} />\n        )}\n      </Can>\n      <DownloadCommissionButton estimateId={estimateId} />\n    </>\n  );\n};\n\nexport default connectFC(CommissionActions);\n","import * as React from \"react\";\nimport { Table } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { FormControl } from \"@tberrysoln/rsf-form\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { getUoM } from \"app2/src/records/Measurement\";\nimport { room as roomSelector } from \"app2/src/selectors/room.selectors\";\n\ninterface IMeasurementTable {\n  values: string[];\n  roomId: string | number;\n}\n\nexport const RoomMeasurementTable: React.FC<IMeasurementTable> = ({ values, roomId }) => {\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const room = useSelector((state: RootState) => roomSelector(state, { roomId }));\n  const editing = useSelector(measurementEditing);\n  const pretty: IPretty = StoreRegistry.get(\"Pretty\");\n  const uom = getUoM(measurement);\n\n  return (\n    <Table className={editing ? \"reduce-padding\" : \"\"}>\n      <thead>\n        <tr>\n          <th>Measurement</th>\n          <th>Value</th>\n        </tr>\n      </thead>\n      <tbody>\n        {values.map((value, idx) => {\n          return (\n            <tr key={idx}>\n              <td>{pretty.name[value]}</td>\n              <td>\n                {editing ? (\n                  <>\n                    <FormControl\n                      formGroupProps={{ className: \"small floater-right\" }}\n                      formControlProps={{ type: \"number\" }}\n                      label=\"\"\n                      name={value}\n                    />\n                    <div className=\"floater\">{uom[`interior_${value}`]}</div>\n                  </>\n                ) : (\n                  `${room?.get(value)} ${uom[`interior_${value}`]}`\n                )}\n              </td>\n            </tr>\n          );\n        })}\n      </tbody>\n    </Table>\n  );\n};\n","import useFullScreenToggle from \"app2/src/hooks/useFullScreenToggle/useFullScreenToggle\";\nimport * as React from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\n\nexport interface VisualizeRoomProps {\n  url: string;\n}\n\nexport const VisualizeRoom: React.FC<VisualizeRoomProps> = ({ url }) => {\n  const [show, setShow] = React.useState(false);\n  const [isFullScreen, toggleFullScreen] = useFullScreenToggle();\n\n  const close = () => {\n    if (isFullScreen) toggleFullScreen();\n    setShow(false);\n  };\n\n  return (\n    <>\n      <button id=\"visualization-btn\" className=\"btn mr-1 d-flex align-items-center\" onClick={() => setShow(true)}>\n        <img src={\"/assets/images/plnar-logo-square.bf8639fb.png\"} width={15} className=\"m-1 mr-2\" />\n        ShareLink\n      </button>\n      <Modal show={show} onHide={close} size=\"xl\" className={isFullScreen ? \"fullscreen\" : \"\"}>\n        <Modal.Header closeButton>\n          <div onClick={toggleFullScreen} className=\"ml-auto\">\n            {isFullScreen ? (\n              <FontAwesome name=\"compress fa-gray link\" title=\"Exit Full Screen\" size=\"lg\" />\n            ) : (\n              <FontAwesome name=\"expand fa-gray link\" title=\"Full Screen\" size=\"lg\" />\n            )}\n          </div>\n        </Modal.Header>\n        <Modal.Body>\n          <iframe src={url} title=\"Plnar Visualization\" className=\"h-100\"></iframe>\n        </Modal.Body>\n        <Modal.Footer>\n          <Button variant=\"secondary\" onClick={close}>\n            Close\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\n\nexport const RoomMeasurementInfo: React.FC = () => {\n  const [show, setShow] = React.useState(false);\n\n  const close = () => {\n    setShow(false);\n  };\n\n  return (\n    <>\n      <button className=\"btn link p-1 text-blue-dark\" onClick={() => setShow(true)}>\n        <FontAwesome size=\"lg\" name=\"info-circle\" title=\"Measurement Information\" />\n      </button>\n      <Modal show={show} onHide={close} size=\"xl\">\n        <Modal.Header closeButton></Modal.Header>\n        <Modal.Body className=\"d-flex justify-content-center\">\n          <img\n            src=\"/assets/images/plnar-measurement-graphic.a1973256.png\"\n            className=\"mw-100 mh-100 img-contain\"\n            alt=\"Measurement Information\"\n          />\n        </Modal.Body>\n        <Modal.Footer>\n          <Button variant=\"secondary\" onClick={close}>\n            Close\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { room as roomSelector, rootKey } from \"app2/src/selectors/room.selectors\";\nimport { Accordion, Button, Card, Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useRouteMatch } from \"react-router\";\nimport { RootState } from \"app2/src/reducers\";\nimport { FormControl, RsfForm, Select } from \"@tberrysoln/rsf-form\";\nimport { Actions } from \"app2/src/reducers/room.actions\";\nimport { RoomMeasurementTable } from \"app2/src/components/JobTabs/MeasurementTab/Interiors/RoomMeasurementTable\";\nimport { currentMeasurement, measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { pathname, query } from \"app2/src/selectors/router.selectors\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { push } from \"connected-react-router/immutable\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { Map } from \"immutable\";\nimport { useTracking } from \"react-tracking\";\nimport { VisualizeRoom } from \"../../EstimateTab/RoomSummary/VisualizeRoom\";\nimport { RoomMeasurementInfo } from \"app2/src/components/Common/RoomMeasurementInfo\";\n\nexport const ceiling1 = [\n  \"ceiling_area\",\n  \"ceiling_area_less_structures\",\n  \"ceiling_perimeter\",\n  \"ceiling_perimeter_less_structures\",\n];\nexport const ceiling2 = [\"structure_total_ceiling_area\", \"structure_total_ceiling_width\"];\n\nexport const flooring1 = [\n  \"floor_plan_area\",\n  \"floor_area_less_structures\",\n  \"floor_plan_perimeter\",\n  \"floor_plan_perimeter_less_structures\",\n  \"floor_plan_perimeter_without_openings\",\n];\nexport const flooring2 = [\n  \"structure_total_floor_width\",\n  \"structure_total_floor_area\",\n  \"floor_opening_total_width\",\n  \"exposed_structure_perimeter\",\n];\n\nexport const walls1 = [\n  \"wall_total_area\",\n  \"wall_total_area_without_openings\",\n  \"window_total_area\",\n  \"door_area\",\n  \"opening_count\",\n];\nexport const walls2 = [\n  \"wall_count\",\n  \"opening_total_area\",\n  \"window_count\",\n  \"door_count\",\n  \"structure_total_wall_area\",\n  \"opening_total_width\",\n  \"door_total_width\",\n];\n\nexport const general = [\"object_count\", \"volume\"];\n\nexport const Room: React.FC = () => {\n  // Local State\n  const [accordionControl, setAccordionControl] = React.useState(\n    Map({ ceiling: \"ceiling\", flooring: \"\", walls: \"\", general: \"\" }),\n  );\n\n  // Hooks\n  const match: any = useRouteMatch();\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"Room\", room: match.params.roomId });\n  const [initRsfForm, setInitRsfForm] = React.useState(false);\n\n  // Selectors\n  const room = useSelector((state: RootState) => roomSelector(state, { roomId: match.params.roomId }));\n  const editing = useSelector(measurementEditing);\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const queryParams = useSelector(query);\n  const rootPathname = useSelector(pathname);\n\n  // Methods\n  const openAddMeasurement = () => {\n    trackEvent({ action: \"open add measurement\" });\n    const newQueryParams = new URLSearchParams({\n      ...queryParams.toJS(),\n      add: \"rooms\",\n    });\n    dispatch(push(`${rootPathname}?${newQueryParams.toString()}`));\n  };\n  const destroyRoom = () => {\n    trackEvent({ action: \"destroy room\" });\n    dispatch(Actions.updateForm({ rootPath: [rootKey, \"byId\", room.id.toString()], name: \"_destroy\", value: true }));\n    dispatch(push(`${rootPathname.split(\"/interior\")[0]}/interior`));\n  };\n  const toggleAccordion = (key: string) => {\n    if (accordionControl.get(key) === \"\") {\n      trackEvent({ action: \"open accordion\", accordionName: key });\n      setAccordionControl(accordionControl.set(key, key));\n    } else {\n      trackEvent({ action: \"close accordion\", accordionName: key });\n      setAccordionControl(accordionControl.set(key, \"\"));\n    }\n  };\n\n  // Life Cycle\n  React.useEffect(() => {\n    setInitRsfForm(true);\n    setTimeout(() => {\n      setInitRsfForm(false);\n    }, 50);\n  }, [match.params.roomId]);\n\n  if (!room || room._destroy || initRsfForm) {\n    return null;\n  }\n\n  const roomEstimationTitle = `The room ${room.name} is associated with an estimate. Deletion is disabled`;\n\n  return (\n    <RsfForm\n      rootPath={[rootKey, \"byId\", match.params.roomId]}\n      updateFormReducer={Actions.updateForm}\n      onSubmit={() => {}}>\n      <Row>\n        <Col md={6}>\n          <h2>{room.name}</h2>\n        </Col>\n        <Col>\n          {editing && (\n            <>\n              {room.room_estimations.size > 0 ? (\n                <ConfirmDialog title={roomEstimationTitle} hideCancel>\n                  {(confirm) => (\n                    <Button\n                      variant=\"info\"\n                      className=\"float-right\"\n                      onClick={confirm(() => {})}\n                      title={roomEstimationTitle}>\n                      <FontAwesome name=\"info-circle\" />\n                    </Button>\n                  )}\n                </ConfirmDialog>\n              ) : (\n                <ConfirmDialog title={`Are you sure you want to delete: ${room.name}?`}>\n                  {(confirm) => (\n                    <Button variant=\"delete\" className=\"float-right\" onClick={confirm(destroyRoom)}>\n                      <FontAwesome name=\"trash\" />\n                    </Button>\n                  )}\n                </ConfirmDialog>\n              )}\n            </>\n          )}\n          <div className=\"d-flex align-items-center float-right mr-1\">\n            <RoomMeasurementInfo />\n            {room.viewer_url && <VisualizeRoom url={room.viewer_url} />}\n\n            <Button\n              variant=\"primary\"\n              onClick={openAddMeasurement}\n              disabled={editing}\n              title={editing ? \"Disabled for editing\" : \"\"}>\n              <FontAwesome name=\"plus\" />\n              &nbsp;Add\n            </Button>\n          </div>\n        </Col>\n      </Row>\n\n      {editing ? (\n        <>\n          <Row>\n            <Col md={6}>\n              <FormControl label=\"name\" name=\"name\" />\n            </Col>\n          </Row>\n          <Row>\n            <Col md={6}>\n              <Select label=\"level\" name=\"level\">\n                {measurement.get(\"levels\").map((level, idx) => (\n                  <option key={idx} value={level}>\n                    {level}\n                  </option>\n                ))}\n              </Select>\n            </Col>\n          </Row>\n        </>\n      ) : (\n        <Row>\n          <Col>\n            <p>{`Level ${room.level}`}</p>\n          </Col>\n        </Row>\n      )}\n\n      <Accordion activeKey={accordionControl.get(\"ceiling\")}>\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"ceiling\"\n            onClick={() => toggleAccordion(\"ceiling\")}>\n            Ceiling\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${accordionControl.get(\"ceiling\") !== \"\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"ceiling\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={ceiling1} roomId={match.params.roomId} />\n                </Col>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={ceiling2} roomId={match.params.roomId} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n      <br />\n      <Accordion activeKey={accordionControl.get(\"flooring\")}>\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"flooring\"\n            onClick={() => toggleAccordion(\"flooring\")}>\n            Flooring\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${accordionControl.get(\"flooring\") !== \"\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"flooring\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={flooring1} roomId={match.params.roomId} />\n                </Col>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={flooring2} roomId={match.params.roomId} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n      <br />\n      <Accordion activeKey={accordionControl.get(\"walls\")}>\n        <Card>\n          <Accordion.Toggle className=\"link\" as={Card.Header} eventKey=\"walls\" onClick={() => toggleAccordion(\"walls\")}>\n            Walls\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${accordionControl.get(\"walls\") !== \"\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"walls\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={walls1} roomId={match.params.roomId} />\n                </Col>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={walls2} roomId={match.params.roomId} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n      <br />\n      <Accordion activeKey={accordionControl.get(\"general\")}>\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"general\"\n            onClick={() => toggleAccordion(\"general\")}>\n            General\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${accordionControl.get(\"general\") !== \"\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"general\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={general} roomId={match.params.roomId} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n    </RsfForm>\n  );\n};\n","import { RoomRecord } from \"app2/src/records/Room\";\nimport * as React from \"react\";\nimport { Accordion, Card, Col, Row } from \"react-bootstrap\";\nimport { imperial_uom } from \"app/src/Common/Constants\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { ceiling1, ceiling2, flooring1, flooring2, walls1, walls2, general } from \"../../MeasurementTab/Interiors/Room\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { RoomMeasurementTable } from \"../../MeasurementTab/Interiors/RoomMeasurementTable\";\nimport { roomKeys } from \".\";\nimport { useTracking } from \"react-tracking\";\nimport { VisualizeRoom } from \"./VisualizeRoom\";\nimport { RoomMeasurementInfo } from \"app2/src/components/Common/RoomMeasurementInfo\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\nexport interface IndividualRoomProps {\n  room: RoomRecord;\n  grouped?: boolean;\n}\n\nexport const IndividualRoom: React.FC<IndividualRoomProps> = ({ room, grouped }) => {\n  // Hooks\n  const { trackEvent } = useTracking<any>({ component: \"IndividualRoom\", room: room.id });\n\n  const roomValues = React.useMemo(() => {\n    const pretty: IPretty = StoreRegistry.get(\"Pretty\");\n    return roomKeys.map((key) => ({\n      label: pretty.name[key],\n      value: room[key].toFixed(2),\n      uom: imperial_uom[`interior_${key}`],\n    }));\n  }, [room]);\n\n  // Local State\n  const [activeKey, setActiveKey] = React.useState(\"\");\n  const [isOpen, setIsOpen] = React.useState(false);\n\n  // Methods\n  const toggleIsOpen = () => {\n    trackEvent({ action: `${isOpen ? \"close\" : \"open\"} accordion` });\n    setIsOpen(!isOpen);\n  };\n\n  const toggleAccordion = (key: string) => {\n    if (activeKey === key) {\n      trackEvent({ action: \"close accordion\", accordionName: key });\n      setActiveKey(\"\");\n    } else {\n      trackEvent({ action: \"open accordion\", accordionName: key });\n      setActiveKey(key);\n    }\n  };\n\n  const detailsAccordion = () => {\n    return (\n      <Accordion activeKey={activeKey}>\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"ceiling\"\n            onClick={() => toggleAccordion(\"ceiling\")}>\n            Ceiling\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${activeKey === \"ceiling\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"ceiling\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={ceiling1} roomId={room.id} />\n                </Col>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={ceiling2} roomId={room.id} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"flooring\"\n            onClick={() => toggleAccordion(\"flooring\")}>\n            Flooring\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${activeKey === \"flooring\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"flooring\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={flooring1} roomId={room.id} />\n                </Col>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={flooring2} roomId={room.id} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n\n        <Card>\n          <Accordion.Toggle className=\"link\" as={Card.Header} eventKey=\"walls\" onClick={() => toggleAccordion(\"walls\")}>\n            Walls\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${activeKey === \"walls\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"walls\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={walls1} roomId={room.id} />\n                </Col>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={walls2} roomId={room.id} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"general\"\n            onClick={() => toggleAccordion(\"general\")}>\n            General\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${activeKey === \"general\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"general\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <RoomMeasurementTable values={general} roomId={room.id} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n    );\n  };\n\n  return (\n    <Accordion>\n      <Card className={\"room-summary\" + (grouped ? \"-grouped\" : \"\")}>\n        <Card.Body>\n          <div className=\"d-flex justify-content-between\">\n            <Card.Title>{grouped ? room.name : `Room Summary - ${room.name}`}</Card.Title>\n            <div className=\"d-flex pb-2 align-items-center\">\n              {room.viewer_url && <VisualizeRoom url={room.viewer_url} />}\n              {!grouped && <RoomMeasurementInfo />}\n              <Accordion.Toggle as=\"button\" eventKey=\"0\" className=\"btn\" onClick={toggleIsOpen}>\n                <FontAwesome name={`angle-${isOpen ? \"up\" : \"down\"}`} size=\"lg\" />\n              </Accordion.Toggle>\n            </div>\n          </div>\n          <Row>\n            {roomValues.map((obj, idx) => (\n              <Col key={\"room-\" + idx}>\n                <div>\n                  <span className=\"label\">{obj.label}: </span> {obj.value} {obj.uom}\n                </div>\n              </Col>\n            ))}\n          </Row>\n          <Accordion.Collapse eventKey=\"0\" className=\"mt-3\">\n            {detailsAccordion()}\n          </Accordion.Collapse>\n        </Card.Body>\n      </Card>\n    </Accordion>\n  );\n};\n","import { RoomRecord } from \"app2/src/records/Room\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Accordion, Card, Col, Row } from \"react-bootstrap\";\nimport { IndividualRoom } from \"./IndividualRoom\";\nimport { imperial_uom } from \"app/src/Common/Constants\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { roomKeys } from \".\";\nimport { useTracking } from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { RoomMeasurementInfo } from \"app2/src/components/Common/RoomMeasurementInfo\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\nexport interface GroupedRoomsProps {\n  rooms: List<RoomRecord>;\n}\n\nexport const GroupedRooms: React.FC<GroupedRoomsProps> = ({ rooms }) => {\n  // Hooks\n  const { trackEvent } = useTracking<any>({ component: \"GroupedRooms\" }, { dispatch: Dispatch.dispatch });\n\n  const roomValues = React.useMemo(() => {\n    if (rooms?.size < 1) return List([]);\n\n    const pretty: IPretty = StoreRegistry.get(\"Pretty\");\n    return roomKeys.map((key) => ({\n      label: pretty.name[key],\n      value: rooms.reduce((prev, current) => prev + current[key], 0).toFixed(2),\n      uom: imperial_uom[`interior_${key}`],\n    }));\n  }, [rooms]);\n\n  const [isOpen, setIsOpen] = React.useState(false);\n\n  // Methods\n  const toggleIsOpen = () => {\n    trackEvent({ action: `${isOpen ? \"close\" : \"open\"} accordion` });\n    setIsOpen(!isOpen);\n  };\n\n  return (\n    <Accordion>\n      <Card className=\"room-summary\">\n        <Card.Body>\n          <div className=\"d-flex justify-content-between\">\n            <Card.Title>Rooms Summary</Card.Title>\n            <div className=\"d-flex align-items-center\">\n              <RoomMeasurementInfo />\n              <Accordion.Toggle as=\"button\" eventKey=\"0\" className=\"btn\" onClick={toggleIsOpen}>\n                <FontAwesome name={`angle-${isOpen ? \"up\" : \"down\"}`} size=\"lg\" />\n              </Accordion.Toggle>\n            </div>\n          </div>\n          <Row>\n            {roomValues.map((obj, idx) => (\n              <Col key={\"room-\" + idx}>\n                <div>\n                  <span className=\"label\">{obj.label}: </span> {obj.value} {obj.uom}\n                </div>\n              </Col>\n            ))}\n          </Row>\n\n          <Accordion.Collapse eventKey=\"0\" className=\"my-3 mx-2\">\n            <div>\n              {rooms.map((r) => (\n                <IndividualRoom room={r} grouped key={r.id} />\n              ))}\n            </div>\n          </Accordion.Collapse>\n        </Card.Body>\n      </Card>\n    </Accordion>\n  );\n};\n","import { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { connectFC } from \"app2/src/connect\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { RootState } from \"app2/src/reducers\";\nimport { rooms } from \"app2/src/selectors/room.selectors\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"react-tracking\";\nimport { GroupedRooms } from \"./GroupedRooms\";\nimport { IndividualRoom } from \"./IndividualRoom\";\n\nexport interface RoomSummaryProps {\n  estimateGroup: IEstimateGroup;\n}\n\nexport const RoomSummary: React.FC<RoomSummaryProps> = ({ estimateGroup }) => {\n  // Hooks\n  const { Track } = useTracking<any>({ category: \"RoomSummary\" }, { dispatch: Dispatch.dispatch });\n\n  const roomIds = React.useMemo(\n    () => List(estimateGroup.room_estimations.map((estimation) => estimation.room_id)),\n    [estimateGroup],\n  );\n  const roomRecords = useSelector((state: RootState) => rooms(state, { roomIds }));\n\n  if (roomIds.size === 0) return null;\n  return (\n    <Track>\n      {roomIds.size === 1 ? <IndividualRoom room={roomRecords.get(0)} /> : <GroupedRooms rooms={roomRecords} />}\n    </Track>\n  );\n};\n\n// Determines what keys to display in room summaries with multiple rooms\nexport const roomKeys = List([\"floor_plan_area\", \"wall_total_area\", \"ceiling_area\", \"floor_plan_perimeter\"]);\n\nexport default connectFC(RoomSummary);\n","import { IScreenShare, IScreenShareResource } from \"app/src/Models/ScreenShare\";\nimport { IScreenLeapEvent } from \"app/src/ScreenShare/ScreenLeapEvent\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\n\nexport class ScreenShareShowCtrl {\n  public screenShare: IScreenShare;\n  public viewerUrl: string;\n  public showScreenShare = false;\n\n  private timeoutInterval = 5000;\n  private retries = 12;\n  private _eventListener;\n\n  public static $inject = [\n    \"ScreenShare\",\n    \"$stateParams\",\n    \"$sce\",\n    \"$timeout\",\n    \"$q\",\n    \"$window\",\n    \"$location\",\n    \"BaseConfig\",\n  ];\n  constructor(\n    public ScreenShare: IScreenShareResource,\n    public $stateParams: ng.ui.IStateParamsService,\n    public $sce: ng.ISCEService,\n    public $timeout: ng.ITimeoutService,\n    public $q: ng.IQService,\n    public $window: ng.IWindowService,\n    private $location: ng.ILocationService,\n    private BaseConfig: IBaseConfig,\n  ) {\n    if ($window.location.protocol === \"https\") {\n      $window.location.href = BaseConfig.CUSTOMER_URL + $location.path();\n      return;\n    }\n\n    this.loadScreenShare();\n\n    this._eventListener = (e) => {\n      this.handleEvents(this.screenShare, e);\n    };\n\n    $window.addEventListener(\"message\", this._eventListener);\n  }\n\n  public refreshScreenShare() {\n    this.retries = 12;\n    this.loadScreenShare();\n  }\n\n  public handleEvents(screenshare: IScreenShare, event: IScreenLeapEvent) {\n    if (event.data === \"SCREEN_SHARE_ENDED\") {\n      if (screenshare.redirect_on_end_url) {\n        if (screenshare.redirect_on_end_url.indexOf(\"http\") === 0) {\n          window.location.href = screenshare.redirect_on_end_url;\n        }\n      }\n    }\n  }\n\n  private loadScreenShare() {\n    this.ScreenShare.landing(\n      { key: this.$stateParams[\"id\"] },\n      (data: IScreenShare) => {\n        this.screenShare = data;\n\n        if (this.screenShare.kind === \"basic\") {\n          this.viewerUrl = this.$sce.trustAsResourceUrl(this.screenShare.metadata.viewerUrl);\n        }\n        this.showScreenShare = true;\n      },\n      () => {\n        this.showScreenShare = false;\n        this.$timeout(() => {\n          if (this.retries > 0) {\n            this.retries -= 1;\n            this.loadScreenShare();\n          }\n        }, this.timeoutInterval);\n      },\n    );\n  }\n}\n","export class ScreenShareJoinCtrl {\n  public uid: string;\n\n  public static $inject = [\"$state\"];\n  constructor(public $state: ng.ui.IStateService) {}\n\n  public openViewer() {\n    this.$state.go(\"screen_share_presenter\", { id: this.uid });\n  }\n}\n","import { IScreenShare, IScreenShareResource, IScreenShareResponse } from \"app/src/Models/ScreenShare\";\n\nexport class ScreenShareIndexCtrl {\n  public screenShareResponse: IScreenShareResponse;\n\n  public static $inject = [\"ScreenShare\", \"$stateParams\"];\n\n  constructor(\n    public ScreenShare: IScreenShareResource,\n    public $stateParams: ng.ui.IStateParamsService,\n  ) {\n    this.screenShareResponse = <IScreenShareResponse>ScreenShare.query({\n      active: true,\n      \"include[]\": [\"estimate\", \"job\", \"assignments\", \"org\"],\n    });\n  }\n}\n","import { IJob, IJobResource } from \"app/src/Models/Job\";\nimport { JobFetcherService } from \"app/src/Jobs/JobFetcherService\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IBaseConfig } from \"app/src/Common/IBaseConfig\";\n\nexport class ScreenShareHostCtrl {\n  public job: IJob;\n  public sendInvite = false;\n\n  private _sendInviteSubscribe: () => void;\n\n  public static $inject = [\"$stateParams\", \"JobFetcher\", \"Job\", \"$rootScope\", \"BaseConfig\", \"$scope\"];\n\n  constructor(\n    public $stateParams: ng.ui.IStateParamsService,\n    public JobFetcher: JobFetcherService,\n    public Job: IJobResource,\n    public $rootScope: RsfRootScope,\n    public BaseConfig: IBaseConfig,\n    private $scope: ng.IScope,\n  ) {\n    this.$rootScope.pageTitle = `DO NOT SCREEN SHARE - ${BaseConfig.APP_NAME} Video Call`;\n\n    $scope.$on(\"$destroy\", () => {\n      this._sendInviteSubscribe();\n    });\n  }\n}\n","import * as React from \"react\";\nimport { createContext, useContext, useState, useEffect } from \"react\";\nimport { useTracking } from \"react-tracking\";\nimport { Participant, Room } from \"twilio-video\";\n\ntype selectedParticipantContextType = [Participant | null, (participant: Participant) => void];\n\nexport const selectedParticipantContext = createContext<selectedParticipantContextType>(null!);\n\nexport default function useSelectedParticipant() {\n  const [selectedParticipant, setSelectedParticipant] = useContext(selectedParticipantContext);\n  return [selectedParticipant, setSelectedParticipant];\n}\n\ntype SelectedParticipantProviderProps = {\n  room: Room;\n  children: React.ReactNode;\n};\n\nexport function SelectedParticipantProvider({ room, children }: SelectedParticipantProviderProps) {\n  const [selectedParticipant, _setSelectedParticipant] = useState<Participant | null>(null);\n  const { trackEvent } = useTracking();\n  const setSelectedParticipant = (participant: Participant) =>\n    _setSelectedParticipant((prevParticipant) => {\n      let newParticipant = null;\n      let action = \"unpin viewer\";\n      if (prevParticipant !== participant) {\n        newParticipant = participant;\n        action = \"pin viewer\";\n      }\n      trackEvent({\n        action,\n        participant: newParticipant?.identity,\n      });\n      return newParticipant;\n    });\n\n  useEffect(() => {\n    const onDisconnect = () => _setSelectedParticipant(null);\n    room.on(\"disconnected\", onDisconnect);\n    return () => {\n      room.removeListener(\"disconnected\", onDisconnect);\n    };\n  }, [room]);\n\n  return (\n    <selectedParticipantContext.Provider value={[selectedParticipant, setSelectedParticipant]}>\n      {children}\n    </selectedParticipantContext.Provider>\n  );\n}\n","import { useContext } from \"react\";\nimport { VideoContext } from \"app2/src/components/VideoProvider/VideoProvider\";\n\nexport default function useVideoContext() {\n  const context = useContext(VideoContext);\n  if (!context) {\n    throw new Error(\"useVideoContext must be used within a VideoProvider\");\n  }\n  return context;\n}\n","import { LocalVideoTrack } from \"twilio-video\";\nimport { useCallback } from \"react\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\n\nexport default function useLocalVideoToggle() {\n  const {\n    room: { localParticipant },\n    localTracks,\n    getLocalVideoTrack,\n  } = useVideoContext();\n  const videoTrack = localTracks.find((track) => track.name && track.name.includes(\"camera\")) as LocalVideoTrack;\n\n  const toggleVideoEnabled = useCallback(() => {\n    if (videoTrack) {\n      if (localParticipant) {\n        const localTrackPublication = localParticipant.unpublishTrack(videoTrack);\n        // TODO: remove when SDK implements this event. See: https://issues.corp.twilio.com/browse/JSDK-2592\n        localParticipant.emit(\"trackUnpublished\", localTrackPublication);\n      }\n      videoTrack.stop();\n    } else {\n      getLocalVideoTrack().then((track: LocalVideoTrack) => {\n        if (localParticipant) {\n          localParticipant.publishTrack(track as LocalVideoTrack, { priority: \"low\" });\n        }\n      });\n    }\n  }, [videoTrack, localParticipant, getLocalVideoTrack]);\n\n  return [!!videoTrack, toggleVideoEnabled];\n}\n","import { useEffect, useRef } from \"react\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport useLocalVideoToggle from \"app2/src/components/Twilio/hooks/useLocalVideoToggle/useLocalVideoToggle\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\n\n/*\n  This component adds a visibilitychange handler to the document when\n  the user is using a mobile device. When the handler detects that\n  the browser has been backgrounded, it unpublishes the users local\n  video track. The browser cannot send video to the room when it has\n  been backgrounded, so unpublishing the track stops video capture\n  on the device, and triggers a UI update for all other participants\n  to show that this user's video track has been turned off.\n*/\n\nexport default function AttachVisibilityHandler() {\n  const { room } = useVideoContext();\n  const [isVideoEnabled, toggleVideoEnabled] = useLocalVideoToggle();\n  const shouldRepublishVideoOnForeground = useRef(false);\n\n  useEffect(() => {\n    if (BrowserDetection.isBrowserMobile()) {\n      const handleVisibilityChange = () => {\n        // We don't need to unpublish the local video track if it has already been unpublished\n        if (document.visibilityState === \"hidden\" && isVideoEnabled) {\n          shouldRepublishVideoOnForeground.current = true;\n          // @ts-ignore\n          toggleVideoEnabled();\n\n          // Don't publish the local video track if it wasn't published before the app was backgrounded\n        } else if (shouldRepublishVideoOnForeground.current) {\n          shouldRepublishVideoOnForeground.current = false;\n          // @ts-ignore\n          toggleVideoEnabled();\n        }\n      };\n\n      document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n      return () => {\n        document.removeEventListener(\"visibilitychange\", handleVisibilityChange);\n      };\n    }\n  }, [isVideoEnabled, room, toggleVideoEnabled]);\n\n  return null;\n}\n","import { LocalVideoTrack, RemoteVideoTrack, TwilioError } from \"twilio-video\";\n\ndeclare module \"twilio-video\" {\n  interface LocalParticipant {\n    setBandwidthProfile: (bandwidthProfile: BandwidthProfileOptions) => void;\n  }\n\n  interface VideoCodecSettings {\n    simulcast?: boolean;\n  }\n\n  interface LocalVideoTrack {\n    isSwitchedOff: undefined;\n    setPriority: undefined;\n  }\n}\n\ndeclare global {\n  interface MediaDevices {\n    getDisplayMedia(constraints: MediaStreamConstraints): Promise<MediaStream>;\n  }\n}\n\nexport type Callback = (...args: any[]) => void;\n\nexport type ErrorCallback = (error: TwilioError) => void;\n\nexport type IVideoTrack = LocalVideoTrack | RemoteVideoTrack;\n\nexport enum BlurTypes {\n  Slight = \"slight-blur\",\n  Full = \"full-blur\",\n}\n\nexport enum LocalStorageKeys {\n  SelectedBackground = \"twilio-selected-background\",\n  CustomBackgrounds = \"twilio-custom-backgrounds\",\n  AudioInputId = \"twilio-audio-input\",\n  AudioOutputId = \"twilio-audio-output\",\n  VideoInputId = \"twilio-video-input\",\n  GraphicsSetting = \"twilio-graphics-setting\",\n  ReduceResolution = \"twilio-reduce-resolution-setting\",\n}\n","import * as React from \"react\";\nimport { createContext, useContext } from \"react\";\n\ninterface IFlashAlertContext {\n  flashAlert: (level: string, message: string) => void;\n  notifier: (message: string) => void;\n}\n\nconst FlashAlertContext = createContext<IFlashAlertContext>(undefined);\n\nexport const useFlashAlert = () => {\n  const { flashAlert } = useContext(FlashAlertContext);\n  if (!flashAlert) {\n    throw new Error(\"useFlashAlert must be used within a FlashAlertProvider\");\n  }\n  return flashAlert;\n};\n\nexport const useNotifier = () => {\n  const { notifier } = useContext(FlashAlertContext);\n  if (!notifier) {\n    throw new Error(\"useNotifier must be used within a FlashAlertProvider\");\n  }\n  return notifier;\n};\n\nexport const FlashAlertProvider: React.FC<IFlashAlertContext> = ({ children, flashAlert, notifier }) => (\n  <FlashAlertContext.Provider value={{ flashAlert, notifier }}>{children}</FlashAlertContext.Provider>\n);\n","import { useCallback, useEffect, useState } from \"react\";\nimport * as Video from \"twilio-video\";\nimport * as VideoProcessor from \"@twilio/video-processors\";\nimport { LocalVideoTrack, LocalAudioTrack, CreateLocalTrackOptions } from \"twilio-video\";\nimport { BlurTypes, LocalStorageKeys } from \"../types\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport { useFlashAlert } from \"app2/src/components/VideoProvider/FlashAlertContext\";\n\n// This function ensures that the user has granted the browser permission to use audio and video\n// devices. If permission has not been granted, it will cause the browser to ask for permission\n// for audio and video at the same time (as opposed to separate requests).\nexport function ensureMediaPermissions(flashAlert?: (level: string, message: string) => void) {\n  return navigator.mediaDevices\n    .enumerateDevices()\n    .then((devices) => devices.every((device) => !(device.deviceId && device.label)))\n    .then((shouldAskForMediaPermissions) => {\n      if (shouldAskForMediaPermissions) {\n        const videoConstraints = BrowserDetection.isBrowserMobile()\n          ? true\n          : { width: { min: 360, max: 1280 }, height: { min: 360, max: 1280 } };\n\n        return navigator.mediaDevices\n          .getUserMedia({\n            audio: true,\n            video: videoConstraints,\n          })\n          .then((mediaStream) => mediaStream.getTracks().forEach((track) => track.stop()))\n          .catch((e) => {\n            if (flashAlert) {\n              if (e.name === \"NotAllowedError\") {\n                flashAlert(\"danger\", \"Please allow access to your microphone and camera to continue.\");\n              } else if (e.name === \"NotFoundError\") {\n                flashAlert(\n                  \"danger\",\n                  \"No microphone or camera found. Please connect a microphone or camera to continue.\",\n                );\n              }\n            }\n\n            throw e;\n          });\n      }\n    });\n}\n\nexport function useLocalAudioTrack(): [LocalAudioTrack, () => Promise<LocalAudioTrack | null>] {\n  const flashAlert = useFlashAlert();\n  const [track, setTrack] = useState<LocalAudioTrack>();\n\n  const getLocalAudioTrack = useCallback(() => {\n    const options: CreateLocalTrackOptions = {};\n    const deviceId = JSON.parse(localStorage.getItem(LocalStorageKeys.AudioInputId));\n\n    if (deviceId) {\n      options.deviceId = { exact: deviceId };\n    }\n\n    return ensureMediaPermissions(flashAlert)\n      .then(() => {\n        return Video.createLocalAudioTrack(options).then((newTrack) => {\n          setTrack(newTrack);\n          return newTrack;\n        });\n      })\n      .catch(() => null);\n  }, []);\n\n  useEffect(() => {\n    getLocalAudioTrack();\n  }, [getLocalAudioTrack]);\n\n  useEffect(() => {\n    const handleStopped = () => setTrack(undefined);\n    if (track) {\n      track.on(\"stopped\", handleStopped);\n      return () => {\n        track.removeListener(\"stopped\", handleStopped);\n      };\n    }\n  }, [track]);\n\n  return [track, getLocalAudioTrack];\n}\n\nexport function useLocalVideoTrack(): [\n  LocalVideoTrack,\n  (newOptions?: CreateLocalTrackOptions) => Promise<LocalVideoTrack | null>,\n  boolean,\n] {\n  const flashAlert = useFlashAlert();\n  const [track, setTrack] = useState<LocalVideoTrack>();\n  const [isLoading, setIsLoading] = useState(false);\n\n  const getLocalVideoTrack = useCallback(() => {\n    setIsLoading(true);\n\n    return ensureMediaPermissions(flashAlert)\n      .then(async () => {\n        // Local Storage settings\n        const deviceId = JSON.parse(localStorage.getItem(LocalStorageKeys.VideoInputId));\n        const graphicsSettings = JSON.parse(localStorage.getItem(LocalStorageKeys.GraphicsSetting));\n        const reduceResolution = JSON.parse(localStorage.getItem(LocalStorageKeys.ReduceResolution));\n        const defaultPipeline =\n          BrowserDetection.isMobileIOS() || BrowserDetection.isBrowserSafari()\n            ? VideoProcessor.Pipeline.WebGL2\n            : VideoProcessor.Pipeline.Canvas2D;\n        const pipeline = graphicsSettings || defaultPipeline;\n\n        const lowRes = { width: 640, height: 360 };\n        const highRes = { width: 1280, height: 720 };\n\n        const resolution = reduceResolution ? lowRes : highRes;\n\n        // In the DeviceSelector and FlipCameraButton components, a new video track is created,\n        // then the old track is unpublished and the new track is published. Unpublishing the old\n        // track and publishing the new track at the same time sometimes causes a conflict when the\n        // track name is 'camera', so here we append a timestamp to the track name to avoid the\n        // conflict.\n        const options: CreateLocalTrackOptions = {\n          frameRate: 24,\n          name: `camera-${Date.now()}`,\n          deviceId: deviceId ? { exact: deviceId } : undefined,\n        };\n\n        if (!BrowserDetection.isBrowserMobile() && !BrowserDetection.isBrowserSafari()) {\n          options.width = resolution.width;\n          options.height = resolution.height;\n        } else {\n          options.width = 640;\n          options.height = 480;\n        }\n\n        return Video.createLocalVideoTrack(options)\n          .then(async (newTrack) => {\n            const backgroundSetting = JSON.parse(localStorage.getItem(LocalStorageKeys.SelectedBackground));\n            if (backgroundSetting || backgroundSetting === 0) {\n              const baseOptions = {\n                assetsPath: \"/twilio\",\n                maskBlurRadius: 5,\n                pipeline,\n                debounce: true,\n              };\n\n              let backgroundProcessor:\n                | VideoProcessor.VirtualBackgroundProcessor\n                | VideoProcessor.GaussianBlurBackgroundProcessor;\n\n              if (backgroundSetting === BlurTypes.Full || backgroundSetting === BlurTypes.Slight) {\n                const blurFilterRadius = backgroundSetting === BlurTypes.Slight ? 5 : 15;\n                backgroundProcessor = new VideoProcessor.GaussianBlurBackgroundProcessor({\n                  ...baseOptions,\n                  blurFilterRadius,\n                });\n              } else {\n                const src = JSON.parse(localStorage.getItem(LocalStorageKeys.CustomBackgrounds))[backgroundSetting];\n                const image = new Image();\n                image.src = src;\n                await image.decode();\n                backgroundProcessor = new VideoProcessor.VirtualBackgroundProcessor({\n                  ...baseOptions,\n                  backgroundImage: image,\n                });\n              }\n\n              await backgroundProcessor.loadModel();\n              newTrack = newTrack.addProcessor(\n                backgroundProcessor,\n                pipeline === VideoProcessor.Pipeline.WebGL2\n                  ? {\n                      inputFrameBufferType: \"video\",\n                      outputFrameBufferContextType: \"webgl2\",\n                    }\n                  : undefined,\n              );\n            }\n\n            setTrack(newTrack);\n            setIsLoading(false);\n            return newTrack;\n          })\n          .catch((error) => {\n            console.error(error);\n          });\n      })\n      .catch((error) => {\n        console.error(error);\n        setIsLoading(false);\n        return null;\n      });\n  }, []);\n\n  useEffect(() => {\n    // Set full blur as default for non-mobile devices\n    const currentBackground = localStorage.getItem(LocalStorageKeys.SelectedBackground);\n    if (currentBackground === null && !BrowserDetection.isBrowserMobile()) {\n      // Interface is expected to be JSON.stringify() -> JSON.parse() between updates\n      localStorage.setItem(LocalStorageKeys.SelectedBackground, JSON.stringify(BlurTypes.Full));\n    }\n  }, []);\n\n  useEffect(() => {\n    const handleStopped = () => setTrack(undefined);\n    if (track) {\n      track.on(\"stopped\", handleStopped);\n      return () => {\n        track.removeListener(\"stopped\", handleStopped);\n      };\n    }\n  }, [track]);\n\n  return [track, getLocalVideoTrack, isLoading];\n}\n\nexport default function useLocalTracks() {\n  const [audioTrack, getLocalAudioTrack] = useLocalAudioTrack();\n  const [videoTrack, getLocalVideoTrack, isVideoTrackLoading] = useLocalVideoTrack();\n\n  const localTracks = [audioTrack, videoTrack].filter((track) => track !== undefined) as (\n    | LocalAudioTrack\n    | LocalVideoTrack\n  )[];\n\n  return { localTracks, getLocalVideoTrack, getLocalAudioTrack, isVideoTrackLoading };\n}\n","import { EventEmitter } from \"events\";\nimport * as Video from \"twilio-video\";\nimport { ConnectOptions, LocalTrack, Room } from \"twilio-video\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport { Callback } from \"app2/src/components/VideoProvider/types\";\n\n// @ts-ignore\nwindow.TwilioVideo = Video;\n\nexport default function useRoom(localTracks: LocalTrack[], onError: Callback, options?: ConnectOptions) {\n  const [room, setRoom] = useState<Room>(new EventEmitter() as Room);\n  const [isConnecting, setIsConnecting] = useState(false);\n  const localTracksRef = useRef<LocalTrack[]>([]);\n\n  useEffect(() => {\n    // It can take a moment for Video.connect to connect to a room. During this time, the user may have enabled or disabled their\n    // local audio or video tracks. If this happens, we store the localTracks in this ref, so that they are correctly published\n    // once the user is connected to the room.\n    localTracksRef.current = localTracks;\n  }, [localTracks]);\n\n  const connect = useCallback(\n    (token) => {\n      setIsConnecting(true);\n      return Video.connect(token, { ...options, tracks: [] }).then(\n        (newRoom) => {\n          setRoom(newRoom);\n          const disconnect = () => newRoom.disconnect();\n\n          newRoom.once(\"disconnected\", () => {\n            // Reset the room only after all other `disconnected` listeners have been called.\n            setTimeout(() => setRoom(new EventEmitter() as Room));\n            window.removeEventListener(\"beforeunload\", disconnect);\n\n            if (BrowserDetection.isBrowserMobile()) {\n              window.removeEventListener(\"pagehide\", disconnect);\n            }\n          });\n\n          // @ts-ignore\n          window.twilioRoom = newRoom;\n\n          localTracksRef.current.forEach((track) =>\n            // Tracks can be supplied as arguments to the connect() function and they will automatically be published.\n            // However, tracks must be published manually in order to set the priority on them.\n            // All video tracks are published with 'low' priority. This works because the video\n            // track that is displayed in the 'MainParticipant' component will have it's priority\n            // set to 'high' via track.setPriority()\n\n            // not sure why there is a typescript error here, was not an issue in https://github.com/tberrysoln/twilio-video-app-react/blob/master/package-lock.json\n            // @ts-ignore\n            newRoom.localParticipant.publishTrack(track, { priority: track.kind === \"video\" ? \"low\" : \"standard\" }),\n          );\n\n          setIsConnecting(false);\n\n          // Add a listener to disconnect from the room when a user closes their browser\n          window.addEventListener(\"beforeunload\", disconnect);\n\n          if (BrowserDetection.isBrowserMobile) {\n            // Add a listener to disconnect from the room when a mobile user closes their browser\n            window.addEventListener(\"pagehide\", disconnect);\n          }\n        },\n        (error) => {\n          onError(error);\n          setIsConnecting(false);\n          location.reload();\n        },\n      );\n    },\n    [options, onError],\n  );\n\n  return { room, isConnecting, connect };\n}\n","import * as React from \"react\";\n\nexport const useLocalStorage = <T,>(key: string, initialValue: T, onError?: (error: string) => void) => {\n  const [storedValue, setStoredValue] = React.useState<T>(() => {\n    if (typeof window === \"undefined\") {\n      return initialValue;\n    }\n    try {\n      const item = window.localStorage.getItem(key);\n\n      return item ? JSON.parse(item) : initialValue;\n    } catch (error) {\n      console.error(error);\n      return initialValue;\n    }\n  });\n\n  const setValue = (value: T | ((val: T) => T)) => {\n    try {\n      // Allow value to be a function so we have same API as useState\n      const valueToStore = value instanceof Function ? value(storedValue) : value;\n\n      if (typeof window !== \"undefined\") {\n        window.localStorage.setItem(key, JSON.stringify(valueToStore));\n      }\n      setStoredValue(valueToStore);\n    } catch (error) {\n      if (onError) {\n        onError(error);\n      } else {\n        console.error(error);\n      }\n    }\n  };\n  return [storedValue, setValue] as const;\n};\n","import * as React from \"react\";\nimport { createContext, ReactNode } from \"react\";\nimport {\n  CreateLocalTrackOptions,\n  ConnectOptions,\n  LocalAudioTrack,\n  LocalVideoTrack,\n  Room,\n  TwilioError,\n} from \"twilio-video\";\nimport { SelectedParticipantProvider } from \"./useSelectedParticipant/useSelectedParticipant\";\n\nimport AttachVisibilityHandler from \"./AttachVisibilityHandler/AttachVisibilityHandler\";\nimport useHandleRoomDisconnectionErrors from \"./useHandleRoomDisconnectionErrors/useHandleRoomDisconnectionErrors\";\nimport useHandleOnDisconnect from \"./useHandleOnDisconnect/useHandleOnDisconnect\";\nimport useHandleTrackPublicationFailed from \"./useHandleTrackPublicationFailed/useHandleTrackPublicationFailed\";\nimport useLocalTracks from \"./useLocalTracks/useLocalTracks\";\nimport useRoom from \"./useRoom/useRoom\";\nimport { ErrorCallback, Callback } from \"./types\";\nimport useActiveSink from \"app2/src/components/Twilio/hooks/useActiveSink/useActiveSink\";\n\n/*\n *  The hooks used by the VideoProvider component are different than the hooks found in the 'hooks/' directory. The hooks\n *  in the 'hooks/' directory can be used anywhere in a video application, and they can be used any number of times.\n *  the hooks in the 'VideoProvider/' directory are intended to be used by the VideoProvider component only. Using these hooks\n *  elsewhere in the application may cause problems as these hooks should not be used more than once in an application.\n */\n\nexport interface IVideoContext {\n  room: Room;\n  localTracks: (LocalAudioTrack | LocalVideoTrack)[];\n  isConnecting: boolean;\n  connect: (token: string) => Promise<void>;\n  onError: ErrorCallback;\n  onDisconnect: Callback;\n  getLocalVideoTrack: (newOptions?: CreateLocalTrackOptions) => Promise<LocalVideoTrack>;\n  getLocalAudioTrack: (deviceId?: string) => Promise<LocalAudioTrack>;\n  activeSinkId: string;\n  setActiveSinkId: (deviceId: string) => void;\n  roomParams: RoomParams;\n  joinRoom: () => Promise<string>;\n  isVideoTrackLoading: boolean;\n}\n\nexport interface RoomParams {\n  roomName: string;\n  roomUid: string;\n  identity: string;\n  host: boolean;\n  roomExists: boolean;\n  audio_preference: string;\n}\n\nexport const VideoContext = createContext<IVideoContext>(null!);\n\ninterface VideoProviderProps {\n  options?: ConnectOptions;\n  roomParams: RoomParams;\n  joinRoom: () => Promise<string>;\n  onError: ErrorCallback;\n  onDisconnect?: Callback;\n  children: ReactNode;\n}\n\nexport function VideoProvider({\n  options,\n  roomParams,\n  joinRoom,\n  children,\n  onError = () => {},\n  onDisconnect = () => {},\n}: VideoProviderProps) {\n  const onErrorCallback = (error: TwilioError) => {\n    onError(error);\n  };\n\n  const { localTracks, getLocalVideoTrack, getLocalAudioTrack, isVideoTrackLoading } = useLocalTracks();\n  const { room, isConnecting, connect } = useRoom(localTracks, onErrorCallback, options);\n  const [activeSinkId, setActiveSinkId] = useActiveSink();\n\n  // Register onError and onDisconnect callback functions.\n  useHandleRoomDisconnectionErrors(room, onError);\n  useHandleTrackPublicationFailed(room, onError);\n  useHandleOnDisconnect(room, onDisconnect);\n\n  return (\n    <VideoContext.Provider\n      value={{\n        room,\n        localTracks,\n        isConnecting,\n        onError: onErrorCallback,\n        onDisconnect,\n        // @ts-ignore\n        getLocalVideoTrack,\n        // @ts-ignore\n        getLocalAudioTrack,\n        connect,\n        // @ts-ignore\n        activeSinkId,\n        // @ts-ignore\n        setActiveSinkId,\n        roomParams,\n        joinRoom,\n        isVideoTrackLoading,\n      }}>\n      <SelectedParticipantProvider room={room}>{children}</SelectedParticipantProvider>\n      {/*\n        The AttachVisibilityHandler component is using the useLocalVideoToggle hook\n        which must be used within the VideoContext Provider.\n      */}\n      <AttachVisibilityHandler />\n    </VideoContext.Provider>\n  );\n}\n","import { LocalStorageKeys } from \"app2/src/components/VideoProvider/types\";\nimport { useLocalStorage } from \"app2/src/hooks/useLocalStorage\";\n\nexport default function useActiveSink() {\n  const [activeSinkId, setActiveSinkId] = useLocalStorage(LocalStorageKeys.AudioOutputId, \"default\");\n\n  return [activeSinkId, setActiveSinkId];\n}\n","import { Room, TwilioError } from \"twilio-video\";\nimport { useEffect } from \"react\";\nimport { Callback } from \"app2/src/components/VideoProvider/types\";\n\nexport default function useHandleRoomDisconnectionErrors(room: Room, onError: Callback): any {\n  useEffect(() => {\n    const onDisconnected = (room: Room, error: TwilioError) => {\n      if (error) {\n        onError(error);\n      }\n    };\n\n    room.on(\"disconnected\", onDisconnected);\n    return () => {\n      room.removeListener(\"disconnected\", onDisconnected);\n    };\n  }, [room, onError]);\n}\n","import { Room } from \"twilio-video\";\nimport { useEffect } from \"react\";\nimport { Callback } from \"app2/src/components/VideoProvider/types\";\n\nexport default function useHandleTrackPublicationFailed(room: Room, onError: Callback) {\n  const { localParticipant } = room;\n  useEffect(() => {\n    if (localParticipant) {\n      localParticipant.on(\"trackPublicationFailed\", onError);\n      return () => {\n        localParticipant.removeListener(\"trackPublicationFailed\", onError);\n      };\n    }\n  }, [localParticipant, onError]);\n}\n","import { useEffect } from \"react\";\nimport { Room } from \"twilio-video\";\nimport { Callback } from \"app2/src/components/VideoProvider/types\";\n\nexport default function useHandleOnDisconnect(room: Room, onDisconnect: Callback) {\n  useEffect(() => {\n    room.on(\"disconnected\", onDisconnect);\n    return () => {\n      room.removeListener(\"disconnected\", onDisconnect);\n    };\n  }, [room, onDisconnect]);\n}\n","import { useEffect, useState } from \"react\";\nimport useVideoContext from \"../useVideoContext/useVideoContext\";\n\ntype RoomStateType = \"disconnected\" | \"connected\" | \"reconnecting\";\n\nexport default function useRoomState() {\n  const { room } = useVideoContext();\n  const [state, setState] = useState<RoomStateType>(\"disconnected\");\n\n  useEffect(() => {\n    const setRoomState = () => setState((room.state || \"disconnected\") as RoomStateType);\n    setRoomState();\n    room.on(\"disconnected\", setRoomState).on(\"reconnected\", setRoomState).on(\"reconnecting\", setRoomState);\n    return () => {\n      room\n        .removeListener(\"disconnected\", setRoomState)\n        .removeListener(\"reconnected\", setRoomState)\n        .removeListener(\"reconnecting\", setRoomState);\n    };\n  }, [room]);\n\n  return state;\n}\n","import * as React from \"react\";\nimport { useRef, useEffect } from \"react\";\nimport { Track } from \"twilio-video\";\nimport { IVideoTrack } from \"app2/src/components/VideoProvider/types\";\n\ninterface VideoTrackProps {\n  track: IVideoTrack;\n  isLocal?: boolean;\n  priority?: Track.Priority | null;\n}\n\nexport default function VideoTrack({ track, isLocal, priority }: VideoTrackProps) {\n  const ref = useRef<HTMLVideoElement>(null!);\n\n  useEffect(() => {\n    const el = ref.current;\n    el.muted = true;\n    if (track.setPriority && priority) {\n      track.setPriority(priority);\n    }\n    track.attach(el);\n    return () => {\n      track.detach(el);\n      if (track.setPriority && priority) {\n        // Passing `null` to setPriority will set the track's priority to that which it was published with.\n        track.setPriority(null);\n      }\n    };\n  }, [track, priority]);\n\n  // The local video track is mirrored.\n  const isFrontFacing = track?.mediaStreamTrack.getSettings().facingMode !== \"environment\";\n  const style = isLocal && isFrontFacing ? { transform: \"rotateY(180deg)\" } : {};\n\n  return <video className=\"video-track\" ref={ref} style={style} />;\n}\n","import * as React from \"react\";\nimport useLocalVideoToggle from \"app2/src/components/Twilio/hooks/useLocalVideoToggle/useLocalVideoToggle\";\nimport { Button } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useTracking } from \"react-tracking\";\n\nexport default function ToggleVideoButton(props: { disabled?: boolean }) {\n  const [isVideoEnabled, toggleVideoEnabled] = useLocalVideoToggle();\n  const { trackEvent } = useTracking();\n\n  const toogleVideo = () => {\n    const action = isVideoEnabled ? \"hide video\" : \"show video\";\n    if (typeof toggleVideoEnabled === \"function\") {\n      trackEvent({ action });\n      toggleVideoEnabled();\n    }\n  };\n\n  return (\n    <Button\n      // @ts-ignore\n      onClick={toogleVideo}\n      className=\"control-button fa-stack\"\n      disabled={props.disabled}>\n      {isVideoEnabled ? (\n        <FontAwesome name=\"video-camera\" title=\"Hide Video\" size=\"lg\" />\n      ) : (\n        <FontAwesome name=\"video-camera\" className=\"fa-rsf-slash\" title=\"Show Video\" size=\"lg\" />\n      )}\n    </Button>\n  );\n}\n","import { useState, useEffect } from \"react\";\nimport { LocalAudioTrack, LocalVideoTrack, RemoteAudioTrack, RemoteVideoTrack } from \"twilio-video\";\n\ntype TrackType = LocalAudioTrack | LocalVideoTrack | RemoteAudioTrack | RemoteVideoTrack | undefined;\n\nexport default function useIsTrackEnabled(track: TrackType) {\n  const [isEnabled, setIsEnabled] = useState(track ? track.isEnabled : true);\n\n  useEffect(() => {\n    setIsEnabled(track ? track.isEnabled : true);\n\n    if (track) {\n      const setEnabled = () => setIsEnabled(true);\n      const setDisabled = () => setIsEnabled(false);\n      track.on(\"enabled\", setEnabled);\n      track.on(\"disabled\", setDisabled);\n      return () => {\n        track.removeListener(\"enabled\", setEnabled);\n        track.removeListener(\"disabled\", setDisabled);\n      };\n    }\n  }, [track]);\n\n  return isEnabled;\n}\n","import * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport useLocalAudioToggle from \"app2/src/components/Twilio/hooks/useLocalAudioToggle/useLocalAudioToggle\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport { useTracking } from \"react-tracking\";\n\nexport default function ToggleAudioButton(props: { disabled?: boolean }) {\n  const [isAudioEnabled, toggleAudioEnabled] = useLocalAudioToggle();\n  const {\n    roomParams: { audio_preference },\n  } = useVideoContext();\n\n  const { trackEvent } = useTracking();\n\n  const toogleAudio = () => {\n    const action = isAudioEnabled ? \"mute audio\" : \"unmute audio\";\n    if (typeof toggleAudioEnabled === \"function\") {\n      trackEvent({ action });\n      toggleAudioEnabled();\n    }\n  };\n\n  if (audio_preference === \"disabled\") {\n    return null;\n  }\n\n  return (\n    <Button\n      // @ts-ignore\n      onClick={toogleAudio}\n      className=\"control-button\"\n      disabled={props.disabled}>\n      {isAudioEnabled ? (\n        <FontAwesome name=\"microphone\" title=\"Mute Audio\" size=\"lg\" />\n      ) : (\n        <FontAwesome name=\"microphone-slash\" title=\"Unmute Audio\" size=\"lg\" />\n      )}\n    </Button>\n  );\n}\n","import { LocalAudioTrack } from \"twilio-video\";\nimport { useCallback, useEffect } from \"react\";\nimport useVideoContext from \"../useVideoContext/useVideoContext\";\nimport useIsTrackEnabled from \"app2/src/components/Twilio/hooks/useIsTrackEnabled/useIsTrackEnabled\";\n\nexport default function useLocalAudioToggle() {\n  const {\n    localTracks,\n    roomParams: { audio_preference },\n  } = useVideoContext();\n  const audioTrack = localTracks.find((track) => track.kind === \"audio\") as LocalAudioTrack;\n  const isEnabled = useIsTrackEnabled(audioTrack);\n\n  const toggleAudioEnabled = useCallback(() => {\n    if (audioTrack) {\n      audioTrack.isEnabled ? audioTrack.disable() : audioTrack.enable();\n    }\n  }, [audioTrack]);\n\n  useEffect(() => {\n    if (audioTrack && audioTrack.isEnabled && (audio_preference === \"disabled\" || audio_preference === \"mute\")) {\n      audioTrack.disable();\n    }\n  }, [audioTrack ? audioTrack.id : 1]);\n\n  return [isEnabled, toggleAudioEnabled];\n}\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { ListGroup } from \"react-bootstrap\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as screenShareActions from \"app2/src/reducers/screenShare.actions\";\n\nconst mapStateToProps = (state: RootState, ownProps: ToolbarProps) => {\n  const job = state.getIn([\"components\", \"common\", \"currentJob\"], null);\n  return {\n    job: job,\n    screenShareStatus: state.getIn([\"screenShares\", \"byJobId\", job.id, \"screenShareStatus\"], \"off\"),\n    screenShareKind: state.getIn([\"screenShares\", \"byJobId\", job.id, \"screenShareKind\"], \"basic\"),\n    displayWebCam: state.getIn([\"components\", \"common\", \"displayWebCam\"], false),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ToolbarProps) => {\n  return {\n    openSendInviteModal: () => dispatch(commonActions.Actions.openSendInviteModal(\"screenshare\", {})),\n    openWebCamModal: () => dispatch(commonActions.Actions.openWebCamModal()),\n    closeWebCamModal: () => dispatch(commonActions.Actions.closeWebCamModal()),\n    startScreenShare: (jobId: number) =>\n      dispatch(screenShareActions.AsyncActions.setRemoteScreenShareStatus(jobId, \"start_requested\")),\n    stopScreenShare: (jobId: number) =>\n      dispatch(screenShareActions.AsyncActions.setRemoteScreenShareStatus(jobId, \"stop_requested\")),\n    startFallbackScreenShare: (jobId) => dispatch(screenShareActions.AsyncActions.startFallbackScreenShare(jobId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ToolbarProps {\n  showSendInvite?: boolean;\n}\n\ninterface ScreenShareState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ToolbarProps;\n\nclass Toolbar extends React.Component<Props, ScreenShareState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {};\n\n    this.openInviteModal = this.openInviteModal.bind(this);\n  }\n\n  public render() {\n    const { screenShareKind, showSendInvite, screenShareStatus } = this.props;\n    const screen_share_icon = this.screenShareIcon();\n    const web_cam_icon = this.webCamIcon();\n\n    if (showSendInvite) {\n      return (\n        <ListGroup className=\"screen-share-toolbar list-group-horizontal\">\n          <ListGroup.Item>{this.sendInviteIcon()}</ListGroup.Item>\n        </ListGroup>\n      );\n    }\n\n    return (\n      <ListGroup className=\"screen-share-toolbar list-group-horizontal\">\n        <ListGroup.Item>{screen_share_icon}</ListGroup.Item>\n        {screenShareKind === \"premium\" ? null : <ListGroup.Item>{web_cam_icon}</ListGroup.Item>}\n        {screenShareKind === \"premium\" && _.include([\"start_requested\", \"active\", \"tab_opened\"], screenShareStatus) ? (\n          <ListGroup.Item>{this.screenShareKindIcon()}</ListGroup.Item>\n        ) : null}\n        <ListGroup.Item>{this.sendInviteIcon()}</ListGroup.Item>\n      </ListGroup>\n    );\n  }\n\n  private screenShareIcon() {\n    const { screenShareStatus, startScreenShare, stopScreenShare, job } = this.props;\n    let screen_share_icon = null;\n    let uid = \"\";\n    if (job) {\n      uid = job.uid;\n    }\n\n    switch (screenShareStatus) {\n      case \"off\":\n      case \"stop_requested\":\n        screen_share_icon = (\n          <a className=\"image-link\" title={`Start Screen Sharing ${uid}`} onClick={() => startScreenShare(job.id)}>\n            <img src=\"/assets/images/icons/start_share.1c7968bf.png\" id=\"presentation-mode-start\" />\n            <div className=\"icon-text\" id=\"presentation-mode-start-text\"></div>\n          </a>\n        );\n        break;\n      case \"start_requested\":\n      case \"tab_opened\":\n      case \"active\":\n        screen_share_icon = (\n          <a className=\"image-link\" title={`Stop Screen Sharing ${uid}`} onClick={() => stopScreenShare(job.id)}>\n            <img src=\"/assets/images/icons/stop_share.b35105f4.png\" id=\"presentation-mode-stop\" />\n            <div className=\"icon-text\" id=\"presentation-mode-stop-text\"></div>\n          </a>\n        );\n        break;\n    }\n    return screen_share_icon;\n  }\n\n  private webCamIcon() {\n    const { displayWebCam, openWebCamModal, closeWebCamModal } = this.props;\n    let web_cam_icon = null;\n    if (displayWebCam) {\n      web_cam_icon = (\n        <a className=\"image-link\" title=\"Hide Camera\" onClick={closeWebCamModal}>\n          <img src=\"/assets/images/icons/stop_webcam.eb494947.png\" id=\"presentation-mode-camera-stop\" />\n          <div className=\"icon-text\" id=\"presentation-mode-camera-stop-text\"></div>\n        </a>\n      );\n    } else {\n      web_cam_icon = (\n        <a className=\"image-link\" title=\"Show Camera\" onClick={openWebCamModal}>\n          <img src=\"/assets/images/icons/start_webcam.28e90bd8.png\" id=\"presentation-mode-camera\" />\n          <div className=\"icon-text\" id=\"presentation-mode-camera-text\"></div>\n        </a>\n      );\n    }\n    return web_cam_icon;\n  }\n\n  private openInviteModal() {\n    const { openSendInviteModal } = this.props;\n\n    openSendInviteModal();\n  }\n\n  private sendInviteIcon() {\n    return (\n      <a className=\"image-link\" title=\"Send Screen Share Invite\" onClick={this.openInviteModal}>\n        <img src=\"/assets/images/icons/send_invite.9b82395a.png\" id=\"presentation-mode-invite\" />\n        <div className=\"icon-text\" id=\"presentation-mode-invite-text\"></div>\n      </a>\n    );\n  }\n\n  private screenShareKindIcon() {\n    const { startFallbackScreenShare, job } = this.props;\n    return (\n      <a\n        className=\"image-link\"\n        title=\"Fall Back to Basic Screen Share and Start\"\n        onClick={() => startFallbackScreenShare(job.id)}>\n        <img src=\"/assets/images/icons/fallback_share.a11ac9a7.png\" id=\"basic-start\" />\n        <div className=\"icon-text\" id=\"basic-start-text\"></div>\n      </a>\n    );\n  }\n}\n\nexport default connector(Toolbar);\n","import * as React from \"react\";\nimport useFullScreenToggle from \"app2/src/hooks/useFullScreenToggle/useFullScreenToggle\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport { useTracking } from \"react-tracking\";\n\nexport default function ToggleFullscreenButton() {\n  const [isFullScreen, toggleFullScreen] = useFullScreenToggle();\n  const { trackEvent } = useTracking();\n  if (BrowserDetection.isBrowserMobile()) {\n    return null;\n  }\n\n  const toogleScreen = () => {\n    toggleFullScreen();\n    const action = isFullScreen ? \"exit full screen\" : \"full screen\";\n    trackEvent({ action });\n  };\n\n  return (\n    <div onClick={toogleScreen}>\n      {isFullScreen ? (\n        <FontAwesome name=\"compress fa-gray link\" title=\"Exit Full Screen\" size=\"lg\" />\n      ) : (\n        <FontAwesome name=\"expand fa-gray link\" title=\"Full Screen\" size=\"lg\" />\n      )}\n    </div>\n  );\n}\n","import * as React from \"react\";\nimport * as config from \"react-global-configuration\";\nimport Toolbar from \"app2/src/components/ScreenShare/Toolbar\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport ToggleFullscreenButton from \"./ToggleFullScreenButton\";\n\nexport default function Header(props: { showInvite: boolean }) {\n  return (\n    <nav className=\"navbar navbar-expand-md\">\n      <a className=\"navbar-brand\">\n        <img src={config.get(\"APP_ICON_URL\")} alt={config.get(\"APP_NAME\")} height=\"40\" />\n      </a>\n      {props.showInvite && <Toolbar showSendInvite={true} />}\n      {!BrowserDetection.isBrowserMobile() && <ToggleFullscreenButton />}\n    </nav>\n  );\n}\n","import { useState, useEffect } from \"react\";\nimport { ensureMediaPermissions } from \"app2/src/components/VideoProvider/useLocalTracks/useLocalTracks\";\n\nexport function useDevices() {\n  const [devices, setDevices] = useState<MediaDeviceInfo[]>([]);\n\n  useEffect(() => {\n    const getDevices = () =>\n      ensureMediaPermissions().then(() =>\n        navigator.mediaDevices.enumerateDevices().then((devices) => setDevices(devices)),\n      );\n    navigator.mediaDevices.addEventListener(\"devicechange\", getDevices);\n    getDevices();\n\n    return () => {\n      navigator.mediaDevices.removeEventListener(\"devicechange\", getDevices);\n    };\n  }, []);\n\n  return devices;\n}\n\nexport function useAudioInputDevices() {\n  const devices = useDevices();\n  return devices.filter((device) => device.kind === \"audioinput\");\n}\n\nexport function useVideoInputDevices() {\n  const devices = useDevices();\n  return devices.filter((device) => device.kind === \"videoinput\");\n}\n\nexport function useAudioOutputDevices() {\n  const devices = useDevices();\n  return devices.filter((device) => device.kind === \"audiooutput\");\n}\n","import * as React from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport { AudioTrack, LocalAudioTrack, RemoteAudioTrack } from \"twilio-video\";\nimport { interval } from \"d3-timer\";\nimport useIsTrackEnabled from \"app2/src/components/Twilio/hooks/useIsTrackEnabled/useIsTrackEnabled\";\nimport * as FontAwesome from \"react-fontawesome\";\n\nlet clipId = 0;\nconst getUniqueClipId = () => clipId++;\n\n// @ts-ignore\nconst AudioContext = window.AudioContext || window.webkitAudioContext;\nlet audioContext: AudioContext;\n\nexport function initializeAnalyser(audioTrack: AudioTrack) {\n  audioContext = audioContext || new AudioContext();\n  const stream = new MediaStream([audioTrack.mediaStreamTrack.clone()]);\n  const audioSource = audioContext.createMediaStreamSource(stream);\n\n  const analyser = audioContext.createAnalyser();\n  analyser.smoothingTimeConstant = 0.4;\n  analyser.fftSize = 512;\n\n  audioSource.connect(analyser);\n  return analyser;\n}\n\nfunction AudioLevelIndicator({\n  size,\n  audioTrack,\n  background,\n}: {\n  size?: number;\n  audioTrack?: AudioTrack;\n  background?: string;\n}) {\n  const SIZE = size || 23;\n  const ref = useRef<SVGRectElement>(null);\n  const isTrackEnabled = useIsTrackEnabled(audioTrack as LocalAudioTrack | RemoteAudioTrack);\n\n  useEffect(() => {\n    const SVGClipElement = ref.current;\n\n    if (audioTrack && isTrackEnabled && SVGClipElement) {\n      let analyser = initializeAnalyser(audioTrack);\n\n      const reinitializeAnalyser = () => {\n        analyser = initializeAnalyser(audioTrack);\n      };\n\n      // Here we reinitialize the AnalyserNode on focus to avoid an issue in Safari\n      // where the analysers stop functioning when the user switches to a new tab\n      // and switches back to the app.\n      window.addEventListener(\"focus\", reinitializeAnalyser);\n\n      const sampleArray = new Uint8Array(analyser.frequencyBinCount);\n\n      const timer = interval(() => {\n        analyser.getByteFrequencyData(sampleArray);\n        let values = 0;\n\n        const length = sampleArray.length;\n        for (let i = 0; i < length; i++) {\n          values += sampleArray[i];\n        }\n\n        const volume = Math.min(21, Math.max(0, Math.log10(values / length / 3) * 14));\n\n        if (SVGClipElement) {\n          SVGClipElement.setAttribute(\"y\", String(21 - volume));\n        }\n      }, 50);\n\n      return () => {\n        SVGClipElement.setAttribute(\"y\", \"21\");\n        timer.stop();\n        window.removeEventListener(\"focus\", reinitializeAnalyser);\n      };\n    }\n  }, [audioTrack, isTrackEnabled]);\n\n  // Each instance of this component will need a unique HTML ID\n  const clipPathId = `audio-level-clip-${getUniqueClipId()}`;\n\n  return isTrackEnabled ? (\n    <svg focusable=\"false\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" height={`${SIZE}px`} width={`${SIZE}px`}>\n      <defs>\n        <clipPath id={clipPathId}>\n          <rect ref={ref} x=\"0\" y=\"21\" width=\"24\" height=\"24\" />\n        </clipPath>\n      </defs>\n      <path\n        fill={background || \"rgba(0, 0, 0, 0.1)\"}\n        d=\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\"></path>\n      <path\n        fill=\"#0c0\"\n        clipPath={`url(#${clipPathId})`}\n        d=\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\"></path>\n    </svg>\n  ) : (\n    <FontAwesome name=\"microphone-slash\" />\n  );\n}\n\nexport default React.memo(AudioLevelIndicator);\n","import * as React from \"react\";\nimport { LocalAudioTrack } from \"twilio-video\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport AudioLevelIndicator from \"./AudioLevelIndicator\";\n\nexport default function LocalAudioLevelIndicator() {\n  const { localTracks } = useVideoContext();\n  const audioTrack = localTracks.find((track) => track.kind === \"audio\") as LocalAudioTrack;\n\n  return <AudioLevelIndicator size={30} audioTrack={audioTrack} />;\n}\n","import * as React from \"react\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport { Form, Col, Row } from \"react-bootstrap\";\nimport { useAudioInputDevices } from \"../hooks/deviceHooks\";\nimport LocalAudioLevelIndicator from \"app2/src/components/Twilio/components/LocalAudioLevelIndicator\";\nimport { useTracking } from \"react-tracking\";\nimport { useLocalStorage } from \"app2/src/hooks/useLocalStorage\";\nimport { LocalStorageKeys } from \"../../VideoProvider/types\";\n\nexport default function AudioInputList(): JSX.Element {\n  const audioInputDevices = useAudioInputDevices();\n  const {\n    room: { localParticipant },\n    localTracks,\n    getLocalAudioTrack,\n  } = useVideoContext();\n  const { trackEvent } = useTracking();\n  const [selectedDevice, setSelectedDevice] = useLocalStorage<string>(LocalStorageKeys.AudioInputId, null);\n\n  const localAudioTrack = localTracks.find((track) => track.kind === \"audio\");\n\n  function replaceTrack(newDeviceId: string) {\n    if (localAudioTrack) {\n      localAudioTrack.stop();\n    }\n\n    setSelectedDevice(newDeviceId);\n\n    getLocalAudioTrack().then((newTrack) => {\n      if (!newTrack) return;\n      trackEvent({\n        action: \"changeAudioInput\",\n        audioInputName: newTrack?.mediaStreamTrack?.label,\n        audioInputId: newTrack?.id,\n      });\n      if (localParticipant) {\n        if (localAudioTrack) {\n          const localTrackPublication = localParticipant.unpublishTrack(localAudioTrack);\n          // TODO: remove when SDK implements this event. See: https://issues.corp.twilio.com/browse/JSDK-2592\n          localParticipant.emit(\"trackUnpublished\", localTrackPublication);\n        }\n        localParticipant.publishTrack(newTrack);\n      }\n    });\n  }\n\n  return (\n    <Row>\n      <Col xs={11}>\n        <Form.Label>Audio Input</Form.Label>\n        {audioInputDevices.length > 1 ? (\n          <Form.Control\n            as=\"select\"\n            onChange={(e: any) => replaceTrack(e.target.value as string)}\n            value={selectedDevice || \"\"}>\n            {audioInputDevices.map((device) => (\n              <option value={device.deviceId} key={device.deviceId}>\n                {device.label}\n              </option>\n            ))}\n          </Form.Control>\n        ) : (\n          <p>{localAudioTrack?.mediaStreamTrack.label || \"No Local Audio\"}</p>\n        )}\n      </Col>\n      <Col xs={1} className=\"audio-select-icon\">\n        <LocalAudioLevelIndicator />\n      </Col>\n    </Row>\n  );\n}\n","import * as React from \"react\";\nimport { LocalVideoTrack } from \"twilio-video\";\nimport { Form, Col, Row, Button } from \"react-bootstrap\";\nimport { useVideoInputDevices } from \"app2/src/components/DeviceSelector/hooks/deviceHooks\";\nimport VideoTrack from \"app2/src/components/Twilio/components/VideoTrack\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport { useTracking } from \"react-tracking\";\nimport { useLocalStorage } from \"app2/src/hooks/useLocalStorage\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { getBase64 } from \"app2/src/records/File\";\nimport { BlurTypes, LocalStorageKeys } from \"../../VideoProvider/types\";\nimport { useDispatch } from \"react-redux\";\nimport { Actions } from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport SpinnerComponent from \"../../SpinnerComponent\";\n\nexport default function VideoInputList() {\n  // Hooks\n  const dispatch = useDispatch();\n  const videoInputDevices = useVideoInputDevices();\n  const { trackEvent } = useTracking();\n  const {\n    room: { localParticipant },\n    localTracks,\n    getLocalVideoTrack,\n    isVideoTrackLoading,\n  } = useVideoContext();\n  const fileInputRef = React.useRef<HTMLInputElement>(null);\n  const [background, setBackground] = useLocalStorage<BlurTypes.Slight | BlurTypes.Full | number | null>(\n    LocalStorageKeys.SelectedBackground,\n    null,\n  );\n  const [customBackgrounds, setCustomBackgrounds] = useLocalStorage<string[]>(\n    LocalStorageKeys.CustomBackgrounds,\n    [],\n    () => dispatch(Actions.flashAddAlert(FlashLevels.danger, \"Failed to upload image. Browser storage is full.\")),\n  );\n  const [selectedVideoDeviceId, setSelectedVideoDeviceId] = useLocalStorage<string>(\n    LocalStorageKeys.VideoInputId,\n    null,\n  );\n\n  const localVideoTrack = localTracks.find((track) => track.kind === \"video\") as LocalVideoTrack;\n  let localVideoInputDeviceId = null;\n  if (localVideoTrack) {\n    localVideoInputDeviceId = localVideoTrack.mediaStreamTrack.getSettings().deviceId;\n  }\n\n  function replaceTrack(newDeviceId: string, newBackground?: BlurTypes.Slight | BlurTypes.Full | number | null) {\n    if (localVideoTrack) {\n      localVideoTrack.stop();\n    }\n    getLocalVideoTrack().then((newTrack) => {\n      if (newBackground === undefined) {\n        trackEvent({ action: \"changeVideoInput\", videoInputName: newTrack?.name, videoInputId: newTrack?.id });\n      } else {\n        const background =\n          typeof newBackground === \"number\" ? \"custom image\" : newBackground === null ? \"none\" : newBackground;\n        trackEvent({ action: \"changeVirtualBackground\", background });\n      }\n      if (localParticipant) {\n        if (localVideoTrack) {\n          const localTrackPublication = localParticipant.unpublishTrack(localVideoTrack);\n          // TODO: remove when SDK implements this event. See: https://issues.corp.twilio.com/browse/JSDK-2592\n          localParticipant.emit(\"trackUnpublished\", localTrackPublication);\n        }\n\n        localParticipant.publishTrack(newTrack);\n      }\n    });\n  }\n\n  const handleVideoInputChange = (newDeviceId) => {\n    setSelectedVideoDeviceId(newDeviceId);\n    replaceTrack(newDeviceId);\n  };\n\n  const activeStyle = (backgroundOption: BlurTypes.Slight | BlurTypes.Full | number | null) =>\n    background === backgroundOption ? \"border border-primary border-3\" : \"\";\n\n  function handleBackgroundSelect(background: BlurTypes.Slight | BlurTypes.Full | number | null) {\n    setBackground(background);\n    replaceTrack(selectedVideoDeviceId, background);\n  }\n\n  async function handleFileChange(event: React.ChangeEvent<HTMLInputElement>) {\n    const file = event.target.files?.[0];\n    if (file) {\n      if (file.size / 1024 / 1024 > 2) {\n        dispatch(Actions.flashAddAlert(FlashLevels.danger, \"Failed to upload image. File size must be under 2 MB.\"));\n        return;\n      }\n      const base64 = (await getBase64(file)) as string;\n      setCustomBackgrounds([...customBackgrounds, base64]);\n    }\n  }\n\n  function handleUploadClick() {\n    fileInputRef.current?.click();\n  }\n\n  function deleteBackground(index: number) {\n    setCustomBackgrounds(customBackgrounds.filter((_, i) => i !== index));\n    setBackground(null);\n    replaceTrack(selectedVideoDeviceId, null);\n  }\n\n  return (\n    <>\n      <Row>\n        <Col>\n          <Form.Label>Video Input</Form.Label>\n          {videoInputDevices.length > 1 ? (\n            <Form.Control\n              as=\"select\"\n              onChange={(e: any) => handleVideoInputChange(e.target.value as string)}\n              value={selectedVideoDeviceId || localVideoInputDeviceId || \"\"}>\n              {videoInputDevices.map((device) => (\n                <option value={device.deviceId} key={device.deviceId}>\n                  {device.label}\n                </option>\n              ))}\n            </Form.Control>\n          ) : (\n            <p>{localVideoTrack?.mediaStreamTrack.label || \"No Local Video\"}</p>\n          )}\n        </Col>\n      </Row>\n      {videoInputDevices && (\n        <Row>\n          <Col>\n            <div className=\"d-flex\">\n              <div style={{ flex: 1 }}>\n                <Row>\n                  <Col>\n                    <Form.Label>Virtual Background</Form.Label>\n                  </Col>\n                </Row>\n\n                <Row>\n                  <Col>\n                    <div className=\"d-flex flex-wrap\">\n                      <div\n                        onClick={() => handleBackgroundSelect(null)}\n                        className={\"background-option-container mr-3 mb-3 \" + activeStyle(null)}\n                        style={{ backgroundColor: \"rgba(0,0,0,80%)\" }}>\n                        <div>None</div>\n                      </div>\n                      <div className=\"relative mr-3 mb-3\">\n                        <img src={\"/assets/images/slight-blur.e9569bcd.jpg\"} alt=\"Slight Blur\" width={100} />\n                        <div\n                          onClick={() => handleBackgroundSelect(BlurTypes.Slight)}\n                          className={\"background-option-container top-0 absolute \" + activeStyle(BlurTypes.Slight)}\n                          style={{ backgroundColor: \"rgba(0,0,0,35%)\" }}>\n                          <div>Slight Blur</div>\n                        </div>\n                      </div>\n                      <div className=\"relative mr-3 mb-3\">\n                        <img src={\"/assets/images/full-blur.45036e1f.jpg\"} alt=\"Full Blur\" width={100} />\n                        <div\n                          onClick={() => handleBackgroundSelect(BlurTypes.Full)}\n                          className={\"background-option-container top-0 absolute \" + activeStyle(BlurTypes.Full)}\n                          style={{ backgroundColor: \"rgba(0,0,0,35%)\" }}>\n                          <div>Full Blur</div>\n                        </div>\n                      </div>\n                      {customBackgrounds.map((base64, idx) => (\n                        <div\n                          className={\"custom-background relative mr-3 mb-3 link \" + activeStyle(idx)}\n                          style={{\n                            backgroundImage: `url('${base64}')`,\n                            backgroundSize: \"cover\",\n                          }}\n                          key={`background-${idx}`}>\n                          <FontAwesome\n                            onClick={() => deleteBackground(idx)}\n                            name=\"times-circle\"\n                            className=\"delete-btn\"\n                            size=\"lg\"\n                            id={`delete-btn-${idx}`}\n                          />\n                          <div id={`custom-img-${idx}`} onClick={() => handleBackgroundSelect(idx)}></div>\n                        </div>\n                      ))}\n                    </div>\n                  </Col>\n                </Row>\n\n                <Row>\n                  <Col>\n                    <input\n                      ref={fileInputRef}\n                      type=\"file\"\n                      onChange={handleFileChange}\n                      hidden\n                      id=\"upload-background\"\n                      accept=\"image/png, image/jpeg\"\n                    />\n                    <Button\n                      onClick={handleUploadClick}\n                      disabled={customBackgrounds.length >= 3}\n                      title={customBackgrounds.length >= 3 ? \"Image number limit reached\" : \"Upload Image\"}\n                      id=\"upload-btn\">\n                      Upload Image\n                    </Button>\n                  </Col>\n                </Row>\n              </div>\n              <div className=\"video-preview\">\n                {localVideoTrack && !isVideoTrackLoading && <VideoTrack isLocal track={localVideoTrack} />}\n                <SpinnerComponent localProperty={isVideoTrackLoading} />\n              </div>\n            </div>\n          </Col>\n        </Row>\n      )}\n    </>\n  );\n}\n","import * as React from \"react\";\nimport { useAudioOutputDevices } from \"../hooks/deviceHooks\";\nimport { Form, Col, Row } from \"react-bootstrap\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport { useTracking } from \"react-tracking\";\n\nexport default function AudioOutputList() {\n  const audioOutputDevices = useAudioOutputDevices();\n  const { activeSinkId, setActiveSinkId } = useVideoContext();\n  const { trackEvent } = useTracking();\n  const device = audioOutputDevices.find((device) => device.deviceId === activeSinkId);\n  let activeOutputLabel = null;\n  if (device) {\n    activeOutputLabel = device.label;\n  }\n\n  const changeOutput = (e: any) => {\n    trackEvent({ action: \"changeAudioOutput\", output: e.target.value });\n    setActiveSinkId(e.target.value as string);\n  };\n\n  return (\n    <Row>\n      <Col>\n        <Form.Label>Audio Output</Form.Label>\n        {audioOutputDevices.length > 1 ? (\n          // @ts-ignore\n          <Form.Control as=\"select\" onChange={changeOutput} value={activeSinkId}>\n            {audioOutputDevices.map((device) => (\n              <option value={device.deviceId} key={device.deviceId}>\n                {device.label}\n              </option>\n            ))}\n          </Form.Control>\n        ) : (\n          <p>{activeOutputLabel || \"System Default Audio Output\"}</p>\n        )}\n      </Col>\n    </Row>\n  );\n}\n","import { useLocalStorage } from \"app2/src/hooks/useLocalStorage\";\nimport * as React from \"react\";\nimport { Button, Form, Modal } from \"react-bootstrap\";\nimport { LocalStorageKeys } from \"../../VideoProvider/types\";\nimport { Pipeline } from \"@twilio/video-processors\";\nimport useVideoContext from \"../../Twilio/hooks/useVideoContext/useVideoContext\";\nimport { LocalVideoTrack } from \"twilio-video\";\nimport { useTracking } from \"react-tracking\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\n\nexport const AdvancedSettings: React.FC = () => {\n  // Context\n  const {\n    room: { localParticipant },\n    localTracks,\n    getLocalVideoTrack,\n    isVideoTrackLoading,\n  } = useVideoContext();\n  const localVideoTrack = localTracks.find((track) => track.kind === \"video\") as LocalVideoTrack;\n\n  // Analytics\n  const { trackEvent } = useTracking();\n\n  // Local Storage\n  const defaultGraphicsSetting =\n    BrowserDetection.isMobileIOS() || BrowserDetection.isBrowserSafari() ? Pipeline.WebGL2 : Pipeline.Canvas2D;\n  const [graphicsSetting, setGraphicsSetting] = useLocalStorage<Pipeline.Canvas2D | Pipeline.WebGL2>(\n    LocalStorageKeys.GraphicsSetting,\n    defaultGraphicsSetting,\n  );\n  const [reduceResolution, setReduceResolution] = useLocalStorage(LocalStorageKeys.ReduceResolution, false);\n\n  // Local State\n  const [showModal, setShowModal] = React.useState(false);\n\n  // Methods\n  const open = () => setShowModal(true);\n  const close = () => setShowModal(false);\n  const replaceTrack = async () => {\n    const newTrack = await getLocalVideoTrack();\n    if (localParticipant) {\n      if (localVideoTrack) {\n        const localTrackPublication = localParticipant.unpublishTrack(localVideoTrack);\n        // TODO: remove when SDK implements this event. See: https://issues.corp.twilio.com/browse/JSDK-2592\n        localParticipant.emit(\"trackUnpublished\", localTrackPublication);\n      }\n\n      localParticipant.publishTrack(newTrack);\n    }\n  };\n  const handleGraphicSettingChange = (setting: Pipeline.Canvas2D | Pipeline.WebGL2) => {\n    trackEvent({\n      action: \"graphics setting change\",\n      graphics: setting,\n    });\n    setGraphicsSetting(setting);\n    replaceTrack();\n  };\n  const toggleReduceResolution = () => {\n    trackEvent({\n      action: \"reduce resolution change\",\n      reduceResolution: !reduceResolution,\n    });\n    setReduceResolution(!reduceResolution);\n    replaceTrack();\n  };\n\n  const labelStyles = \"text-transform-none text-black font-weight-regular\";\n\n  return (\n    <>\n      <Button variant=\"secondary\" onClick={open} size=\"sm\">\n        Advanced Settings\n      </Button>\n      <Modal\n        show={showModal}\n        onHide={close}\n        backdrop=\"static\"\n        backdropClassName=\"z-index-1060\"\n        className=\"z-index-1070\">\n        <Modal.Header>Advanced Settings</Modal.Header>\n        <Modal.Body>\n          <Form.Group controlId=\"graphics-setting\">\n            <Form.Label>Graphics</Form.Label>\n            <Form.Check type=\"radio\" id=\"graphics-webgl2\">\n              <Form.Check.Input\n                type=\"radio\"\n                checked={graphicsSetting === Pipeline.WebGL2}\n                onChange={() => handleGraphicSettingChange(Pipeline.WebGL2)}\n                disabled={isVideoTrackLoading}\n              />\n              <Form.Check.Label className={labelStyles}>WebGL2</Form.Check.Label>\n            </Form.Check>\n            <Form.Check type=\"radio\" id=\"graphics-canvas2d\">\n              <Form.Check.Input\n                type=\"radio\"\n                checked={graphicsSetting === Pipeline.Canvas2D}\n                onChange={() => handleGraphicSettingChange(Pipeline.Canvas2D)}\n                disabled={isVideoTrackLoading}\n              />\n              <Form.Check.Label className={labelStyles}>Canvas2D</Form.Check.Label>\n            </Form.Check>\n          </Form.Group>\n          <Form.Group>\n            <Form.Label>Resolution</Form.Label>\n            <Form.Check type=\"checkbox\" label=\"Reduce video output resolution\">\n              <Form.Check.Input\n                type=\"checkbox\"\n                checked={reduceResolution}\n                onChange={toggleReduceResolution}\n                disabled={isVideoTrackLoading}\n                id=\"reduce-resolution\"\n              />\n              <Form.Check.Label className={labelStyles}>Reduce input video resolution</Form.Check.Label>\n            </Form.Check>\n            <p className=\"text-small mt-2\">\n              Reducing video input resolution can greatly improve performance when using a Virtual Background\n            </p>\n          </Form.Group>\n        </Modal.Body>\n        <Modal.Footer>\n          <Button onClick={close}>Close</Button>\n        </Modal.Footer>\n      </Modal>\n    </>\n  );\n};\n\nexport default AdvancedSettings;\n","import * as React from \"react\";\nimport { useState } from \"react\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport AudioInputList from \"./components/AudioInputList\";\nimport VideoInputList from \"./components/VideoInputList\";\nimport AudioOutputList from \"./components/AudioOutputList\";\nimport { useTracking } from \"react-tracking\";\nimport AdvancedSettings from \"./components/AdvancedSettings\";\n\nexport function DeviceSelector(): JSX.Element {\n  const [isOpen, setIsOpen] = useState(false);\n  const { trackEvent } = useTracking();\n\n  const open = () => {\n    trackEvent({ action: \"config opened\" });\n    setIsOpen(true);\n  };\n\n  const close = () => {\n    trackEvent({ action: \"config closed\" });\n    setIsOpen(false);\n  };\n\n  return (\n    <>\n      <Button variant=\"light\" onClick={open} className=\"control-button\">\n        <FontAwesome name=\"cog\" size=\"lg\" />\n      </Button>\n      <Modal show={isOpen} size=\"lg\" backdrop={\"static\"} onHide={() => setIsOpen(false)}>\n        <Modal.Header closeButton>\n          <Modal.Title>\n            <h3>Configuration</h3>\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <AudioInputList />\n          <AudioOutputList />\n          <VideoInputList />\n          <AdvancedSettings />\n        </Modal.Body>\n        <Modal.Footer>\n          <Button onClick={close}>Done</Button>\n        </Modal.Footer>\n      </Modal>\n    </>\n  );\n}\n","import { useEffect, useState } from \"react\";\n\nexport default function useHeight() {\n  const [height, setHeight] = useState(window.innerHeight);\n\n  useEffect(() => {\n    const onResize = () => {\n      setHeight(window.innerHeight);\n    };\n\n    window.addEventListener(\"resize\", onResize);\n    return () => {\n      window.removeEventListener(\"resize\", onResize);\n    };\n  });\n\n  return [height + \"px\", height] as [string, number];\n}\n","import * as React from \"react\";\nimport { LocalVideoTrack } from \"twilio-video\";\nimport { Row, Col, Button } from \"react-bootstrap\";\nimport useRoomState from \"app2/src/components/Twilio/hooks/useRoomState/useRoomState\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport VideoTrack from \"app2/src/components/Twilio/components/VideoTrack\";\nimport ToggleVideoButton from \"app2/src/components/Twilio/components/ToggleVideoButton\";\nimport ToggleAudioButton from \"app2/src/components/Twilio/components/ToggleAudioButton\";\nimport Header from \"./Header\";\nimport { DeviceSelector } from \"../../DeviceSelector/DeviceSelector\";\nimport useHeight from \"app2/src/hooks/useHeight/useHeight\";\nimport { useTracking } from \"react-tracking\";\nimport SpinnerComponent from \"../../SpinnerComponent\";\n\nconst LocalVideoPreview = (props) => {\n  const { localTracks, isConnecting, connect, roomParams, joinRoom, isVideoTrackLoading } = useVideoContext();\n  const roomState = useRoomState();\n  const isReconnecting = roomState === \"reconnecting\";\n  const [height, calculated] = useHeight();\n\n  const videoTrack = localTracks.find((track) => track.name && track.name.includes(\"camera\")) as LocalVideoTrack;\n  const { trackEvent } = useTracking();\n\n  const join = async () => {\n    try {\n      const token = await joinRoom();\n      const action = roomParams.roomExists ? \"screenshare viewer connected\" : \"screenshare started\";\n      connect(token);\n      trackEvent({ action });\n    } catch {\n      // do nothing\n    }\n  };\n\n  let joinButtonMessage = \"Join Now\";\n  let titleMessage = `Join ${roomParams.roomName}`;\n  if (roomParams.host) {\n    if (roomParams.roomExists) {\n      joinButtonMessage = \"Join Existing\";\n      titleMessage = `Join Existing Room - ${roomParams.roomName}`;\n    } else {\n      joinButtonMessage = \"Start Now\";\n      titleMessage = `Start New Room - ${roomParams.roomName}`;\n    }\n  }\n\n  const videoHeight = calculated - 200 + \"px\";\n\n  return (\n    <div className=\"join-container\" style={{ height }}>\n      <Header showInvite={roomParams.host} />\n      <Row>\n        <Col md={{ span: 8, offset: 2 }}>\n          <div className=\"join-controls\">\n            <h3>{titleMessage}</h3>\n            <DeviceSelector />\n            {roomParams.audio_preference !== \"disabled\" && <ToggleAudioButton disabled={isReconnecting} />}\n            <ToggleVideoButton disabled={isReconnecting} />\n            <Button\n              variant={roomParams.roomExists ? \"danger\" : \"success\"}\n              onClick={join}\n              disabled={isConnecting || !roomParams.identity || !roomParams.roomUid}>\n              {joinButtonMessage}\n            </Button>\n          </div>\n          <div style={{ height: videoHeight }}>\n            {videoTrack ? (\n              <VideoTrack track={videoTrack} isLocal />\n            ) : isVideoTrackLoading ? (\n              <SpinnerComponent localProperty />\n            ) : null}\n          </div>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nexport default LocalVideoPreview;\n","import { useEffect, useState } from \"react\";\nimport { LocalTrackPublication, Participant, RemoteTrackPublication } from \"twilio-video\";\n\ntype TrackPublication = LocalTrackPublication | RemoteTrackPublication;\n\nexport default function usePublications(participant: Participant) {\n  const [publications, setPublications] = useState<TrackPublication[]>([]);\n\n  useEffect(() => {\n    // Reset the publications when the 'participant' variable changes.\n    setPublications(Array.from(participant.tracks.values()) as TrackPublication[]);\n\n    const publicationAdded = (publication: TrackPublication) =>\n      setPublications((prevPublications) => [...prevPublications, publication]);\n    const publicationRemoved = (publication: TrackPublication) =>\n      setPublications((prevPublications) => prevPublications.filter((p) => p !== publication));\n\n    participant.on(\"trackPublished\", publicationAdded);\n    participant.on(\"trackUnpublished\", publicationRemoved);\n    return () => {\n      participant.removeListener(\"trackPublished\", publicationAdded);\n      participant.removeListener(\"trackUnpublished\", publicationRemoved);\n    };\n  }, [participant]);\n\n  return publications;\n}\n","import { useEffect, useState } from \"react\";\nimport { LocalTrackPublication, RemoteTrackPublication } from \"twilio-video\";\n\nexport default function useTrack(publication: LocalTrackPublication | RemoteTrackPublication | undefined) {\n  const [track, setTrack] = useState(publication && publication.track);\n\n  useEffect(() => {\n    // Reset the track when the 'publication' variable changes.\n    setTrack(publication && publication.track);\n\n    if (publication) {\n      const removeTrack = () => setTrack(null);\n\n      publication.on(\"subscribed\", setTrack);\n      publication.on(\"unsubscribed\", removeTrack);\n      return () => {\n        publication.removeListener(\"subscribed\", setTrack);\n        publication.removeListener(\"unsubscribed\", removeTrack);\n      };\n    }\n  }, [publication]);\n\n  return track;\n}\n","import { useState, useEffect } from \"react\";\nimport { LocalVideoTrack, RemoteVideoTrack } from \"twilio-video\";\n\ntype TrackType = RemoteVideoTrack | LocalVideoTrack | undefined | null;\n\n// The 'switchedOff' event is emitted when there is not enough bandwidth to support\n// a track. See: https://www.twilio.com/docs/video/tutorials/using-bandwidth-profile-api#understanding-track-switch-offs\n\nexport default function useIsTrackSwitchedOff(track: TrackType) {\n  const [isSwitchedOff, setIsSwitchedOff] = useState(track && track.isSwitchedOff);\n\n  useEffect(() => {\n    // Reset the value if the 'track' variable changes\n    setIsSwitchedOff(track && track.isSwitchedOff);\n\n    if (track) {\n      const handleSwitchedOff = () => setIsSwitchedOff(true);\n      const handleSwitchedOn = () => setIsSwitchedOff(false);\n      track.on(\"switchedOff\", handleSwitchedOff);\n      track.on(\"switchedOn\", handleSwitchedOn);\n      return () => {\n        track.removeListener(\"switchedOff\", handleSwitchedOff);\n        track.removeListener(\"switchedOn\", handleSwitchedOn);\n      };\n    }\n  }, [track]);\n\n  return !!isSwitchedOff;\n}\n","import * as React from \"react\";\n\n// eslint-disable-next-line\nexport default function BandwidthWarning() {\n  return (\n    <div className=\"bandwidth-warning\">\n      <h3>Insufficient Bandwidth</h3>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nconst STEP = 3;\n\nexport default function NetworkQualityLevel({ qualityLevel }: { qualityLevel: number | null }) {\n  if (qualityLevel === null) return null;\n  return (\n    <div className=\"network-quality-level\">\n      {[0, 1, 2, 3, 4].map((level) => (\n        <div\n          key={level}\n          style={{\n            height: `${STEP * (level + 1)}px`,\n            background: qualityLevel > level ? \"#7ACC5A\" : \"#9EA1A6\",\n          }}\n        />\n      ))}\n    </div>\n  );\n}\n","import * as React from \"react\";\nimport { Participant } from \"twilio-video\";\nimport useParticipantIsReconnecting from \"app2/src/components/Twilio/hooks/useParticipantIsReconnecting/useParticipantIsReconnecting\";\n\nexport default function ParticipantConnectionIndicator({ participant }: { participant: Participant }) {\n  const isReconnecting = useParticipantIsReconnecting(participant);\n  return (\n    <span\n      className={isReconnecting ? \"connection-indicator is-reconnecting\" : \"connection-indicator\"}\n      title={isReconnecting ? \"Participant is reconnecting\" : \"Participant is connected\"}></span>\n  );\n}\n","import { useEffect, useState } from \"react\";\nimport { Participant } from \"twilio-video\";\n\nexport default function useParticipantIsReconnecting(participant: Participant) {\n  const [isReconnecting, setIsReconnecting] = useState(false);\n\n  useEffect(() => {\n    const handleReconnecting = () => setIsReconnecting(true);\n    const handleReconnected = () => setIsReconnecting(false);\n\n    participant.on(\"reconnecting\", handleReconnecting);\n    participant.on(\"reconnected\", handleReconnected);\n    return () => {\n      participant.removeListener(\"reconnecting\", handleReconnecting);\n      participant.removeListener(\"reconnected\", handleReconnected);\n    };\n  }, [participant]);\n\n  return isReconnecting;\n}\n","import * as React from \"react\";\nimport { LocalAudioTrack, LocalVideoTrack, Participant, RemoteAudioTrack, RemoteVideoTrack } from \"twilio-video\";\nimport { useSelector } from \"react-redux\";\nimport usePublications from \"app2/src/components/Twilio/hooks/usePublications/usePublications\";\nimport useParticipantNetworkQualityLevel from \"app2/src/components/Twilio/hooks/useParticipantNetworkQualityLevel/useParticipantNetworkQualityLevel\";\nimport useTrack from \"app2/src/components/Twilio/hooks/useTrack/useTrack\";\nimport useIsTrackSwitchedOff from \"app2/src/components/Twilio/hooks/useIsTrackSwitchedOff/useIsTrackSwitchedOff\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport BandwidthWarning from \"app2/src/components/Twilio/components/BandwidthWarning\";\nimport NetworkQualityLevel from \"app2/src/components/Twilio/components/NetworkQualityLevel\";\nimport AudioLevelIndicator from \"./AudioLevelIndicator\";\nimport ParticipantConnectionIndicator from \"app2/src/components/Twilio/components/ParticipantConnectionIndicator\";\nimport { screenShareService } from \"app2/src/api/screenShare.service\";\nimport { RootState } from \"app2/src/reducers\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\n\ninterface ParticipantInfoProps {\n  participant: Participant;\n  children: React.ReactNode;\n  onClick: () => void;\n  isSelected: boolean;\n  remoteParticipant: boolean;\n}\n\nexport default function ParticipantInfo({\n  participant,\n  onClick,\n  isSelected,\n  children,\n  remoteParticipant,\n}: ParticipantInfoProps) {\n  const publications = usePublications(participant);\n  const audioPublication = publications.find((p) => p.kind === \"audio\");\n  const videoPublication = publications.find((p) => p.trackName.includes(\"camera\"));\n  const networkQualityLevel = useParticipantNetworkQualityLevel(participant);\n  const isVideoEnabled = Boolean(videoPublication);\n  const isScreenShareEnabled = publications.find((p) => p.trackName === \"screen\");\n  const { roomParams } = useVideoContext();\n  const job = useSelector((state: RootState) => state.getIn([\"components\", \"common\", \"currentJob\"]));\n  const activeScreenShare = useSelector((state: RootState) =>\n    state.getIn([\"screenShares\", \"byJobId\", job.id, \"screenShare\"]),\n  );\n\n  const videoTrack = useTrack(videoPublication);\n  const isVideoSwitchedOff = useIsTrackSwitchedOff(videoTrack as LocalVideoTrack | RemoteVideoTrack);\n\n  const audioTrack = useTrack(audioPublication) as LocalAudioTrack | RemoteAudioTrack;\n\n  const identity = participant.identity.split(\" -\")[0];\n  const hostPower = roomParams.host && remoteParticipant;\n  const disconnect = () => {\n    screenShareService.removeParticipant(activeScreenShare.id, participant.sid);\n  };\n  const remoteClass = roomParams.host && remoteParticipant ? \"h4-hover\" : \"\";\n\n  return (\n    <div className={\"participant-info\"} onClick={onClick} data-cy-participant={participant.identity}>\n      <div className={isVideoEnabled ? \"info-container\" : \"info-container hide-video\"}>\n        <div className=\"info-row\">\n          {hostPower ? (\n            <ConfirmDialog title={`Are you sure you want to remove ${identity}?`}>\n              {(confirm) => {\n                return (\n                  <>\n                    <h4\n                      className={remoteClass}\n                      title={hostPower ? \"Remove Participant\" : \"\"}\n                      onClick={confirm(disconnect)}>\n                      <ParticipantConnectionIndicator participant={participant} />\n                      {identity}\n                    </h4>\n                    <NetworkQualityLevel qualityLevel={networkQualityLevel} />\n                  </>\n                );\n              }}\n            </ConfirmDialog>\n          ) : (\n            <>\n              <h4>\n                <ParticipantConnectionIndicator participant={participant} />\n                {identity}\n              </h4>\n              <NetworkQualityLevel qualityLevel={networkQualityLevel} />\n            </>\n          )}\n        </div>\n        <div>\n          <AudioLevelIndicator audioTrack={audioTrack} background=\"#BFBFBF\" />\n          {isScreenShareEnabled && <FontAwesome name=\"desktop\" />}\n          {isSelected && <FontAwesome name=\"thumb-tack\" />}\n        </div>\n      </div>\n      {isVideoSwitchedOff && <BandwidthWarning />}\n      {children}\n    </div>\n  );\n}\n","import { useEffect, useState } from \"react\";\nimport { Participant } from \"twilio-video\";\n\nexport default function useParticipantNetworkQualityLevel(participant: Participant) {\n  const [networkQualityLevel, setNetworkQualityLevel] = useState(participant.networkQualityLevel);\n\n  useEffect(() => {\n    const handleNewtorkQualityLevelChange = (newNetworkQualityLevel: number) =>\n      setNetworkQualityLevel(newNetworkQualityLevel);\n\n    setNetworkQualityLevel(participant.networkQualityLevel);\n    participant.on(\"networkQualityLevelChanged\", handleNewtorkQualityLevelChange);\n    return () => {\n      participant.removeListener(\"networkQualityLevelChanged\", handleNewtorkQualityLevelChange);\n    };\n  }, [participant]);\n\n  return networkQualityLevel;\n}\n","import { useEffect, useRef } from \"react\";\nimport { AudioTrack as IAudioTrack } from \"twilio-video\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\n\ninterface AudioTrackProps {\n  track: IAudioTrack;\n}\n\nexport default function AudioTrack({ track }: AudioTrackProps) {\n  const { activeSinkId } = useVideoContext();\n  const audioEl = useRef<HTMLAudioElement>();\n\n  useEffect(() => {\n    audioEl.current = track.attach();\n    document.body.appendChild(audioEl.current);\n    return () => track.detach().forEach((el) => el.remove());\n  }, [track]);\n\n  useEffect(() => {\n    //@ts-ignore\n    if (audioEl && audioEl.current && audioEl.current.setSinkId) {\n      //@ts-ignore\n      audioEl.current.setSinkId(activeSinkId);\n    }\n  }, [activeSinkId]);\n\n  return null;\n}\n","import * as React from \"react\";\nimport useTrack from \"app2/src/components/Twilio/hooks/useTrack/useTrack\";\nimport { IVideoTrack } from \"app2/src/components/VideoProvider/types\";\nimport VideoTrack from \"app2/src/components/Twilio/components/VideoTrack\";\nimport AudioTrack from \"app2/src/components/Twilio/components/AudioTrack\";\nimport { AudioTrack as IAudioTrack, LocalTrackPublication, RemoteTrackPublication, Track } from \"twilio-video\";\n\ninterface PublicationProps {\n  publication: LocalTrackPublication | RemoteTrackPublication;\n  isLocal: boolean;\n  disableAudio?: boolean;\n  videoPriority?: Track.Priority | null;\n}\n\nexport default function Publication({ publication, isLocal, disableAudio, videoPriority }: PublicationProps) {\n  const track = useTrack(publication);\n\n  if (!track) return null;\n\n  switch (track.kind) {\n    case \"video\":\n      return (\n        <VideoTrack\n          track={track as IVideoTrack}\n          priority={videoPriority}\n          isLocal={track.name.includes(\"camera\") && isLocal}\n        />\n      );\n    case \"audio\":\n      return disableAudio ? null : <AudioTrack track={track as IAudioTrack} />;\n    default:\n      return null;\n  }\n}\n","import * as React from \"react\";\nimport { Participant, Track } from \"twilio-video\";\nimport Publication from \"app2/src/components/Twilio/components/Publication\";\nimport usePublications from \"app2/src/components/Twilio/hooks/usePublications/usePublications\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\n\ninterface ParticipantTracksProps {\n  participant: Participant;\n  isScreenShared: boolean;\n  disableAudio?: boolean;\n  enableScreenShare?: boolean;\n  videoPriority?: Track.Priority | null;\n}\n\n/*\n *  The object model for the Room object (found here: https://www.twilio.com/docs/video/migrating-1x-2x#object-model) shows\n *  that Participant objects have TrackPublications, and TrackPublication objects have Tracks.\n *\n *  The React components in this application follow the same pattern. This ParticipantTracks component renders Publications,\n *  and the Publication component renders Tracks.\n */\n\nexport default function ParticipantTracks({\n  participant,\n  isScreenShared,\n  disableAudio,\n  enableScreenShare,\n  videoPriority,\n}: ParticipantTracksProps) {\n  const { room } = useVideoContext();\n  const publications = usePublications(participant);\n  const localPublications = usePublications(room.localParticipant);\n  const isLocal = participant === room.localParticipant;\n\n  let filteredPublications;\n  const screenSharePublication = localPublications.filter((p) => p.trackName.includes(\"screen\"))[0];\n\n  if (enableScreenShare && !isScreenShared && publications.some((p) => p.trackName === \"screen\")) {\n    filteredPublications = publications.filter((p) => !p.trackName.includes(\"camera\"));\n  } else {\n    filteredPublications = publications.filter((p) => p.trackName !== \"screen\");\n  }\n\n  return (\n    <>\n      {filteredPublications.map((publication) => (\n        <Publication\n          key={publication.kind}\n          publication={publication}\n          isLocal={isLocal}\n          disableAudio={disableAudio}\n          videoPriority={videoPriority}\n        />\n      ))}\n      {isScreenShared && screenSharePublication && (\n        <div className=\"screen-share-pip\">\n          <p>You are sharing your screen</p>\n          <Publication\n            key=\"screen-share-pip\"\n            publication={screenSharePublication}\n            isLocal={isLocal}\n            disableAudio={disableAudio}\n            videoPriority={videoPriority}\n          />\n        </div>\n      )}\n    </>\n  );\n}\n","import * as React from \"react\";\nimport { Participant as IParticipant } from \"twilio-video\";\nimport ParticipantInfo from \"app2/src/components/Twilio/components/ParticipantInfo\";\nimport ParticipantTracks from \"app2/src/components/Twilio/components/ParticipantTracks\";\n\ninterface ParticipantProps {\n  participant: IParticipant;\n  disableAudio?: boolean;\n  enableScreenShare?: boolean;\n  onClick: () => void;\n  isSelected: boolean;\n  remoteParticipant: boolean;\n}\n\nexport default function Participant({\n  participant,\n  disableAudio,\n  enableScreenShare,\n  onClick,\n  isSelected,\n  remoteParticipant,\n}: ParticipantProps) {\n  return (\n    <ParticipantInfo\n      participant={participant}\n      onClick={onClick}\n      remoteParticipant={remoteParticipant}\n      isSelected={isSelected}>\n      <ParticipantTracks\n        participant={participant}\n        disableAudio={disableAudio}\n        enableScreenShare={enableScreenShare}\n        isScreenShared={false}\n      />\n    </ParticipantInfo>\n  );\n}\n","import { useEffect, useState } from \"react\";\nimport { RemoteParticipant } from \"twilio-video\";\nimport useVideoContext from \"../useVideoContext/useVideoContext\";\nimport useSelectedParticipant from \"app2/src/components/VideoProvider/useSelectedParticipant/useSelectedParticipant\";\nimport { useTracking } from \"react-tracking\";\nimport { useNotifier } from \"app2/src/components/VideoProvider/FlashAlertContext\";\n\nexport default function useParticipants(enableMessages = true) {\n  // Hooks\n  const { trackEvent } = useTracking<any>();\n  const { room } = useVideoContext();\n  const [selectedParticipant, setSelectedParticipant] = useSelectedParticipant();\n\n  const [participants, setParticipants] = useState(Array.from(room.participants.values()));\n  const notifier = useNotifier();\n  const addMessage = (msg) => {\n    notifier(msg);\n  };\n\n  useEffect(() => {\n    const participantConnected = (participant: RemoteParticipant) => {\n      if (enableMessages) {\n        addMessage(\"Viewer Connected: \" + participant.identity.split(\" -\")[0]);\n      }\n      setParticipants((prevParticipants) => [...prevParticipants, participant]);\n      trackEvent({ action: \"screenshare viewer connected\", participant: participant?.identity });\n    };\n    const participantDisconnected = (participant: RemoteParticipant) => {\n      if (enableMessages) {\n        addMessage(\"Viewer Disconnected: \" + participant.identity.split(\" -\")[0]);\n      }\n      setParticipants((prevParticipants) => prevParticipants.filter((p) => p !== participant));\n      // @ts-ignore\n      setSelectedParticipant(selectedParticipant);\n      trackEvent({ action: \"screenshare viewer disconnected\", participant: participant?.identity });\n    };\n    room.on(\"participantConnected\", participantConnected);\n    room.on(\"participantDisconnected\", participantDisconnected);\n    return () => {\n      room.removeListener(\"participantConnected\", participantConnected);\n      room.removeListener(\"participantDisconnected\", participantDisconnected);\n    };\n  }, [room]);\n\n  return participants;\n}\n","import * as React from \"react\";\nimport Participant from \"app2/src/components/Twilio/components/Participant\";\nimport useParticipants from \"app2/src/components/Twilio/hooks/useParticipants/useParticipants\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport useSelectedParticipant from \"../../VideoProvider/useSelectedParticipant/useSelectedParticipant\";\nimport Header from \"./Header\";\n\nexport default function ParticipantStrip() {\n  const {\n    room: { localParticipant },\n    roomParams: { host },\n  } = useVideoContext();\n  const participants = useParticipants();\n  const [selectedParticipant, setSelectedParticipant] = useSelectedParticipant();\n\n  return (\n    <div className=\"participant-strip\">\n      <Header showInvite={host} />\n      <div className=\"participants\">\n        <Participant\n          participant={localParticipant}\n          isSelected={selectedParticipant === localParticipant}\n          remoteParticipant={false}\n          // @ts-ignore\n          onClick={() => setSelectedParticipant(localParticipant)}\n        />\n        {participants.map((participant) => (\n          <Participant\n            key={participant.sid}\n            participant={participant}\n            remoteParticipant={true}\n            isSelected={selectedParticipant === participant}\n            // @ts-ignore\n            onClick={() => setSelectedParticipant(participant)}\n          />\n        ))}\n      </div>\n    </div>\n  );\n}\n","import { useEffect, useState } from \"react\";\nimport useVideoContext from \"../useVideoContext/useVideoContext\";\n\nimport { Participant, TrackPublication } from \"twilio-video\";\n\n/*\n  Returns the participant that is sharing their screen (if any). This hook assumes that only one participant\n  can share their screen at a time.\n*/\nexport default function useScreenShareParticipant() {\n  const { room } = useVideoContext();\n  const [screenShareParticipant, setScreenShareParticipant] = useState<Participant>();\n\n  useEffect(() => {\n    if (room.state === \"connected\") {\n      const updateScreenShareParticipant = () => {\n        setScreenShareParticipant(\n          Array.from<Participant>(room.participants.values())\n            // the screenshare participant could be the localParticipant\n            .concat(room.localParticipant)\n            // @ts-ignore\n            .find((participant: Participant) =>\n              Array.from<TrackPublication>(participant.tracks.values()).find((track) => track.trackName === \"screen\"),\n            ),\n        );\n      };\n      updateScreenShareParticipant();\n\n      room.on(\"trackPublished\", updateScreenShareParticipant);\n      room.on(\"trackUnpublished\", updateScreenShareParticipant);\n      room.on(\"participantDisconnected\", updateScreenShareParticipant);\n\n      // the room object does not emit 'trackPublished' events for the localParticipant,\n      // so we need to listen for them here.\n      room.localParticipant.on(\"trackPublished\", updateScreenShareParticipant);\n      room.localParticipant.on(\"trackUnpublished\", updateScreenShareParticipant);\n      return () => {\n        room.removeListener(\"trackPublished\", updateScreenShareParticipant);\n        room.removeListener(\"trackUnpublished\", updateScreenShareParticipant);\n        room.removeListener(\"participantDisconnected\", updateScreenShareParticipant);\n\n        room.localParticipant.removeListener(\"trackPublished\", updateScreenShareParticipant);\n        room.localParticipant.removeListener(\"trackUnpublished\", updateScreenShareParticipant);\n      };\n    }\n  }, [room]);\n\n  return screenShareParticipant;\n}\n","import * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport useScreenShareParticipant from \"app2/src/components/Twilio/hooks/useScreenShareParticipant/useScreenShareParticipant\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\n\nexport const SCREEN_SHARE_TEXT = \"Share Screen\";\nexport const STOP_SCREEN_SHARE_TEXT = \"Stop Sharing Screen\";\nexport const SHARE_IN_PROGRESS_TEXT = \"Cannot share screen when another user is sharing\";\nexport const SHARE_NOT_SUPPORTED_TEXT = \"Screen sharing is not supported with this browser\";\n\ninterface ToggleScreenShareButtonProps {\n  screenShare: any;\n  disabled?: boolean;\n}\n\nexport default function ToggleScreenShareButton({ disabled, screenShare }: ToggleScreenShareButtonProps) {\n  const [isScreenShared, toggleScreenShare] = screenShare;\n  const screenShareParticipant = useScreenShareParticipant();\n  const { room } = useVideoContext();\n  const disableScreenShareButton = screenShareParticipant && screenShareParticipant !== room.localParticipant;\n  const isScreenShareSupported = navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia;\n  const isDisabled = disabled || disableScreenShareButton || !isScreenShareSupported;\n\n  let tooltipMessage = SCREEN_SHARE_TEXT;\n\n  if (isScreenShared) {\n    tooltipMessage = STOP_SCREEN_SHARE_TEXT;\n  }\n\n  if (disableScreenShareButton) {\n    tooltipMessage = SHARE_IN_PROGRESS_TEXT;\n  }\n\n  if (!isScreenShareSupported) {\n    tooltipMessage = SHARE_NOT_SUPPORTED_TEXT;\n  }\n\n  return (\n    <Button\n      // @ts-ignore\n      onClick={toggleScreenShare}\n      className=\"control-button\"\n      title={tooltipMessage}\n      disabled={isDisabled}>\n      {isScreenShared ? <FontAwesome name=\"stop\" size=\"lg\" /> : <FontAwesome name=\"desktop\" size=\"lg\" />}\n    </Button>\n  );\n}\n","import * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useTracking } from \"react-tracking\";\n\nexport default function EndCallButton() {\n  const { room } = useVideoContext();\n  const { trackEvent } = useTracking();\n\n  const disconnect = () => {\n    trackEvent({ action: \"screenshare hung up\" });\n    room.disconnect();\n  };\n\n  return (\n    <Button\n      title=\"End Call\"\n      variant=\"delete\"\n      className=\"control-button\"\n      // @ts-ignore\n      onClick={disconnect}>\n      <FontAwesome className=\"end-call\" name=\"phone\" size=\"lg\" />\n    </Button>\n  );\n}\n","import * as React from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport useVideoContext from \"app2/src/components/Twilio/hooks/useVideoContext/useVideoContext\";\nimport { Button } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useTracking } from \"react-tracking\";\n\nexport default function FlipCameraButton() {\n  const {\n    room: { localParticipant },\n    localTracks,\n    getLocalVideoTrack,\n  } = useVideoContext();\n  const [supportsFacingMode, setSupportsFacingMode] = React.useState<boolean | null>(null);\n  const { trackEvent } = useTracking();\n  const videoTrack = localTracks.find((track) => track.name.includes(\"camera\"));\n  let facingMode = null;\n  if (videoTrack) {\n    facingMode = videoTrack.mediaStreamTrack.getSettings().facingMode;\n  }\n\n  useEffect(() => {\n    // The \"supportsFacingMode\" variable determines if this component is rendered\n    // If \"facingMode\" exists, we will set supportsFacingMode to true.\n    // However, if facingMode is ever undefined again (when the user unpublishes video), we\n    // won\"t set \"supportsFacingMode\" to false. This prevents the icon from briefly\n    // disappearing when the user switches their front/rear camera.\n    if (facingMode && supportsFacingMode === null) {\n      setSupportsFacingMode(Boolean(facingMode));\n    }\n  }, [facingMode, supportsFacingMode]);\n\n  const toggleFacingMode = useCallback(() => {\n    const newFacingMode = facingMode === \"user\" ? \"environment\" : \"user\";\n\n    videoTrack!.stop();\n\n    getLocalVideoTrack({ facingMode: newFacingMode }).then((newVideoTrack) => {\n      if (localParticipant) {\n        const localTrackPublication = localParticipant.unpublishTrack(videoTrack!);\n        // TODO: remove when SDK implements this event. See: https://issues.corp.twilio.com/browse/JSDK-2592\n        localParticipant.emit(\"trackUnpublished\", localTrackPublication);\n\n        localParticipant.publishTrack(newVideoTrack, { priority: \"low\" });\n      }\n      trackEvent({ action: \"flip camera\", cameraDirection: newFacingMode });\n    });\n  }, [facingMode, getLocalVideoTrack, localParticipant, videoTrack]);\n\n  return supportsFacingMode ? (\n    <Button\n      // @ts-ignore\n      onClick={toggleFacingMode}\n      className=\"control-button\"\n      disabled={!videoTrack}\n      title=\"Flip Camera\">\n      <FontAwesome name=\"refresh\" size=\"lg\" />\n    </Button>\n  ) : null;\n}\n","import * as React from \"react\";\nimport useIsUserActive from \"app2/src/hooks/useIsUserActive/useIsUserActive\";\nimport ToggleAudioButton from \"app2/src/components/Twilio/components/ToggleAudioButton\";\nimport ToggleVideoButton from \"app2/src/components/Twilio/components/ToggleVideoButton\";\nimport ToggleScreenShareButton from \"app2/src/components/Twilio/components/ToggleScreenShareButton\";\nimport EndCallButton from \"app2/src/components/Twilio/components/EndCallButton\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport { DeviceSelector } from \"app2/src/components/DeviceSelector/DeviceSelector\";\nimport useRoomState from \"app2/src/components/Twilio/hooks/useRoomState/useRoomState\";\nimport FlipCameraButton from \"./FlipCameraButton\";\nimport useVideoContext from \"../hooks/useVideoContext/useVideoContext\";\n\ninterface ControlsProps {\n  screenShare: any;\n}\n\nexport default function Controls({ screenShare }: ControlsProps) {\n  const roomState = useRoomState();\n  const isReconnecting = roomState === \"reconnecting\";\n  const isUserActive = useIsUserActive();\n  const { isVideoTrackLoading } = useVideoContext();\n  const showControls = isUserActive || roomState === \"disconnected\";\n\n  return (\n    <div className={showControls ? \"controls-container show-controls\" : \"controls-container\"}>\n      <DeviceSelector />\n      <ToggleAudioButton disabled={isReconnecting} />\n      <ToggleVideoButton disabled={isReconnecting || isVideoTrackLoading} />\n      {roomState !== \"disconnected\" && (\n        <>\n          {!BrowserDetection.isBrowserMobile() ? (\n            <ToggleScreenShareButton disabled={isReconnecting} screenShare={screenShare} />\n          ) : (\n            <FlipCameraButton />\n          )}\n          <EndCallButton />\n        </>\n      )}\n    </div>\n  );\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nexport default function useIsUserActive() {\n  const [isUserActive, setIsUserActive] = useState(true);\n  const timeoutIDRef = useRef(0);\n\n  useEffect(() => {\n    const handleUserActivity = _.throttle(() => {\n      setIsUserActive(true);\n      clearTimeout(timeoutIDRef.current);\n      const timeoutID = window.setTimeout(() => setIsUserActive(false), 1500);\n      timeoutIDRef.current = timeoutID;\n    }, 500);\n\n    handleUserActivity();\n\n    window.addEventListener(\"mousemove\", handleUserActivity);\n    window.addEventListener(\"click\", handleUserActivity);\n    window.addEventListener(\"keydown\", handleUserActivity);\n    return () => {\n      window.removeEventListener(\"mousemove\", handleUserActivity);\n      window.removeEventListener(\"click\", handleUserActivity);\n      window.removeEventListener(\"keydown\", handleUserActivity);\n      clearTimeout(timeoutIDRef.current);\n    };\n  }, []);\n\n  return isUserActive;\n}\n","import * as React from \"react\";\nimport { LocalVideoTrack, Participant, RemoteVideoTrack } from \"twilio-video\";\nimport usePublications from \"app2/src/components/Twilio/hooks/usePublications/usePublications\";\nimport useTrack from \"app2/src/components/Twilio/hooks/useTrack/useTrack\";\nimport useIsTrackSwitchedOff from \"app2/src/components/Twilio/hooks/useIsTrackSwitchedOff/useIsTrackSwitchedOff\";\nimport BandwidthWarning from \"app2/src/components/Twilio/components/BandwidthWarning\";\n\ninterface MainParticipantInfoProps {\n  participant: Participant;\n  children: React.ReactNode;\n}\n\nexport default function MainParticipantInfo({ participant, children }: MainParticipantInfoProps) {\n  const publications = usePublications(participant);\n  const videoPublication = publications.find((p) => p.trackName.includes(\"camera\"));\n  const screenSharePublication = publications.find((p) => p.trackName === \"screen\");\n  const videoTrack = useTrack(screenSharePublication || videoPublication);\n  const isVideoSwitchedOff = useIsTrackSwitchedOff(videoTrack as LocalVideoTrack | RemoteVideoTrack);\n  const identity = participant.identity.split(\" -\")[0];\n\n  return (\n    <div className=\"main-participant-info\">\n      <div className=\"info-container\">\n        <div className=\"info-row\">\n          <h4>{identity}</h4>\n        </div>\n      </div>\n      {isVideoSwitchedOff && <BandwidthWarning />}\n      {children}\n    </div>\n  );\n}\n","import * as React from \"react\";\nimport useScreenShareParticipant from \"app2/src/components/Twilio/hooks/useScreenShareParticipant/useScreenShareParticipant\";\nimport useSelectedParticipant from \"../../VideoProvider/useSelectedParticipant/useSelectedParticipant\";\nimport useMainSpeaker from \"app2/src/components/Twilio/hooks/useMainSpeaker/useMainSpeaker\";\nimport MainParticipantInfo from \"app2/src/components/Twilio/components/MainParticipantInfo\";\nimport ParticipantTracks from \"./ParticipantTracks\";\nimport { Participant } from \"twilio-video\";\n\ninterface MainPartipantProps {\n  isScreenShared: boolean;\n}\n\nexport default function MainParticipant({ isScreenShared }: MainPartipantProps) {\n  const mainParticipant = useMainSpeaker() as Participant;\n  const [selectedParticipant] = useSelectedParticipant();\n  const screenShareParticipant = useScreenShareParticipant();\n\n  const videoPriority =\n    mainParticipant === selectedParticipant || mainParticipant === screenShareParticipant ? \"high\" : null;\n\n  return (\n    /* audio is disabled for this participant component because this participant's audio\n       is already being rendered in the <ParticipantStrip /> component.  */\n    <MainParticipantInfo participant={mainParticipant}>\n      <ParticipantTracks\n        participant={mainParticipant}\n        disableAudio\n        enableScreenShare\n        videoPriority={videoPriority}\n        isScreenShared={isScreenShared}\n      />\n    </MainParticipantInfo>\n  );\n}\n","import useVideoContext from \"../useVideoContext/useVideoContext\";\nimport useDominantSpeaker from \"../useDominantSpeaker/useDominantSpeaker\";\nimport useParticipants from \"../useParticipants/useParticipants\";\nimport useScreenShareParticipant from \"../useScreenShareParticipant/useScreenShareParticipant\";\nimport useSelectedParticipant from \"app2/src/components/VideoProvider/useSelectedParticipant/useSelectedParticipant\";\n\nexport default function useMainSpeaker() {\n  const [selectedParticipant] = useSelectedParticipant();\n  let screenShareParticipant = useScreenShareParticipant();\n  const dominantSpeaker = useDominantSpeaker();\n  const participants = useParticipants(false);\n  const {\n    room: { localParticipant },\n  } = useVideoContext();\n\n  if (screenShareParticipant === localParticipant) {\n    screenShareParticipant = null;\n  }\n\n  // The participant that is returned is displayed in the main video area. Changing the order of the following\n  // variables will change the how the main speaker is determined.\n  return selectedParticipant || screenShareParticipant || dominantSpeaker || participants[0] || localParticipant;\n}\n","import { useEffect, useState } from \"react\";\nimport useVideoContext from \"../useVideoContext/useVideoContext\";\nimport { RemoteParticipant } from \"twilio-video\";\n\nexport default function useDominantSpeaker() {\n  const { room } = useVideoContext();\n  const [dominantSpeaker, setDominantSpeaker] = useState(room.dominantSpeaker);\n\n  useEffect(() => {\n    // Sometimes, the 'dominantSpeakerChanged' event can emit 'null', which means that\n    // there is no dominant speaker. If we change the main participant when 'null' is\n    // emitted, the effect can be jarring to the user. Here we ignore any 'null' values\n    // and continue to display the previous dominant speaker as the main participant.\n    const handleDominantSpeakerChanged = (newDominantSpeaker: RemoteParticipant) => {\n      if (newDominantSpeaker !== null) {\n        setDominantSpeaker(newDominantSpeaker);\n      }\n    };\n\n    // Since 'null' values are ignored, we will need to listen for the 'participantDisconnected'\n    // event, so we can set the dominantSpeaker to 'null' when they disconnect.\n    const handleParticipantDisconnected = (participant: RemoteParticipant) => {\n      setDominantSpeaker((prevDominantSpeaker) => {\n        return prevDominantSpeaker === participant ? null : prevDominantSpeaker;\n      });\n    };\n\n    room.on(\"dominantSpeakerChanged\", handleDominantSpeakerChanged);\n    room.on(\"participantDisconnected\", handleParticipantDisconnected);\n    return () => {\n      room.removeListener(\"dominantSpeakerChanged\", handleDominantSpeakerChanged);\n      room.removeListener(\"participantDisconnected\", handleParticipantDisconnected);\n    };\n  }, [room]);\n\n  return dominantSpeaker;\n}\n","import * as React from \"react\";\nimport ParticipantStrip from \"./ParticipantStrip\";\nimport Controls from \"app2/src/components/Twilio/components/Controls\";\nimport MainParticipant from \"app2/src/components/Twilio/components/MainParticipant\";\nimport useHeight from \"app2/src/hooks/useHeight/useHeight\";\nimport useScreenShareToggle from \"app2/src/components/Twilio/hooks/useScreenShareToggle/useScreenShareToggle\";\n\nexport default function Room() {\n  // Here we would like the height of the main container to be the height of the viewport.\n  // On some mobile browsers, 'height: 100vh' sets the height equal to that of the screen,\n  // not the viewport. This looks bad when the mobile browsers location bar is open.\n  // We will dynamically set the height with 'window.innerHeight', which means that this\n  // will look good on mobile browsers even after the location bar opens or closes.\n  const [height] = useHeight();\n  const screenShare = useScreenShareToggle();\n  const [isScreenShared] = screenShare;\n\n  return (\n    <div className=\"room-container\" style={{ height }}>\n      <ParticipantStrip />\n      <MainParticipant isScreenShared={isScreenShared as boolean} />\n      <Controls screenShare={screenShare} />\n    </div>\n  );\n}\n","import { useState, useCallback, useRef } from \"react\";\nimport useVideoContext from \"../useVideoContext/useVideoContext\";\nimport { LogLevels, Track } from \"twilio-video\";\nimport { useTracking } from \"react-tracking\";\n\ninterface MediaStreamTrackPublishOptions {\n  name?: string;\n  priority: Track.Priority;\n  logLevel: LogLevels;\n}\n\nexport default function useScreenShareToggle() {\n  const { room, onError } = useVideoContext();\n  const [isSharing, setIsSharing] = useState(false);\n  const stopScreenShareRef = useRef<() => void>(null!);\n  const { trackEvent } = useTracking();\n\n  const shareScreen = useCallback(() => {\n    navigator.mediaDevices\n      .getDisplayMedia({\n        audio: false,\n        video: {\n          frameRate: 10,\n          height: 1080,\n          width: 1920,\n        },\n      })\n      .then((stream) => {\n        const track = stream.getTracks()[0];\n\n        // All video tracks are published with 'low' priority. This works because the video\n        // track that is displayed in the 'MainParticipant' component will have it's priority\n        // set to 'high' via track.setPriority()\n        room.localParticipant\n          .publishTrack(track, {\n            name: \"screen\", // Tracks can be named to easily find them later\n            priority: \"low\", // Priority is set to high by the subscriber when the video track is rendered\n          } as MediaStreamTrackPublishOptions)\n          .then((trackPublication) => {\n            stopScreenShareRef.current = () => {\n              room.localParticipant.unpublishTrack(track);\n              // TODO: remove this if the SDK is updated to emit this event\n              room.localParticipant.emit(\"trackUnpublished\", trackPublication);\n              track.stop();\n              setIsSharing(false);\n            };\n\n            track.onended = stopScreenShareRef.current;\n            setIsSharing(true);\n            trackEvent({ action: \"share screen started\" });\n          })\n          .catch(onError);\n      })\n      .catch((error) => {\n        // Don't display an error if the user closes the screen share dialog\n        if (error.name !== \"AbortError\" && error.name !== \"NotAllowedError\") {\n          onError(error);\n        }\n      });\n  }, [room, onError]);\n\n  const stopScreenShare = () => {\n    stopScreenShareRef.current();\n    trackEvent({ action: \"share screen stopped\" });\n  };\n\n  const toggleScreenShare = useCallback(() => {\n    !isSharing ? shareScreen() : stopScreenShare();\n  }, [isSharing, shareScreen, stopScreenShareRef]);\n\n  return [isSharing, toggleScreenShare];\n}\n","import * as React from \"react\";\nimport useRoomState from \"app2/src/components/Twilio/hooks/useRoomState/useRoomState\";\nimport LocalVideoPreview from \"app2/src/components/Twilio/components/LocalVideoPreview\";\nimport Room from \"app2/src/components/Twilio/components/Room\";\nimport { useTracking } from \"react-tracking\";\n\nexport default function Main() {\n  const roomState = useRoomState();\n  const preMeeting = roomState === \"disconnected\";\n  const { Track } = useTracking({ preMeeting });\n\n  return (\n    <Track>\n      <div className=\"video-container\">{roomState === \"disconnected\" ? <LocalVideoPreview /> : <Room />}</div>\n      {/* <ReconnectingNotification /> */}\n    </Track>\n  );\n}\n","import * as React from \"react\";\nimport { useEffect } from \"react\";\nimport { useState } from \"react\";\nimport { Modal } from \"react-bootstrap\";\n\ninterface BrowserSupportModalProps {\n  open: boolean;\n}\n\nexport const BrowserSupportModal: React.FC<BrowserSupportModalProps> = (props) => {\n  const [open, setOpen] = useState(props.open);\n\n  const show = () => {\n    setOpen(true);\n  };\n\n  const hide = () => {\n    setOpen(false);\n  };\n\n  useEffect(() => {\n    if (!open && props.open) {\n      show();\n    }\n  }, [props.open]);\n\n  return (\n    <>\n      <Modal show={open} onHide={hide} size=\"lg\">\n        <Modal.Header>\n          <h3>This Browser is Not Supported</h3>\n        </Modal.Header>\n        <Modal.Body>\n          <p>Old browsers can put your security at risk.</p>\n          <p>\n            Please look at updating to a browser such as&nbsp;\n            <a className=\"underline\" href=\"https://www.google.com/chrome/\">\n              Google Chrome\n            </a>{\" \"}\n            or&nbsp;\n            <a className=\"underline\" href=\"http://getfirefox.com\">\n              Firefox\n            </a>\n            .\n          </p>\n        </Modal.Body>\n      </Modal>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { ConnectOptions } from \"twilio-video\";\nimport { VideoProvider } from \"app2/src/components/VideoProvider/VideoProvider\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { useCallback } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Main from \"app2/src/components/Twilio/components/Main\";\nimport { BrowserDetection } from \"app2/src/helpers/BrowserDetection\";\nimport { RoomParams } from \"app2/src/components/VideoProvider/VideoProvider\";\nimport * as Video from \"twilio-video\";\nimport { BrowserSupportModal } from \"../Common/BrowserSupportModal\";\nimport { useTracking } from \"react-tracking\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { FlashAlertProvider } from \"app2/src/components/VideoProvider/FlashAlertContext\";\n\n// See: https://media.twiliocdn.com/sdk/js/video/releases/2.0.0/docs/global.html#ConnectOptions\n// for available connection options.\nconst connectionOptions: ConnectOptions = {\n  // Bandwidth Profile, Dominant Speaker, and Network Quality\n  // features are only available in Small Group or Group Rooms.\n  // Please set \"Room Type\" to \"Group\" or \"Small Group\" in your\n  // Twilio Console: https://www.twilio.com/console/video/configure\n  bandwidthProfile: {\n    video: {\n      mode: \"collaboration\",\n      dominantSpeakerPriority: \"standard\",\n      renderDimensions: {\n        high: { height: 1080, width: 1920 },\n        standard: { height: 720, width: 1280 },\n        low: { height: 90, width: 160 },\n      },\n    },\n  },\n  dominantSpeaker: true,\n  networkQuality: { local: 1, remote: 1 },\n\n  // Comment this line if you are playing music.\n  maxAudioBitrate: 16000,\n\n  // VP8 simulcast enables the media server in a Small Group or Group Room\n  // to adapt your encoded video quality for each RemoteParticipant based on\n  // their individual bandwidth constraints. This has no effect if you are\n  // using Peer-to-Peer Rooms.\n  preferredVideoCodecs: [{ codec: \"VP8\", simulcast: true }],\n};\n\n// For mobile browsers, limit the maximum incoming video bitrate to 2.5 Mbps.\nif (BrowserDetection.isBrowserMobile() && connectionOptions && connectionOptions.bandwidthProfile.video) {\n  connectionOptions!.bandwidthProfile!.video!.maxSubscriptionBitrate = 2500000;\n}\n\ninterface TwilioAppProps {\n  roomParams: RoomParams;\n  joinRoom(): Promise<string>;\n  leaveRoom(): void;\n}\n\nexport default function TwilioApp(props: TwilioAppProps) {\n  const { roomParams, joinRoom, leaveRoom } = props;\n  const dispatch = useDispatch();\n  const addFlashMessage = useCallback(\n    (level: FlashLevels, message: string) => dispatch(commonActions.Actions.flashAddAlert(level, message)),\n    [dispatch],\n  );\n  const notifier = (msg: string) => dispatch(commonActions.AsyncActions.notifierAddRemoteMessage(msg));\n  const job: JobRecord = useSelector(currentJob);\n  const { Track } = useTracking(\n    {\n      category: \"Job Header\",\n      kind: \"premium\",\n      host: roomParams.host,\n      identity: roomParams.identity,\n      roomName: roomParams.roomName,\n      roomUid: roomParams.roomUid,\n      audioPreference: roomParams.audio_preference,\n      job: job?.id,\n      org: job?.org_id,\n    },\n    { dispatch: Dispatch.dispatch },\n  );\n\n  const setError = (error) => {\n    addFlashMessage(FlashLevels.danger, `${error.code} - ${error.message}`);\n  };\n\n  return (\n    <Track>\n      <BrowserSupportModal open={!Video.isSupported} />\n      <FlashAlertProvider\n        flashAlert={addFlashMessage as any as (level: string, message: string) => void}\n        notifier={notifier}>\n        <VideoProvider\n          options={connectionOptions}\n          roomParams={roomParams}\n          joinRoom={joinRoom}\n          onError={setError}\n          onDisconnect={leaveRoom}>\n          <Main />\n        </VideoProvider>\n      </FlashAlertProvider>\n    </Track>\n  );\n}\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport * as screenShareActions from \"app2/src/reducers/screenShare.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { UserRecord } from \"app2/src/records/UserRecord\";\nimport { IScreenShareData, ScreenShareRecord } from \"app2/src/records/ScreenShare\";\nimport TwilioApp from \"app2/src/components/Twilio/TwilioApp\";\nimport { RoomParams } from \"app2/src/components/VideoProvider/VideoProvider\";\nimport { getPrefConfig } from \"app2/src/records/OrgRecord\";\nimport { ScreenShareKindValues, ScreenShareStatusValues } from \"app2/src/reducers/screenShare.reducer\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: HostProps) => {\n  const job = state.getIn([\"components\", \"common\", \"currentJob\"], null);\n  return {\n    user: denormalizedReduxUser(state),\n    job: job,\n    activeScreenShare: state.getIn([\"screenShares\", \"byJobId\", job.id, \"screenShare\"]),\n    screenShareKind: state.getIn([\"screenShares\", \"byJobId\", job.id, \"screenShareKind\"]),\n    screenShareStatus: state.getIn([\"screenShares\", \"byJobId\", job.id, \"screenShareStatus\"]),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: HostProps) => {\n  return {\n    joinOrAddScreenShareRoom: (jobId: number, roomParams: RoomParams) =>\n      dispatch(screenShareActions.AsyncActions.joinOrAddScreenShareRoom(jobId, roomParams)),\n    setRemoteScreenShareStatus: (jobId: number, status: ScreenShareStatusValues) => {\n      dispatch(screenShareActions.AsyncActions.setRemoteScreenShareStatus(jobId, status));\n    },\n    notifierAddRemoteMessage: (msg) => dispatch(commonActions.AsyncActions.notifierAddRemoteMessage(msg)),\n    addFlashMessage: (level: FlashLevels, message: string) =>\n      dispatch(commonActions.Actions.flashAddAlert(level, message)),\n    getJob: (id: number) => dispatch(jobActions.AsyncActions.getJob(id)),\n    setCurrentJob: (job: JobRecord) => dispatch(commonActions.Actions.setJob(job)),\n    setCurrentJobId: (id: number) => dispatch(jobActions.Actions.setCurrentJobId(id)),\n    getRoomStatus: (uid) => dispatch(screenShareActions.AsyncActions.getRoomStatus(uid)),\n    saveScreenShareStop: (jobId: number, screenShareId: number) =>\n      dispatch(screenShareActions.AsyncActions.saveScreenShareStop(jobId, screenShareId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface HostProps {\n  jobId: string;\n}\n\ninterface HostState {\n  stateReady: boolean;\n  roomParams: RoomParams;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & HostProps;\n\nclass Host extends React.Component<Props, HostState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      stateReady: false,\n      roomParams: {\n        roomName: \"\",\n        roomUid: \"\",\n        identity: \"\",\n        host: true,\n        audio_preference: \"enabled\",\n        roomExists: false,\n      },\n    };\n    window.addEventListener(\"beforeunload\", (e) => {\n      if (this.props.screenShareKind === \"premium\") {\n        this.props.setRemoteScreenShareStatus(this.props.job.id, \"off\");\n      }\n    });\n\n    this.joinRoom = this.joinRoom.bind(this);\n    this.leaveRoom = this.leaveRoom.bind(this);\n  }\n\n  public async componentDidMount() {\n    const { getJob, setCurrentJob, setCurrentJobId, getRoomStatus } = this.props;\n    const job = await getJob(parseInt(this.props.jobId));\n    setCurrentJob(job);\n    setCurrentJobId(job.id);\n    const status = await getRoomStatus(job.uid);\n    this.setState((state) => ({\n      stateReady: state.stateReady,\n      roomParams: {\n        ...state.roomParams,\n        roomExists: status,\n      },\n    }));\n  }\n\n  public componentDidUpdate(prevProps) {\n    const { user, job, setRemoteScreenShareStatus, screenShareStatus } = this.props;\n    if (!user || !job || user.id === 0 || job.id === 0) {\n      return;\n    }\n\n    if (\n      _.includes([\"start_requested\", \"active\", \"tab_opened\"], prevProps.screenShareStatus) &&\n      screenShareStatus === \"stop_requested\"\n    ) {\n      this.leaveRoom().then(() => {\n        window.close();\n      });\n    }\n\n    this.setState((state) => {\n      if (state.stateReady) {\n        return;\n      }\n      setRemoteScreenShareStatus(job.id, \"tab_opened\");\n      return {\n        stateReady: true,\n        roomParams: {\n          roomName: job.name,\n          roomUid: job.uid,\n          identity: `${user.first_name} ${user.last_name}`,\n          host: true,\n          audio_preference: getPrefConfig(user.org, [\"screen_share\", \"host_audio\"]),\n          roomExists: state.roomParams.roomExists,\n        },\n      };\n    });\n  }\n\n  public async joinRoom() {\n    const { setRemoteScreenShareStatus, job, joinOrAddScreenShareRoom, notifierAddRemoteMessage } = this.props;\n    const { roomParams } = this.state;\n    notifierAddRemoteMessage(\"Premium Screen Sharing Started\");\n    setRemoteScreenShareStatus(job.id, \"active\");\n\n    return await joinOrAddScreenShareRoom(job.id, roomParams);\n  }\n\n  public async leaveRoom() {\n    const { activeScreenShare, saveScreenShareStop, setRemoteScreenShareStatus, notifierAddRemoteMessage, job } =\n      this.props;\n\n    if (activeScreenShare && !activeScreenShare.loading && activeScreenShare.id > 0) {\n      await saveScreenShareStop(job.id, activeScreenShare.id);\n      notifierAddRemoteMessage(\"Premium Screen Sharing Stopped\");\n      setRemoteScreenShareStatus(job.id, \"off\");\n    }\n  }\n\n  public render() {\n    const { jobId } = this.props;\n    const { stateReady, roomParams } = this.state;\n    if (!stateReady) {\n      return <Spinner localProperty={true} />;\n    }\n\n    return (\n      <Spinner stateProperty={[\"jobs\", \"byId\", parseInt(jobId), \"loading\"]}>\n        <TwilioApp roomParams={roomParams} joinRoom={this.joinRoom} leaveRoom={this.leaveRoom} />\n      </Spinner>\n    );\n  }\n}\n\nexport default connector(Host);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as screenShareActions from \"app2/src/reducers/screenShare.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { IScreenShare } from \"app/src/Models/ScreenShare\";\nimport { RoomParams } from \"app2/src/components/VideoProvider/VideoProvider\";\nimport TwilioApp from \"app2/src/components/Twilio/TwilioApp\";\n\nconst mapStateToProps = (state: RootState, ownProps: AttendeeProps) => {\n  return {};\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: AttendeeProps) => {\n  return {\n    addFlashMessage: (level: FlashLevels, message: string) =>\n      dispatch(commonActions.Actions.flashAddAlert(level, message)),\n    getToken: (room, identity) =>\n      dispatch(\n        screenShareActions.AsyncActions.getToken({\n          room: room,\n          identity: identity,\n        }),\n      ),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface AttendeeProps {\n  jobUid: string;\n  screenShare: IScreenShare;\n}\n\ninterface AttendeeState {\n  roomParams: RoomParams;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & AttendeeProps;\n\nclass Attendee extends React.Component<Props, AttendeeState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.joinRoom = this.joinRoom.bind(this);\n    this.state = {\n      roomParams: {\n        roomName: props.screenShare.metadata.room_name,\n        roomUid: props.jobUid,\n        identity: props.screenShare.metadata.identity,\n        host: false,\n        audio_preference: props.screenShare.metadata.attendee_audio,\n        roomExists: false,\n      },\n    };\n  }\n\n  public async joinRoom() {\n    const { getToken, jobUid } = this.props;\n    const { roomParams } = this.state;\n    const token = await getToken(jobUid, `${roomParams.identity} - ${Math.random()}`);\n    return token;\n  }\n\n  public leaveRoom() {}\n\n  public render() {\n    const { roomParams } = this.state;\n\n    return <TwilioApp roomParams={roomParams} joinRoom={this.joinRoom} leaveRoom={this.leaveRoom} />;\n  }\n}\n\nexport default connector(Attendee);\n","import { ISession, Actions } from \"app/src/Common/SessionService\";\nimport { IUser } from \"app/src/Models/User\";\nimport { IOrgResource, IOrg } from \"app/src/Models/Org\";\nimport { IFlash, FlashLevels } from \"app/src/Common/FlashService\";\nimport { ICalendarResource, ICalendarResponse } from \"app/src/Models/Calendar\";\n// noinspection TypeScriptUnresolvedVariable\nimport Calendar = kendo.ui.Calendar;\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IImage, IImageResource } from \"../Models/Image\";\nimport { includes as userIncludes } from \"app2/src/api/user.service\";\nimport { IDirtyMerge, IDirtyWatcher } from \"app/src/Common/DirtyWatcher\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { IUserPreference } from \"app/src/Models/UserPreference\";\n\nexport class ProfileCtrl implements IDirtyMerge {\n  public spinnerPromise: ng.IPromise<any>;\n  public user: IUser;\n  public preferences: IUserPreference;\n  public org: IOrg;\n  public calendarResponse: ICalendarResponse;\n  public stripeData: any;\n  public cronofyUrl: string;\n  public readOnlyOrg = true;\n  public showUserTab = true;\n  public jobListViewValues: any = [\n    { id: true, text: \"Card View\" },\n    { id: false, text: \"List View\" },\n  ];\n  public showEstimatorTourValues: any = [\n    { id: true, text: \"Enabled\" },\n    { id: false, text: \"Disabled\" },\n  ];\n\n  public notificationError = false;\n  private _orgIncludes: string[] = [\"address\", \"settings\", \"preferences\"];\n  private _originalState: any;\n\n  public static $inject = [\n    \"Session\",\n    \"Org\",\n    \"Calendar\",\n    \"Flash\",\n    \"StripeCheckout\",\n    \"$stateParams\",\n    \"$state\",\n    \"$http\",\n    \"$q\",\n    \"BaseConfig\",\n    \"US_STATES\",\n    \"COUNTRIES\",\n    \"Repository\",\n    \"Upload\",\n    \"$analytics\",\n    \"Image\",\n    \"DirtyWatcher\",\n    \"$scope\",\n  ];\n  constructor(\n    public Session: ISession,\n    public OrgResource: IOrgResource,\n    public CalendarResource: ICalendarResource,\n    public Flash: IFlash,\n    public StripeCheckout: ng.stripe.IStripeCheckoutService,\n    public $stateParams: ng.ui.IStateParamsService,\n    public $state: ng.ui.IStateService,\n    public $http: ng.IHttpService,\n    private $q: ng.IQService,\n    public BaseConfig: IBaseConfig,\n    public US_STATES: string[],\n    public COUNTRIES: string[],\n    public Repository: IRepository,\n    private Upload: ng.angularFileUpload.IUploadService,\n    protected $analytics: angulartics.IAnalyticsService,\n    private Image: IImageResource,\n    private DirtyWatcher: IDirtyWatcher,\n    private $scope: ng.IScope,\n  ) {\n    this.spinnerPromise = Session.currentUser.$promise.then(() => {\n      this.user = Repository.User.fromJSON(Session.currentUser);\n      delete this.user.org;\n      this.user.accesses = [];\n      this.calendarResponse = <ICalendarResponse>CalendarResource.query();\n      this.org = Session.currentUser.org;\n      Session.can(Actions.update, \"org\", this.org).then((permission) => {\n        if (permission) {\n          this.readOnlyOrg = false;\n        }\n      });\n\n      this.$http.get(BaseConfig.BASE_URL + \"/auth/cronofy_url\").then((response: any) => {\n        this.cronofyUrl = response.data.url;\n      });\n\n      return Session.preferences.$promise.then(() => {\n        this.preferences = Repository.UserPreference.fromJSON(this.Session.preferences);\n        if (!this.preferences.config.notifications.email) {\n          this.preferences.config.notifications.email = this.user.email;\n        }\n        this.resetFormState();\n      });\n    });\n\n    this.updateUserNotifications = this.updateUserNotifications.bind(this);\n    this.setNotificationError = this.setNotificationError.bind(this);\n    if (!$stateParams[\"authUser\"]) {\n      DirtyWatcher.setup($scope, this);\n    }\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public tabSelected(tab) {\n    if (tab === \"User Tab\") {\n      this.showUserTab = true;\n    } else {\n      this.showUserTab = false;\n    }\n  }\n\n  public setNotificationError(value: boolean) {\n    this.notificationError = value;\n    this.$scope.$digest();\n  }\n\n  public userTabSelected() {\n    return this.showUserTab;\n  }\n\n  public deleteImage(image: IImage) {\n    this.spinnerPromise = this.Image.delete({\n      id: image.id,\n      imageable_id: image.imageable_id,\n      imageable_type_url: \"orgs\",\n    })\n      .$promise.then(() => {\n        this.Flash.addMessage(FlashLevels.success, \"Logo deleted successfully.\");\n        this.org.images = _.filter(this.org.images, (i: IImage) => {\n          return image.id !== i.id;\n        });\n        this.trackEvent(\"delete_logo\", {\n          category: \"OrgProfile\",\n          logoId: image.id,\n        });\n      })\n      .catch(() => {\n        this.Flash.addMessage(FlashLevels.danger, \"There were problems deleting the image\");\n      });\n  }\n\n  public upload(file, invalidFiles) {\n    if (!file) {\n      if (invalidFiles.length > 0) {\n        this.Flash.addMessage(\n          FlashLevels.warning,\n          \"Invalid file: \" + invalidFiles[0].name + \".  Only image file types are allowed.\",\n        );\n      }\n      return;\n    }\n    this.spinnerPromise = this.Upload.upload(<ng.angularFileUpload.IFileUploadConfigFile>{\n      url: this.BaseConfig.BASE_URL + \"/api/v1/orgs/\" + this.org.id + \"/images\",\n      data: { image: { file: file } },\n    }).then(\n      (resp: any) => {\n        const img: IImage = this.Image.fromJSON(resp.data.image);\n        this.org.images.push(img);\n        this.Flash.addMessage(FlashLevels.success, \"Logo added successfully.\");\n        this.trackEvent(\"upload_logo\", {\n          category: \"OrgInfo\",\n        });\n      },\n      () => {\n        this.Flash.addMessage(FlashLevels.danger, \"There were problems uploading the logo\");\n      },\n    );\n  }\n\n  public trackEvent(action, props): void {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        org: this.org.id,\n      }),\n    );\n  }\n\n  public updateUserNotifications(type, name, value) {\n    if (type === \"user\") {\n      if (name === \"phone\") {\n        this.preferences.sms_number.number = value;\n      } else if (name === \"email\") {\n        this.preferences.config.notifications[\"email\"] = value;\n      }\n    } else if (value) {\n      if (name === \"all\") {\n        this.preferences.config.notifications[type] = [\n          \"job_created\",\n          \"lead_created\",\n          \"customer_photo_uploaded\",\n          \"signed_document_signed\",\n          \"signable_documents_signed\",\n          \"job_reassigned\",\n          \"payment_receipt\",\n          \"payment_refund\",\n        ];\n      } else {\n        this.preferences.config.notifications[type].push(name);\n      }\n    } else {\n      if (name === \"all\") {\n        this.preferences.config.notifications[type] = [];\n      } else {\n        this.preferences.config.notifications[type] = this.preferences.config.notifications[type].filter(\n          (n) => n !== name,\n        );\n      }\n    }\n    this.$scope.$digest();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public saveUserForm(form: ng.IFormController) {\n    if (!form.$valid) {\n      return;\n    }\n\n    this.Session.preferences = this.Repository.UserPreference.fromJSON(this.preferences);\n    const promises = [];\n    promises.push(this.Session.savePreference());\n    promises.push(this.user.$saveOrCreate({ \"include[]\": userIncludes }));\n    this.spinnerPromise = this.$q.all(promises);\n    this.spinnerPromise\n      .then(() => {\n        this.resetFormState();\n        this.Flash.addMessage(FlashLevels.success, \"User successfully saved!\");\n      })\n      .catch(() => {\n        this.Flash.addMessage(FlashLevels.danger, \"There were problems saving the User!\");\n      });\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public syncEvents(calendar) {\n    this.spinnerPromise = calendar.$syncEvents();\n\n    this.spinnerPromise.then(() => {\n      this.Flash.addMessage(FlashLevels.success, \"Full event sync started.\");\n    });\n  }\n\n  public saveCalendarForm(form: ng.IFormController) {\n    if (form.$pristine) {\n      return;\n    }\n\n    const promises = [];\n\n    _.each(form, (v: any, k: any) => {\n      if (k[0] === \"$\" || v.$pristine) {\n        return;\n      }\n\n      const calendar = _.find(this.calendarResponse.calendars, (cal) => {\n        return cal.id === parseInt(k);\n      });\n\n      if (!calendar) {\n        return;\n      }\n\n      promises.push(calendar.$save());\n    });\n\n    this.spinnerPromise = this.$q.all(promises);\n    this.spinnerPromise.then(() => {\n      form.$setPristine();\n    });\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  public saveOrgForm(form: ng.IFormController) {\n    if (!form.$valid) {\n      return;\n    }\n\n    this.spinnerPromise = this.org\n      .$saveOrCreate({ \"include[]\": this._orgIncludes })\n      .then(() => {\n        this.Flash.addMessage(FlashLevels.success, \"Org successfully saved!\");\n      })\n      .catch(() => {\n        this.Flash.addMessage(FlashLevels.danger, \"There were problems saving the Org!\");\n      });\n  }\n\n  public resetFormState() {\n    this._originalState = this.combinedToJson();\n  }\n\n  public combinedToJson() {\n    return angular.toJson(this.user) + angular.toJson(this.preferences);\n  }\n\n  public reset(): ng.IPromise<any> {\n    this.preferences = this.Repository.UserPreference.fromJSON(this.Session.preferences);\n    this.user = this.Repository.User.fromJSON(this.Session.currentUser);\n    this.resetFormState();\n    const resetDefer = this.$q.defer();\n    resetDefer.resolve(true);\n    return resetDefer.promise;\n  }\n\n  public check(): boolean {\n    if (this.notificationError) {\n      return false;\n    }\n    return this._originalState !== this.combinedToJson();\n  }\n}\n","import { IUserResource } from \"app/src/Models/User\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\n\nexport class AcceptTosCtrl {\n  public static $inject = [\"User\", \"Session\", \"$state\", \"BaseConfig\"];\n  constructor(\n    public User: IUserResource,\n    public Session: ISession,\n    public $state: ng.ui.IStateService,\n    public BaseConfig: IBaseConfig,\n  ) {}\n\n  public ok() {\n    this.User.save({ id: this.Session.currentUser.id }, { accepted_tos: true }, () => {\n      this.$state.go(this.BaseConfig.DEFAULT_ROUTE);\n    });\n  }\n\n  public cancel() {\n    this.User.save({ id: this.Session.currentUser.id }, { accepted_tos: false }, () => {\n      this.$state.go(\"root.logout\");\n    });\n  }\n}\n","import { IUserResource } from \"../Models/User\";\nimport { ISession } from \"../Common/SessionService\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\n\nexport class AlertCtrl {\n  public static $inject = [\"User\", \"Session\", \"$state\", \"BaseConfig\"];\n  constructor(\n    public User: IUserResource,\n    public Session: ISession,\n    public $state: ng.ui.IStateService,\n    public BaseConfig: IBaseConfig,\n  ) {}\n\n  public cancel() {\n    this.$state.go(\"root.logout\");\n  }\n}\n","import { IUserResource } from \"../Models/User\";\nimport { ISession } from \"../Common/SessionService\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\n\nexport class ErrorCtrl {\n  public static $inject = [\"User\", \"Session\", \"$state\", \"BaseConfig\"];\n  /* eslint-disable @typescript-eslint/naming-convention */\n  constructor(\n    public User: IUserResource,\n    public Session: ISession,\n    public $state: ng.ui.IStateService,\n    public BaseConfig: IBaseConfig,\n  ) {}\n  /* eslint-enable @typescript-eslint/naming-convention */\n\n  public cancel(): any {\n    this.$state.go(this.BaseConfig.DEFAULT_ROUTE);\n  }\n}\n","import * as React from \"react\";\nimport track from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Jumbotron, Container, Button, Row, Col } from \"react-bootstrap\";\nimport { currentUserAccesses, currentUser } from \"app2/src/selectors/access.selectors\";\nimport { CustomLink } from \"app2/src/components/Common/CustomLink\";\nimport { Actions as commonactions } from \"app2/src/reducers/components/common.actions\";\nimport { LocationStateRecord } from \"app2/src/records/LocationState\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\nexport const mapStateToProps = (state: RootState, ownProps: PermissionsErrorPageProps) => {\n  return {\n    hasMultipleAccesses: (currentUser(state)?.accesses_count || 0) > 1,\n    currentSavedLocationState: state.getIn([\"components\", \"common\", \"savedLocationState\"]),\n  };\n};\n\nexport const mapDispatchToProps = (\n  dispatch: ThunkDispatch<RootState, undefined, RootActions>,\n  ownProps: PermissionsErrorPageProps,\n) => {\n  return {\n    clearSavedLocationState: () => dispatch(commonactions.setSavedLocationState(null)),\n    setSavedLocationState: (location: LocationStateRecord) => dispatch(commonactions.setSavedLocationState(location)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface PermissionsErrorPageProps {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & PermissionsErrorPageProps;\n\nexport interface PermissionsErrorPageState {\n  savedLocation: LocationStateRecord;\n}\n\n@track(\n  () => {\n    return {\n      category: \"Permissions Error Page\",\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n    dispatchOnMount: false,\n  },\n)\nexport class PermissionsErrorPage extends React.Component<Props, PermissionsErrorPageState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      savedLocation: props.currentSavedLocationState,\n    };\n\n    this.withMultipleAccesses = this.withMultipleAccesses.bind(this);\n    this.withSingleAccess = this.withSingleAccess.bind(this);\n    this.setSaveLocation = this.setSaveLocation.bind(this);\n    this.homeClicked = this.homeClicked.bind(this);\n  }\n\n  public componentDidMount(): void {\n    const { clearSavedLocationState } = this.props;\n\n    clearSavedLocationState();\n  }\n\n  public render(): JSX.Element {\n    const { hasMultipleAccesses } = this.props;\n    return (\n      <Container>\n        <Jumbotron>{hasMultipleAccesses ? this.withMultipleAccesses() : this.withSingleAccess()}</Jumbotron>\n      </Container>\n    );\n  }\n\n  protected withMultipleAccesses(): JSX.Element {\n    const $state = StoreRegistry.get<ng.ui.IStateService>(\"$state\");\n\n    return (\n      <Row>\n        <Col sm={12} data-testid=\"error-message\" className=\"text-center\">\n          Sorry, the requested resource does not exist or you do not have permission to view.\n        </Col>\n        <Col sm={12} className=\"text-center\">\n          Request access through a different Organization:&nbsp;\n          <CustomLink\n            data-testid=\"chooser-btn\"\n            tag={Button}\n            variant=\"primary\"\n            to={$state.href(\"root.accesses\")}\n            onClickCapture={this.setSaveLocation}>\n            Choose Organization\n          </CustomLink>\n        </Col>\n        <Col sm={12} className=\"text-center\">\n          <CustomLink\n            data-testid=\"home-btn\"\n            tag={Button}\n            variant=\"cancel\"\n            to={$state.href(\"root.job_list\")}\n            onClickCapture={this.homeClicked}>\n            Go Home\n          </CustomLink>\n        </Col>\n      </Row>\n    );\n  }\n\n  protected withSingleAccess(): JSX.Element {\n    return (\n      <>\n        <Row>\n          <Col sm={12} data-testid=\"error-message\" className=\"text-center\">\n            Sorry, the requested resource does not exist.\n          </Col>\n        </Row>\n        <Row>\n          <Col sm={12} className=\"text-center\">\n            <CustomLink data-testid=\"home-btn\" tag={Button} to=\"/\" onClickCapture={this.homeClicked}>\n              Go Home\n            </CustomLink>\n          </Col>\n        </Row>\n      </>\n    );\n  }\n\n  @track({ action: \"Choosing Organization\" })\n  protected setSaveLocation(): void {\n    const { setSavedLocationState } = this.props;\n    const { savedLocation } = this.state;\n    setSavedLocationState(savedLocation);\n  }\n\n  @track({ action: \"Go Home\" })\n  protected homeClicked(): void {}\n}\n\nexport default connector(PermissionsErrorPage);\n","import * as React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { ITaskData } from \"app2/src/records/Task\";\n\nconst mapStateToProps = (state: RootState, ownProps: ListProps) => {\n  const tasksById = state.getIn([\"tasks\", \"byId\"]);\n  let tasks = List();\n\n  tasksById.map((task) => {\n    tasks = tasks.push(task);\n  });\n\n  return {\n    tasks: tasks,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ListProps) => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ListProps {}\n\nexport interface ListState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ListProps;\n\nclass ListComponent extends React.Component<Props, ListState> {\n  constructor(props: Props) {\n    super(props);\n  }\n\n  public render() {\n    return (\n      <Row>\n        <Col md={12}>\n          <Row>\n            <Col md={6}>\n              <h1>Tasks</h1>\n            </Col>\n            <Col md={6}></Col>\n          </Row>\n          {this.renderHeader()}\n          {this.renderBody()}\n        </Col>\n      </Row>\n    );\n  }\n\n  private renderHeader() {\n    return (\n      <Row>\n        <Col lg={{ span: 10, offset: 1 }} md={{ span: 12, offset: 0 }}>\n          <div className=\"match-form-section\">\n            <Row className=\"match-table-header\">\n              <Col md={6}>Name</Col>\n              <Col md={6}>Progress</Col>\n            </Row>\n          </div>\n        </Col>\n      </Row>\n    );\n  }\n\n  private renderBody() {\n    const { tasks } = this.props;\n\n    return (\n      <React.Fragment>\n        {tasks.map((task, idx) => {\n          return (\n            <Row key={idx}>\n              <Col lg={{ span: 10, offset: 1 }} md={{ span: 12, offset: 0 }}>\n                <div className=\"match-form-section\">{this.renderTask(task)}</div>\n              </Col>\n            </Row>\n          );\n        })}\n      </React.Fragment>\n    );\n  }\n\n  private renderTask(task) {\n    const status = task.status || \"loading\";\n    let progress = status.charAt(0).toUpperCase() + status.slice(1);\n    let name = task.id;\n\n    if (!_.isUndefined(task.results)) {\n      if (task.results.progress && task.results.total && task.results.progress_string) {\n        progress += `: ${task.results.progress} / ${task.results.total} - ${\n          task.results.progress_string.substring(0, 29) || 0\n        }`;\n      }\n\n      if (task.results.class_name) {\n        name = task.results.class_name;\n      }\n\n      if (task.results.product && task.results.product.name) {\n        name += ` - ${task.results.product.name}`;\n      }\n\n      if (task.results.form_data && task.results.form_data.parent_name) {\n        name += ` >> ${task.results.form_data.parent_name}`;\n      }\n    }\n\n    return (\n      <Row className=\"match-table-body\">\n        <Col md={6}>{name}</Col>\n        <Col md={6}>\n          {task.status === \"error\" && task.results && task.results.error_message ? (\n            <span>Error: {task.results.error_message}</span>\n          ) : (\n            progress\n          )}\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(ListComponent);\n","import * as React from \"react\";\nimport { Row, Col, Form } from \"react-bootstrap\";\nimport { List } from \"immutable\";\nimport * as config from \"react-global-configuration\";\nimport { IUserPreference } from \"app/src/Models/UserPreference\";\nimport { IUser } from \"app/src/Models/User\";\nimport { validatePhoneNumber, validateEmail } from \"app2/src/helpers/InputValidator\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport track from \"react-tracking\";\nimport { getContractName, OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { currentUserOrg } from \"app2/src/selectors/user.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect } from \"app2/src/connect\";\n\ninterface NotificationsProps {\n  user: IUser;\n  userPreferences: IUserPreference;\n  updateUserNotifications: any;\n  setNotificationError: (value: boolean) => void;\n  org: OrgRecord;\n}\ninterface NotificationsState {\n  validPhone: boolean;\n  validEmail: boolean;\n}\n\n@track(\n  (props) => {\n    return {\n      category: \"Profile\",\n      component: \"Notifications\",\n      user: props.user.id,\n    };\n  },\n  {\n    dispatch: (data) => Dispatch.dispatch(data),\n    dispatchOnMount: (cd) => ({ action: \"shown\" }),\n  },\n)\nclass Notifications extends React.Component<NotificationsProps, NotificationsState> {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      validPhone: true,\n      validEmail: true,\n    };\n\n    this.notificationOnChange = this.notificationOnChange.bind(this);\n  }\n\n  public notificationOnChange(type, name, value) {\n    const { updateUserNotifications, setNotificationError } = this.props;\n    updateUserNotifications(type, name, value);\n    if (name === \"phone\") {\n      const validPhone = validatePhoneNumber(value);\n      setNotificationError(!validPhone);\n      this.setState({ validPhone });\n    } else if (name === \"email\") {\n      const validEmail = validateEmail(value);\n      setNotificationError(!validEmail);\n      this.setState({ validEmail });\n    }\n    this.forceUpdate();\n  }\n\n  public renderCheckboxes(type) {\n    const { userPreferences, org } = this.props;\n\n    const options = [\n      \"job_created\",\n      \"customer_photo_uploaded\",\n      \"signed_document_signed\",\n      \"signable_documents_signed\",\n      \"job_reassigned\",\n      \"payment_receipt\",\n      \"payment_refund\",\n    ];\n    const labels = [\n      \"Job Created\",\n      \"Customer Photo Uploaded\",\n      `Signed Document (${getContractName(org)})`,\n      \"Signable Documents\",\n      \"Job Reassigned\",\n      \"Payment Receipts\",\n      \"Payment Refunds\",\n    ];\n    const existingOptions = List(userPreferences.config.notifications[type]);\n\n    return (\n      <React.Fragment>\n        <React.Fragment>\n          <Form.Check\n            className=\"notification-checkbox\"\n            type=\"checkbox\"\n            label=\"Select All\"\n            checked={existingOptions.size === 7}\n            onChange={(e) => this.notificationOnChange(type, \"all\", e.target.checked)}\n          />\n          <br />\n        </React.Fragment>\n\n        {options.map((option, index) => (\n          <React.Fragment key={index}>\n            <Form.Check\n              className=\"notification-checkbox\"\n              type=\"checkbox\"\n              label={labels[index]}\n              checked={existingOptions.size === 7 || existingOptions.includes(option)}\n              onChange={(e) => this.notificationOnChange(type, option, e.target.checked)}\n            />\n            {option === \"all\" && <br />}\n          </React.Fragment>\n        ))}\n      </React.Fragment>\n    );\n  }\n\n  public render() {\n    const { userPreferences } = this.props;\n    const { validPhone, validEmail } = this.state;\n\n    if (!userPreferences) {\n      return <React.Fragment></React.Fragment>;\n    }\n\n    const smsNumber = userPreferences.sms_number;\n    const phoneOptions = List(userPreferences.config.notifications.via_sms);\n\n    return (\n      <div className=\"form-section\">\n        <div className=\"form-section-heading\">\n          <Row>\n            <Col md={12}>\n              <h2>Notifications</h2>\n            </Col>\n          </Row>\n        </div>\n        <div className=\"form-section-content\">\n          <Row>\n            <Col md={12}>\n              <p>\n                <strong>\n                  You will receive notifications at the email address provided by your account administrator. You can\n                  change your preferences at any time by following the instructions provided below.\n                </strong>\n              </p>\n            </Col>\n          </Row>\n          <br />\n          <Row>\n            <Col md={4}>\n              <Form.Group>\n                <Form.Label>Mobile Number</Form.Label>\n                <Form.Control\n                  type=\"text\"\n                  id=\"notification-phone\"\n                  placeholder=\"Mobile Number\"\n                  defaultValue={smsNumber.number}\n                  onChange={(e) => this.notificationOnChange(\"user\", \"phone\", e.target.value)}\n                />\n                {!validPhone && <span className=\"has-error\">Please enter a valid phone number.</span>}\n                {smsNumber.status !== \"subscribed\" && phoneOptions.size > 0 && (\n                  <div className=\"has-error\">\n                    You have opted-out of receiving notification texts by previously replying “STOP” to a notification\n                    text message. If you would like to resubscribe, reply “UNSTOP” to{\" \"}\n                    <a href={`sms:${config.get(\"TWILIO_NUMBER\")}`}>{config.get(\"TWILIO_NUMBER\")}</a>.\n                  </div>\n                )}\n              </Form.Group>\n            </Col>\n            <Col md={2}></Col>\n            <Col md={4}>\n              <Form.Group>\n                <Form.Label>Email</Form.Label>\n                <Form.Control\n                  type=\"text\"\n                  id=\"notification-email\"\n                  placeholder=\"Email\"\n                  defaultValue={userPreferences.config.notifications.email}\n                  onChange={(e) => this.notificationOnChange(\"user\", \"email\", e.target.value)}\n                />\n                {!validEmail && <span className=\"has-error\">Please enter a valid email.</span>}\n              </Form.Group>\n            </Col>\n          </Row>\n\n          <Row>\n            <Col md={4}>\n              <h4>Send me these notifications by text:</h4>\n              {this.renderCheckboxes(\"via_sms\")}\n            </Col>\n            <Col md={2}></Col>\n            <Col md={4}>\n              <h4>Send me these notifications by email:</h4>\n              {this.renderCheckboxes(\"via_email\")}\n            </Col>\n          </Row>\n          <br />\n          <Row>\n            <Col md={4}>\n              <p>\n                By entering a mobile number, checking the notifications by text box and clicking SAVE, you consent to\n                receiving notifications via automated text messages to the mobile phone number you provided above. Your\n                consent to these communications is not required for any purchase. Message frequency for notifications\n                varies. Message and data rates may apply. Reply “STOP” to a notification text or uncheck the\n                notifications box above and click SAVE to end notification texts.\n              </p>\n              <br />\n              <p>\n                If you opt-out of receiving notification texts by replying “STOP” to a notification text message and you\n                would like to resubscribe, reply “UNSTOP”.\n              </p>\n              <br />\n              <p>\n                If you opt-out of receiving notification texts by unchecking the notifications box above and you would\n                like to subscribe again, enter your mobile number, check the notifications box and click SAVE.\n              </p>\n            </Col>\n            <Col md={2}></Col>\n            <Col md={4}>\n              <p>\n                To update the email address where you receive notifications or to resubscribe after opting-out, enter\n                your email address, check the notifications by email box and click SAVE. To stop receiving notifications\n                by email, uncheck the notifications box above and click SAVE or click the unsubscribe link in any\n                notification email.\n              </p>\n            </Col>\n          </Row>\n        </div>\n      </div>\n    );\n  }\n}\n\nconst mapStateToProps = (state: RootState) => {\n  const org = currentUserOrg(state);\n  return { org };\n};\n\nconst connector = connect(mapStateToProps);\n\nexport default connector(Notifications);\n","import * as React from \"react\";\nimport track from \"react-tracking\";\nimport { Button } from \"react-bootstrap\";\n\ninterface ClearWorkersButtonProps {}\n\ninterface ClearWorkersButtonState {}\n\n@track(() => ({\n  component: \"ClearWorkersButton\",\n}))\nexport default class ClearWorkersButton extends React.Component<ClearWorkersButtonProps, ClearWorkersButtonState> {\n  constructor(props: ClearWorkersButtonProps) {\n    super(props);\n\n    this.clearWorkers = this.clearWorkers.bind(this);\n  }\n\n  @track(() => ({\n    action: \"clear workers\",\n  }))\n  public async clearWorkers(): Promise<void> {\n    const registrations = await navigator.serviceWorker.getRegistrations();\n\n    registrations.forEach((registration) => {\n      registration.unregister();\n    });\n\n    const cacheNames = await caches.keys();\n    cacheNames.forEach((cacheName) => {\n      caches.delete(cacheName);\n    });\n\n    window.location.reload();\n  }\n  public render(): React.ReactNode {\n    return (\n      <Button variant=\"danger\" onClick={this.clearWorkers}>\n        Clear Workers And Reload\n      </Button>\n    );\n  }\n}\n","import { ISession } from \"app/src/Common/SessionService\";\nimport { StoreRegistry, dispatch } from \"app2/src/storeRegistry\";\nimport * as authActions from \"app2/src/reducers/auth.actions\";\n\nexport interface IInterceptableHttpResponse<T> extends ng.IHttpResponse<T> {\n  intercepted: boolean;\n}\n\nexport class AuthHttpInterceptor implements ng.IHttpInterceptor {\n  private inRecovery = false;\n  private recoveryPromise: ng.IPromise<any>;\n\n  constructor(\n    private $q: ng.IQService,\n    private $injector: ng.auto.IInjectorService,\n  ) {}\n\n  public responseError = (rejection: any): ng.IPromise<any> => {\n    if ((rejection.status === 401 || rejection.status === 419) && !rejection.config.intercepted) {\n      const $state = this.$injector.get(\"$state\") as ng.ui.IStateService;\n      if (\n        $state.current &&\n        ($state.current.abstract || ($state.current.resolve && $state.current.resolve.hasOwnProperty(\"auth\") !== false))\n      ) {\n        let promise: ng.IPromise<any>;\n        const $http: ng.IHttpService = this.$injector.get(\"$http\");\n        const session = this.$injector.get(\"Session\") as ISession;\n\n        if (this.inRecovery) {\n          promise = this.recoveryPromise.then(() => {\n            rejection.config.headers[\"Authorization\"] = $http.defaults.headers.common.Authorization;\n            return $http(rejection.config);\n          });\n        } else {\n          this.inRecovery = true;\n\n          this.recoveryPromise = session.refreshToken();\n          promise = this.recoveryPromise\n            .then(\n              () => {\n                rejection.config.headers[\"Authorization\"] = $http.defaults.headers.common.Authorization;\n                // noinspection TypeScriptUnresolvedVariable\n                rejection.config.intercepted = true;\n                return $http(rejection.config);\n              },\n              () => {\n                $state.go(StoreRegistry.get<any>(\"authService\").getLoginRoute());\n                return this.$q.reject(rejection);\n              },\n            )\n            .catch((errors) => {\n              console.error(\"Recovery Catch\", errors);\n              this.inRecovery = false;\n              dispatch(authActions.Actions.setRefreshTokenExpired(true));\n              return this.$q.reject(rejection);\n            })\n            .finally(() => {\n              this.inRecovery = false;\n            });\n        }\n\n        return promise;\n      }\n    }\n    return this.$q.reject(rejection);\n  };\n\n  public static factory($q: ng.IQService, $injector: ng.auto.IInjectorService): AuthHttpInterceptor {\n    return new AuthHttpInterceptor($q, $injector);\n  }\n}\n\nAuthHttpInterceptor.factory.$inject = [\"$q\", \"$injector\"];\n","export class FakeFormAction implements ng.IDirective {\n  public restrict = \"A\";\n  public link = (s, e, a) => {\n    e.attr(\"action\", \"\");\n  };\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = () => new FakeFormAction();\n    directive.$inject = [];\n    return directive;\n  }\n}\n","import { ISignedDocumentRecipientResource, ISignedDocumentRecipient } from \"app/src/Models/SignedDocumentRecipient\";\n\nexport class SignatureRedirectCtrl {\n  public recipient: ISignedDocumentRecipient;\n  public signatureUrlSignNow: string;\n  public signatureUrlRightSignature: string;\n\n  public static $inject = [\"$stateParams\", \"SignedDocumentRecipient\", \"$sce\", \"$window\"];\n  constructor(\n    public $stateParams: ng.ui.IStateParamsService,\n    public SignedDocumentRecipient: ISignedDocumentRecipientResource,\n    public $sce: ng.ISCEService,\n    public $window: ng.IWindowService,\n  ) {\n    this.recipient = this.SignedDocumentRecipient.sign({ key: $stateParams[\"id\"] });\n    this.recipient.$promise.then(() => {\n      // Really old documents (Sign Now) might not pass this if statement. Mark said to ignore it.\n      if ((this.recipient?.rs_url || \"\").indexOf(\"remotesf.com\") > 0) {\n        $window.location.href = this.recipient.rs_url;\n      }\n    });\n  }\n}\n","export class SignatureSignCtrl {\n  public guid: string;\n  public static $inject = [\"$state\"];\n  constructor(public $state: ng.ui.IStateService) {}\n\n  public gotoSignature() {\n    this.$state.go(\"signature_redirect\", { id: this.guid });\n  }\n}\n","export class SignatureSignedCtrl {}\n","import { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport * as moment from \"moment\";\nimport { IOrg, OrgPrefType } from \"app/src/Models/Org\";\nimport { ISignatureSettings, ISigner } from \"app/src/Models/SignatureSettings\";\nimport { IDocResource } from \"app/src/Models/Doc\";\nimport { IFlash, FlashLevels } from \"app/src/Common/FlashService\";\nimport { ISignedDocument, ISignedDocumentResource } from \"../Models/SignedDocument\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { emailRegex } from \"app2/src/helpers/InputValidator\";\n\ninterface ISignContractBindings {\n  estimateId: number;\n  triggerSigning: boolean;\n  onCancel(): void;\n  onFinish(params: any): void;\n}\n\ninterface ISignatureContractScope extends ng.IScope {\n  pdfUrl: string;\n}\n\nclass SignatureSetupCtrl implements ISignContractBindings {\n  public signForm: ng.IFormController;\n  public estimateId: number;\n  public estimate: IEstimate;\n  public org: IOrg;\n  public triggerSigning = false;\n  public onCancel: () => any;\n  public onFinish: (params: any) => any;\n  public pdfUrl: string;\n  public modalWindow: ng.ui.bootstrap.IModalServiceInstance;\n  public signatureSettings: ISignatureSettings = <ISignatureSettings>{};\n  public modalOpen = false;\n  public emailPdfModal: boolean;\n  public disabledFeatures = [\"Annotations\"];\n  public emailPattern = emailRegex;\n\n  private submitted = false;\n  private file: any;\n  private loadingPromise: ng.IDeferred<any>;\n\n  constructor(\n    public EstimatorService: EstimatorService,\n    public SignedDocument: ISignedDocumentResource,\n    public Doc: IDocResource,\n    public Upload: ng.angularFileUpload.IUploadService,\n    public BaseConfig: IBaseConfig,\n    public $q: ng.IQService,\n    public $timeout: ng.ITimeoutService,\n    public $http: ng.IHttpService,\n    public Flash: IFlash,\n    public $uibModal: ng.ui.bootstrap.IModalService,\n    public $scope: ISignatureContractScope,\n  ) {\n    this.loadingPromise = $q.defer();\n  }\n\n  public $onChanges() {\n    if (!this.estimate && (this.estimateId >= 0 || (this.estimateId as any as string) === \"new\")) {\n      this.submitted = false;\n      this.estimate = this.EstimatorService.loadEstimate(this.estimateId);\n\n      this.estimate.$promise.then(() => {\n        this.org = this.EstimatorService.org;\n        this.EstimatorService.generatePdf(this.estimate.id, \"contract\").then((data: any) => {\n          this.file = data.response;\n          this.pdfUrl = URL.createObjectURL(data.response);\n          this.validateUniqueNames(this.signForm);\n          this.loadingPromise.resolve();\n        });\n      });\n    } else {\n      if (this.triggerSigning) {\n        this.triggerSigning = false;\n        this.modalOpen = true;\n        this.sign();\n      }\n    }\n  }\n\n  public $onDestroy() {\n    if (this.loadingPromise) {\n      this.loadingPromise.resolve();\n    }\n  }\n\n  public cancelBtn() {\n    this.modalOpen = false;\n    this.modalWindow.dismiss();\n  }\n\n  public cancel() {\n    if (this.onCancel && !this.submitted) {\n      this.modalOpen = false;\n      this.onCancel();\n    }\n  }\n\n  public sign() {\n    if (_.isUndefined(this.org.settings) || _.isEmpty(this.org.settings)) {\n      this.loadingPromise = this.$q.defer();\n      this.estimate = this.EstimatorService.reloadEstimate(this.estimate.id);\n      this.estimate.$promise.then(() => {\n        this.org = this.estimate.job.org;\n        return this.loadingPromise.resolve();\n      });\n    }\n\n    this.loadingPromise.promise.then(() => {\n      this.signatureSettings = this.org.fetchPref<ISignatureSettings>(OrgPrefType.signature_settings);\n      this.signatureSettings.buildRecipients(this.estimate);\n\n      this.modalWindow = this.$uibModal.open(<ng.ui.bootstrap.IModalSettings>{\n        size: \"lg\",\n        templateUrl: \"src/Signature/signature_settings_modal.html\",\n        scope: this.$scope,\n      });\n\n      this.modalWindow.closed.then(() => {\n        this.cancel();\n      });\n    });\n  }\n\n  public upload(form: ng.IFormController, notify = false) {\n    if (!form.$valid) {\n      return;\n    }\n\n    const platform = this.org.settings.config?.signature_settings?.signature_platform || \"scribble\";\n\n    this.loadingPromise = this.$q.defer();\n    this.Upload.upload(<ng.angularFileUpload.IFileUploadConfigFile>{\n      url: this.BaseConfig.BASE_URL + `/api/v1/estimates/${this.estimate.id}/signed_documents`,\n      arrayKey: \"[]\",\n      data: {\n        include: [\"document\", \"recipients\"],\n        notify: notify,\n        document: {\n          name:\n            this.estimate.job.name +\n            \" - \" +\n            moment().format(\"MM-DD-Y HH:mm:ss\") +\n            \" - \" +\n            this.org.contractTitle(false) +\n            \".pdf\",\n          file: this.file,\n        },\n        signed_document: {\n          platform: platform,\n          recipients_attributes: _.select(this.signatureSettings.recipients, (recipient: ISigner) => {\n            return recipient.required || recipient.include;\n          }),\n        },\n      },\n    })\n      .then(\n        (resp: any) => {\n          this.submitted = true;\n          this.Flash.addMessage(FlashLevels.info, \"Signed Document uploaded.  Processing...\");\n          const sd: ISignedDocument = this.SignedDocument.fromJSON(resp.data.signed_document);\n          sd.document = this.Doc.fromJSON(sd.document);\n          this.onFinish({ signedDocument: sd, notify: notify });\n        },\n        () => {\n          this.Flash.addMessage(FlashLevels.danger, \"There were problems creating the Signed Document\");\n        },\n      )\n      .finally(() => {\n        this.modalOpen = false;\n        this.modalWindow.close();\n        this.loadingPromise.resolve();\n      });\n  }\n\n  public validateUniqueNames(form: ng.IFormController) {\n    _.each(this.signatureSettings.recipients, (recipient: any, index: number) => {\n      if (!recipient.required && !recipient.include) {\n        form[\"name_\" + index].$setValidity(\"duplicate\", true);\n        return;\n      }\n\n      const match: number = _.findIndex(this.signatureSettings.recipients, (nested) => {\n        if (!nested.required && !nested.include) {\n          return;\n        }\n        return nested.name === recipient.name;\n      });\n\n      if (match < index) {\n        form[\"name_\" + index].$setValidity(\"duplicate\", false);\n      } else {\n        form[\"name_\" + index].$setValidity(\"duplicate\", true);\n      }\n    });\n  }\n\n  public isBrowserMs() {\n    if (\n      /MSIE 10/i.test(navigator.userAgent) ||\n      /MSIE 9/i.test(navigator.userAgent) ||\n      /rv:11.0/i.test(navigator.userAgent) ||\n      /Edge\\/\\d./i.test(navigator.userAgent)\n    ) {\n      // This is internet explorer 9, 10, 11 or Edge\n      return true;\n    }\n\n    return false;\n  }\n}\n\nexport class SignatureSetupComponent implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    estimateId: \"<\",\n    triggerSigning: \"<\",\n    emailPdfModal: \"<\",\n    onCancel: \"&\",\n    onFinish: \"&\",\n  };\n  public templateUrl = \"src/Signature/signature_setup.html\";\n\n  constructor() {\n    this.controller = SignatureSetupCtrl;\n    this.controller.$inject = [\n      \"EstimatorService\",\n      \"SignedDocument\",\n      \"Doc\",\n      \"Upload\",\n      \"BaseConfig\",\n      \"$q\",\n      \"$timeout\",\n      \"$http\",\n      \"Flash\",\n      \"$uibModal\",\n      \"$scope\",\n    ];\n  }\n}\n","import { ISignedDocumentRecipient, ISignedDocumentRecipientResource } from \"../Models/SignedDocumentRecipient\";\nimport { ISignedDocument, ISignedDocumentResource } from \"../Models/SignedDocument\";\nimport { IPretty } from \"../Common/PrettyNameService\";\nimport { FlashLevels, IFlash } from \"../Common/FlashService\";\nimport { IOrg } from \"../Models/Org\";\n\nclass SignatureNotificationCtrl implements ng.IComponentController {\n  public signedDocument: ISignedDocument;\n  public org: IOrg;\n  public resolve: any;\n  protected windowRef: any;\n\n  public static $inject = [\"$window\", \"Pretty\", \"SignedDocument\", \"SignedDocumentRecipient\", \"Flash\"];\n  constructor(\n    protected $window: ng.IWindowService,\n    public Pretty: IPretty,\n    protected SignedDocument: ISignedDocumentResource,\n    protected SignedDocumentRecipient: ISignedDocumentRecipientResource,\n    protected Flash: IFlash,\n  ) {}\n\n  public $onInit() {\n    this.signedDocument = this.resolve.signedDocument;\n    this.org = this.resolve.org;\n\n    if (_.isFunction(this.signedDocument.$get)) {\n      this.signedDocument.$get({ \"include[]\": [\"document\", \"recipients\"] });\n    } else {\n      this.signedDocument = this.SignedDocument.get({\n        id: this.signedDocument.id,\n        \"include[]\": [\"document\", \"recipients\"],\n      });\n    }\n  }\n\n  public signOnscreen(recipient: ISignedDocumentRecipient) {\n    this.windowRef = this.$window.open(\"\", \"_blank\");\n    this.redirectToSign(recipient);\n  }\n\n  public email(recipient: ISignedDocumentRecipient) {\n    this.signedDocument.$email({ \"recipients[]\": [recipient.id] }).then(() => {\n      this.Flash.addMessage(FlashLevels.success, \"Signature Document successfully sent.\");\n    });\n  }\n\n  public emailAll() {\n    this.signedDocument.$email().then(() => {\n      this.Flash.addMessage(FlashLevels.success, \"Signature Document successfully sent.\");\n    });\n  }\n\n  private redirectToSign(recipient: ISignedDocumentRecipient) {\n    recipient.status = \"viewed\";\n    this.resolve.signedDocument.status = \"viewed\";\n    this.windowRef.location = recipient.rs_url as any;\n    this.windowRef = null;\n  }\n}\n\nexport class SignatureNotificationComponent implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    resolve: \"<\",\n    close: \"&\",\n    dismiss: \"&\",\n  };\n  public templateUrl = \"src/Signature/signature_notification.html\";\n\n  constructor() {\n    this.controller = SignatureNotificationCtrl;\n  }\n}\n","class SpinnerCtrl {\n  public promise: ng.IPromise<any>;\n  public show: boolean;\n  private _savedPromise: ng.IPromise<any>;\n\n  constructor() {}\n\n  public $onChanges() {\n    if (this.promise && this.promise !== this._savedPromise) {\n      this.show = true;\n      this.promise.finally(() => {\n        this.show = false;\n      });\n    }\n  }\n}\n\nexport class SpinnerComponent implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    promise: \"<\",\n    show: \"<\",\n  };\n  public templateUrl = \"src/Common/spinner.html\";\n\n  constructor() {\n    this.controller = SpinnerCtrl;\n    this.controller.$inject = [];\n  }\n}\n","export class EmbedSrc implements ng.IDirective {\n  public restrict = \"A\";\n\n  constructor() {}\n\n  public link = (scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes) => {\n    let current: ng.IAugmentedJQuery = element;\n    scope.$watch(\n      () => attrs[\"embedSrc\"],\n      () => {\n        const clone: ng.IAugmentedJQuery = <ng.IAugmentedJQuery>element.clone().attr(\"src\", attrs[\"embedSrc\"]);\n        current.replaceWith(clone);\n        current = clone;\n      },\n    );\n  };\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = () => new EmbedSrc();\n    directive.$inject = [];\n    return directive;\n  }\n}\n","export interface IConfirmDialog {\n  confirm(msg: string, options?: any);\n}\n\nexport class ConfirmDialogService implements IConfirmDialog {\n  public static $inject = [\"$uibModal\"];\n  constructor(public $uibModal: ng.ui.bootstrap.IModalService) {}\n\n  public confirm(msg: string, options: any = {}) {\n    let body = options.body || \"\";\n    if (options.body) {\n      body = '<div class=\"modal-body\"><p>{{body}}</p></div>';\n    }\n    const defaultOptions = {\n      /* tslint:disable:quotemark */\n      template:\n        \"\" +\n        '<div class=\"modal-header confirm-modal\">' +\n        '<h3 class=\"modal-title description\">{{msg}}</h3>' +\n        '<button type=\"button\" class=\"close\" aria-label=\"Close\" ng-click=\"$dismiss(false)\">' +\n        '<span aria-hidden=\"true\">&times;</span>' +\n        \"</button>\" +\n        \"</div>\" +\n        \"{{body}}\" +\n        '<div class=\"modal-footer\">' +\n        '<button class=\"btn btn-default\" type=\"button\" ng-click=\"$close()\">OK</button>' +\n        '<button class=\"btn btn-cancel\" type=\"button\" ng-click=\"$dismiss(false)\">Cancel</button>' +\n        \"</div>\",\n      size: \"sm\",\n      windowClass: \"on-top-modal\",\n      controller: [\n        \"$scope\",\n        function ($scope) {\n          $scope.msg = msg;\n        },\n      ],\n    };\n    return this.$uibModal.open($.extend({}, defaultOptions, options)).result;\n  }\n}\n","import { IOrg } from \"app/src/Models/Org\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IAccess {\n  id: number;\n  user: IUser;\n  user_id: number;\n  org: IOrg;\n  org_id: number;\n  billable: string;\n  acl: any;\n  template: string;\n}\n\nexport interface IUser extends ng.resource.IResource<IUser>, UserPrototype {\n  $saveOrCreate(...args: any[]): ng.IPromise<IUser>;\n}\n\nexport interface IUserResource extends ng.resource.IResourceClass<IUser>, IRsfResource {\n  inject(injected: IRepository): void;\n  check?(params: any): any;\n  fromJSON?(data: any): IUser;\n  generatePassword(): string;\n  placeholderEmail(org_name: string, index: number): string;\n}\n\nexport interface IUserResponse extends ng.resource.IResourceArray<IUser> {\n  users: IUser[];\n  meta: any;\n}\n\nlet resources: IRepository;\n\nclass UserPrototype {\n  public id: number;\n  public uuid: string;\n  public org_id: number;\n  public preferences_id: number;\n  public accesses: IAccess[];\n  public first_name: string;\n  public last_name: string;\n  public email: string;\n  public phone: string;\n  public time_zone: string;\n  public password?: string;\n  public template?: string;\n  public acl?: any;\n  public billable?: string;\n  public permissions: any;\n  public org?: IOrg;\n  public acl_edited?: boolean;\n\n  public name(): string {\n    let name = \"\";\n    //noinspection TypeScriptUnresolvedVariable\n    if (this.first_name) {\n      //noinspection TypeScriptUnresolvedVariable\n      name = this.first_name + \" \";\n    }\n\n    // noinspection TypeScriptUnresolvedVariable\n    if (this.last_name) {\n      //noinspection TypeScriptUnresolvedVariable\n      name += this.last_name;\n    }\n\n    return name.trim();\n  }\n\n  public $saveOrCreate(params, callback): ng.IPromise<IUser> {\n    if (!this.id || this.id <= 0 || (this.id as any as string) === \"Unsaved\") {\n      return (this as any).$create(params, callback);\n    } else {\n      return (this as any).$save(params, callback);\n    }\n  }\n\n  public accessAtOrg(org: IOrg): IAccess {\n    const access: IAccess = _.find(this.accesses, (a: IAccess) => {\n      return org.id === a.org_id;\n    });\n\n    return access ? access : <IAccess>{};\n  }\n}\n\nconst factory = ($http: ng.IHttpService, $resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/users/:id\";\n\n  const transformSingle = (response: string, headers: ng.IHttpHeadersGetter, status: number): IUser => {\n    if (status < 200 || status >= 300) {\n      return JSON.parse(response);\n    }\n\n    return User.fromJSON(JSON.parse(response).user);\n  };\n\n  const responseMultiTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const data = JSON.parse(response);\n    _.each(data.users, (user, index) => {\n      data.users[index] = User.fromJSON(user);\n    });\n\n    return data;\n  };\n\n  const transformRequest = (user: IUser): string => {\n    const data = JSON.parse(angular.toJson(user));\n\n    data.accesses_attributes = data.accesses.map((access) => {\n      if (access.id <= 0) {\n        delete access.id;\n      }\n      return access;\n    });\n    delete data.accesses;\n\n    if (data.acl_edited || data.template === \"custom\") {\n      data.acl = data.permissions;\n    } else {\n      delete data.acl;\n    }\n\n    return angular.toJson({ user: data });\n  };\n\n  const User: IUserResource = <IUserResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle /**/,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: transformRequest,\n        transformResponse: transformSingle,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: transformSingle,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        transformResponse: responseMultiTransform,\n        isArray: false,\n      },\n      check: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/check\",\n      },\n    },\n  );\n\n  User.fromJSON = (data: any) => {\n    const user: IUser = new User(data);\n\n    if (user.org) {\n      user.org = resources.Org.fromJSON(user.org);\n    }\n\n    return user;\n  };\n\n  User.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  User.generatePassword = (): string => {\n    const length = 8;\n    const charset = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n    const charsetLength = charset.length;\n    let password = \"\";\n\n    for (let i = 0; i < length; ++i) {\n      password += charset.charAt(Math.floor(Math.random() * charsetLength));\n    }\n\n    return password;\n  };\n\n  User.placeholderEmail = (org_name, index): string => {\n    let emailPlaceholder = \"placeholder+\";\n    emailPlaceholder += org_name.replace(/\\W/g, \"\").toLowerCase();\n    emailPlaceholder += Math.floor(Math.random() * 100);\n    emailPlaceholder += index + \"@oneclickcontractor.com\";\n    return emailPlaceholder;\n  };\n\n  hiddenExtend(User.prototype, UserPrototype.prototype);\n\n  return User;\n};\n\nfactory.$inject = [\"$http\", \"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IRepository, IRsfResource } from \"../../src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { AddressKind } from \"app2/src/records/Address\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IAddress extends ng.resource.IResource<IAddress>, AddressPrototype {}\n\nexport interface IAddressResource extends ng.resource.IResourceClass<IAddress>, IRsfResource {\n  fromJSON?(data: any): IAddress;\n}\n\nclass AddressPrototype {\n  public id: number;\n  public kind: AddressKind;\n  public description: string;\n  public addressable_id: number;\n  public addressable_type: string;\n  public line_1: string;\n  public line_2: string;\n  public city: string;\n  public state: string;\n  public postal_code: string;\n  public country: string;\n  public lat: number;\n  public lon: number;\n  public administrative_area_level_2: string;\n  public administrative_area_level_3: string;\n\n  public created_at: Date;\n  public updated_at: Date;\n\n  public stateRequired() {\n    if (this.line_1 || this.line_2 || this.city || this.postal_code || this.country) {\n      if (\n        !_.isEmpty(this.line_1?.trim()) ||\n        !_.isEmpty(this.line_2?.trim()) ||\n        !_.isEmpty(this.city?.trim()) ||\n        !_.isEmpty(this.postal_code?.trim()) ||\n        !_.isEmpty(this.country?.trim())\n      ) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  public cityStateZip() {\n    let addr = \"\";\n\n    if (this.city) {\n      addr = addr + \" \" + this.city;\n    }\n    if (this.state) {\n      addr = addr + \", \" + this.state;\n    }\n    if (this.postal_code) {\n      addr = addr + \" \" + this.postal_code;\n    }\n\n    return addr.trim();\n  }\n\n  public fullAddress() {\n    let addr = \"\";\n\n    if (this.line_1) {\n      addr = addr + \" \" + this.line_1;\n    }\n    if (this.line_2) {\n      addr = addr + \" \" + this.line_2;\n    }\n    if (this.city) {\n      addr = addr + \" \" + this.city;\n    }\n    if (this.state) {\n      addr = addr + \", \" + this.state;\n    }\n    if (this.postal_code) {\n      addr = addr + \" \" + this.postal_code;\n    }\n    if (this.country) {\n      addr = addr + \" \" + this.country;\n    }\n\n    return addr.trim();\n  }\n\n  public zillowAddress() {\n    let addr = \"\";\n\n    if (this.line_1) {\n      addr = addr + \"-\" + this.line_1.split(\" \").join(\"-\");\n      addr = addr.split(\",\").join(\"\");\n    }\n    if (this.line_2) {\n      addr = addr + \"-\" + this.line_2;\n    }\n    if (this.city) {\n      addr = addr + \"-\" + this.city;\n    }\n    if (this.state) {\n      addr = addr + \"-\" + this.state;\n    }\n    if (this.postal_code) {\n      addr = addr + \"-\" + this.postal_code;\n    }\n\n    if (addr !== \"\") {\n      addr = addr + \"_rb\";\n    }\n\n    return addr.trim().substr(1);\n  }\n\n  public copyGooglePlace(place, latlon = true) {\n    const cmpts: any = {};\n    _.each(place.address_components, (addr1: any) => {\n      _.each(addr1.types, (type: any) => {\n        cmpts[type] = addr1.long_name;\n      });\n    });\n    this.line_1 = cmpts.street_number + \" \" + cmpts.route;\n    this.line_2 = \"\";\n    this.city = cmpts.locality;\n    this.state = cmpts.administrative_area_level_1;\n    this.postal_code = cmpts.postal_code;\n    this.country = cmpts.country;\n    if (latlon) {\n      this.lat = place.geometry.location.lat();\n      this.lon = place.geometry.location.lng();\n    }\n  }\n\n  public location(latLngLiteral = false) {\n    if (this.lat && this.lon) {\n      if (latLngLiteral) {\n        return { lat: this.lat, lng: this.lon };\n      } else {\n        return [this.lat, this.lon];\n      }\n    } else {\n      return this.fullAddress();\n    }\n  }\n\n  public isValid() {\n    if (this.line_1 && this.city && this.state) {\n      if (!_.isEmpty(this.line_1.trim()) && !_.isEmpty(this.city.trim()) && !_.isEmpty(this.state.trim())) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  public isValidLatLon() {\n    if (this.lat && this.lon) {\n      return this.lat >= -90 && this.lat <= 90 && this.lon >= -180 && this.lon <= 180;\n    }\n\n    return false;\n  }\n\n  public clone(): IAddress {\n    return new resources.Address({\n      id: this.id,\n      kind: this.kind,\n      addressable_id: this.addressable_id,\n      addressable_type: this.addressable_type,\n      description: this.description,\n      line_1: this.line_1,\n      line_2: this.line_2,\n      city: this.city,\n      state: this.state,\n      postal_code: this.postal_code,\n      country: this.country,\n      lat: this.lat,\n      lon: this.lon,\n      created_at: this.created_at,\n      updated_at: this.updated_at,\n    });\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/addresses/:id\";\n\n  const Address: IAddressResource = <IAddressResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return new Address({});\n          }\n\n          const data = JSON.parse(response).estimate;\n          data.created_at = new Date(data.created_at as string);\n          data.updated_at = new Date(data.updated_at as string);\n          return new Address(data);\n        },\n        isArray: false,\n      },\n    },\n  );\n\n  hiddenExtend(Address.prototype, AddressPrototype.prototype);\n\n  Address.fromJSON = (data: any): IAddress => {\n    if (data.lat) {\n      data.lat = parseFloat(data.lat);\n    }\n    if (data.lon) {\n      data.lon = parseFloat(data.lon);\n    }\n    if (_.isNull(data.line_1)) {\n      data.line_1 = \"\";\n    }\n    if (_.isNull(data.line_2)) {\n      data.line_2 = \"\";\n    }\n    return new Address(data);\n  };\n\n  Address.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Address;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IOpening, Opening } from \"app/src/Models/Opening\";\n\nexport interface IDoor extends IOpening {\n  clone(): IDoor;\n}\n\nexport class Door extends Opening implements IDoor {\n  constructor() {\n    super();\n  }\n\n  public clone(): IDoor {\n    return Door.fromJSON(this);\n  }\n\n  public static fromJSON = (data: any): IDoor => {\n    const door = new Door();\n\n    Opening.copyValues(door, data);\n\n    door[\"kind\"] = \"Door\";\n    return door;\n  };\n}\n","import { IOpening, Opening } from \"app/src/Models/Opening\";\n\nexport interface IWindow extends IOpening {\n  clone(): IWindow;\n}\n\nexport class Window extends Opening implements IWindow {\n  constructor() {\n    super();\n  }\n\n  public clone(): IWindow {\n    return Window.fromJSON(this);\n  }\n\n  public static fromJSON = (data: any): IWindow => {\n    const window = new Window();\n\n    Opening.copyValues(window, data);\n\n    window[\"kind\"] = \"Window\";\n    return window;\n  };\n}\n","export interface IRoofFace {\n  id: number;\n  name: string;\n  designator: string;\n  location: string;\n  level: string;\n  orientation: number;\n  pitch: number;\n  area: number;\n  ui: number;\n  created_at: Date;\n  updated_at: Date;\n\n  clone(): IRoofFace;\n}\n\nexport class RoofFace implements IRoofFace {\n  public id: number;\n  public name: string;\n  public designator: string;\n  public location: string;\n  public level: string;\n  public orientation: number;\n  public pitch: number;\n  public area: number;\n  public ui: number;\n  public created_at: Date;\n  public updated_at: Date;\n\n  constructor() {}\n\n  public clone(): IRoofFace {\n    return RoofFace.fromJSON(Object.assign({}, this));\n  }\n\n  public static fromJSON = (data: any): IRoofFace => {\n    const roof_face = new RoofFace();\n    for (const key in data) {\n      if (data.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        switch (key) {\n          case \"id\":\n          case \"measurement_id\":\n            data[key] = parseInt(data[key]);\n            break;\n          case \"area\":\n          case \"orientation\":\n          case \"pitch\":\n            data[key] = parseFloat(data[key]);\n            break;\n          case \"updated_at\":\n          case \"created_at\":\n            data[key] = new Date(data[key]);\n            break;\n        }\n\n        roof_face[key] = data[key];\n      }\n    }\n    return roof_face;\n  };\n}\n","import { Door, IDoor } from \"app/src/Models/Door\";\nimport { Deck } from \"app/src/Models/Deck\";\nimport { IWindow, Window } from \"app/src/Models/Window\";\nimport { IWallFacade, WallFacade } from \"app/src/Models/WallFacade\";\nimport { IRoofFace, RoofFace } from \"app/src/Models/RoofFace\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IRoom, Room } from \"app/src/Models/Room\";\nimport { IElevation } from \"./Elevation\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IOpening } from \"./Opening\";\nimport { IDeck } from \"./Deck\";\nimport { Pool, IPool } from \"./Pool\";\nimport { metric_uom, imperial_uom } from \"../Common/Constants\";\nimport { propertiesMapping } from \"app2/src/records/Measurement\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IMeasurement extends ng.resource.IResource<IMeasurement>, MeasurementPrototype {\n  $update(): ng.IPromise<IMeasurement>;\n  $update(params?: Object, success?: Function, error?: Function): ng.IPromise<IMeasurement>;\n  $update(success: Function, error?: Function): ng.IPromise<IMeasurement>;\n}\n\nexport interface IMeasurementResource extends ng.resource.IResourceClass<IMeasurement>, IRsfResource {\n  defaultLevels?: string[];\n  defaultLocations?: string[];\n\n  fromJSON?(data: any): IMeasurement;\n  toLeafletMeasure?(data: any): any;\n  transformRequest?(measurement: IMeasurement): any;\n  update?(data: any): IMeasurement;\n}\n\nclass MeasurementPrototype {\n  public id: number;\n  public job_id: number;\n  public geojson: any;\n  public system: string;\n  public roof_total_area: number;\n  public roof_5pw_total_area: number;\n  public roof_10pw_total_area: number;\n  public roof_12pw_total_area: number;\n  public roof_15pw_total_area: number;\n  public roof_20pw_total_area: number;\n  public roof_flat_shallow_area: number;\n  public roof_low_slope_area: number;\n  public roof_average_slope_area: number;\n  public roof_steep_slope_area: number;\n  public roof_ultra_steep_slope_area: number;\n  public roof_sloped_area: number;\n  public roof_10pw_sloped_area: number;\n  public roof_high_roof_area: number;\n  public roof_eave: number;\n  public roof_rake: number;\n  public roof_perimeter: number;\n  public roof_ridge: number;\n  public roof_hip: number;\n  public roof_ridge_hip: number;\n  public roof_valley: number;\n  public roof_valley_eave: number;\n  public roof_valley_eave_rake: number;\n  public roof_step_flashing: number;\n  public roof_headwall_flashing: number;\n  public roof_flat_area: number;\n  public roof_total_flashing: number;\n  public roof_gutter_miters: number;\n  public roof_downspouts: number;\n  public roof_downspout_elbows: number;\n  public roof_79_area: number;\n  public roof_1012_area: number;\n  public roof_13p_area: number;\n  public roof_0_area: number;\n  public roof_1_area: number;\n  public roof_2_area: number;\n  public roof_3_area: number;\n  public roof_4_area: number;\n  public roof_5_area: number;\n  public roof_6_area: number;\n  public roof_7_area: number;\n  public roof_8_area: number;\n  public roof_9_area: number;\n  public roof_10_area: number;\n  public roof_11_area: number;\n  public roof_12_area: number;\n  public roof_13_area: number;\n  public roof_14_area: number;\n  public roof_15_area: number;\n  public roof_16_area: number;\n  public roof_17_area: number;\n  public roof_18_area: number;\n  public roof_19_area: number;\n  public roof_20_area: number;\n  public roof_21_area: number;\n  public roof_22_area: number;\n  public roof_23_area: number;\n  public roof_24_area: number;\n  public roof_25_area: number;\n  public roof_26p_area: number;\n\n  public siding_total_area: number;\n  public siding_5pw_total_area: number;\n  public siding_10pw_total_area: number;\n  public siding_15pw_total_area: number;\n  public siding_18pw_total_area: number;\n\n  public sunroom_a_wall_length: number;\n  public sunroom_a_wall_height: number;\n  public sunroom_a_wall_area: number;\n  public sunroom_b_wall_length: number;\n  public sunroom_b_wall_height: number;\n  public sunroom_b_wall_area: number;\n  public sunroom_c_wall_length: number;\n  public sunroom_c_wall_height: number;\n  public sunroom_c_wall_area: number;\n  public sunroom_wall_perimeter: number;\n  public sunroom_wall_total_area: number;\n  public sunroom_deck_total_area: number;\n  public sunroom_ceiling_area: number;\n  public sunroom_studio_roof_area: number;\n  public sunroom_cathedral_roof_area: number;\n  public sunroom_kw_a_length: number;\n  public sunroom_kw_a_height: number;\n  public sunroom_kw_a_area: number;\n  public sunroom_kw_b_length: number;\n  public sunroom_kw_b_height: number;\n  public sunroom_kw_b_area: number;\n  public sunroom_kw_c_length: number;\n  public sunroom_kw_c_height: number;\n  public sunroom_kw_c_area: number;\n  public sunroom_kw_total_length: number;\n  public sunroom_kw_total_area: number;\n\n  public roof_faces: any[];\n  public wall_facades: any[];\n  public windows: IWindow[];\n  public doors: IDoor[];\n  public rooms: IRoom[];\n  public elevations: IElevation[];\n  public decks: IDeck[];\n  public pools: IPool[];\n  public locations: string[];\n  public levels: string[];\n  public newId: number;\n\n  public room_ids: number[];\n\n  public measurement_to_uom: { [details: string]: string };\n\n  public created_at: Date;\n  public updated_at: Date;\n\n  public hasMeasurementProperties(searchString: string): boolean {\n    const regexPattern = new RegExp(\"^\" + searchString + \".*\");\n\n    let prop: string;\n    for (prop in this) {\n      if (_.isFunction(prop) || !regexPattern.test(prop)) {\n        continue;\n      }\n\n      if (this[prop] > 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  public hasValue(key: string): boolean {\n    if (key === undefined || key === null) {\n      return false;\n    }\n\n    return this[key] > 0;\n  }\n\n  public hasMeasurements(org: any = undefined, location: string = undefined): boolean {\n    if (org === undefined && location === undefined) {\n      return (\n        this.hasSpecificMeasurements(\"roof_faces\") ||\n        this.hasSpecificMeasurements(\"wall_facades\") ||\n        this.hasSpecificMeasurements(\"windows\") ||\n        this.hasSpecificMeasurements(\"doors\") ||\n        this.hasSpecificMeasurements(\"rooms\") ||\n        this.hasSpecificMeasurements(\"decks\") ||\n        this.hasSpecificMeasurements(\"pools\") ||\n        this.hasMeasurementProperties(\"roof_\") ||\n        this.hasMeasurementProperties(\"siding_\") ||\n        this.hasMeasurementProperties(\"sunroom_\")\n      );\n    } else {\n      return (\n        (this.hasSpecificMeasurements(\"roof_faces\") && org.showMeasurementSection(\"roof_faces\", location)) ||\n        (this.hasSpecificMeasurements(\"wall_facades\") && org.showMeasurementSection(\"wall_facades\", location)) ||\n        (this.hasSpecificMeasurements(\"windows\") && org.showMeasurementSection(\"windows\", location)) ||\n        (this.hasSpecificMeasurements(\"doors\") && org.showMeasurementSection(\"doors\", location)) ||\n        (this.hasSpecificMeasurements(\"rooms\") && org.showMeasurementSection(\"rooms\", location)) ||\n        (this.hasSpecificMeasurements(\"decks\") && org.showMeasurementSection(\"decks\", location)) ||\n        (this.hasSpecificMeasurements(\"pools\") && org.showMeasurementSection(\"decks\", location)) ||\n        (this.hasMeasurementProperties(\"roof_\") && org.showMeasurementSection(\"roofing\", location)) ||\n        (this.hasMeasurementProperties(\"siding_\") && org.showMeasurementSection(\"siding\", location)) ||\n        (this.hasMeasurementProperties(\"sunroom_\") && org.showMeasurementSection(\"sunroom\", location))\n      );\n    }\n  }\n\n  public hasSpecificMeasurements(searchString: string) {\n    if (this[searchString] === undefined) {\n      return false;\n    }\n    return this[searchString].length > 0;\n  }\n\n  public getId(): number {\n    if (!this.newId) {\n      this.newId = 0;\n    }\n    this.newId -= 1;\n    return this.newId;\n  }\n\n  public deleteWindow(window: IOpening) {\n    if (window.id <= 0) {\n      this.windows = _.filter(this.windows, (w) => {\n        return w.id !== window.id;\n      });\n    } else {\n      /**\n       * If it belongs to an estimate, we can't delete it.\n       */\n      if (window.opening_estimations && window.opening_estimations.length > 0) {\n        return;\n      }\n      window._destroy = true;\n    }\n  }\n\n  public deleteDoor(door) {\n    if (door.id <= 0) {\n      this.doors = _.filter(this.doors, (d) => {\n        return d.id !== door.id;\n      });\n    } else {\n      /**\n       * If it belongs to an estimate, we can't delete it.\n       */\n      if (door.opening_estimations && door.opening_estimations.length > 0) {\n        return;\n      }\n\n      door._destroy = true;\n    }\n  }\n\n  public deleteRoom(room) {\n    if (room.id <= 0) {\n      this.rooms = _.filter(this.rooms, (r) => {\n        return r.id !== room.id;\n      });\n    } else {\n      room._destroy = true;\n    }\n  }\n\n  public deleteDeck(deck) {\n    if (deck.id <= 0) {\n      this.decks = _.filter(this.decks, (d) => {\n        return d.id !== deck.id;\n      });\n    } else {\n      deck._destroy = true;\n    }\n  }\n\n  public deletePool(pool) {\n    if (pool.id <= 0) {\n      this.pools = _.filter(this.pools, (d) => {\n        return d.id !== pool.id;\n      });\n    } else {\n      pool._destroy = true;\n    }\n  }\n\n  public deleteWallFacade(wallFacade: IWallFacade): void {\n    if (wallFacade.id <= 0) {\n      this.wall_facades = _.filter(this.wall_facades, (wf) => wf.id !== wallFacade.id);\n    } else {\n      wallFacade._destroy = true;\n    }\n  }\n\n  public existingDoors() {\n    return _.filter(this.doors, (g) => {\n      return g._destroy !== true;\n    });\n  }\n\n  public existingWindows() {\n    return _.filter(this.windows, (g) => {\n      return g._destroy !== true;\n    });\n  }\n\n  public existingWallFacades() {\n    return _.filter(this.wall_facades, (g) => {\n      return g._destroy !== true;\n    });\n  }\n\n  public clone() {\n    const measurement = resources.Measurement.fromJSON({});\n\n    _.each(Object.keys(this), (prop) => {\n      if (prop.indexOf(\"roof_\") === 0 || prop.indexOf(\"siding_\") === 0 || prop.indexOf(\"sunroom_\") === 0) {\n        measurement[prop] = this[prop];\n      }\n    });\n\n    measurement.id = this.id;\n    measurement.job_id = this.job_id;\n    measurement.measurement_to_uom = this.measurement_to_uom;\n    measurement.created_at = this.created_at;\n    measurement.updated_at = this.updated_at;\n\n    measurement.roof_faces = _.map(this.roof_faces, (rf: IRoofFace) => rf.clone());\n    measurement.wall_facades = _.map(this.wall_facades, (wf: IWallFacade) => wf.clone());\n    measurement.windows = _.map(this.windows, (w: IWindow) => w.clone());\n    measurement.doors = _.map(this.doors, (d: IDoor) => d.clone());\n    measurement.elevations = _.map(this.elevations, (e: IElevation) => e.clone());\n    if (_.isArray(this.locations)) {\n      measurement.locations = this.locations.concat([]);\n    }\n    if (_.isArray(this.levels)) {\n      measurement.levels = this.levels.concat([]);\n    }\n    measurement.newId = this.newId;\n\n    return measurement;\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/measurements/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IMeasurement => {\n    if (status < 200 || status > 299) {\n      return new Measurement({});\n    }\n\n    const data = JSON.parse(response).measurement;\n    return Measurement.fromJSON(data);\n  };\n\n  const requestTransform = (measurement: IMeasurement): string => {\n    const data = JSON.parse(angular.toJson(JSON.decycle(measurement)));\n\n    if (data.geojson) {\n      data.geojson = measurement.geojson;\n    }\n    if (data.doors) {\n      _.each(data.doors, (d: IOpening) => {\n        if (d.id <= 0) {\n          delete d.id;\n        }\n      });\n      data.doors_attributes = data.doors;\n      delete data.doors;\n    }\n    if (data.windows) {\n      _.each(data.windows, (w: IOpening) => {\n        if (w.id <= 0) {\n          delete w.id;\n        }\n      });\n      data.windows_attributes = data.windows;\n      delete data.windows;\n    }\n    if (data.wall_facades) {\n      _.each(data.wall_facades, (wf: any) => {\n        if (wf.id <= 0) {\n          delete wf.id;\n        }\n      });\n      data.wall_facades_attributes = data.wall_facades;\n      delete data.wall_facades;\n    }\n    if (data.roof_faces) {\n      _.each(data.roof_faces, (rf: any) => {\n        if (rf.id <= 0) {\n          delete rf.id;\n        }\n      });\n      data.roof_faces_attributes = data.roof_faces;\n      delete data.roof_faces;\n    }\n    if (data.rooms) {\n      _.each(data.rooms, (r: any) => {\n        if (r.id <= 0) {\n          delete r.id;\n        }\n      });\n      data.rooms_attributes = data.rooms;\n      delete data.rooms;\n    }\n    if (data.decks) {\n      // had to use measurement.decks becausue decycle was causing issues with the points and $ref\n      data.decks_attributes = JSON.parse(\n        angular.toJson(\n          measurement.decks.map((d) => {\n            const deck = { ...d };\n            if (_.isNaN(parseInt(deck.id as any))) {\n              delete deck.id;\n            }\n            return deck;\n          }),\n        ),\n      );\n      delete data.decks;\n    }\n    if (data.pools) {\n      // had to use measurement.pools becausue decycle was causing issues with the points and $ref\n      data.pools_attributes = JSON.parse(\n        angular.toJson(\n          measurement.pools.map((d) => {\n            const pool = { ...d };\n            if (_.isNaN(parseInt(pool.id as any))) {\n              delete pool.id;\n            }\n            return pool;\n          }),\n        ),\n      );\n      delete data.pools;\n    }\n\n    delete data.levels;\n    delete data.locations;\n\n    if (data.elevations) {\n      delete data.elevations;\n    }\n\n    return angular.toJson({ measurement: data });\n  };\n\n  const Measurement: IMeasurementResource = <IMeasurementResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: requestTransform,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n    },\n  );\n\n  hiddenExtend(Measurement.prototype, MeasurementPrototype.prototype);\n\n  Measurement.fromJSON = (data: any): IMeasurement => {\n    if (!data.elevations) {\n      data.elevations = [];\n    }\n\n    if (!data.system) {\n      data.system = \"imperial\";\n    }\n\n    const measurement = new Measurement(data);\n\n    _.each(data.doors, (d, index) => {\n      measurement.doors[index] = Door.fromJSON(d);\n    });\n    _.each(data.windows, (w, index) => {\n      measurement.windows[index] = Window.fromJSON(w);\n    });\n    _.each(data.wall_facades, (wf, index) => {\n      measurement.wall_facades[index] = WallFacade.fromJSON(wf);\n    });\n    _.each(data.roof_faces, (rf, index) => {\n      measurement.roof_faces[index] = RoofFace.fromJSON(rf);\n    });\n    _.each(data.rooms, (r, index) => {\n      measurement.rooms[index] = Room.fromJSON(r);\n    });\n    _.each(data.decks, (d, idx) => {\n      measurement.decks[idx] = Deck.fromJSON(d);\n    });\n    _.each(data.pools, (d, idx) => {\n      measurement.pools[idx] = Pool.fromJSON(d);\n    });\n\n    _.each(data.elevations, (e, idx) => {\n      measurement.elevations[idx] = resources.Elevation.fromJSON(e);\n      measurement.elevations[idx].measurement = measurement;\n      measurement.elevations[idx].associateOpenings();\n    });\n\n    if (data.system === \"metric\") {\n      measurement.measurement_to_uom = metric_uom;\n    } else {\n      measurement.measurement_to_uom = imperial_uom;\n    }\n\n    [\"doors\", \"windows\", \"rooms\", \"wall_facades\", \"decks\", \"pools\"].forEach((name) => {\n      if (!_.isArray(measurement[name])) {\n        measurement[name] = [];\n      }\n    });\n\n    return measurement;\n  };\n\n  Measurement.toLeafletMeasure = (geoJSON_data: any): any => {\n    const leaflet_data = [];\n    _.each(geoJSON_data, (m: any) => {\n      const points = [];\n      switch (m.geometry.type) {\n        case \"Polygon\":\n          _.each(m.geometry.coordinates[0], (point) => {\n            points.push({ lat: point[1], lng: point[0] });\n          });\n          break;\n        case \"LineString\":\n          points.push({ lat: m.geometry.coordinates[0][1], lng: m.geometry.coordinates[0][0] });\n          points.push({ lat: m.geometry.coordinates[1][1], lng: m.geometry.coordinates[1][0] });\n          break;\n        case \"Point\":\n          points.push({ lat: m.geometry.coordinates[1], lng: m.geometry.coordinates[0] });\n          break;\n      }\n      leaflet_data.push({ points: points, properties: m.properties });\n    });\n    return leaflet_data;\n  };\n\n  Measurement.transformRequest = (measurement: IMeasurement) => {\n    return requestTransform(measurement);\n  };\n\n  Measurement.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  Measurement.defaultLevels = [\"1\", \"2\", \"3\", \"Basement\"];\n\n  Measurement.defaultLocations = [\n    \"Bedroom 1\",\n    \"Bedroom 2\",\n    \"Bedroom 3\",\n    \"Master Bedroom\",\n    \"Bathroom 1\",\n    \"Bathroom 2\",\n    \"Kitchen\",\n    \"Living Room\",\n    \"Family Room\",\n    \"Dining Room\",\n    \"Sunroom\",\n    \"Entryway\",\n    \"Basement\",\n    \"Mud Room\",\n    \"Office\",\n    \"Den\",\n  ];\n\n  hiddenExtend(Measurement.prototype, MeasurementPrototype.prototype);\n\n  return Measurement;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IEstimate } from \"app/src/Models/Estimate\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IAddress } from \"app/src/Models/Address\";\nimport { IMeasurement } from \"app/src/Models/Measurement\";\nimport { IUser } from \"app/src/Models/User\";\nimport { IImage } from \"app/src/Models/Image\";\nimport { IPagingMetadata } from \"app/src/Models/PagingMetadata\";\nimport { IVisualization } from \"app/src/Models/Visualization\";\nimport { IEvent } from \"app/src/Models/Event\";\nimport { IPresentation } from \"app/src/Models/Presentation\";\nimport { IReport } from \"app/src/Models/Report\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IPhoneNumber } from \"./PhoneNumber\";\nimport { IDoc } from \"./Doc\";\nimport { INote } from \"./Note\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { EstimateComparisonRecord } from \"app2/src/records/EstimateComparison\";\nimport { IJobObjectData } from \"app2/src/records/JobAttribute\";\nimport { YesNoProp } from \"app2/src/records\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\nimport { IMetaCountlessPaginationData } from \"app2/src/records/MetaPagination\";\n\nexport interface IJobEvent {\n  id: number;\n  job: IJob;\n}\n\nexport interface IJobAssignment {\n  id: number;\n  user_id: number;\n  user?: IUser;\n  job_id: number;\n  job?: IJob;\n  status: string;\n  status_changed: Date;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IJob extends ng.resource.IResource<IJob>, JobPrototype {\n  $create(): ng.IPromise<IJob>;\n  $create(params?: Object, success?: Function, error?: Function): ng.IPromise<IJob>;\n  $create(success: Function, error?: Function): ng.IPromise<IJob>;\n\n  $assign(): ng.IPromise<IJob>;\n  $assign(params?: Object, success?: Function, error?: Function): ng.IPromise<IJob>;\n  $assign(success: Function, error?: Function): ng.IPromise<IJob>;\n\n  $change_state(): ng.IPromise<IJob>;\n  $change_state(params?: Object, success?: Function, error?: Function): ng.IPromise<IJob>;\n  $change_state(success: Function, error?: Function): ng.IPromise<IJob>;\n\n  $saveOrCreate(...args: any[]): ng.IPromise<IJob>;\n\n  assigned_to(user: IUser): boolean;\n  assignedUser(): IUser;\n  cloneMin(): IJob;\n}\n\nexport interface IJobResource extends ng.resource.IResourceClass<IJob>, IRsfResource {\n  inject(injected: IRepository): void;\n  queryByOrg?(data: any): IJobResponse;\n  create?(data: any): IJobResource;\n  monitor?(data: any): any;\n  invite?(data: any): any;\n  fromJSON?(data: any): IJob;\n  transformRequest?(job: IJob): any;\n}\n\nexport interface IJobPagingMetadata extends IPagingMetadata {\n  states: any;\n  state_info: any;\n  pagination: IMetaCountlessPaginationData;\n}\n\nexport interface IJobMetadata {\n  marketsharp_id: string;\n  marketsharp_contact_id: string;\n  salesforce_opportunity_id: string;\n  salesforce_contact_id: string;\n  salesforce_user_id: string;\n  integration: {\n    [key: string]: string;\n  };\n}\n\nexport interface IJobResponse extends ng.resource.IResourceArray<IJob> {\n  jobs: IJob[];\n  meta: IJobPagingMetadata;\n  stats: any;\n}\n\nclass JobPrototype {\n  public id: number;\n  public classy: string;\n  public name: string;\n  public customer_name: string;\n  public org_id: number;\n  public org_uid: string;\n  public email: string;\n  public org: IOrg;\n  public estimates: IEstimate[];\n  public appointments: IEvent[];\n  public documents: IDoc[];\n  public document_count: number;\n  public images: IImage[];\n  public image_count: number;\n  public notes: INote[];\n  public presentations: IPresentation[];\n  public visualizations: IVisualization[];\n  public assignments: IJobAssignment[];\n  public address: IAddress;\n  public use_job_address: YesNoProp;\n  public customer_address: IAddress;\n  public measurement: IMeasurement;\n  public measurement_id: number;\n  public state: string;\n  public raw_state: string;\n  public config: any;\n  public lead_source: string;\n  public job_types: IJobObjectData[];\n  public phone_numbers: IPhoneNumber[];\n  public created_at: Date;\n  public updated_at: Date;\n  public cover_image_uuid: string;\n  public metadata: IJobMetadata;\n  public report_count: number;\n  public reports: IReport[];\n  public assigned_user: IUser;\n  public additional_assigned_user: IUser;\n  public additional_info: string;\n  public estimate_comparison: EstimateComparisonRecord;\n  public archived: boolean;\n  public viewed: boolean;\n\n  public $saveOrCreate(params, callback) {\n    if (!this.id || this.id <= 0 || (this.id as any as string) === \"Unsaved\") {\n      return (this as any).$create(params, callback);\n    } else {\n      return (this as any).$save(params, callback);\n    }\n  }\n\n  public assigned_to(user: IUser): boolean {\n    return _.any(this.assignments, (assignment) => {\n      return assignment.user.id === user.id;\n    });\n  }\n\n  public assignedUser() {\n    return this.assignments[0].user;\n  }\n\n  public nextAppointment() {\n    //noinspection TypeScriptUnresolvedVariable\n    if (this.appointments.length <= 0) {\n      return \"No Appt.\";\n    } else {\n      //noinspection TypeScriptUnresolvedVariable\n      return this.appointments[0].start_time;\n    }\n  }\n\n  public lastPrice() {\n    //noinspection TypeScriptUnresolvedVariable\n    if (this.estimates.length <= 0) {\n      return 0;\n    } else {\n      //noinspection TypeScriptUnresolvedVariable\n      return this.estimates[0].total;\n    }\n  }\n\n  public cloneMin() {\n    const clone_job: IJob = <IJob>{};\n    clone_job.name = this.name;\n    clone_job.customer_name = this.customer_name;\n    clone_job.email = this.email;\n    clone_job.address = this.address;\n    clone_job.customer_address = this.customer_address;\n    clone_job.state = this.state;\n    clone_job.raw_state = this.raw_state;\n    clone_job.lead_source = this.lead_source;\n    clone_job.job_types = this.job_types;\n    clone_job.phone_numbers = this.phone_numbers;\n    clone_job.assigned_user = this.assigned_user;\n    clone_job.additional_assigned_user = this.additional_assigned_user;\n    clone_job.additional_info = this.additional_info;\n    clone_job.use_job_address = this.use_job_address;\n    clone_job.metadata = this.metadata;\n\n    return clone_job;\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, $rootScope: RsfRootScope, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/jobs/:id\";\n\n  const transformSingleWithEvent = (\n    response: string,\n    headers: ng.IHttpHeadersGetter,\n    status: number,\n    event: string,\n  ): IJob => {\n    const job = transformSingle(response, headers, status);\n\n    if (status >= 200 && status < 299) {\n      $rootScope.$broadcast(event, <IJobEvent>{ id: job.id, job: job });\n    }\n\n    return job;\n  };\n\n  const transformSingle = (response: string, headers: ng.IHttpHeadersGetter, status: number): IJob => {\n    if (status < 200 || status > 299) {\n      return new Job({});\n    }\n    return Job.fromJSON(JSON.parse(response).job);\n  };\n\n  const requestTransform = (job: IJob) => {\n    const data = JSON.parse(angular.toJson(JSON.decycle(job)));\n\n    if (data.org) {\n      data.org_id = data.org.id;\n      delete data.org;\n    }\n\n    if (data.address) {\n      data.address_attributes = data.address;\n      delete data.address;\n    }\n\n    if (data.customer_address) {\n      data.customer_address_attributes = data.customer_address;\n      delete data.customer_address;\n      if (data.customer_address_attributes.id <= 0) {\n        delete data.customer_address_attributes.id;\n      }\n    }\n\n    delete data.measurement;\n\n    if (data.phone_numbers) {\n      data.phone_numbers_attributes = data.phone_numbers;\n      _.each(data.phone_numbers_attributes, (pn: IPhoneNumber) => {\n        if (pn.name === \"\" && pn.number === \"\") {\n          pn._destroy = true;\n        }\n        if (pn.id <= 0) {\n          delete pn.id;\n        }\n      });\n      delete data.phone_numbers;\n    }\n\n    if (data.job_types) {\n      data.job_type_ids = data.job_types.map((jt) => jt.id);\n      delete data.job_types;\n    }\n\n    if (data.assignments) {\n      data.assignments_attributes = data.assignments;\n      delete data.assignments;\n    }\n\n    return angular.toJson({ job: data });\n  };\n\n  const Job: IJobResource = <IJobResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n        isArray: false,\n        cache: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/jobs\",\n        params: {\n          org_id: \"@org_id\",\n        },\n        transformRequest: requestTransform,\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          return transformSingleWithEvent(response, headers, status, \"job:created\");\n        },\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        url: BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/jobs/:id\",\n        params: {\n          org_id: \"@org_id\",\n        },\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: requestTransform,\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          return transformSingleWithEvent(response, headers, status, \"job:updated\");\n        },\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const meta = JSON.parse(response);\n\n          _.each(meta.jobs, (jsonJob, index) => {\n            meta.jobs[index] = Job.fromJSON(jsonJob);\n          });\n\n          return meta;\n        },\n        isArray: false,\n      },\n      queryByOrg: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/jobs\",\n        params: {\n          org_id: \"@org_id\",\n        },\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const meta = JSON.parse(response);\n\n          _.each(meta.jobs, (jsonJob, index) => {\n            meta.jobs[index] = Job.fromJSON(jsonJob);\n          });\n\n          return meta;\n        },\n        isArray: false,\n      },\n      assign: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        url: url + \"/assign?include[]=assignments\",\n        params: {\n          id: \"@id\",\n        },\n        transformResponse: transformSingle,\n      },\n      invite: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/invite\",\n        transformRequest: (data) => {\n          return JSON.stringify(data);\n        },\n        transformResponse: (data) => {\n          return JSON.parse(data);\n        },\n      },\n      change_state: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        url: url + \"/state\",\n        params: {\n          id: \"@id\",\n        },\n        transformRequest: () => {\n          return JSON.stringify({});\n        },\n        transformResponse: transformSingle,\n      },\n      monitor: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        url: url + \"/monitor\",\n        isArray: false,\n      },\n    },\n  );\n\n  Job.fromJSON = (data: any): IJob => {\n    data.classy = \"Job\";\n    if (data.org) {\n      data.org = resources.Org.fromJSON(data.org);\n    }\n\n    if (data.address) {\n      data.address = resources.Address.fromJSON(data.address);\n    }\n\n    if (data.customer_address) {\n      data.customer_address = resources.Address.fromJSON(data.customer_address);\n    }\n\n    if (data.documents) {\n      _.each(data.documents, (doc, index) => {\n        data.documents[index] = resources.Doc.fromJSON(doc);\n      });\n    } else {\n      data.documents = [];\n    }\n\n    if (data.images) {\n      _.each(data.images, (img, index) => {\n        data.images[index] = resources.Image.fromJSON(img);\n      });\n    } else {\n      data.images = [];\n    }\n\n    if (data.measurement) {\n      data.measurement_id = data.measurement.id;\n      data.measurement = resources.Measurement.fromJSON(data.measurement);\n    } else {\n      data.measurement = resources.Measurement.fromJSON({});\n    }\n\n    if (data.emails) {\n      _.each(data.emails, (email, index) => {\n        data.emails[index] = resources.Email.fromJSON(email);\n      });\n    } else {\n      data.emails = [];\n    }\n\n    if (data.phone_numbers) {\n      _.each(data.phone_numbers, (phone_number: any, index) => {\n        data.phone_numbers[index] = resources.PhoneNumber.fromJSON(phone_number);\n      });\n    } else {\n      data.phone_numbers = [];\n    }\n\n    if (data.assignments) {\n      _.each(data.assignments, (assignment: any, index) => {\n        data.assignments[index].user = resources.User.fromJSON(assignment.user);\n      });\n    } else {\n      data.assignments = [];\n    }\n\n    if (!data.assignments) {\n      data.assignments = [];\n    }\n\n    if (!data.visualizations) {\n      data.visualizations = [];\n    }\n\n    if (data.reports) {\n      _.each(data.reports, (report, index) => {\n        data.reports[index] = resources.Report.fromJSON(report);\n      });\n    }\n\n    if (data.appointments) {\n      data.appointments = _.map(data.appointments, (appt: any) => {\n        return resources.Event.fromJSON(appt);\n      });\n    }\n\n    if (data.estimates) {\n      data.estimates = _.map(data.estimates, (est: any) => {\n        return resources.Estimate.fromJSON(est);\n      });\n    }\n\n    if (data.visualizations && data.visualizations.length > 0) {\n      data.visualizations = _.map(data.visualizations, (visData: any) => {\n        return resources.Visualization.fromJSON(visData);\n      });\n    }\n\n    return new Job(data);\n  };\n\n  Job.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  Job.transformRequest = (job: IJob) => {\n    return requestTransform(job);\n  };\n\n  hiddenExtend(Job.prototype, JobPrototype.prototype);\n\n  return Job;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"$rootScope\", \"BaseConfig\"];\n\nexport default factory;\n","import { IPagingMetadata } from \"app/src/Models/PagingMetadata\";\nimport { IProduct } from \"app/src/Models/Product\";\nimport { IProductOptionGroup } from \"app/src/Models/ProductOptionGroup\";\nimport * as moment from \"moment\";\nimport { IDoc } from \"app/src/Models/Doc\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IPriceList extends ng.resource.IResource<IPriceList>, PriceListPrototype {\n  $export(data: any): ng.IPromise<IPriceList>;\n  $merge(data: any): ng.IPromise<IPriceList>;\n  $activate(): ng.IPromise<IPriceList>;\n  $save(): ng.IPromise<IPriceList>;\n}\n\nexport interface IPriceListResource extends ng.resource.IResourceClass<IPriceList>, IRsfResource {\n  fromJSON?(data: any): IPriceList;\n  activate?(data: any): IPriceList;\n  create?(data: any): IPriceList;\n}\n\nexport interface IPriceListResponse extends ng.resource.IResourceArray<IPriceList> {\n  price_lists: IPriceList[];\n  meta: IPagingMetadata;\n}\n\nclass PriceListPrototype {\n  public id: number;\n  public name: string;\n  public org_id: number;\n  public file: IDoc;\n  public products: IProduct[];\n  public product_option_groups: IProductOptionGroup[];\n  public hidden_products: boolean;\n  public csv_url: string;\n  public csv_generated_on: Date;\n  public created_at: Date;\n  public updated_at: Date;\n  public location: string;\n  public estimate_count: number;\n  public kind: string;\n\n  public isCsvCurrent() {\n    return moment(this.csv_generated_on).diff(moment(this.updated_at)) / 1000 >= -2;\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, $http: ng.IHttpService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/price_lists/:id\";\n  const nested_url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/price_lists\";\n\n  const transform = (data: any): IPriceList => {\n    _.each(data.products, (product, index) => {\n      data.products[index] = resources.Product.fromJSON(product);\n    });\n\n    _.each(data.product_option_groups, (pog, index) => {\n      data.product_option_groups[index] = resources.ProductOptionGroup.fromJSON(pog);\n    });\n\n    // This was added because old activated price lists didn't have the hidden_products variable set on them\n    // I'm making an assumption that if you're loading a cached price list it has to be activated\n    if (data.hidden_products === undefined) {\n      data.hidden_products = false;\n    }\n\n    return new PriceList(data);\n  };\n\n  const requestTransform = (price_list: IPriceList) => {\n    const data = JSON.parse(angular.toJson(JSON.decycle(price_list)));\n\n    return angular.toJson({ price_list: data });\n  };\n\n  const transformSingleResponse = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return new PriceList({});\n    }\n\n    const data: any = JSON.parse(response).price_list;\n\n    return transform(data);\n  };\n\n  const PriceList: IPriceListResource = <IPriceListResource>$resource(\n    url,\n    { id: \"@id\", org_id: \"@org_id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: requestTransform,\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: nested_url,\n        transformRequest: requestTransform,\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: nested_url,\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const data: any = JSON.parse(response);\n\n          data.price_lists = _.map(data.price_lists, (obj: any) => {\n            return PriceList.fromJSON(obj);\n          });\n\n          return data;\n        },\n      },\n      activate: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/activate\",\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      export: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/export\",\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      merge: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/merge\",\n        isArray: false,\n      },\n    },\n  );\n\n  PriceList.fromJSON = (data: any): IPriceList => {\n    return transform(data);\n  };\n\n  hiddenExtend(PriceList.prototype, PriceListPrototype.prototype);\n\n  PriceList.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return PriceList;\n};\n\nfactory.$inject = [\"$resource\", \"$http\", \"BaseConfig\"];\n\nexport default factory;\n","import { IPagingMetadata } from \"app/src/Models/PagingMetadata\";\nimport { IProduct } from \"app/src/Models/Product\";\nimport { IProductOptionGroup } from \"app/src/Models/ProductOptionGroup\";\nimport { IDoc } from \"app/src/Models/Doc\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IActivatedPriceList extends ng.resource.IResource<IActivatedPriceList>, ActivatedPriceListPrototype {\n  $export(data: any): ng.IPromise<IActivatedPriceList>;\n}\n\nexport interface IActivatedPriceListResource extends ng.resource.IResourceClass<IActivatedPriceList>, IRsfResource {\n  fromJSON?(data: any): IActivatedPriceList;\n  getCached?(data: any): IActivatedPriceList;\n  fetchCached?(org_id, id): ng.IPromise<any>;\n}\n\nexport interface IActivatedPriceListResponse extends ng.resource.IResourceArray<IActivatedPriceList> {\n  activated_price_lists: IActivatedPriceList[];\n  meta: IPagingMetadata;\n}\n\nclass ActivatedPriceListPrototype {\n  public id: number;\n  public org_id: number;\n  public price_list_id: number;\n  public file: IDoc;\n  public products: IProduct[];\n  public productLeaves: IProduct[];\n  public product_option_groups: IProductOptionGroup[];\n  public hidden_products: boolean;\n  public csv_url: string;\n  public csv_generated_on: Date;\n  public created_at: Date;\n  public updated_at: Date;\n  public location: string;\n  public estimate_count: number;\n  public activated_price_list_id: number;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, $http: ng.IHttpService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/activated_price_lists/:id\";\n\n  const transform = (data: any): IActivatedPriceList => {\n    data.productLeaves = [];\n    _.each(data.products, (child, index) => {\n      data.products[index] = resources.Product.fromJSON(child);\n    });\n    _.each(data.products, (product: IProduct) => {\n      _.each(product.selfAndDescendants(), (p) => {\n        const opening = p.kind === \"window\" || p.kind === \"door\";\n        p.ancestral_name = p.ancestral_names();\n        p.ancestral_name_lowercase = p.ancestral_name.toLowerCase();\n        if ((p.children.length === 0 && !opening) || (p.children.length > 0 && opening)) {\n          data.productLeaves.push(p);\n        }\n      });\n    });\n\n    _.each(data.product_option_groups, (pog: IProductOptionGroup, index) => {\n      data.product_option_groups[index] = resources.ProductOptionGroup.fromJSON(pog);\n    });\n\n    // This was added because old activated price lists didn't have the hidden_products variable set on them\n    // I'm making an assumption that if you're loading a cached price list it has to be activated\n    if (data.hidden_products === undefined) {\n      data.hidden_products = false;\n    }\n\n    return new ActivatedPriceList(data);\n  };\n\n  const ActivatedPriceList: IActivatedPriceListResource = <IActivatedPriceListResource>$resource(\n    url,\n    {},\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return new ActivatedPriceList({});\n          }\n\n          const data: any = JSON.parse(response).activated_price_list;\n\n          return transform(data);\n        },\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const data: any = JSON.parse(response);\n\n          data.activated_price_lists = _.map(data.activated_price_lists, (obj: any) => {\n            return ActivatedPriceList.fromJSON(obj);\n          });\n\n          return data;\n        },\n      },\n      getCached: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/cached\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return new ActivatedPriceList({});\n          }\n\n          const data: any = JSON.parse(response).activated_price_list;\n\n          return transform(data);\n        },\n        isArray: false,\n      },\n      export: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/export\",\n        params: {\n          org_id: \"@org_id\",\n          id: \"@id\",\n        },\n        transformResponse: (response: string) => {\n          const data: any = JSON.parse(response).activated_price_list;\n\n          return transform(data);\n        },\n        isArray: false,\n      },\n    },\n  );\n\n  ActivatedPriceList.fromJSON = (data: any): IActivatedPriceList => {\n    return transform(data);\n  };\n\n  ActivatedPriceList.fetchCached = (org_id, id) => {\n    return ActivatedPriceList.getCached({ org_id: org_id, id: id }).$promise.then(\n      (activatedPriceList: IActivatedPriceList) => {\n        return $http\n          .get(activatedPriceList.file.file.url, { headers: { Authorization: undefined } })\n          .then((data: any) => {\n            const edited_data = data.data.price_list;\n            edited_data.activated_price_list_id = id;\n            //noinspection TypeScriptUnresolvedVariable\n            return ActivatedPriceList.fromJSON(edited_data);\n          });\n      },\n    );\n  };\n\n  hiddenExtend(ActivatedPriceList.prototype, ActivatedPriceListPrototype.prototype);\n\n  ActivatedPriceList.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return ActivatedPriceList;\n};\n\nfactory.$inject = [\"$resource\", \"$http\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IQueryMetadata } from \"app/src/Models/PagingMetadata\";\nimport { IMeasurementLink } from \"app/src/Models/MeasurementLink\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IProductOptionGroup } from \"./ProductOptionGroup\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IDoc } from \"./Doc\";\nimport { IProductOption } from \"./ProductOption\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\nimport * as skuActions from \"app2/src/reducers/sku.actions\";\nimport { ISkuData } from \"app2/src/records/Sku\";\nexport interface IProduct extends ng.resource.IResource<IProduct>, ProductPrototype {\n  $saveOrCreate(...args: any[]): ng.IPromise<IProduct>;\n}\n\nexport type AbleProp = \"default\" | \"yes\" | \"no\";\n\nexport interface ICustomProduct {\n  name: string;\n  uuid?: string;\n  description: string;\n  sort_order?: number;\n  price: number;\n  product_price: number;\n  labor_price: number;\n  included?: boolean;\n  quantity: number;\n  uom: string;\n  image_ids?: number[];\n  document_ids?: number[];\n  images?: any[];\n  documents?: any[];\n  visibility?: string;\n  image_url?: string;\n  document_url?: string;\n  estimate_group?: string;\n}\n\nexport interface IProductToOptionGroupLink {\n  id: number;\n  option_group_id: number;\n  group: IProductOptionGroup;\n  product_id: number;\n  product: IProduct;\n  options: any;\n  required_option_group: boolean;\n}\n\nexport interface IProductResource extends ng.resource.IResourceClass<IProduct>, IRsfResource {\n  byOrg?(params: any): IProductResponse;\n  fromJSON?(data: any): IProduct;\n  queryFromJSON?(data: any): IProductResponse;\n}\n\nexport interface IProductResponse extends ng.resource.IResourceArray<IProduct> {\n  products: IProduct[];\n  parents: IProduct[];\n  meta: IQueryMetadata;\n}\n\nexport class Product {\n  public static leaves(product, win_estimator): IProduct[] {\n    let products = [];\n\n    products = products.concat(this.getLeaves(product, win_estimator));\n\n    return products;\n  }\n\n  public static getLeaves(product, win_estimator): IProduct[] {\n    let products = [];\n    const opening = win_estimator && (product.kind === \"window\" || product.kind === \"door\");\n    if (product.children.length > 0 && !opening) {\n      _.each(product.children, (child) => {\n        products = products.concat(this.getLeaves(child, win_estimator));\n      });\n    } else {\n      products = products.concat(product);\n    }\n\n    return products;\n  }\n}\n\nexport class ProductPrototype {\n  public classy: string;\n  public id: number;\n  public org_id: number;\n  public org: IOrg;\n  public parent_id: number;\n  public price_list_id: number;\n  public parent: IProduct;\n  public parents: IProduct[];\n  public children: IProduct[];\n  public images: any[];\n  public documents: any[];\n  public parent_docs: any[];\n  public name: string;\n  public ancestral_name: string;\n  public ancestral_name_lowercase: string;\n  public option_groups: number[];\n  public description: string;\n  public cost: number;\n  public msrp: number;\n  public price: number;\n  public product_price: number;\n  public labor_price: number;\n  public visibility: string;\n  public uom: string;\n  public sort_order: number;\n  public created_at: Date;\n  public updated_at: Date;\n  public uuid: string;\n  public bracket_type: string;\n  public min_ui: number;\n  public max_ui: number;\n  public min_width: number;\n  public max_width: number;\n  public min_height: number;\n  public max_height: number;\n  public base_product_price: number;\n  public base_labor_price: number;\n  public base_measure: number;\n  public kind: string;\n  public standard_measurement: number;\n  public standard_uom: string;\n  public measurement_link: IMeasurementLink;\n  public size_html: string;\n  public doc_html: string;\n  public ptog_links: IProductToOptionGroupLink[];\n  public options?: IProductOption[];\n  public discountable?: AbleProp;\n  public parent_discountable?: AbleProp;\n  public markupable?: AbleProp;\n  public parent_markupable?: AbleProp;\n  public leaf: boolean;\n  public include_parent_names: boolean;\n  public sku_id?: number;\n  public sku?: ISkuData;\n\n  public $saveOrCreate(params, callback) {\n    if (!this.id || this.id <= 0) {\n      return (this as any).$create(params, callback);\n    } else {\n      return (this as any).$save(params, callback);\n    }\n  }\n\n  public childrenLeaves() {\n    return _.filter(this.children, (child) => {\n      return child.children.length === 0;\n    });\n  }\n\n  public showItem(presentation_mode = false) {\n    // always, company_only\n    if (presentation_mode) {\n      return this.visibility === \"always\" || this.visibility === undefined;\n    } else {\n      return this.visibility === \"always\" || this.visibility === \"company_only\" || this.visibility === undefined;\n    }\n  }\n\n  public searchChildren(id: number): IProduct {\n    let match: IProduct;\n    _.any(this.children, (child) => {\n      child.parent = this as any as IProduct;\n      if (child.id === id) {\n        match = child;\n        return true;\n      }\n\n      match = child.searchChildren(id);\n\n      return match !== undefined;\n    });\n\n    // noinspection JSUnusedAssignment\n    return match;\n  }\n\n  public selfAndDescendants(): IProduct[] {\n    let products = [];\n    products.push(this);\n\n    products = products.concat(this.getChildren(this));\n\n    return products;\n  }\n\n  public getChildren(product) {\n    let products = [];\n    if (product.children.length > 0) {\n      products = products.concat(product.children);\n      _.each(product.children, (child) => {\n        products = products.concat(this.getChildren(child));\n      });\n    }\n\n    return products;\n  }\n\n  public searchChildrenUuid(uuid: string): IProduct {\n    let match: IProduct;\n    _.any(this.children, (child) => {\n      if (child.uuid === uuid) {\n        match = child;\n        return true;\n      }\n\n      match = child.searchChildrenUuid(uuid);\n\n      return match !== undefined;\n    });\n\n    // noinspection JSUnusedAssignment\n    return match;\n  }\n\n  public priceListEditorParentDocs(display, docs = false) {\n    const doc_md5 = {};\n\n    _.each(this.parents, (product) => {\n      this.pullDocs(doc_md5, product, display, docs);\n    });\n    const doc_ids = [];\n    _.each(Object.keys(doc_md5), (k) => {\n      doc_ids.push(doc_md5[k]);\n    });\n\n    return doc_ids;\n  }\n\n  public pullDocs(doc_md5, product, display, docs) {\n    _.each(product.documents, (d: IDoc) => {\n      if (d.display === \"both\" || d.display === display || display === \"both\") {\n        if (docs) {\n          doc_md5[d.md5_sum] = d;\n        } else {\n          doc_md5[d.md5_sum] = d.id;\n        }\n      }\n    });\n    return doc_md5;\n  }\n\n  public copyValues(from: IProduct) {\n    for (const key in from) {\n      if (from.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        this[key] = from[key];\n      }\n    }\n  }\n\n  public hasSizes() {\n    this.showSizes();\n    return (\n      this.min_ui > 0 ||\n      this.max_ui > 0 ||\n      this.min_width > 0 ||\n      this.max_width > 0 ||\n      this.min_height > 0 ||\n      this.max_height > 0 ||\n      this.kind === \"window\" ||\n      this.kind === \"door\"\n    );\n  }\n\n  public showSizes() {\n    this.size_html = \"\";\n    if (this.kind) {\n      this.size_html = \"Kind: \" + this.kind.charAt(0).toUpperCase() + this.kind.slice(1);\n      if (this.bracket_type) {\n        this.size_html += \"<br/>Bracket Type: \" + this.bracket_type.toUpperCase().slice(0, -3);\n      }\n      this.size_html += \"<br/>UI: \" + this.min_ui + \"-\" + this.max_ui;\n      this.size_html += \"<br/>Min: \" + this.min_width + \" x \" + this.min_height;\n      this.size_html += \"<br/>Max: \" + this.max_width + \" x \" + this.max_height;\n    }\n  }\n\n  public hasDocs() {\n    if (_.isEmpty(this.documents)) {\n      this.doc_html = \"\";\n      return false;\n    }\n    this.doc_html = \"Documents: \";\n    _.each(this.documents, (doc) => {\n      this.doc_html += \"<br/>\" + doc.name;\n    });\n    return true;\n  }\n\n  public ancestral_names(use_parent_names = false) {\n    this.ancestral_name = this.name;\n    const ipn = use_parent_names || _.isUndefined(this.include_parent_names) || this.include_parent_names;\n    if (this.parent && ipn) {\n      this.ancestral_name = this.parent.ancestral_names(use_parent_names) + \" > \" + this.name;\n    }\n\n    return this.ancestral_name;\n  }\n\n  public cloneMin() {\n    const clone_product = new ProductPrototype() as any as IProduct;\n    clone_product.name = this.name;\n    clone_product.uom = this.uom;\n    clone_product.documents = this.documents;\n    clone_product.id = this.id;\n    clone_product.uuid = this.uuid;\n    clone_product.images = this.images;\n    clone_product.option_groups = this.option_groups;\n    clone_product.ptog_links = this.ptog_links;\n    clone_product.parent_id = this.parent_id;\n    clone_product.description = this.description;\n    clone_product.include_parent_names = this.include_parent_names;\n    clone_product.standard_measurement = this.standard_measurement;\n    clone_product.standard_uom = this.standard_uom;\n    clone_product.labor_price = this.labor_price;\n    clone_product.base_measure = this.base_measure;\n    clone_product.base_product_price = this.base_product_price;\n    clone_product.base_labor_price = this.base_labor_price;\n    clone_product.product_price = this.product_price;\n    clone_product.bracket_type = this.bracket_type;\n\n    // Properties defined in this way are ignored by JSON.stringify (on prototype, not own)\n    Object.defineProperty(clone_product, \"parent\", { value: this.parent });\n\n    return clone_product;\n  }\n\n  public optionGroups(type: string, optionGroupsById: IProductOptionGroup[]) {\n    let option_groups = [];\n    if (this.option_groups) {\n      // supports old activated price lists\n      option_groups = this.option_groups;\n    } else {\n      option_groups = _.pluck(this.ptog_links, \"option_group_id\");\n    }\n    return _.filter(\n      _.map(option_groups || [], (og_id) => {\n        let backwards = false;\n        if (type === \"default\") {\n          backwards = _.isUndefined(optionGroupsById[og_id].pog_type);\n        }\n        if (backwards || optionGroupsById[og_id].pog_type === type) {\n          return optionGroupsById[og_id];\n        }\n      }),\n      (og) => {\n        return !_.isUndefined(og);\n      },\n    );\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/products/:id\";\n\n  const transform = (data: any, options: any = {}): IProduct => {\n    data.classy = \"Product\";\n    if (data.org !== undefined) {\n      data.org = resources.Org.fromJSON(data.org);\n    }\n\n    if (_.isArray(data.images)) {\n      _.each(data.images, (image, idx) => {\n        data.images[idx] = resources.Image.fromJSON(image);\n      });\n    } else {\n      data.images = [];\n    }\n\n    if (_.isUndefined(data.documents)) {\n      data.documents = [];\n    }\n\n    // if there's \"nothing\" then it's true\n    if (data.include_parent_names === undefined) {\n      data.include_parent_names = true;\n    }\n\n    // check if we need to pass down discountable\n    // else if options has discountable, set this data as discountable if it's a leaf node\n    if (data.discountable) {\n      options.discountable = data.discountable;\n    } else if (\n      options.discountable &&\n      data.children !== undefined &&\n      _.isArray(data.children) &&\n      data.children.length <= 0\n    ) {\n      data.discountable = options.discountable;\n    }\n\n    if (!data.base_measure) {\n      data.base_measure = 0;\n    }\n\n    if (!data.base_product_price) {\n      data.base_product_price = 0;\n    }\n\n    if (!data.base_labor_price) {\n      data.base_labor_price = 0;\n    }\n\n    if (data.children !== undefined && _.isArray(data.children)) {\n      _.each(data.children, (child, index) => {\n        data.children[index] = transform(child, {\n          ...options,\n        });\n      });\n    } else {\n      data.children = [];\n    }\n\n    if (data.sku) {\n      data.sku_id = data.sku.id;\n    } else {\n      data.sku_id = 0;\n    }\n\n    const new_product = new Product(data);\n    _.each(new_product.children, (child) => {\n      child.parent = new_product;\n    });\n\n    return new_product;\n  };\n\n  const requestTransform = (product: IProduct) => {\n    const data = JSON.parse(angular.toJson(JSON.decycle(product)));\n    data.images_attributes = data.images;\n    data.documents_attributes = data.documents;\n    data.product_to_option_group_links_attributes = data.ptog_links;\n    delete data.images;\n    delete data.documents;\n    delete data.ptog_links;\n\n    return angular.toJson({ product: data });\n  };\n\n  const receiveSku = (data: any) => {\n    if (data.sku) {\n      dispatch(skuActions.Actions.receiveSku(data.sku));\n    }\n  };\n\n  const Product: IProductResource = <IProductResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return new Product({});\n          }\n\n          const data: any = JSON.parse(response).product;\n          receiveSku(data);\n          return transform(data);\n        },\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: requestTransform,\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return new Product({});\n          }\n\n          const data: any = JSON.parse(response).product;\n          receiveSku(data);\n          return transform(data);\n        },\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: requestTransform,\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return new Product({});\n          }\n\n          const data: any = JSON.parse(response).product;\n          receiveSku(data);\n          return transform(data);\n        },\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: BaseConfig.BASE_URL + \"/api/v1/products/\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const meta: IProductResponse = JSON.parse(response);\n\n          _.each(meta.products, (child, index) => {\n            meta.products[index] = transform(child);\n\n            receiveSku(meta.products[index]);\n          });\n\n          _.each(meta.parents, (child, index) => {\n            meta.parents[index] = transform(child);\n          });\n\n          return meta;\n        },\n        isArray: false,\n      },\n      byOrg: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/products\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const meta: any = JSON.parse(response);\n\n          _.each(meta.products, (child, index) => {\n            meta.products[index] = transform(child);\n          });\n\n          return meta;\n        },\n        isArray: false,\n      },\n    },\n  );\n\n  Product.fromJSON = (data: any): IProduct => {\n    return transform(data);\n  };\n\n  Product.queryFromJSON = (data: any) => {\n    const response: IProductResponse = {\n      products: [],\n      meta: {},\n    } as IProductResponse;\n\n    if (!data.products) {\n      return response;\n    }\n\n    _.each(data.products, (p) => {\n      response.products.push(transform(p));\n    });\n\n    if (data.meta) {\n      response.meta = data.meta;\n    }\n\n    return response;\n  };\n\n  hiddenExtend(Product.prototype, ProductPrototype.prototype);\n\n  Product.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Product;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as uuid from \"uuid/v4\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nlet PaymentTerm: IPaymentTermResource;\n\nexport interface IPaymentTermResponse extends ng.resource.IResourceArray<IPaymentTerm> {\n  payment_terms: IPaymentTerm[];\n  meta: any;\n}\n\nexport interface IPaymentTermItem {\n  uuid: string;\n  amount: number;\n  description: string;\n  type: string;\n  calculated: number;\n  paymentMethod: \"cash\" | \"financed\";\n}\n\nexport class PaymentTermItem implements IPaymentTermItem {\n  public uuid: string;\n  public amount: number;\n  public description: string;\n  public type: string;\n  public calculated: number;\n  public paymentMethod: \"cash\" | \"financed\";\n\n  constructor(jsonData?: any) {\n    if (jsonData) {\n      // This check that amount exists was added as part of [RSF-14705]\n      if (jsonData.amount) {\n        this.amount = jsonData.amount;\n      } else {\n        this.amount = 0;\n      }\n      if (jsonData.description) {\n        this.description = jsonData.description;\n      }\n      if (jsonData.type) {\n        this.type = jsonData.type;\n      }\n      if (jsonData.calculated) {\n        this.calculated = jsonData.calculated;\n      }\n      if (jsonData.uuid) {\n        this.uuid = jsonData.uuid;\n      }\n      if (jsonData.paymentMethod) {\n        this.paymentMethod = jsonData.paymentMethod;\n      }\n    }\n\n    if (!this.uuid) {\n      this.uuid = uuid();\n    }\n  }\n}\n\nexport interface IPaymentTerm extends ng.resource.IResource<IPaymentTerm>, PaymentTermPrototype {\n  id: number;\n  name: string;\n  description: string;\n  financed_amount: number;\n  kind: string;\n  $update(): ng.IPromise<IPaymentTerm>;\n  $update(params?: Object, success?: Function, error?: Function): ng.IPromise<IPaymentTerm>;\n  $update(success: Function, error?: Function): ng.IPromise<IPaymentTerm>;\n}\n\nexport interface IPaymentTermResource extends ng.resource.IResourceClass<IPaymentTerm>, IRsfResource {\n  fromJSON?(data: any): IPaymentTerm;\n}\n\nclass PaymentTermPrototype {\n  public id: number;\n  public name: string;\n  public description: string;\n  public financed_amount: number;\n  public kind: string;\n  public breakdown: any;\n  public payment_term_items: IPaymentTermItem[];\n  public sort_order: number;\n\n  public clone(): IPaymentTerm {\n    return PaymentTerm.fromJSON(JSON.parse(angular.toJson(this)));\n  }\n\n  public $saveOrCreate(params?, callback?): ng.IPromise<IPaymentTermItem> {\n    if (!this.id || this.id <= 0 || (this as any).id === \"Unsaved\") {\n      return (this as any).$save(params, callback);\n    } else {\n      return (this as any).$update(params, callback);\n    }\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/payment_terms/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta = angular.fromJson(response);\n\n    _.each(meta.payment_terms, (pt, index) => {\n      meta.payment_terms[index] = PaymentTerm.fromJSON(pt);\n    });\n    return meta;\n  };\n\n  const transformSingle = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n    const jsonData = angular.fromJson(response);\n    return PaymentTerm.fromJSON(jsonData.payment_term);\n  };\n\n  PaymentTerm = <IPaymentTermResource>$resource(\n    url,\n    { org_id: \"@org_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  PaymentTerm.fromJSON = (data: any) => {\n    const pt = new PaymentTerm(data);\n\n    if (!pt.payment_term_items) {\n      pt.payment_term_items = [];\n    }\n    _.each(pt.payment_term_items || [], (pti, index) => {\n      pt.payment_term_items[index] = new PaymentTermItem(pti);\n    });\n\n    if (pt.breakdown && _.isArray(pt.breakdown.items)) {\n      _.each(pt.breakdown.items || [], (pti, index) => {\n        pt.breakdown.items[index] = new PaymentTermItem(pti);\n      });\n    }\n\n    return pt;\n  };\n\n  hiddenExtend(PaymentTerm.prototype, PaymentTermPrototype.prototype);\n\n  PaymentTerm.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return PaymentTerm;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { ICustomProduct } from \"app/src/Models/Product\";\nimport { IImage } from \"app/src/Models/Image\";\nimport { IDoc } from \"app/src/Models/Doc\";\nimport { AddEstimateLineItemOptionCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemOptionCmd\";\nimport { AddEstimateLineItemCmd } from \"app/src/Commands/Estimator/AddEstimateLineItemCmd\";\nimport { IEstimateGroup } from \"app/src/Models/EstimateGroup\";\nimport { FlashLevels, IFlash } from \"app/src/Common/FlashService\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEventingFactory } from \"app/src/Common/EventingFactory\";\nimport { IFileQueueFactory } from \"app/src/Common/FileQueueFactory\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IEstimateLineItem } from \"./EstimateLineItem\";\nimport { ProductRecord } from \"app2/src/records/Product\";\nimport { ProductOptionRecord } from \"app2/src/records/ProductOption\";\nimport { cachedProductOptionGroup } from \"app2/src/selectors/productOptionGroup.selectors\";\nimport { useState, useSelector } from \"app2/src/storeRegistry\";\nimport { List, Map } from \"immutable\";\nimport { RoomRecord } from \"app2/src/records/Room\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IEstimateTemplateResponse extends ng.resource.IResourceArray<IEstimateTemplate> {\n  estimate_templates: IEstimateTemplate[];\n  meta: any;\n}\n\nexport interface IEstimateTemplateGroups {\n  groups: IEstimateTemplateGroup[];\n}\n\nexport interface IEstimateTemplateGroup {\n  name: string;\n  included: boolean;\n  sort_order: number;\n  items: string[];\n  item_uuids: {};\n  products: ProductRecord[];\n  optionsByProductId: Map<number, ProductOptionRecord[]>;\n  custom_products: ICustomProduct[];\n  line_item_order?: Array<{ type: string; order: string }>;\n}\n\nexport class EstimateTemplateGroup implements IEstimateTemplateGroup {\n  public name: string;\n  public included: boolean;\n  public sort_order: number;\n  public items: string[];\n  public item_uuids: {};\n  public products: ProductRecord[] = [];\n  public optionsByProductId: Map<number, ProductOptionRecord[]>;\n  public custom_products: ICustomProduct[];\n  public line_item_order?: Array<{ type: string; order: string }>;\n\n  constructor(jsonData?: any) {\n    if (jsonData) {\n      this.name = jsonData.name;\n      this.included = jsonData.included;\n      this.sort_order = jsonData.sort_order;\n      this.items = jsonData.items;\n      this.item_uuids = jsonData.item_uuids;\n      this.custom_products = jsonData.custom_products;\n      this.line_item_order = jsonData.line_item_order;\n    }\n  }\n}\n\nexport interface IEstimateTemplate extends ng.resource.IResource<IEstimateTemplate>, EstimateTemplatePrototype {\n  $update(): ng.IPromise<IEstimateTemplate>;\n}\n\nexport interface IEstimateTemplateResource extends ng.resource.IResourceClass<IEstimateTemplate>, IRsfResource {\n  create?(params: any, data?: any): IEstimateTemplate;\n  fromJSON?(data: any): IEstimateTemplate;\n}\n\nclass EstimateTemplatePrototype {\n  public classy: string;\n  public id: number;\n  public name: string;\n  public template: IEstimateTemplateGroups;\n  public updated_at: Date;\n  public sort_order: number;\n  public images: IImage[];\n  public documents: IDoc[];\n  public kind: \"standard\" | \"interior\";\n\n  // Used for adding interior templates\n  public selectedRoomIds: List<number>;\n  public groupRooms: boolean;\n\n  public addTemplate(\n    estimate: IEstimate,\n    EstimatorService: EstimatorService,\n    FileQueue: IFileQueueFactory,\n    EventingFactory: IEventingFactory,\n    $q: ng.IQService,\n    Flash: IFlash,\n  ): ng.IPromise<any> {\n    let product_count = 0;\n    let item_count = 0;\n    const promises = [];\n    const overall = $q.defer();\n    promises.push(overall);\n    _.each(this.template.groups, (g: IEstimateTemplateGroup) => {\n      product_count += g.products.length;\n      item_count += Object.keys(g.item_uuids).length;\n      if (g.custom_products) {\n        item_count += g.custom_products.length;\n      }\n\n      const group_index = _.findIndex(_.pluck(estimate.estimateGroups(g.included), \"name\"), (name) => {\n        return name === g.name;\n      });\n      let group: IEstimateGroup;\n      if (group_index >= 0) {\n        group = estimate.estimateGroups(g.included)[group_index];\n      } else {\n        EventingFactory.trackEvent(\"estimate group created\", {\n          estimate_group_name: g.name,\n          estimate_template: this.id,\n        });\n        group = estimate.createGroup({ name: g.name, included: g.included });\n        if (estimate.calc_method === \"estimate_group\") {\n          EstimatorService.initializeTaxes(group);\n          EstimatorService.initializeMarkup(group);\n          EstimatorService.initializePaymentTerms(group);\n        }\n      }\n\n      _.each(g.products, (p: ProductRecord) => {\n        const cmd = new AddEstimateLineItemCmd(estimate, p, group, EstimatorService);\n        cmd.execute();\n        cmd.lineItem.newly_added = false;\n        EventingFactory.trackEvent(\"product added\", {\n          product: p.id,\n          estimate_group_name: g.name,\n          estimate_template: this.id,\n        });\n        const fileDefer = $q.defer();\n        promises.push(fileDefer.promise);\n        this.addCustomLineItemFiles(this, cmd.lineItem, p, $q, FileQueue).finally(() => {\n          fileDefer.resolve(true);\n        });\n\n        if (g.optionsByProductId && g.optionsByProductId.get(p.id)) {\n          _.each(g.optionsByProductId.get(p.id), (po: ProductOptionRecord) => {\n            const pog = useSelector((state) =>\n              cachedProductOptionGroup(state, {\n                productOptionGroupId: po.option_group_id,\n                activatedPriceListId: estimate.activated_price_list_id,\n              }),\n            );\n            const cmd_po = new AddEstimateLineItemOptionCmd(po, pog, cmd.lineItem, estimate);\n            cmd_po.execute();\n            EventingFactory.trackEvent(\"product option added\", {\n              estimate_template: this.id,\n              product_option: po.id,\n              product: p.id,\n            });\n          });\n        }\n      });\n    });\n    overall.resolve(true);\n    return $q.all(promises).finally(() => {\n      if (product_count >= item_count) {\n        Flash.addMessage(FlashLevels.success, \"My Estimate Template Successfully Added to Estimate.\");\n      } else {\n        Flash.addMessage(\n          FlashLevels.warning,\n          product_count + \" out of possible \" + item_count + \" products were added.\",\n        );\n      }\n    });\n  }\n\n  public findGroupByRooms(estimate: IEstimate, g: IEstimateTemplateGroup, rooms: List<RoomRecord>) {\n    const estimateGroups = estimate.estimateGroups(g.included);\n\n    const roomIds = rooms.map((r) => r.id).sort();\n\n    return estimateGroups.findIndex((estimateGroup) => {\n      const groupRoomIds = List(estimateGroup.room_estimations.map((roomEstimation) => roomEstimation.room_id)).sort();\n\n      return groupRoomIds.equals(roomIds);\n    });\n  }\n\n  public addInteriorTemplate(\n    estimate: IEstimate,\n    EstimatorService: EstimatorService,\n    FileQueue: IFileQueueFactory,\n    EventingFactory: IEventingFactory,\n    $q: ng.IQService,\n    Flash: IFlash,\n    rooms: List<RoomRecord>,\n    showMessage = true,\n  ): ng.IPromise<any> {\n    let product_count = 0;\n    let item_count = 0;\n    const promises = [];\n    const overall = $q.defer();\n    promises.push(overall);\n\n    _.each(this.template.groups, (g: IEstimateTemplateGroup) => {\n      product_count += g.products.length;\n      item_count += Object.keys(g.item_uuids).length;\n      if (g.custom_products) {\n        item_count += g.custom_products.length;\n      }\n\n      const group_index = this.findGroupByRooms(estimate, g, rooms);\n\n      let group: IEstimateGroup;\n      if (group_index >= 0) {\n        group = estimate.estimateGroups(g.included)[group_index];\n      } else {\n        const groupName = rooms.size === 1 ? rooms.get(0).name : rooms.map((r) => r.name).join(\", \");\n        EventingFactory.trackEvent(\"estimate group created\", {\n          estimate_group_name: groupName,\n          estimate_template: this.id,\n        });\n\n        group = estimate.createGroup({ name: groupName, included: g.included, rooms: rooms.toJS() });\n        if (estimate.calc_method === \"estimate_group\") {\n          EstimatorService.initializeTaxes(group);\n          EstimatorService.initializeMarkup(group);\n          EstimatorService.initializePaymentTerms(group);\n        }\n      }\n\n      _.each(g.products, (p: ProductRecord) => {\n        const cmd = new AddEstimateLineItemCmd(estimate, p, group, EstimatorService);\n        cmd.execute();\n        cmd.lineItem.newly_added = false;\n        EventingFactory.trackEvent(\"product added\", {\n          product: p.id,\n          estimate_group_name: g.name,\n          estimate_template: this.id,\n        });\n        const fileDefer = $q.defer();\n        promises.push(fileDefer.promise);\n        this.addCustomLineItemFiles(this, cmd.lineItem, p, $q, FileQueue).finally(() => {\n          fileDefer.resolve(true);\n        });\n\n        if (g.optionsByProductId && g.optionsByProductId.get(p.id)) {\n          _.each(g.optionsByProductId.get(p.id), (po: ProductOptionRecord) => {\n            const pog = useSelector((state) =>\n              cachedProductOptionGroup(state, {\n                productOptionGroupId: po.option_group_id,\n                activatedPriceListId: estimate.activated_price_list_id,\n              }),\n            );\n            const cmd_po = new AddEstimateLineItemOptionCmd(po, pog, cmd.lineItem, estimate);\n            cmd_po.execute();\n            EventingFactory.trackEvent(\"product option added\", {\n              estimate_template: this.id,\n              product_option: po.id,\n              product: p.id,\n            });\n          });\n        }\n      });\n    });\n    overall.resolve(true);\n    return $q.all(promises).finally(() => {\n      if (product_count >= item_count) {\n        if (showMessage) Flash.addMessage(FlashLevels.success, \"My Estimate Template Successfully Added to Estimate.\");\n      } else {\n        Flash.addMessage(\n          FlashLevels.warning,\n          product_count + \" out of possible \" + item_count + \" products were added.\",\n        );\n      }\n    });\n  }\n\n  public addCustomLineItemFiles(est_template, lineItem, p, $q, FileQueue): ng.IPromise<any> {\n    const promises = [];\n    const token = useState().getIn([\"auth\", \"token\"]);\n    _.each([\"image\", \"document\"], (type) => {\n      if (p[type + \"_ids\"]) {\n        _.each(p[type + \"_ids\"], (id) => {\n          const fileDefer = $q.defer();\n          promises.push(fileDefer.promise);\n\n          const object: any = _.clone(\n            _.find(est_template[type + \"s\"], (obj: any) => {\n              return obj.id === id;\n            }),\n          );\n          if (!object) {\n            fileDefer.resolve(true);\n            return;\n          }\n          const request = new XMLHttpRequest();\n          request.open(\"GET\", object.file.url, true);\n          request.responseType = \"blob\";\n          request.setRequestHeader(\"occ-authorization\", \"Bearer \" + token);\n          request.onload = function () {\n            const file = request.response;\n            file.name = object.name;\n            file.original_filename = object.name;\n            FileQueue.getObject(file, lineItem, object.display).then(() => {\n              FileQueue.setQueue();\n              fileDefer.resolve(true);\n            });\n          };\n          request.send();\n        });\n      }\n    });\n    return $q.all(promises);\n  }\n\n  public uploadFromLineItemFiles(\n    estimate: IEstimate,\n    FileQueue: IFileQueueFactory,\n    $q: ng.IQService,\n    EventingFactory: IEventingFactory,\n    EstimatorService: EstimatorService,\n  ): ng.IPromise<any> {\n    const uploadPromises = [];\n    const token = useState().getIn([\"auth\", \"token\"]);\n    _.each([\"image\", \"document\"], (type: string) => {\n      _.each(estimate.lineItems(), (li: IEstimateLineItem) => {\n        const files = li[type + \"s\"];\n        if ((_.isUndefined(li.product_id) || _.isNull(li.product_id)) && files.length > 0) {\n          _.each(files, (f: any) => {\n            if (f.id > 0) {\n              const fileDefer = $q.defer();\n              uploadPromises.push(fileDefer.promise);\n              const request = new XMLHttpRequest();\n              request.open(\"GET\", f.file.url, true);\n              request.responseType = \"blob\";\n              request.setRequestHeader(\"occ-authorization\", \"Bearer \" + token);\n              const app = this;\n              const file = f;\n              request.onload = function () {\n                const blob = request.response;\n                blob.name = file.name;\n                blob.original_filename = file.name;\n                FileQueue.uploadFile(type, \"estimate_templates\", app.id, blob, file.sort_order, file.display).then(\n                  (respObj) => {\n                    const group = _.find(app.template.groups, (g) => {\n                      return g.sort_order === li.estimateGroup.sort_order;\n                    });\n                    const custom_product = _.find(group.custom_products, (cp) => {\n                      return cp.sort_order === li.sort_order;\n                    });\n                    custom_product[type + \"_ids\"].push(respObj.id);\n                    EventingFactory.trackEvent(type + \" added from saved line item\", {\n                      estimate_template: app.id,\n                      [type]: respObj.id,\n                    });\n\n                    EstimatorService.updateTemplate(app as any as IEstimateTemplate).finally(() => {\n                      fileDefer.resolve(true);\n                    });\n                  },\n                );\n              };\n              request.send();\n            }\n          });\n        }\n      });\n    });\n    return $q.all(uploadPromises);\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/estimate_templates/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta = angular.fromJson(response);\n\n    _.each(meta.estimate_templates, (et, index) => {\n      meta.estimate_templates[index] = EstimateTemplate.fromJSON(et);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n    return EstimateTemplate.fromJSON(jsonData.estimate_template);\n  };\n\n  const EstimateTemplate: IEstimateTemplateResource = <IEstimateTemplateResource>$resource(\n    url,\n    { org_id: \"@org_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  EstimateTemplate.fromJSON = (data: any) => {\n    const et = new EstimateTemplate(data);\n    et.classy = \"EstimateTemplate\";\n\n    if (et.template && _.isArray(et.template.groups)) {\n      _.each(et.template.groups || [], (etg, index) => {\n        et.template.groups[index] = new EstimateTemplateGroup(etg);\n      });\n    }\n\n    if (_.isArray(et.images)) {\n      _.each(et.images, (image: IImage, index: number) => {\n        et.images[index] = resources.Image.fromJSON(image);\n      });\n    }\n\n    return et;\n  };\n\n  hiddenExtend(EstimateTemplate.prototype, EstimateTemplatePrototype.prototype);\n\n  EstimateTemplate.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return EstimateTemplate;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IMeasurementLinkResponse extends ng.resource.IResourceArray<IMeasurementLink> {\n  measurement_links: IMeasurementLink[];\n  meta: any;\n}\n\nexport interface IMeasureValue {\n  measurement: string;\n  formula: string;\n  formula_uom: string;\n}\n\nexport class MeasureValue implements IMeasureValue {\n  public measurement: string;\n  public formula: string;\n  public formula_uom: string;\n\n  constructor(jsonData?: any) {\n    if (jsonData) {\n      this.measurement = jsonData.measurement;\n      this.formula = jsonData.formula;\n      this.formula_uom = jsonData.formula_uom;\n    }\n  }\n}\n\nexport interface IMeasurementLink extends ng.resource.IResource<IMeasurementLink>, MeasurementLinkPrototype {\n  $update(): ng.IPromise<IMeasurementLink>;\n}\n\nexport interface IMeasurementLinkResource extends ng.resource.IResourceClass<IMeasurementLink>, IRsfResource {\n  create?(params: any): IMeasurementLink;\n  fromJSON?(data: any): IMeasurementLink;\n}\n\ntype MeasurementLinkKind = \"measurement\" | \"formula\" | \"interior_measurement\" | \"interior_formula\";\nexport const MeasurementLinkKinds: Array<MeasurementLinkKind> = [\"measurement\", \"formula\"];\n\nclass MeasurementLinkPrototype {\n  public id: number;\n  public item_uuid: string;\n  public measure_value: IMeasureValue;\n  public kind: MeasurementLinkKind;\n  public inherited: boolean;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/measurement_links/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta = angular.fromJson(response);\n\n    _.each(meta.measurement_links, (ml, index) => {\n      meta.measurement_links[index] = MeasurementLink.fromJSON(ml);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n    return MeasurementLink.fromJSON(jsonData.measurement_link);\n  };\n\n  const MeasurementLink: IMeasurementLinkResource = <IMeasurementLinkResource>$resource(\n    url,\n    { org_id: \"@org_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  MeasurementLink.fromJSON = (data: any) => {\n    const ml = new MeasurementLink(data);\n\n    if (ml.measure_value) {\n      ml.measure_value = new MeasureValue(ml.measure_value);\n    }\n\n    return ml;\n  };\n\n  hiddenExtend(MeasurementLink.prototype, MeasurementLinkPrototype.prototype);\n\n  MeasurementLink.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return MeasurementLink;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IOrg } from \"app/src/Models/Org\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { ISignedDocument } from \"app/src/Models/SignedDocument\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { dataURLToFile } from \"app2/src/helpers/File\";\nimport { toUnderscore } from \"app2/src/helpers/Format\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IDoc extends ng.resource.IResource<IDoc>, DocPrototype {\n  $update(): ng.IPromise<IDoc>;\n  $update(params?: Object, success?: Function, error?: Function): ng.IPromise<IDoc>;\n  $update(success: Function, error?: Function): ng.IPromise<IDoc>;\n\n  $import(): ng.IPromise<IDoc>;\n  $import(params?: Object, success?: Function, error?: Function): ng.IPromise<IDoc>;\n  $import(success: Function, error?: Function): ng.IPromise<IDoc>;\n}\n\nexport interface IDocResource extends ng.resource.IResourceClass<IDoc>, IRsfResource {\n  fromJSON?(data: any): IDoc;\n  tooltipHtml?(): string;\n}\n\nexport interface IDocFile {\n  url: string;\n}\n\nclass DocPrototype {\n  public id: number;\n  public file: IDocFile;\n  public name: string;\n  public documentable_id: number;\n  public documentable_type: string;\n  public sort_order: number;\n  public md5_sum: string;\n  public display: string;\n  public import_type: string;\n  public type: string;\n  public signed_document?: ISignedDocument;\n  public org?: IOrg;\n  public job?: IJob;\n  public created_at: Date;\n  public updated_at: Date;\n  public displayInProposal: boolean;\n  public displayInAgreement: boolean;\n  public displayInProposalWatermark: boolean;\n  public displayInAgreementWatermark: boolean;\n  public displayInResource: boolean;\n  public location?: string;\n  public _destroy: boolean;\n\n  public clone() {\n    //noinspection TypeScriptUnresolvedFunction\n    return resources.Doc.fromJSON(JSON.retrocycle(this.decycleToJSON()));\n  }\n\n  public decycleToJSON(): any {\n    return angular.fromJson(angular.toJson(JSON.decycle(this)));\n  }\n\n  public cloneMin(): any {\n    const clone_doc: IDoc = <IDoc>{};\n    clone_doc.id = this.id;\n    clone_doc.displayInProposal = this.displayInProposal;\n    clone_doc.displayInAgreement = this.displayInAgreement;\n\n    return clone_doc;\n  }\n\n  public merge(doc: { displayInAgreement: boolean; displayInProposal: boolean }): IDoc {\n    this.displayInAgreement = doc.displayInAgreement;\n    this.displayInProposal = doc.displayInProposal;\n\n    return this as any as IDoc;\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig): IDocResource => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/:documentable_type_url/:documentable_id/documents/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IDoc => {\n    if (status < 200 || status > 299) {\n      return new Doc({});\n    }\n\n    return Doc.fromJSON(JSON.parse(response).document);\n  };\n\n  const transformRequest = (doc: IDoc): string => {\n    const data = JSON.decycle(doc);\n    if (data.displayInProposal === true && data.displayInAgreement === true) {\n      data.display = \"both\";\n    } else if (data.displayInProposal === false && data.displayInAgreement === true) {\n      data.display = \"contract\";\n    } else if (data.displayInProposal === true && data.displayInAgreement === false) {\n      data.display = \"estimate\";\n    } else if (data.displayInProposalWatermark === true) {\n      data.display = \"estimate_watermark\";\n    } else if (data.displayInAgreementWatermark === true) {\n      data.display = \"contract_watermark\";\n    } else if (data.displayInResource === true) {\n      data.display = \"resource\";\n    } else {\n      data.display = \"do_not_display\";\n    }\n    delete data.displayInProposal;\n    delete data.displayInAgreement;\n    delete data.displayInProposalWatermark;\n    delete data.displayInAgreementWatermark;\n    delete data.displayInResource;\n    return angular.toJson({ document: data });\n  };\n\n  const responseMultiTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const data = JSON.parse(response);\n    _.each(data.documents, (user, index) => {\n      data.documents[index] = Doc.fromJSON(user);\n    });\n\n    return data;\n  };\n\n  const Doc: IDocResource = <IDocResource>$resource(\n    url,\n    { documentable_type_url: \"@documentable_type_url\", documentable_id: \"@documentable_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        transformResponse: responseMultiTransform,\n        isArray: false,\n      },\n      import: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformResponse: singleResponseTransform,\n        url: url + \"/import\",\n        params: {\n          type: \"@import_type\",\n        },\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n    },\n  );\n\n  Doc.fromJSON = (data: any): IDoc => {\n    if (data.documentable_type) {\n      data.documentable_type_url = toUnderscore(data.documentable_type) + \"s\";\n    }\n\n    data.type = \"document\";\n    data.displayInProposal = data.display === \"both\" || data.display === \"estimate\";\n    data.displayInAgreement = data.display === \"both\" || data.display === \"contract\";\n    data.displayInProposalWatermark = data.display === \"estimate_watermark\";\n    data.displayInAgreementWatermark = data.display === \"contract_watermark\";\n    data.displayInResource = data.display === \"resource\";\n    if (data.created_at) {\n      data.created_at = new Date(data.created_at as string);\n    }\n    if (data.updated_at) {\n      data.updated_at = new Date(data.updated_at as string);\n    }\n    return new Doc(data);\n  };\n\n  Doc.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  hiddenExtend(Doc.prototype, DocPrototype.prototype);\n\n  return Doc;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { dataURLToFile } from \"app2/src/helpers/File\";\nimport { toUnderscore } from \"app2/src/helpers/Format\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IImage extends ng.resource.IResource<IImage>, ImagePrototype {\n  $update(...args: any[]): ng.IPromise<IImage>;\n}\n\nexport interface IImageResource extends ng.resource.IResourceClass<IImage>, IRsfResource {\n  fromJSON?(data: any): IImage;\n}\n\nexport interface IImageResponse {\n  images: IImage[];\n  meta: any;\n}\n\nexport interface IImageFile {\n  url: string;\n}\n\nclass ImagePrototype {\n  public id: number;\n  public uuid: string;\n  public name: string;\n  public display: string;\n  public title: string;\n  public description: string;\n  public md5_sum: string;\n  public type: string;\n  public file: IImageFile;\n  public sort_order: number;\n  public imageable_type: string;\n  public imageable_id: number;\n  public imageable: any;\n  public displayInProposal: boolean;\n  public displayInAgreement: boolean;\n  public _destroy: boolean;\n  public _blob: string;\n\n  public getUrl(size) {\n    if (this._blob) {\n      return this._blob;\n    }\n\n    return this.file[size].url;\n  }\n\n  public clone() {\n    //noinspection TypeScriptUnresolvedFunction\n    return resources.Image.fromJSON(JSON.retrocycle(this.decycleToJSON()));\n  }\n\n  public decycleToJSON(): any {\n    return angular.fromJson(angular.toJson(JSON.decycle(this)));\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig): IImageResource => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/:imageable_type_url/:imageable_id/images/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IImage => {\n    if (status < 200 || status > 299) {\n      return new Image({});\n    }\n\n    return Image.fromJSON(JSON.parse(response).image);\n  };\n\n  const multipleResponseTransform = (\n    response: string,\n    headers: ng.IHttpHeadersGetter,\n    status: number,\n  ): IImageResponse => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const data = JSON.parse(response);\n\n    _.each(data.images, (i: any, index: number) => {\n      data.images[index] = Image.fromJSON(i);\n    });\n\n    return data;\n  };\n\n  const transformRequest = (image: IImage): string => {\n    const data = JSON.decycle(image);\n    if (data.imageable_type === \"Job\") {\n      if (data.displayInProposal === true && data.displayInAgreement === true) {\n        data.display = \"both\";\n      } else if (data.displayInProposal === false && data.displayInAgreement === true) {\n        data.display = \"contract\";\n      } else if (data.displayInProposal === true && data.displayInAgreement === false) {\n        data.display = \"estimate\";\n      } else {\n        data.display = \"do_not_display\";\n      }\n    }\n    delete data.displayInProposal;\n    delete data.displayInAgreement;\n    return angular.toJson({ image: data });\n  };\n\n  const Image: IImageResource = <IImageResource>$resource(\n    url,\n    { imageable_type_url: \"@imageable_type_url\", imageable_id: \"@imageable_id\", id: \"@id\" },\n    {\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: multipleResponseTransform,\n        isArray: false,\n      },\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n    },\n  );\n\n  Image.fromJSON = (data: any): IImage => {\n    if (data.imageable && data.imageable_type) {\n      switch (data.imageable_type) {\n        case \"Org\":\n          data.org = resources.Org.fromJSON(data.imageable);\n          data.imageable = data.org;\n          break;\n      }\n    }\n\n    data.type = \"image\";\n    if (data.imageable_type) {\n      data.imageable_type_url = data.imageable_type ? toUnderscore(data.imageable_type) + \"s\" : \"\";\n    }\n\n    switch (data.imageable_type) {\n      case \"Job\":\n        data.displayInProposal = data.display === \"both\" || data.display === \"estimate\";\n        data.displayInAgreement = data.display === \"both\" || data.display === \"contract\";\n        break;\n    }\n    if (data.created_at) {\n      data.created_at = new Date(data.created_at as string);\n    }\n    if (data.updated_at) {\n      data.updated_at = new Date(data.updated_at as string);\n    }\n    return new Image(data);\n  };\n\n  Image.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  hiddenExtend(Image.prototype, ImagePrototype.prototype);\n\n  return Image;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\n\nexport interface IPresentation extends ng.resource.IResource<IPresentation>, PresentationPrototype {\n  $update(): ng.IPromise<IPresentation>;\n  $update(params?: Object, success?: Function, error?: Function): ng.IPromise<IPresentation>;\n  $update(success: Function, error?: Function): ng.IPromise<IPresentation>;\n  $cover_image(): ng.IPromise<IPresentation>;\n  $create(): ng.IPromise<IPresentation>;\n}\n\nexport interface IPresentationResource extends ng.resource.IResourceClass<IPresentation>, IRsfResource {\n  fromJSON?(data: any): IPresentation;\n}\n\nexport interface IPresentationResponse {\n  images: IPresentation[];\n  meta: any;\n}\n\nexport interface IPresentationFile {\n  url: string;\n}\n\nclass PresentationPrototype {\n  public id: number;\n  public name: string;\n  public file: IPresentationFile;\n  public cover_image: IPresentationFile;\n  public html: string;\n  public sort_order: number;\n  public url: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig): IPresentationResource => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/presentations/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IPresentation => {\n    if (status < 200 || status > 299) {\n      return new Presentation({});\n    }\n\n    return Presentation.fromJSON(JSON.parse(response).presentation);\n  };\n\n  const multipleResponseTransform = (\n    response: string,\n    headers: ng.IHttpHeadersGetter,\n    status: number,\n  ): IPresentationResponse => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const data = JSON.parse(response);\n\n    _.each(data.presentations, (i: any, index: number) => {\n      data.presentations[index] = Presentation.fromJSON(i);\n    });\n\n    return data;\n  };\n\n  const transformRequest = (presentation: IPresentation): string => {\n    const data = JSON.decycle(presentation);\n\n    return angular.toJson({ presentation: data });\n  };\n\n  const Presentation: IPresentationResource = <IPresentationResource>$resource(\n    url,\n    { id: \"@id\", org_id: \"@org_id\" },\n    {\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: multipleResponseTransform,\n        isArray: false,\n      },\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      cover_image: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/cover_image\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n    },\n  );\n\n  Presentation.fromJSON = (data: any): IPresentation => {\n    return new Presentation(data);\n  };\n\n  Presentation.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Presentation;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IJob } from \"app/src/Models/Job\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\n\nexport interface INote extends ng.resource.IResource<INote>, NotePrototype {\n  $create(): ng.IPromise<INote>;\n  $create(params?: Object, success?: Function, error?: Function): ng.IPromise<INote>;\n  $create(success: Function, error?: Function): ng.IPromise<INote>;\n}\n\nexport interface INoteResource extends ng.resource.IResourceClass<INote>, IRsfResource {\n  fromJSON?(data: any): INote;\n}\n\nclass NotePrototype {\n  public id: number;\n  public note: string;\n  public name: string;\n  public user_id: number;\n  public noteable: any;\n  public noteable_id: number;\n  public noteable_type: string;\n  public job?: IJob;\n  public user: string;\n  public created_at: Date;\n  public updated_at: Date;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig): INoteResource => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/:noteable_type/:noteable_id/notes/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): INote => {\n    if (status < 200 || status > 299) {\n      return new Note({});\n    }\n\n    return Note.fromJSON(JSON.parse(response).note);\n  };\n\n  const transformRequest = (note: INote): string => {\n    const data = JSON.decycle(note);\n    return angular.toJson({ note: data });\n  };\n\n  const Note: INoteResource = <INoteResource>$resource(\n    url,\n    { noteable_type: \"@noteable_type\", noteable_id: \"@noteable_id\", id: \"@id\" },\n    {\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n    },\n  );\n\n  Note.fromJSON = (data: any): INote => {\n    if (data.noteable && data.noteable_type) {\n      switch (data.noteable_type) {\n        case \"Job\":\n          data.job = resources.Job.fromJSON(data.noteable);\n      }\n    }\n    return new Note(data);\n  };\n\n  Note.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Note;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { IUser } from \"app/src/Models/User\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nlet Event: IEventResource;\n\nexport interface IEvent extends ng.resource.IResource<IEvent>, EventPrototype {\n  $result(...args: any[]): ng.IPromise<Blob>;\n}\n\nexport interface IEventResource extends ng.resource.IResourceClass<IEvent>, IRsfResource {\n  fromJSON?(data: any): IEvent;\n}\n\nclass EventPrototype {\n  public id: number;\n  public user_id: number;\n  public user: IUser;\n  public job_id: number;\n  public job: IJob;\n  public summary: string;\n  public description: string;\n  public start_time: Date;\n  public end_time: Date;\n  public location: string;\n  public deleted: boolean;\n  public participation_status: string;\n  public transparency: string;\n  public event_status: string;\n  public categories: any;\n  public attendees: any;\n  public notes: string;\n\n  public events_result_id: number;\n  public events_result_reason_id: number;\n\n  public created_at: Date;\n  public updated_at: Date;\n\n  public metadata: IEventMetadata;\n\n  public clone(): IEvent {\n    return Event.fromJSON(JSON.parse(angular.toJson(this)));\n  }\n\n  public isMs(): boolean {\n    return !!this.metadata && this.metadata.marketsharp_id !== undefined && this.metadata.marketsharp_id != null;\n  }\n\n  public isI360(): boolean {\n    return (\n      !!this.metadata &&\n      this.metadata.improveit360_appointment_id !== undefined &&\n      this.metadata.improveit360_appointment_id != null\n    );\n  }\n\n  public isSr(): boolean {\n    return !!this.metadata && this.metadata.sales_rabbit_id !== undefined && this.metadata.sales_rabbit_id != null;\n  }\n\n  public isSalesforce(): boolean {\n    return (\n      !!this.metadata && this.metadata.salesforce_event_id !== undefined && this.metadata.salesforce_event_id != null\n    );\n  }\n\n  public isLeadPerfection(): boolean {\n    return (\n      !!this.metadata && this.metadata.lead_perfection_id !== undefined && this.metadata.lead_perfection_id != null\n    );\n  }\n\n  public $saveOrCreate(params?: any, callback?) {\n    if (this.id <= 0 || (this.id as any as string) === \"Unsaved\") {\n      return (this as any).$create(params, callback);\n    } else {\n      return (this as any).$save(params, callback);\n    }\n  }\n}\n\nexport interface IEventMetadata {\n  marketsharp_id?: string;\n  improveit360_appointment_id?: string;\n  cronofy_id?: string;\n  calendar_id?: string;\n  sales_rabbit_id?: string;\n  salesforce_event_id?: string;\n  lead_perfection_id?: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig): IEventResource => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/events/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IEvent => {\n    if (status < 200 || status > 299) {\n      return new Event({});\n    }\n    return Event.fromJSON(JSON.parse(response).event);\n  };\n\n  const transformRequest = (event: IEvent): string => {\n    const data = JSON.decycle(event);\n    return angular.toJson({ event: data });\n  };\n\n  Event = <IEventResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const meta = JSON.parse(response);\n\n          _.each(meta.events, (json, index) => {\n            meta.events[index] = Event.fromJSON(json);\n          });\n\n          return meta;\n        },\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      result: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        url: url + \"/result\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n    },\n  );\n\n  Event.fromJSON = (data: any): IEvent => {\n    if (data.job) {\n      data.job = resources.Job.fromJSON(data.job);\n    }\n    return new Event(data);\n  };\n\n  hiddenExtend(Event.prototype, EventPrototype.prototype);\n\n  Event.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Event;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IPagingMetadata } from \"app/src/Models/PagingMetadata\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IResult extends ng.resource.IResource<IResult>, ResultPrototype {}\n\nexport interface IResultResource extends ng.resource.IResourceClass<IResult>, IRsfResource {\n  fromJSON?(data: any): IResult;\n}\n\nexport interface IResultResponse extends ng.resource.IResourceArray<IResult> {\n  results: IResult[];\n  meta: IPagingMetadata;\n}\n\nclass ResultPrototype {\n  public id: number;\n\n  public $saveOrCreate(params?: any, callback?) {\n    if (this.id <= 0 || (this.id as any as string) === \"Unsaved\") {\n      return (this as any).$create(params, callback);\n    } else {\n      return (this as any).$save(params, callback);\n    }\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, $http: ng.IHttpService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/events/results/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IResult => {\n    if (status < 200 || status > 299) {\n      return new Result({});\n    }\n\n    return Result.fromJSON(JSON.parse(response).result);\n  };\n\n  const multiResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return { results: [], metadata: {} };\n    }\n\n    const meta: any = JSON.parse(response);\n\n    _.each(meta.results, (child, index) => {\n      meta.results[index] = Result.fromJSON(child);\n    });\n\n    return meta;\n  };\n\n  const transformRequest = (result: IResult): string => {\n    const data = JSON.decycle(result);\n    return angular.toJson({ result: data });\n  };\n\n  const Result: IResultResource = <IResultResource>$resource(\n    url,\n    {},\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: multiResponseTransform,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n      },\n    },\n  );\n\n  Result.fromJSON = (data: any): IResult => {\n    return new Result(data);\n  };\n\n  hiddenExtend(Result.prototype, ResultPrototype.prototype);\n\n  Result.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Result;\n};\n\nfactory.$inject = [\"$resource\", \"$http\", \"BaseConfig\"];\n\nexport default factory;\n","import { IPagingMetadata } from \"app/src/Models/PagingMetadata\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IResultReason extends ng.resource.IResource<IResultReason>, ResultReasonPrototype {}\n\nexport interface IResultReasonResource extends ng.resource.IResourceClass<IResultReason>, IRsfResource {\n  fromJSON?(data: any): IResultReason;\n}\n\nexport interface IResultReasonResponse extends ng.resource.IResourceArray<IResultReason> {\n  result_reasons: IResultReason[];\n  meta: IPagingMetadata;\n}\n\nclass ResultReasonPrototype {\n  public id: number;\n\n  public $saveOrCreate(params?: any, callback?) {\n    if (this.id <= 0 || (this.id as any as string) === \"Unsaved\") {\n      return (this as any).$create(params, callback);\n    } else {\n      return (this as any).$save(params, callback);\n    }\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, $http: ng.IHttpService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/events/result_reasons/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IResultReason => {\n    if (status < 200 || status > 299) {\n      return new ResultReason({});\n    }\n\n    return ResultReason.fromJSON(JSON.parse(response).result_reason);\n  };\n\n  const multiResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return { result_reasons: [], metadata: {} };\n    }\n\n    const meta: any = JSON.parse(response);\n\n    _.each(meta.result_reasons, (child, index) => {\n      meta.result_reasons[index] = ResultReason.fromJSON(child);\n    });\n\n    return meta;\n  };\n\n  const transformRequest = (result_reason: IResultReason): string => {\n    const data = JSON.decycle(result_reason);\n    return angular.toJson({ result_reason: data });\n  };\n\n  const ResultReason: IResultReasonResource = <IResultReasonResource>$resource(\n    url,\n    {},\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: multiResponseTransform,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n      },\n    },\n  );\n\n  ResultReason.fromJSON = (data: any): IResultReason => {\n    return new ResultReason(data);\n  };\n\n  hiddenExtend(ResultReason.prototype, ResultReasonPrototype.prototype);\n\n  ResultReason.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return ResultReason;\n};\n\nfactory.$inject = [\"$resource\", \"$http\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IPagingMetadata } from \"app/src/Models/PagingMetadata\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IScreenShare extends ng.resource.IResource<IScreenShare>, ScreenSharePrototype {\n  $stop?(): IScreenShare;\n  $stop?(params?: Object, success?: Function, error?: Function): IScreenShare;\n  $stop?(success: Function, error?: Function): IScreenShare;\n}\n\nexport interface IScreenShareResource extends ng.resource.IResourceClass<IScreenShare>, IRsfResource {\n  landing?(): IScreenShare;\n  landing?(params?: Object, success?: Function, error?: Function): IScreenShare;\n  landing?(success: Function, error?: Function): IScreenShare;\n\n  create?(): IScreenShare;\n  create?(params?: Object, success?: Function, error?: Function): IScreenShare;\n  create?(success: Function, error?: Function): IScreenShare;\n\n  fromJSON?(data: any): IScreenShare;\n}\n\nexport interface IScreenShareResponse extends ng.resource.IResourceArray<IScreenShare> {\n  screen_shares: IScreenShare[];\n  meta: IPagingMetadata;\n}\n\nclass ScreenSharePrototype {\n  public uuid: string;\n  public id: number;\n  public kind: string;\n  public uid: string;\n  public job_id: number;\n  public shared: boolean;\n  public start_time: Date;\n  public started: Date;\n  public ended: Date;\n  // noinspection JSUnusedGlobalSymbols\n  public event_id: number;\n  public estimate_id: number;\n  public metadata: any;\n  public created_at: Date;\n  public updated_at: Date;\n  public redirect_on_end_url: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/screen_shares/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta = angular.fromJson(response);\n\n    _.each(meta.screen_shares, (pt, index) => {\n      meta.screen_shares[index] = ScreenShare.fromJSON(pt);\n    });\n    return meta;\n  };\n\n  const transformSingle = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return new ScreenShare({});\n    }\n\n    const data = angular.fromJson(response);\n    return ScreenShare.fromJSON(data.screen_share);\n  };\n\n  const transformRequest = (data) => {\n    return angular.toJson({ screen_share: data });\n  };\n\n  const ScreenShare: IScreenShareResource = <IScreenShareResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: transformRequest,\n        transformResponse: transformSingle,\n      },\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n      stop: <ng.resource.IActionDescriptor>{\n        url: BaseConfig.BASE_URL + \"/api/v1/screen_shares/:id/stop\",\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      landing: <ng.resource.IActionDescriptor>{\n        url: BaseConfig.BASE_URL + \"/api/v1/screen_shares/landing\",\n        method: \"GET\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n    },\n  );\n\n  ScreenShare.fromJSON = (data: any) => {\n    return new ScreenShare(data);\n  };\n\n  hiddenExtend(ScreenShare.prototype, ScreenSharePrototype.prototype);\n  ScreenShare.prototype.payment_term_items = [];\n\n  ScreenShare.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return ScreenShare;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IDoc } from \"app/src/Models/Doc\";\nimport { ISignedDocumentRecipient } from \"app/src/Models/SignedDocumentRecipient\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\n\nexport interface ISignedDocument extends ng.resource.IResource<ISignedDocument>, SignedDocumentPrototype {\n  $email(): ng.IPromise<ISignedDocument>;\n  $email(params?: Object, success?: Function, error?: Function): ng.IPromise<ISignedDocument>;\n  $email(success: Function, error?: Function): ng.IPromise<ISignedDocument>;\n}\n\nexport interface ISignedDocumentResponse extends ng.resource.IResourceArray<ISignedDocument> {\n  signed_documents: ISignedDocument[];\n  meta: any;\n}\n\nexport interface ISignedDocumentResource extends ng.resource.IResourceClass<ISignedDocument>, IRsfResource {\n  fromJSON?(data: any): ISignedDocument;\n\n  create?(): ISignedDocument;\n  create?(params?: Object, success?: Function, error?: Function): ISignedDocument;\n  create?(success: Function, error?: Function): ISignedDocument;\n\n  email?(): ISignedDocument;\n  email?(params?: Object, success?: Function, error?: Function): ISignedDocument;\n  email?(success: Function, error?: Function): ISignedDocument;\n}\n\nclass SignedDocumentPrototype {\n  public document: IDoc;\n  public estimate: IEstimate;\n  public recipients: ISignedDocumentRecipient[];\n  public signed_document: ISignedDocument;\n\n  public id: number;\n  public status: string;\n  public guid: string;\n  public document_id: number;\n  public estimate_id: number;\n  public rs_created_at: Date;\n  public rs_completed_at: Date;\n  public rs_last_activity_at: Date;\n  public rs_expires_on: Date;\n  public is_trashed: boolean;\n  public size: string;\n  public content_type: string;\n  public original_filename: string;\n  public signed_pdf_checksum: string;\n  public subject: string;\n  public message: string;\n  public processing_state: string;\n  public merge_state: string;\n  public state: string;\n  public callback_location: string;\n  public tags: string;\n  public created_at: Date;\n  public updated_at: Date;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/signed_documents/:id\";\n\n  const transformSingleResponse = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return new SignedDocument({});\n    }\n\n    const data = JSON.parse(response);\n\n    return SignedDocument.fromJSON(data.signed_document);\n  };\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number): ISignedDocument => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta = angular.fromJson(response);\n\n    _.each(meta.signed_documents, (sd, index) => {\n      meta.signed_documents[index] = SignedDocument.fromJSON(sd);\n    });\n\n    return meta;\n  };\n\n  const transformSingleRequest = (signedDocument: ISignedDocument) => {\n    const data = JSON.parse(angular.toJson(signedDocument));\n\n    if (data.estimate) {\n      data.estimate_id = data.estimate.id;\n      delete data.estimate;\n    }\n\n    return JSON.stringify({ signed_document: data });\n  };\n\n  const SignedDocument: ISignedDocumentResource = <ISignedDocumentResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: BaseConfig.BASE_URL + \"/api/v1/estimates/:estimate_id/signed_documents\",\n        transformRequest: transformSingleRequest,\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      email: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: (signedDocument: ISignedDocument) => {\n          return JSON.stringify({ id: signedDocument.id });\n        },\n        url: url + \"/notify\",\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        paramSerializer: \"$httpParamSerializerJQLike\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  SignedDocument.fromJSON = (data: any) => {\n    return new SignedDocument(data);\n  };\n\n  SignedDocument.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return SignedDocument;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface ISignedDocumentRecipient\n  extends ng.resource.IResource<ISignedDocumentRecipient>,\n    SignedDocumentRecipientPrototype {\n  $email(): ng.IPromise<ISignedDocumentRecipient>;\n  $email(params?: Object, success?: Function, error?: Function): ng.IPromise<ISignedDocumentRecipient>;\n  $email(success: Function, error?: Function): ng.IPromise<ISignedDocumentRecipient>;\n}\n\nexport interface ISignedDocumentRecipientResource\n  extends ng.resource.IResourceClass<ISignedDocumentRecipient>,\n    IRsfResource {\n  sign?(): ISignedDocumentRecipient;\n  sign?(params?: Object, success?: Function, error?: Function): ISignedDocumentRecipient;\n  sign?(success: Function, error?: Function): ISignedDocumentRecipient;\n  email?(): ISignedDocumentRecipient;\n  email?(params?: Object, success?: Function, error?: Function): ISignedDocumentRecipient;\n  email?(success: Function, error?: Function): ISignedDocumentRecipient;\n\n  viewed?(params?): ISignedDocumentRecipient;\n\n  fromJSON?(data: any): ISignedDocumentRecipient;\n}\n\nclass SignedDocumentRecipientPrototype {\n  public id: number;\n  public signature_guid: string;\n  public status: string;\n  public rs_url: string;\n  public name: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/signed_document_recipients/:id\";\n\n  const transformSingle = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return new SignedDocumentRecipient({});\n    }\n\n    const meta = angular.fromJson(response);\n    return SignedDocumentRecipient.fromJSON(meta.signed_document_recipient);\n  };\n\n  const SignedDocumentRecipient: ISignedDocumentRecipientResource = <ISignedDocumentRecipientResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      sign: <ng.resource.IActionDescriptor>{\n        url: BaseConfig.BASE_URL + \"/api/v1/signed_documents/sign\",\n        method: \"GET\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n    },\n  );\n\n  SignedDocumentRecipient.fromJSON = (data: any) => {\n    return new SignedDocumentRecipient(data);\n  };\n\n  hiddenExtend(SignedDocumentRecipient.prototype, SignedDocumentRecipientPrototype.prototype);\n\n  SignedDocumentRecipient.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return SignedDocumentRecipient;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IProductOption } from \"app/src/Models/ProductOption\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IEstimateLineItemOption } from \"./EstimateLineItemOption\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IProductOptionGroupsMatch {\n  matched: IProductOptionGroup[];\n  uuid: string;\n  match_id: string;\n  name: string;\n  selection_mode: string;\n  pog_type: string;\n  option_count: number;\n  product_count: number;\n  option_group_count: number;\n  option_group_ids: number[];\n  show: boolean;\n  sort_order: number;\n  price_list_id: number;\n  options: IProductOption[];\n}\n\nexport interface IProductOptionGroup extends ng.resource.IResource<IProductOptionGroup>, ProductOptionGroupPrototype {\n  show?: boolean;\n  $saveOrCreate(...args: any[]): ng.IPromise<IProductOptionGroup>;\n  $create(): ng.IPromise<IProductOptionGroup>;\n  $save(): ng.IPromise<IProductOptionGroup>;\n}\n\nexport interface IProductOptionGroupResource extends ng.resource.IResourceClass<IProductOptionGroup>, IRsfResource {\n  fromJSON?(data: any): IProductOptionGroup;\n  bulk?(data: any): IProductOptionGroup[];\n  query_match?(data: any): IOptionGroupsMatchResponse;\n  byMatchId?(data: any): IProductOptionGroupResponse;\n  groupOptionGroupsByMatchId?(array: IProductOptionGroup[]): IProductOptionGroupsMatch[];\n  groupOptionGroupsByUuid?(array: IProductOptionGroup[]): IProductOptionGroupsMatch[];\n}\n\nexport interface IProductOptionGroupResponse extends ng.resource.IResourceArray<IProductOptionGroup> {\n  product_option_groups: IProductOptionGroup[];\n  meta: any;\n}\n\nexport interface IOptionGroupsMatchResponse extends ng.resource.IResource<IOptionGroupsMatchResponse> {\n  option_groups_matches: IProductOptionGroupsMatch[];\n  price_list_id: number;\n  meta: any;\n}\n\nexport class ProductOptionGroupPrototype {\n  public id: number;\n  public classy: string;\n  public name: string;\n  public uuid: string;\n  public match_id: string;\n  public price_list_id: number;\n  public selection_mode: string;\n  public pog_type: string;\n  public product_ids: number[];\n  public options: IProductOption[];\n  public options_count: number;\n  public sort_order: number;\n  public created_at: Date;\n  public updated_at: Date;\n  public check: boolean;\n\n  public $saveOrCreate(params, callback) {\n    if (!this.id || this.id <= 0) {\n      return (<any>this).$create(params, callback);\n    } else {\n      return (<any>this).$save(params, callback);\n    }\n  }\n\n  public copyValues(from: IProductOptionGroup) {\n    for (const key in from) {\n      if (from.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        this[key] = from[key];\n      }\n    }\n  }\n\n  public optionSelected(lineItem) {\n    const option_uuids = _.pluck(this.options, \"uuid\");\n    return _.chain(lineItem.existingOptions())\n      .any((elio: IEstimateLineItemOption) => {\n        return _.contains(option_uuids, elio.product_option_uuid);\n      })\n      .value();\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/product_option_groups/:id\";\n  const nested_url = BaseConfig.BASE_URL + \"/api/v1/price_lists/:price_list_id/product_option_groups/:id\";\n  let bulk_request: IProductOptionGroup[];\n\n  const transformBulkResponse = (\n    response: string,\n    headers: ng.IHttpHeadersGetter,\n    status: number,\n  ): IProductOptionGroup[] => {\n    if (status < 200 || status > 299) {\n      return [];\n    }\n\n    const product_option_groups = JSON.parse(response).product_option_groups;\n    _.each(bulk_request, (pog) => {\n      const found_pog = _.find(product_option_groups, (rpog: any) => {\n        return rpog.id === pog.id;\n      });\n      if (found_pog !== undefined) {\n        pog.name = found_pog.name;\n        pog.selection_mode = found_pog.selection_mode;\n        pog.pog_type = found_pog.pog_type;\n        pog.match_id = found_pog.match_id;\n        pog.sort_order = found_pog.sort_order;\n      }\n    });\n    return bulk_request;\n  };\n\n  const transformBulkRequest = (data: any): string => {\n    bulk_request = data.edit_product_option_groups;\n    let ids = [];\n    if (_.isEmpty(bulk_request)) {\n      ids = data.pog_ids;\n    } else {\n      ids = _.pluck(bulk_request, \"id\");\n    }\n\n    return angular.toJson({ ids: ids, product_option_group: data.product_option_group });\n  };\n\n  const transformSingleResponse = (\n    response: string,\n    headers: ng.IHttpHeadersGetter,\n    status: number,\n  ): IProductOptionGroup => {\n    if (status < 200 || status > 299) {\n      return new ProductOptionGroup({});\n    }\n\n    const data: any = JSON.parse(response).product_option_group;\n\n    return ProductOptionGroup.fromJSON(data);\n  };\n\n  const transformMultipleResponse = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta: any = JSON.parse(response);\n\n    _.each(meta.product_option_groups, (child, index) => {\n      meta.product_option_groups[index] = ProductOptionGroup.fromJSON(child);\n    });\n\n    return meta;\n  };\n\n  const requestTransform = (product_option_group: IProductOptionGroup): string => {\n    //noinspection TypeScriptUnresolvedFunction\n    const data = JSON.parse(angular.toJson(JSON.decycle(product_option_group)));\n\n    return angular.toJson({ product_option_group: data });\n  };\n\n  const ProductOptionGroup: IProductOptionGroupResource = <IProductOptionGroupResource>$resource(\n    url,\n    { id: \"@id\", price_list_id: \"@price_list_id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultipleResponse,\n        isArray: false,\n      },\n      byMatchId: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: nested_url + \"/match_id/:match_id\",\n        transformResponse: transformMultipleResponse,\n        isArray: false,\n      },\n      query_match: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: nested_url + \"/index_match\",\n        transformResponse: (response: string) => {\n          return JSON.parse(response);\n        },\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: requestTransform,\n        transformResponse: transformSingleResponse,\n      },\n      bulk: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        url: nested_url + \"/update_bulk\",\n        isArray: true,\n        transformRequest: transformBulkRequest,\n        transformResponse: transformBulkResponse,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: nested_url,\n        transformRequest: requestTransform,\n        transformResponse: transformSingleResponse,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n      },\n    },\n  );\n\n  ProductOptionGroup.fromJSON = (data: any) => {\n    data.classy = \"ProductOptionGroup\";\n    if (_.isArray(data.options)) {\n      _.each(data.options, (opt, idx) => {\n        data.options[idx] = resources.ProductOption.fromJSON(opt);\n      });\n    } else {\n      data.options = [];\n    }\n\n    if (!data.match_id) {\n      data.match_id = data.uuid;\n    }\n\n    return new ProductOptionGroup(data);\n  };\n\n  ProductOptionGroup.groupOptionGroupsByMatchId = (array: IProductOptionGroup[]) => {\n    const array_of_objects = [];\n    const groups = _.groupBy(array, \"match_id\");\n    _.each(Object.keys(groups), (match_id) => {\n      let option_count = 0;\n      let product_count = 0;\n      _.each(groups[match_id], (pog) => {\n        option_count += pog.options_count;\n        product_count += pog.product_ids.length;\n      });\n      array_of_objects.push({\n        match_id: match_id,\n        name: groups[match_id][0].name,\n        selection_mode: groups[match_id][0].selection_mode,\n        pog_type: groups[match_id][0].pog_type,\n        option_count: option_count,\n        option_group_count: groups[match_id].length,\n        product_count: product_count,\n        matched: groups[match_id],\n        show: false,\n        sort_order: groups[match_id][0].sort_order,\n        price_list_id: groups[match_id][0].price_list_id,\n      });\n    });\n    return array_of_objects;\n  };\n\n  ProductOptionGroup.groupOptionGroupsByUuid = (array: IProductOptionGroup[]) => {\n    const array_of_objects = [];\n    const groups = _.groupBy(array, \"uuid\");\n    _.each(Object.keys(groups), (uuid) => {\n      let option_count = 0;\n      let product_count = 0;\n      _.each(groups[uuid], (pog) => {\n        option_count += pog.options_count;\n        product_count += pog.product_ids.length;\n      });\n      array_of_objects.push({\n        uuid: uuid,\n        name: groups[uuid][0].name,\n        selection_mode: groups[uuid][0].selection_mode,\n        pog_type: groups[uuid][0].pog_type,\n        option_count: option_count,\n        option_group_count: groups[uuid].length,\n        product_count: product_count,\n        matched: groups[uuid],\n        show: false,\n        sort_order: groups[uuid][0].sort_order,\n        price_list_id: groups[uuid][0].price_list_id,\n      });\n    });\n    return array_of_objects;\n  };\n\n  hiddenExtend(ProductOptionGroup.prototype, ProductOptionGroupPrototype.prototype);\n\n  ProductOptionGroup.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return ProductOptionGroup;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IProductOptionGroup } from \"app/src/Models/ProductOptionGroup\";\nimport { IImage } from \"app/src/Models/Image\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport { Actions } from \"app2/src/reducers/sku.actions\";\nimport { ISkuData } from \"app2/src/records/Sku\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IProductOptionsMatch {\n  matched: IProductOption[];\n  match_id: string;\n  name: string;\n  description: string;\n  product_price: number;\n  show: boolean;\n  sort_order: number;\n}\n\nexport interface IProductOptionResource extends ng.resource.IResourceClass<IProductOption>, IRsfResource {\n  fromJSON?(data: any): IProductOption;\n  bulk?(data: any): IProductOption[];\n  groupOptionsByMatchId?(array: IProductOption[]): IProductOptionsMatch[];\n  groupOptionsByUuid?(array: IProductOption[]): IProductOptionsMatch[];\n  byGroupMatchId?(data: any): IProductOption[];\n}\n\nexport interface IProductOption extends ng.resource.IResource<IProductOption>, ProductOptionPrototype {\n  check?: boolean;\n  quantity?: number;\n\n  $create(): ng.IPromise<IProductOption>;\n  $save(): ng.IPromise<IProductOption>;\n}\n\nexport interface IProductOptionResponse extends ng.resource.IResourceArray<IProductOption> {\n  product_options: IProductOption[];\n  meta: any;\n}\n\nexport class ProductOptionPrototype {\n  public id: number;\n  public classy: string;\n  public uuid: string;\n  public match_id: string;\n  public option_group_id: number;\n  public name: string;\n  public uom: string;\n  public description: string;\n  public cost: number;\n  public msrp: number;\n  public labor_price: number;\n  public product_price: number;\n  public price: number;\n  public sort_order: number;\n  public created_at: Date;\n  public updated_at: Date;\n  public images: IImage[];\n  public charge_type: string;\n  public pog_type: string;\n  public sku_id?: number;\n  public sku?: ISkuData;\n\n  public product_option_group: IProductOptionGroup;\n\n  public copyValues(from: IProductOption) {\n    for (const key in from) {\n      if (from.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        this[key] = from[key];\n      }\n    }\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/product_option_groups/:option_group_id/product_options/:id\";\n  const nested_url = BaseConfig.BASE_URL + \"/api/v1/price_lists/:price_list_id/product_options/:id\";\n  let bulk_request: IProductOption[];\n\n  const transformBulkResponse = (\n    response: string,\n    headers: ng.IHttpHeadersGetter,\n    status: number,\n  ): IProductOption[] => {\n    if (status < 200 || status > 299) {\n      return [];\n    }\n    const product_options = JSON.parse(response).product_options;\n    _.each(bulk_request, (po: any) => {\n      const found_option = _.find(product_options, (rpo: any) => {\n        return rpo.id === po.id;\n      });\n      if (found_option !== undefined) {\n        po.name = found_option.name;\n        po.description = found_option.description;\n        po.match_id = found_option.match_id;\n        po.sort_order = found_option.sort_order;\n      }\n    });\n    return bulk_request;\n  };\n\n  const transformBulkRequest = (data: any): string => {\n    bulk_request = data.edit_product_options;\n    const ids = _.pluck(bulk_request, \"id\");\n\n    return angular.toJson({ option_group_id: data.option_group_id, ids: ids, product_option: data.product_option });\n  };\n\n  const transformSingleResponse = (response: string): IProductOption => {\n    const data: any = JSON.parse(response).product_option;\n\n    if (data.sku) {\n      data.sku_id = data.sku.id;\n      dispatch(Actions.receiveSku(data.sku));\n    } else {\n      data.sku_id = 0;\n    }\n\n    return ProductOption.fromJSON(data);\n  };\n\n  const transformMultipleResponse = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta: any = JSON.parse(response);\n\n    _.each(meta.product_options, (child, index) => {\n      meta.product_options[index] = ProductOption.fromJSON(child);\n    });\n\n    return meta;\n  };\n\n  const requestTransform = (product_option: IProductOption): string => {\n    //noinspection TypeScriptUnresolvedFunction\n    const data = JSON.parse(angular.toJson(JSON.decycle(product_option)));\n\n    return angular.toJson({ product_option: data });\n  };\n\n  const ProductOption: IProductOptionResource = <IProductOptionResource>$resource(\n    url,\n    { id: \"@id\", option_group_id: \"@option_group_id\", price_list_id: \"@price_list_id\", \"include[]\": [\"sku\"] },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: requestTransform,\n        transformResponse: transformSingleResponse,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: requestTransform,\n        transformResponse: transformSingleResponse,\n      },\n      bulk: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        url: nested_url + \"/update_bulk\",\n        isArray: true,\n        transformRequest: transformBulkRequest,\n        transformResponse: transformBulkResponse,\n      },\n      byGroupMatchId: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: nested_url + \"/match_id/:option_group_match_id\",\n        isArray: false,\n        transformResponse: transformMultipleResponse,\n      },\n    },\n  );\n\n  ProductOption.fromJSON = (data: any) => {\n    data.classy = \"ProductOption\";\n    if (_.isArray(data.images)) {\n      _.each(data.images, (image, idx) => {\n        data.images[idx] = resources.Image.fromJSON(image);\n      });\n    } else {\n      data.images = [];\n    }\n\n    if (!data.match_id) {\n      data.match_id = data.uuid;\n    }\n\n    if (data.sku) {\n      data.sku_id = data.sku.id;\n    } else {\n      data.sku_id = 0;\n    }\n\n    return new ProductOption(data);\n  };\n\n  ProductOption.groupOptionsByMatchId = (array: IProductOption[]) => {\n    const array_of_objects = [];\n    const groups = _.groupBy(array, \"match_id\");\n    _.each(Object.keys(groups), (match_id) => {\n      array_of_objects.push({\n        match_id: match_id,\n        name: groups[match_id][0].name,\n        description: groups[match_id][0].description,\n        price: groups[match_id][0].price,\n        uom: groups[match_id][0].uom,\n        matched: groups[match_id],\n        show: false,\n        sort_order: groups[match_id][0].sort_order,\n      });\n    });\n    return _.sortBy(array_of_objects, \"sort_order\");\n  };\n\n  ProductOption.groupOptionsByUuid = (array: IProductOption[]) => {\n    const array_of_objects = [];\n    const groups = _.groupBy(array, \"uuid\");\n    _.each(Object.keys(groups), (uuid) => {\n      array_of_objects.push({\n        uuid: uuid,\n        name: groups[uuid][0].name,\n        description: groups[uuid][0].description,\n        price: groups[uuid][0].price,\n        uom: groups[uuid][0].uom,\n        matched: groups[uuid],\n        show: false,\n        sort_order: groups[uuid][0].sort_order,\n      });\n    });\n    return _.sortBy(array_of_objects, \"sort_order\");\n  };\n\n  hiddenExtend(ProductOption.prototype, ProductOptionPrototype.prototype);\n\n  ProductOption.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return ProductOption;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IChameleonEvent } from \"app/src/Visualization/Chameleon/ChameleonEvent\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\nconst baseChameleon = \"https://remotesfcontractor-v1.chameleonpower.com\";\nconst chameleonCode = \"?ccode=\";\n\nexport interface IVisualization extends ng.resource.IResource<IVisualization>, VisualizationPrototype {\n  $create(): ng.IPromise<IVisualization>;\n  $create(params?: Object, success?: Function, error?: Function): ng.IPromise<IVisualization>;\n  $create(success: Function, error?: Function): ng.IPromise<IVisualization>;\n  $email?(params?: any): ng.IPromise<IVisualization>;\n}\n\nexport interface IVisualizationResource extends ng.resource.IResourceClass<IVisualization>, IRsfResource {\n  create?(params: any, data?: any): IVisualization;\n  fromJSON?(data: any): IVisualization;\n  buildNewProjectUrl?(kind: string, ccode: string, postalCode: string, chameleonUrl: string, userInfo: string): string;\n}\n\nclass VisualizationPrototype {\n  public id: number;\n  public job_id: number;\n  public name: string;\n  public kind: string;\n  public target: string;\n  public data: any;\n  public created_at: Date;\n  public updated_at: Date;\n  public sort_order: number;\n\n  public getUrl(chameleon_url: string, userInfo = \"\") {\n    let url = \"\";\n    const e: IChameleonEvent = this.data;\n\n    switch (this.kind) {\n      case \"chameleon\":\n        url = baseChameleon + \"/\" + chameleonCode + e.ccode;\n        url = url + \"/#/scene/\" + e.specifier;\n        url = url + \"/products/\" + e.sel;\n        break;\n      case \"chameleon_v2\":\n        url = chameleon_url;\n        url = url + \"/#/scene/\" + e.specifier;\n        url = url + \"/products/\" + e.sel;\n        url = url + \"&user=\" + userInfo;\n        break;\n    }\n\n    return url;\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/jobs/:job_id/visualizations/:id\";\n\n  const transformSingle = (response: string, headers: ng.IHttpHeadersGetter, status: number): IVisualization => {\n    if (status < 200 || status > 299) {\n      return new Visualization({});\n    }\n    return Visualization.fromJSON(JSON.parse(response).visualization);\n  };\n\n  const transformRequest = (visualization: IVisualization) => {\n    const data = JSON.parse(angular.toJson(JSON.decycle(visualization)));\n\n    return angular.toJson({ visualization: data });\n  };\n\n  const Visualization: IVisualizationResource = <IVisualizationResource>$resource(\n    url,\n    { job_id: \"@job_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: transformRequest,\n        transformResponse: transformSingle,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: transformSingle,\n      },\n      email: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/email\",\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const meta = JSON.parse(response);\n\n          _.each(meta.visualizations, (jsonVisualization, index) => {\n            meta.visualizations[index] = Visualization.fromJSON(jsonVisualization);\n          });\n\n          return meta;\n        },\n        isArray: false,\n      },\n    },\n  );\n\n  hiddenExtend(Visualization.prototype, VisualizationPrototype.prototype);\n\n  Visualization.fromJSON = (data: any) => {\n    return new Visualization(data);\n  };\n\n  Visualization.buildNewProjectUrl = (\n    kind: string,\n    ccode: string,\n    postalCode: string,\n    chameleonUrl: string,\n    userInfo: string,\n  ) => {\n    switch (kind) {\n      case \"chameleon\":\n        return baseChameleon + \"/\" + chameleonCode + ccode + \"&zip=\" + postalCode;\n      case \"chameleon_v2\":\n        return chameleonUrl + \"&user=\" + userInfo;\n    }\n  };\n\n  Visualization.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Visualization;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface ICalendar extends ng.resource.IResource<ICalendar>, CalendarPrototype {\n  $syncEvents?(): ng.IPromise<ICalendar>;\n}\n\nexport interface ICalendarResource extends ng.resource.IResourceClass<ICalendar>, IRsfResource {\n  sync?(): ICalendar;\n  fromJSON?(data: any): ICalendar;\n}\n\nexport interface ICalendarResponse extends ng.resource.IResourceArray<ICalendar> {\n  calendars: ICalendar[];\n}\n\nclass CalendarPrototype {\n  public id: number;\n  public user_id: number;\n  public calendar_id: string;\n  public sync_dir: number;\n  public is_deleted: boolean;\n  public is_primary: boolean;\n  public is_readonly: boolean;\n  public metadata: any;\n  public name: string;\n  public provider: number;\n  public created_at: Date;\n  public updated_at: Date;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, $http: ng.IHttpService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/users/calendars/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): ICalendar => {\n    if (status < 200 || status > 299) {\n      return new Calendar({});\n    }\n\n    return Calendar.fromJSON(JSON.parse(response).calendar);\n  };\n\n  const multiResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return { calendars: [], metadata: {} };\n    }\n\n    const meta: any = JSON.parse(response);\n\n    _.each(meta.calendars, (child, index) => {\n      meta.calendars[index] = Calendar.fromJSON(child);\n    });\n\n    return meta;\n  };\n\n  const transformRequest = (calendar: ICalendar): string => {\n    const data = JSON.decycle(calendar);\n    return angular.toJson({ calendar: data });\n  };\n\n  const Calendar: ICalendarResource = <ICalendarResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: multiResponseTransform,\n        isArray: false,\n      },\n      syncEvents: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: BaseConfig.BASE_URL + \"/api/v1/users/calendars/:id/sync\",\n      },\n      sync: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: BaseConfig.BASE_URL + \"/api/v1/users/calendars/sync\",\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n      },\n    },\n  );\n\n  Calendar.fromJSON = (data: any): ICalendar => {\n    return new Calendar(data);\n  };\n\n  hiddenExtend(Calendar.prototype, CalendarPrototype.prototype);\n\n  Calendar.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Calendar;\n};\n\nfactory.$inject = [\"$resource\", \"$http\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IAddress } from \"app/src/Models/Address\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport class IReportDiscount {\n  public name: string;\n  public discount: number;\n}\n\nexport interface IReportResponse extends ng.resource.IResourceArray<IReport> {\n  reports: IReport[];\n  meta: any;\n}\n\nexport interface IReportResource extends ng.resource.IResourceClass<IReport>, IRsfResource {\n  reportsAvailable: string[];\n\n  create?(params: any): IReport;\n  check?(params: any): any;\n  pricing?(params: any): any;\n  imagery_available?(params: any): any;\n  fromJSON?(data: any): IReport;\n}\n\nexport interface IReport extends ng.resource.IResource<IReport>, ReportPrototype {\n  $create(): ng.IPromise<IReport>;\n  $createAtOrg(): ng.IPromise<IReport>;\n}\n\nclass ReportPrototype {\n  public id: number;\n  public classy: string;\n  public job_id: number;\n  public org_id: number;\n  public user_id: number;\n  public billing_order_item_id: number;\n  public kind: string;\n  public order_data: any;\n  public order_items: any;\n  public order_result: any;\n  public metadata: any;\n  public provider: string;\n  public status: string;\n  public updated_at: Date;\n  public created_at: Date;\n  public delivered_at: Date;\n\n  public prettyId() {\n    if (\n      _.isNull(this.metadata[\"order_id\"]) ||\n      _.isUndefined(this.metadata[\"order_id\"]) ||\n      this.metadata[\"order_id\"] === \"\"\n    ) {\n      return this.id;\n    } else {\n      return this.metadata[\"order_id\"];\n    }\n  }\n\n  public partialUrl(type: string) {\n    return \"src/Reports/partials/\" + this.provider + \"/\" + type + \".html\";\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = (\n  $resource: ng.resource.IResourceService,\n  BaseConfig: IBaseConfig,\n  US_STATES_ABBREV,\n  COUNTRIES_ABBREV,\n) => {\n  const nested_url = BaseConfig.BASE_URL + \"/api/v1/jobs/:job_id/reports/:id\";\n  const org_nested_url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/reports/:id\";\n  const url = BaseConfig.BASE_URL + \"/api/v1/reports/:id\";\n\n  const transformSingleResponse = (response: string, headers: ng.IHttpHeadersGetter, status: number): IReport => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const data: any = JSON.parse(response).report;\n\n    return Report.fromJSON(data);\n  };\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number): IReport => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta = angular.fromJson(response);\n\n    _.each(meta.reports, (rp, index) => {\n      meta.reports[index] = Report.fromJSON(rp);\n    });\n\n    return meta;\n  };\n\n  const transformPricingResponse = (response: string, headers: ng.IHttpHeadersGetter, status: number): any => {\n    const data: any = JSON.parse(response);\n\n    _.each(data.skus, (s_data: any, idx: number) => {\n      data.skus[idx] = resources.Sku.fromJSON(s_data);\n    });\n\n    return data;\n  };\n\n  const requestTransform = (report: IReport): string => {\n    //noinspection TypeScriptUnresolvedFunction\n    const data = JSON.parse(angular.toJson(JSON.decycle(report)));\n\n    return angular.toJson({ report: data });\n  };\n\n  const Report: IReportResource = <IReportResource>$resource(\n    url,\n    { id: \"@id\", job_id: \"@job_id\", org_id: \"@org_id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingleResponse,\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        paramSerializer: \"$httpParamSerializerJQLike\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: requestTransform,\n        transformResponse: transformSingleResponse,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: nested_url,\n        transformRequest: requestTransform,\n        transformResponse: transformSingleResponse,\n      },\n      createAtOrg: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: org_nested_url,\n        transformRequest: requestTransform,\n        transformResponse: transformSingleResponse,\n      },\n      check: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/check\",\n      },\n      pricing: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: url + \"/pricing\",\n        transformResponse: transformPricingResponse,\n      },\n      imagery_available: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: url + \"/imagery_available\",\n      },\n    },\n  );\n\n  Report.reportsAvailable = [\n    \"eagleview_roofing\",\n    \"hover\",\n    \"quick_measure_roofing\",\n    \"roof_scope_roofing\",\n    \"plnar_interior\",\n  ];\n\n  Report.fromJSON = (data: any) => {\n    data.classy = \"Report\";\n\n    if (data.provider === \"wvs\" && data.order_result) {\n      if (data.order_result.endDate) {\n        data.order_result.endDate = data.order_result.endDate.replace(\" \", \"T\");\n      }\n      if (data.order_result.startDate) {\n        data.order_result.startDate = data.order_result.startDate.replace(\" \", \"T\");\n      }\n    }\n\n    return new Report(data);\n  };\n\n  Report.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  hiddenExtend(Report.prototype, ReportPrototype.prototype);\n\n  return Report;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\", \"US_STATES_ABBREV\", \"COUNTRIES_ABBREV\"];\n\nexport default factory;\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IPatternResponse extends ng.resource.IResourceArray<IPattern> {\n  patterns: IPattern[];\n  meta: any;\n}\n\nexport interface IPattern extends ng.resource.IResource<IPattern>, PatternPrototype {\n  $delete_global(): ng.IPromise<IPattern>;\n}\n\nexport interface IPatternResource extends ng.resource.IResourceClass<IPattern>, IRsfResource {\n  fromJSON?(data: any): IPattern;\n  query_global?(data?: any): IPatternResponse;\n}\n\nclass PatternPrototype {\n  public classy: string;\n  public id: number;\n  public name: string;\n  public doc_type: string;\n  public view: string;\n  public active: boolean;\n  public patternable_id: number;\n  public patternable_type: string;\n  public parent_id: number;\n  public updated_at: Date;\n  public created_at: Date;\n\n  public $saveOrCreate(params?: any, callback?): ng.IPromise<any> {\n    if (this.id <= 0 || (this.id as any as string) === \"new\") {\n      if (this.patternable_id) {\n        return (this as any).$create(params, callback);\n      } else {\n        return (this as any).$create_global(params, callback);\n      }\n    } else {\n      if (this.patternable_id) {\n        return (this as any).$save(params, callback);\n      } else {\n        //noinspection TypeScriptUnresolvedFunction\n        return (this as any).$save_global(params, callback);\n      }\n    }\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:patternable_id/patterns/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta = angular.fromJson(response);\n\n    _.each(meta.patterns, (et, index) => {\n      meta.patterns[index] = Pattern.fromJSON(et);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n    return Pattern.fromJSON(jsonData.pattern);\n  };\n\n  const Pattern: IPatternResource = <IPatternResource>$resource(\n    url,\n    { patternable_id: \"@patternable_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: BaseConfig.BASE_URL + \"/api/v1/orgs/:patternable_id/patterns\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      create_global: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: BaseConfig.BASE_URL + \"/api/v1/patterns\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      save_global: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        url: BaseConfig.BASE_URL + \"/api/v1/patterns/:id\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      delete_global: <ng.resource.IActionDescriptor>{\n        url: BaseConfig.BASE_URL + \"/api/v1/patterns/:id\",\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n      query_global: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        url: BaseConfig.BASE_URL + \"/api/v1/patterns\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  Pattern.fromJSON = (data: any) => {\n    const pattern = new Pattern(data);\n    pattern.classy = \"Pattern\";\n\n    return pattern;\n  };\n\n  hiddenExtend(Pattern.prototype, PatternPrototype.prototype);\n\n  Pattern.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Pattern;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport type PhoneNumberSmsStatus = \"subscribed\" | \"unsubscribed\";\nexport interface IPhoneNumber extends ng.resource.IResource<IPhoneNumber>, PhoneNumberPrototype {}\n\nexport interface IPhoneNumberResource extends ng.resource.IResourceClass<IPhoneNumber>, IRsfResource {\n  fromJSON?(data: any): IPhoneNumber;\n}\n\nclass PhoneNumberPrototype {\n  public id: number;\n  public name: string;\n  public number: string;\n  public status: PhoneNumberSmsStatus;\n\n  public created_at: Date;\n  public updated_at: Date;\n\n  public _destroy: boolean;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/phone_numbers/:id\";\n\n  const PhoneNumber: IPhoneNumberResource = <IPhoneNumberResource>$resource(\n    url,\n    { id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return new PhoneNumber({});\n          }\n\n          const data = JSON.parse(response).estimate;\n          data.created_at = new Date(data.created_at as string);\n          data.updated_at = new Date(data.updated_at as string);\n          return new PhoneNumber(data);\n        },\n        isArray: false,\n      },\n    },\n  );\n\n  hiddenExtend(PhoneNumber.prototype, PhoneNumberPrototype.prototype);\n\n  PhoneNumber.fromJSON = (data: any): IPhoneNumber => {\n    if (!data.status) {\n      data.status = \"subscribed\";\n    }\n\n    return new PhoneNumber(data);\n  };\n\n  PhoneNumber.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return PhoneNumber;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IToken extends ng.resource.IResource<IToken>, TokenPrototype {}\n\nexport interface ITokenResource extends ng.resource.IResourceClass<IToken>, IRsfResource {\n  create?(params: any): IToken;\n  fromJSON?(data: any): IToken;\n}\n\nclass TokenPrototype {\n  public classy: string;\n  public id: number;\n  public org_id: number;\n  public kind: string;\n  public data: any;\n  public updated_at: Date;\n  public created_at: Date;\n\n  public $saveOrCreate(params?, callback?): ng.IPromise<IOrg> {\n    if (!this.id || this.id <= 0 || (this.id as any as string) === \"new\") {\n      return (this as any).$create(params, callback);\n    } else {\n      return (this as any).$update(params, callback);\n    }\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/tokens/:kind\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta = angular.fromJson(response);\n\n    _.each(meta.tokens, (et, index) => {\n      meta.tokens[index] = Token.fromJSON(et);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n    return Token.fromJSON(jsonData.token);\n  };\n\n  const requestTransform = (token: IToken): string => {\n    const data = JSON.parse(angular.toJson(token));\n\n    return angular.toJson({ token: data });\n  };\n\n  const Token: ITokenResource = <ITokenResource>$resource(\n    url,\n    { org_id: \"@org_id\", kind: \"@kind\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        url: BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/tokens\",\n        transformResponse: transformSingle,\n        transformRequest: requestTransform,\n        isArray: false,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        transformRequest: requestTransform,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  Token.fromJSON = (data: any) => {\n    const token = new Token(data);\n    token.classy = \"Token\";\n\n    return token;\n  };\n\n  hiddenExtend(Token.prototype, TokenPrototype.prototype);\n\n  Token.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Token;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface ISfUser extends ng.resource.IResource<ISfUser>, SfUserPrototype {\n  $update(): ng.IPromise<ISfUser>;\n}\n\nexport interface ISfUserResource extends ng.resource.IResourceClass<ISfUser>, IRsfResource {\n  fromJSON?(data: any): ISfUser;\n}\n\nclass SfUserPrototype {\n  public classy: string;\n  public id: number;\n  public user_id: number;\n  public email: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/sf_users/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta: any = angular.fromJson(response);\n\n    _.each(meta.crm_users, (sf, index) => {\n      meta.crm_users[index] = SfUser.fromJSON(sf);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n\n    return SfUser.fromJSON(jsonData.crm_user);\n  };\n\n  const SfUser: ISfUserResource = <ISfUserResource>$resource(\n    url,\n    { org_id: \"@org_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  SfUser.fromJSON = (data: any) => {\n    const sf = new SfUser(data);\n    sf.classy = \"SfUser\";\n\n    return sf;\n  };\n\n  hiddenExtend(SfUser.prototype, SfUserPrototype.prototype);\n\n  SfUser.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return SfUser;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface II360User extends ng.resource.IResource<II360User>, I360UserPrototype {\n  $update(): ng.IPromise<II360User>;\n}\n\nexport interface II360UserResource extends ng.resource.IResourceClass<II360User>, IRsfResource {\n  fromJSON?(data: any): II360User;\n}\n\nclass I360UserPrototype {\n  public classy: string;\n  public id: number;\n  public user_id: number;\n  public email: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/i360_users/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta: any = angular.fromJson(response);\n\n    _.each(meta.crm_users, (sf, index) => {\n      meta.crm_users[index] = I360User.fromJSON(sf);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n\n    return I360User.fromJSON(jsonData.crm_user);\n  };\n\n  const I360User: II360UserResource = <II360UserResource>$resource(\n    url,\n    { org_id: \"@org_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  I360User.fromJSON = (data: any) => {\n    const sf = new I360User(data);\n    sf.classy = \"I360User\";\n\n    return sf;\n  };\n\n  hiddenExtend(I360User.prototype, I360UserPrototype.prototype);\n\n  I360User.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return I360User;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IMsUser extends ng.resource.IResource<IMsUser>, MsUserPrototype {\n  $update(): ng.IPromise<IMsUser>;\n}\n\nexport interface IMsUserResource extends ng.resource.IResourceClass<IMsUser>, IRsfResource {\n  fromJSON?(data: any): IMsUser;\n}\n\nclass MsUserPrototype {\n  public classy: string;\n  public id: number;\n  public user_id: number;\n  public email: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/ms_users/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta: any = angular.fromJson(response);\n\n    _.each(meta.crm_users, (sf, index) => {\n      meta.crm_users[index] = MsUser.fromJSON(sf);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n\n    return MsUser.fromJSON(jsonData.crm_user);\n  };\n\n  const MsUser: IMsUserResource = <IMsUserResource>$resource(\n    url,\n    { org_id: \"@org_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  MsUser.fromJSON = (data: any) => {\n    const ms = new MsUser(data);\n    ms.classy = \"MsUser\";\n\n    return ms;\n  };\n\n  hiddenExtend(MsUser.prototype, MsUserPrototype.prototype);\n\n  MsUser.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return MsUser;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IJnUser extends ng.resource.IResource<IJnUser>, JnUserPrototype {\n  $update(): ng.IPromise<IJnUser>;\n}\n\nexport interface IJnUserResource extends ng.resource.IResourceClass<IJnUser>, IRsfResource {\n  fromJSON?(data: any): IJnUser;\n}\n\nclass JnUserPrototype {\n  public classy: string;\n  public id: number;\n  public user_id: number;\n  public email: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/jn_users/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta: any = angular.fromJson(response);\n\n    _.each(meta.crm_users, (jn, index) => {\n      meta.crm_users[index] = JnUser.fromJSON(jn);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n\n    return JnUser.fromJSON(jsonData.crm_user);\n  };\n\n  const JnUser: IJnUserResource = <IJnUserResource>$resource(\n    url,\n    { org_id: \"@org_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  JnUser.fromJSON = (data: any) => {\n    const ms = new JnUser(data);\n    ms.classy = \"JnUser\";\n\n    return ms;\n  };\n\n  hiddenExtend(JnUser.prototype, JnUserPrototype.prototype);\n\n  JnUser.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return JnUser;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface ISrUser extends ng.resource.IResource<ISrUser>, SrUserPrototype {\n  $update(): ng.IPromise<ISrUser>;\n}\n\nexport interface ISrUserResource extends ng.resource.IResourceClass<ISrUser>, IRsfResource {\n  fromJSON?(data: any): ISrUser;\n}\n\nclass SrUserPrototype {\n  public classy: string;\n  public id: number;\n  public user_id: number;\n  public email: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/sr_users/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta: any = angular.fromJson(response);\n\n    _.each(meta.crm_users, (jn, index) => {\n      meta.crm_users[index] = SrUser.fromJSON(jn);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n\n    return SrUser.fromJSON(jsonData.crm_user);\n  };\n\n  const SrUser: ISrUserResource = <ISrUserResource>$resource(\n    url,\n    { org_id: \"@org_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  SrUser.fromJSON = (data: any) => {\n    const ms = new SrUser(data);\n    ms.classy = \"SrUser\";\n\n    return ms;\n  };\n\n  hiddenExtend(SrUser.prototype, SrUserPrototype.prototype);\n\n  SrUser.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return SrUser;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import * as ng from \"angular\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface ILpUser extends ng.resource.IResource<ILpUser>, LpUserPrototype {\n  $update(): ng.IPromise<ILpUser>;\n}\n\nexport interface ILpUserResource extends ng.resource.IResourceClass<ILpUser>, IRsfResource {\n  fromJSON?(data: any): ILpUser;\n}\n\nclass LpUserPrototype {\n  public classy: string;\n  public id: number;\n  public user_id: number;\n  public email: string;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/orgs/:org_id/lp_users/:id\";\n\n  const transformMultiple = (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const meta: any = angular.fromJson(response);\n\n    _.each(meta.crm_users, (jn, index) => {\n      meta.crm_users[index] = LpUser.fromJSON(jn);\n    });\n\n    return meta;\n  };\n\n  const transformSingle = (data) => {\n    const jsonData = angular.fromJson(data);\n\n    return LpUser.fromJSON(jsonData.crm_user);\n  };\n\n  const LpUser: ILpUserResource = <ILpUserResource>$resource(\n    url,\n    { org_id: \"@org_id\", id: \"@id\" },\n    {\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformSingle,\n      },\n      update: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformResponse: transformSingle,\n        isArray: false,\n      },\n      delete: <ng.resource.IActionDescriptor>{\n        method: \"DELETE\",\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: transformMultiple,\n        isArray: false,\n      },\n    },\n  );\n\n  LpUser.fromJSON = (data: any) => {\n    const ms = new LpUser(data);\n    ms.classy = \"LpUser\";\n\n    return ms;\n  };\n\n  hiddenExtend(LpUser.prototype, LpUserPrototype.prototype);\n\n  LpUser.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return LpUser;\n};\n\nfactory.$inject = <ReadonlyArray<string>>[\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","export interface IEmailEvent {\n  id: number;\n  recipient: string;\n  record_type: string;\n  sub_type: number;\n  happened_at: Date;\n  description: string;\n  email_id: number;\n  updated_at: Date;\n  created_at: Date;\n}\n\nexport class EmailEvent implements IEmailEvent {\n  public id: number;\n  public recipient: string;\n  public record_type: string;\n  public sub_type: number;\n  public happened_at: Date;\n  public description: string;\n  public email_id: number;\n  public updated_at: Date;\n  public created_at: Date;\n\n  public static fromJSON = (data: any): IEmailEvent => {\n    const emailEvent = new EmailEvent();\n    for (const key in data) {\n      if (data.hasOwnProperty(key) && !(key.charAt(0) === \"$\" && key.charAt(1) === \"$\")) {\n        switch (key) {\n          case \"updated_at\":\n            data[key] = new Date(data[key]);\n            break;\n          case \"created_at\":\n            data[key] = new Date(data[key]);\n            break;\n        }\n      }\n\n      emailEvent[key] = data[key];\n    }\n\n    return emailEvent;\n  };\n}\n","import { IJob } from \"app/src/Models/Job\";\nimport { IRepository, IRsfResource } from \"app/src/Common/Repository\";\nimport { EmailEvent, IEmailEvent } from \"./EmailEvent\";\nimport { IPagingMetadata, IQueryMetadata } from \"./PagingMetadata\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { toUnderscore } from \"app2/src/helpers/Format\";\n\nexport interface IEmail extends ng.resource.IResource<IEmail>, EmailPrototype {}\n\nexport interface IEmailResource extends ng.resource.IResourceClass<IEmail>, IRsfResource {\n  fromJSON?(data: any): IEmail;\n  queryByOrg?(date: any): ng.resource.IResourceMethod<IEmail>;\n}\n\nexport interface IEmailResponse {\n  emails: IEmail[];\n  meta: IQueryMetadata;\n}\n\nclass EmailPrototype {\n  public id: number;\n  public to: string;\n  public cc: string;\n  public bcc: string;\n  public from: string;\n  public date: any;\n  public emailable_id: number;\n  public emailable_type: string;\n  public job?: IJob;\n  public kind: string;\n  public subject: string;\n  public status: string;\n  public created_at: Date;\n  public updated_at: Date;\n  public events: IEmailEvent;\n  public provider: string;\n  public _display: boolean;\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig): IEmailResource => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/:emailable_type_url/:emailable_id/emails/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IEmail => {\n    if (status < 200 || status > 299) {\n      return new Email({});\n    }\n\n    return Email.fromJSON(JSON.parse(response).email);\n  };\n\n  const multipleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IEmail => {\n    if (status < 200 || status > 299) {\n      return JSON.parse(response);\n    }\n\n    const data = JSON.parse(response);\n\n    _.each(data.emails, (i: any, index: number) => {\n      data.emails[index] = Email.fromJSON(i);\n    });\n\n    return data;\n  };\n\n  const transformRequest = (note: IEmail): string => {\n    const data = JSON.decycle(note);\n    return angular.toJson({ note: data });\n  };\n\n  const Email: IEmailResource = <IEmailResource>$resource(\n    url,\n    { emailable_type_url: \"@emailable_type_url\", emailable_id: \"@emailable_id\", id: \"@id\" },\n    {\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: transformRequest,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: multipleResponseTransform,\n        isArray: false,\n      },\n    },\n  );\n\n  Email.fromJSON = (data: any): IEmail => {\n    if (data.emailable && data.emailable_type) {\n      switch (data.emailable_type) {\n        case \"Job\":\n          data.job = resources.Job.fromJSON(data.emailable);\n      }\n    }\n\n    data.to = data.to.replace(\",\", \"\\n\");\n\n    if (data.emailable_type) {\n      data.emailable_type_url = data.emailable_type ? toUnderscore(data.emailable_type) + \"s\" : \"\";\n    }\n\n    const email = new Email(data);\n\n    if (data.events) {\n      _.each(data.events, (r, index) => {\n        email.events[index] = EmailEvent.fromJSON(r);\n      });\n    }\n\n    email._display = false;\n\n    return email;\n  };\n\n  Email.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Email;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { IElevation } from \"./Elevation\";\n\nexport interface IAnnotation {\n  id: number;\n  guid: string;\n  location: string;\n  level: string;\n  width: number;\n  height: number;\n  x: number;\n  y: number;\n  elevation: IElevation;\n  opening_type: string;\n  opening_id: number;\n\n  text?: string;\n  sort_order?: number;\n\n  update(annotation: IAnnotation): void;\n  clone(): IAnnotation;\n  decycleToJSON(): any;\n}\n\nexport class Annotation implements IAnnotation {\n  public height: number;\n  public level: string;\n  public location: string;\n  public x: number;\n  public y: number;\n  public width: number;\n  public guid: string;\n  public opening_id: number;\n  public opening_type = \"window\";\n  public sort_order: number;\n\n  constructor(\n    public id: number,\n    public elevation: IElevation,\n  ) {}\n\n  public get text(): string {\n    return `${this.elevation.abbr || \"\"}${this.id}`;\n  }\n\n  public update(annotation: IAnnotation): void {\n    this.height = annotation.height;\n    this.level = annotation.level;\n    this.location = annotation.location;\n    this.x = annotation.x;\n    this.y = annotation.y;\n    this.width = annotation.width;\n    this.opening_id = annotation.opening_id;\n    this.opening_type = annotation.opening_type;\n    this.sort_order = annotation.sort_order;\n  }\n\n  public clone(): IAnnotation {\n    //noinspection TypeScriptUnresolvedFunction\n    const annotation: IAnnotation = new Annotation(this.id, this.elevation);\n\n    annotation.height = this.height;\n    annotation.level = this.level;\n    annotation.location = this.location;\n    annotation.x = this.x;\n    annotation.y = this.y;\n    annotation.width = this.width;\n    annotation.guid = this.guid;\n    annotation.opening_id = this.opening_id;\n    annotation.opening_type = this.opening_type;\n    annotation.sort_order = this.sort_order;\n\n    return annotation;\n  }\n\n  public decycleToJSON(): any {\n    return angular.fromJson(angular.toJson(JSON.decycle(this)));\n  }\n\n  public static fromJSON(data: IAnnotation) {\n    const a = new Annotation(data.id, data.elevation);\n\n    a.opening_type = data.opening_type;\n    a.opening_id = data.opening_id;\n    a.guid = data.guid;\n    a.location = data.location;\n    a.level = data.level;\n    a.width = Number(data.width || 0);\n    a.height = Number(data.height || 0);\n    a.x = data.x;\n    a.y = data.y;\n\n    return a;\n  }\n}\n","import { Annotation, IAnnotation } from \"./Annotation\";\nimport { IImage } from \"./Image\";\nimport { IMeasurement } from \"./Measurement\";\nimport { IMeasurementMetadata } from \"rsf-visualizer\";\nimport { IRepository, IRsfResource } from \"../Common/Repository\";\nimport { Door } from \"./Door\";\nimport { Window } from \"./Window\";\nimport { IOpening } from \"./Opening\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IWallFacade, WallFacade } from \"./WallFacade\";\nimport { dataURLToFile } from \"app2/src/helpers/File\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\nimport { hiddenExtend } from \"app2/src/helpers/Utility\";\n\nexport interface IElevation extends ng.resource.IResource<IElevation>, ElevationPrototype {\n  $saveOrCreate(...args: any[]): ng.IPromise<IElevation>;\n\n  $create(): ng.IPromise<IElevation>;\n  $create(params?: Object, success?: Function, error?: Function): ng.IPromise<IElevation>;\n  $create(success: Function, error?: Function): ng.IPromise<IElevation>;\n}\n\nexport interface IElevationResource extends ng.resource.IResourceClass<IElevation>, IRsfResource {\n  fromJSON?(data: any): IElevation;\n  checkDrawingMetadata(drawingMetadata: any): boolean;\n}\n\nexport class IPoint {\n  public x: number;\n  public y: number;\n}\n\nexport class IRect extends IPoint {\n  public width: number;\n  public height: number;\n}\n\nexport class ILine {\n  public start: IPoint;\n  public end: IPoint;\n}\n\nclass ElevationPrototype {\n  public id: number;\n  public name: string;\n  public abbr: string;\n  public src_image_id: number;\n  public src_image: IImage;\n  public rendered_image_id: number;\n  public rendered_image: IImage;\n  public annotations: IAnnotation[] = [];\n  public wallFacades: IWallFacade[];\n  public drawingMetadata: IMeasurementMetadata;\n  public removedAnnotations: IAnnotation[];\n  public removedWallFacades: IWallFacade[];\n  public measurement: IMeasurement;\n  public measurement_id: number;\n  public $hasChanged: boolean;\n  public renderedDataUrl?: string;\n\n  public removeAnnotation(annotation: IAnnotation) {\n    this.$hasChanged = true;\n    this.annotations = _.select(this.annotations, (a: IAnnotation) => a.id !== annotation.id);\n    this.removedAnnotations.push(annotation);\n  }\n\n  public removeWallFacade(wf: IWallFacade) {\n    this.$hasChanged = true;\n    this.wallFacades = _.select(this.wallFacades, (a: IWallFacade) => a.id !== wf.id);\n    this.removedWallFacades.push(wf);\n  }\n\n  public saveRendered(\n    BaseConfig: IBaseConfig,\n    Upload: ng.angularFileUpload.IUploadService,\n    sortOrder: number,\n  ): ng.IPromise<IImage> {\n    const file: any = dataURLToFile(this.renderedDataUrl, `Elevation ${this.name} - Labels.png`);\n\n    const args: ng.angularFileUpload.IFileUploadConfigFile = <ng.angularFileUpload.IFileUploadConfigFile>{\n      data: { image: { file: file } },\n    };\n\n    if (this.rendered_image_id) {\n      args.url = `${BaseConfig.BASE_URL}/api/v1/jobs/${this.measurement.job_id}/images/${this.rendered_image_id}`;\n      args.method = \"PATCH\";\n    } else {\n      args.data.image.display = \"both\";\n      args.url = `${BaseConfig.BASE_URL}/api/v1/jobs/${this.measurement.job_id}/images`;\n    }\n\n    return Upload.upload(args).then((resp: any) => {\n      const img: IImage = resources.Image.fromJSON(resp.data.image);\n      this.rendered_image = img;\n      this.rendered_image_id = img.id;\n\n      return img;\n    });\n  }\n\n  public merge(measurement: IMeasurement): void {\n    this.measurement = measurement;\n    _.each(this.annotations, (annotation: IAnnotation) => {\n      let opening: IOpening;\n      if (annotation.opening_id) {\n        opening = _.find(measurement[`${annotation.opening_type}s`], (o: IOpening) => annotation.opening_id === o.id);\n\n        if (!opening) {\n          if (annotation.opening_type === \"window\") {\n            const oldOpening = _.find(measurement.doors, (o: IOpening) => annotation.opening_id === o.id);\n            if (oldOpening) {\n              this.measurement.deleteDoor(oldOpening);\n            }\n          } else {\n            const oldOpening = _.find(measurement.windows, (o: IOpening) => annotation.opening_id === o.id);\n            if (oldOpening) {\n              this.measurement.deleteWindow(oldOpening);\n            }\n          }\n        }\n      }\n\n      if (_.isNumber(annotation.sort_order)) {\n        opening = _.find(\n          measurement[`${annotation.opening_type}s`],\n          (o: IOpening) => annotation.sort_order === o.sort_order,\n        );\n      }\n\n      if (!opening) {\n        annotation.opening_id = null;\n        if (annotation.opening_type === \"window\") {\n          opening = Window.fromJSON({});\n        } else {\n          opening = Door.fromJSON({});\n        }\n\n        opening.sort_order = Math.max(_.max(_.pluck(measurement[`${annotation.opening_type}s`], \"sort_order\")), -1) + 1;\n        opening.annotation = annotation;\n        opening.annotation_id = annotation.id;\n        annotation.sort_order = opening.sort_order;\n        measurement[`${annotation.opening_type}s`].push(opening);\n      }\n\n      opening.level = annotation.level;\n      opening.location = annotation.location;\n      opening.name = annotation.text;\n      opening.height = Number(annotation.height || \"0\");\n      opening.width = Number(annotation.width || \"0\");\n      opening.area = roundToDecimals((opening.width * opening.height) / 144, -2);\n      opening.ui = opening.width + opening.height;\n    });\n  }\n\n  public associateOpenings(): void {\n    _.each(this.annotations, (a: IAnnotation) => {\n      const opening: IOpening = _.find(this.measurement[`${a.opening_type}s`], (o: IOpening) => o.id === a.opening_id);\n      if (opening) {\n        opening.annotation = a;\n        opening.annotation_id = a.id;\n      }\n    });\n  }\n\n  public clone(): IElevation {\n    const elevation: IElevation = resources.Elevation.fromJSON({\n      id: this.id,\n      name: this.name,\n      abbr: this.abbr,\n      src_image_id: this.src_image_id,\n      src_image: this.src_image,\n      rendered_image_id: this.rendered_image_id,\n      rendered_image: this.rendered_image,\n      measurement: this.measurement,\n      $hasChanged: this.$hasChanged,\n      renderedDataUrl: this.renderedDataUrl,\n    });\n\n    elevation.annotations = _.map(this.annotations, (a: IAnnotation) => a.clone());\n    elevation.wallFacades = _.map(this.wallFacades, (a: IWallFacade) => a.clone());\n    elevation.drawingMetadata = _.clone(this.drawingMetadata);\n    elevation.removedAnnotations = _.map(this.removedAnnotations, (a: IAnnotation) => a.clone());\n    elevation.removedWallFacades = _.map(this.removedWallFacades, (a: IWallFacade) => a.clone());\n\n    return elevation;\n  }\n\n  public $saveOrCreate(params, callback): ng.IPromise<IElevation> {\n    if (!this.id || this.id <= 0) {\n      delete this.id;\n      // @ts-ignore\n      return this.$create(params, callback);\n    } else {\n      // @ts-ignore\n      return this.$save(params, callback);\n    }\n  }\n}\n\nlet resources: IRepository;\n\nconst factory = ($resource: ng.resource.IResourceService, BaseConfig: IBaseConfig) => {\n  const url = BaseConfig.BASE_URL + \"/api/v1/measurements/:measurement_id/elevations/:id\";\n\n  const singleResponseTransform = (response: string, headers: ng.IHttpHeadersGetter, status: number): IElevation => {\n    if (status < 200 || status > 299) {\n      return new Elevation({});\n    }\n\n    const data = JSON.parse(response).elevation;\n    return Elevation.fromJSON(data);\n  };\n\n  const requestTransform = (elevation: IElevation): string => {\n    const data = JSON.decycle(elevation);\n\n    if (data.measurement) {\n      delete data.measurement;\n    }\n    if (data.id < 0) {\n      delete data.id;\n    }\n\n    if (data.renderedDataUrl) {\n      delete data.renderedDataUrl;\n    }\n\n    data.annotations = {\n      list: _.map(data.annotations, (a: IAnnotation) => {\n        if (a.elevation) {\n          delete a.elevation;\n        }\n        return a;\n      }),\n      wallFacades: data.wallFacades,\n      measuring: data.drawingMetadata,\n    };\n\n    return angular.toJson({ elevation: data });\n  };\n\n  const Elevation: IElevationResource = <IElevationResource>$resource(\n    url,\n    { id: \"@id\", measurement_id: \"@measurement_id\" },\n    {\n      query: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: (response: string, headers: ng.IHttpHeadersGetter, status: number) => {\n          if (status < 200 || status > 299) {\n            return JSON.parse(response);\n          }\n\n          const meta = JSON.parse(response);\n\n          _.each(meta.elevations, (jsonElevation, index) => {\n            meta.elevations[index] = Elevation.fromJSON(jsonElevation);\n          });\n\n          return meta;\n        },\n        isArray: false,\n      },\n      get: <ng.resource.IActionDescriptor>{\n        method: \"GET\",\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      save: <ng.resource.IActionDescriptor>{\n        method: \"PATCH\",\n        transformRequest: requestTransform,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n      create: <ng.resource.IActionDescriptor>{\n        method: \"POST\",\n        transformRequest: requestTransform,\n        transformResponse: singleResponseTransform,\n        isArray: false,\n      },\n    },\n  );\n\n  hiddenExtend(Elevation.prototype, ElevationPrototype.prototype);\n\n  Elevation.fromJSON = (data: any): IElevation => {\n    if (data.annotations) {\n      if (data.annotations.measuring && Elevation.checkDrawingMetadata(data.annotations.measuring)) {\n        data.drawingMetadata = data.annotations.measuring;\n      } else {\n        data.drawingMetadata = null;\n      }\n\n      if (data.annotations.wallFacades) {\n        data.wallFacades = data.annotations.wallFacades;\n      }\n\n      if (data.annotations.list) {\n        data.annotations = data.annotations.list;\n      }\n    }\n\n    if (!data.annotations) {\n      data.annotations = [];\n    }\n\n    if (!data.wallFacades) {\n      data.wallFacades = [];\n    }\n\n    if (data.src_image) {\n      data.src_image = resources.Image.fromJSON(data.src_image);\n    }\n\n    if (data.rendered_image) {\n      data.rendered_image = resources.Image.fromJSON(data.rendered_image);\n    }\n\n    if (data.$hasChanged !== true) {\n      data.$hasChanged = false;\n    }\n\n    const elevation = new Elevation(data);\n    elevation.removedAnnotations = [];\n    elevation.removedWallFacades = [];\n\n    _.each(data.annotations, (a: IAnnotation, idx: number) => {\n      a.elevation = elevation;\n      elevation.annotations[idx] = Annotation.fromJSON(a);\n    });\n\n    _.each(data.wallFacades, (wf: IWallFacade, idx: number) => {\n      elevation.wallFacades[idx] = WallFacade.fromJSON(wf);\n    });\n\n    return elevation;\n  };\n\n  Elevation.checkDrawingMetadata = (drawingMetadata: any) => {\n    if (\n      drawingMetadata.scale &&\n      drawingMetadata.imageScale &&\n      drawingMetadata.gridPosition &&\n      drawingMetadata.measurements\n    ) {\n      return true;\n    }\n    return false;\n  };\n\n  Elevation.inject = (injected: IRepository) => {\n    resources = injected;\n  };\n\n  return Elevation;\n};\n\nfactory.$inject = [\"$resource\", \"BaseConfig\"];\n\nexport default factory;\n","import { ISession } from \"app/src/Common/SessionService\";\nexport class LogoutCtrl {\n  public static $inject = [\"Session\"];\n\n  constructor(Session: ISession) {\n    Session.logout();\n  }\n}\n","export const oidcErrorMessage = (e: any) => {\n  switch (e?.status) {\n    // if it gets here the login was successful but our system said they're not authorized.\n    case 401:\n      return \"We are unable to find your user in our system. Please contact support if this problem persists.\";\n    // Any other status shouldn't happen, but if it does, we can show a generic error message.\n    default:\n      return \"There was an unknown error logging into the system. Please contact support if this problem persists.\";\n  }\n};\n","import * as React from \"react\";\nexport interface OidcViewProps {\n  errorMsg: string;\n}\n\nexport const OidcView: React.FunctionComponent<OidcViewProps> = (props) => {\n  const { errorMsg } = props;\n  return (\n    <div className=\"form-section blank-state\">\n      <img src=\"/assets/images/occ-logo_rgb_lightbkg.a3b2ddd4.png\" />\n      {errorMsg ? (\n        <h2 data-testid=\"error-msg\" className=\"text-danger\">\n          {errorMsg}\n        </h2>\n      ) : (\n        <h2>Logging In...</h2>\n      )}\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport * as config from \"react-global-configuration\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { IAuthService } from \"app2/src/helpers/Auth.service\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { push, replace } from \"app2/src/reducers/router.actions\";\nimport { ILocationData } from \"app2/src/records/Location\";\nimport { Nullable } from \"app2/src/records\";\nimport { oidcErrorMessage } from \"./Authentication.service\";\nimport { OidcView } from \"./OidcView\";\nimport { Auth0Client, User } from \"@auth0/auth0-spa-js\";\n\ninterface OidcLoginProps {\n  $stateParams: ng.ui.IStateParamsService;\n}\n\ninterface OidcLoginState {\n  errorMsg: Nullable<string>;\n  user: Nullable<User>;\n}\n\nconst mapStateToProps = (state: RootState, ownProps: OidcLoginProps) => {\n  return {};\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: OidcLoginProps) => {\n  return {\n    push: (location: Partial<ILocationData>) => dispatch(push(location)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & OidcLoginProps;\n\nclass OidcLogin extends React.Component<Props, OidcLoginState> {\n  public invalidRoutes: string[] = [\"root.logout\"];\n\n  public constructor(props) {\n    super(props);\n\n    this.state = {\n      errorMsg: null,\n      user: null,\n    };\n  }\n\n  public async componentDidMount() {\n    const { $stateParams, push } = this.props;\n    const authService = StoreRegistry.get<IAuthService>(\"authService\");\n    authService.setIdp(\"occ\");\n\n    let goToRoute = config.get(\"DEFAULT_ROUTE\");\n    let goToParams = {};\n\n    if (\n      $stateParams.routeTo &&\n      $stateParams.routeTo.name &&\n      !_.include(this.invalidRoutes, $stateParams.routeTo.name)\n    ) {\n      goToRoute = $stateParams.routeTo.name;\n      goToParams = $stateParams.routeParams;\n    }\n\n    try {\n      const result = await (authService as any).loginWithRedirect({ goToRoute, goToParams });\n      if (result) {\n        push({ pathname: goToRoute, query: goToParams });\n      }\n    } catch (e) {\n      const user = await ((authService as any).userManager as Auth0Client).getUser();\n      this.setState({\n        errorMsg: oidcErrorMessage(e),\n        user,\n      });\n    }\n  }\n\n  public render() {\n    const { errorMsg, user } = this.state;\n\n    return <OidcView errorMsg={errorMsg} user={user} />;\n  }\n}\n\nexport default connector(OidcLogin);\n","import * as React from \"react\";\nimport * as config from \"react-global-configuration\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { push, replace } from \"app2/src/reducers/router.actions\";\nimport { ILocationData } from \"app2/src/records/Location\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { IAuthService } from \"app2/src/helpers/Auth.service\";\nimport { oidcErrorMessage } from \"./Authentication.service\";\nimport { Nullable } from \"app2/src/records\";\nimport { OidcView } from \"./OidcView\";\nimport { Auth0Client, User as OidcUser, RedirectLoginResult } from \"@auth0/auth0-spa-js\";\n\nexport interface OidcCallbackProps {}\n\nexport interface OidcCallbackState {\n  errorMsg: Nullable<string>;\n  user: Nullable<oidc.User>;\n}\n\nconst mapStateToProps = (state: RootState, ownProps: OidcCallbackProps) => {\n  return {};\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: OidcCallbackProps) => {\n  return {\n    push: (location: Partial<ILocationData>) => dispatch(push(location)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & OidcCallbackProps;\n\nclass OidcCallback extends React.Component<Props, OidcCallbackState> {\n  public constructor(props) {\n    super(props);\n\n    this.state = {\n      errorMsg: null,\n    };\n  }\n\n  public async componentDidMount() {\n    const { push } = this.props;\n    const authService = StoreRegistry.get<IAuthService>(\"authService\");\n    const userManager = (await (authService as any).userManager) as Auth0Client;\n\n    let result: RedirectLoginResult;\n    try {\n      result = await userManager.handleRedirectCallback();\n    } catch (e) {\n      if (e.error === \"login_required\") {\n        const appState = JSON.parse(sessionStorage.getItem(\"LoginAppState\")) || \"\";\n        await (authService as any).oidcLogin(appState);\n        return;\n      } else {\n        console.error(e);\n        userManager.logout();\n        push({ pathname: config.get(\"DEFAULT_ROUTE\") });\n        return;\n      }\n    }\n\n    if (!result) {\n      return;\n    }\n\n    let user: OidcUser;\n    try {\n      user = await userManager.getUser();\n      const token = await userManager.getTokenSilently();\n      user.token = token;\n      await (authService as any).setupOidcUser(user);\n      (authService as any).setupOccManualTokenRefresh();\n      let appState: any = sessionStorage.getItem(\"LoginAppState\") || result.appState || undefined;\n      sessionStorage.removeItem(\"LoginAppState\");\n\n      appState = JSON.parse(appState);\n      push({ pathname: appState.goToRoute, query: appState.goToParams });\n    } catch (e) {\n      console.error(e);\n      this.setState({\n        errorMsg: oidcErrorMessage(e),\n      });\n    }\n  }\n\n  public render() {\n    const { errorMsg } = this.state;\n\n    return <OidcView errorMsg={errorMsg} />;\n  }\n}\n\nexport default connector(OidcCallback);\n","import * as React from \"react\";\n\nexport interface OktaViewProps {\n  errorMsg: string;\n}\n\nexport const OktaView: React.FunctionComponent<OktaViewProps> = (props) => {\n  const { errorMsg } = props;\n  return (\n    <div className=\"form-section blank-state\">\n      <img src=\"/assets/images/dabella_logo.06709f6a.png\" />\n      {errorMsg ? (\n        <>\n          <h2 data-testid=\"error-msg\" className=\"text-danger\">\n            {errorMsg}\n          </h2>\n          <a href=\"/dabella/login\">Try Again</a>\n        </>\n      ) : (\n        <h2>Logging In...</h2>\n      )}\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport * as config from \"react-global-configuration\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { IAuthService } from \"app2/src/helpers/Auth.service\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { push, replace } from \"app2/src/reducers/router.actions\";\nimport { ILocationData } from \"app2/src/records/Location\";\nimport { Nullable } from \"app2/src/records\";\nimport { OktaView } from \"./OktaView\";\n\ninterface OktaLoginProps {\n  $stateParams: ng.ui.IStateParamsService;\n}\n\ninterface OktaLoginState {\n  errorMsg: Nullable<string>;\n}\n\nconst mapStateToProps = (state: RootState, ownProps: OktaLoginProps) => {\n  return {};\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: OktaLoginProps) => {\n  return {\n    push: (location: Partial<ILocationData>) => dispatch(push(location)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & OktaLoginProps;\n\nclass OktaLogin extends React.Component<Props, OktaLoginState> {\n  public invalidRoutes: string[] = [\"root.logout\"];\n\n  public constructor(props) {\n    super(props);\n\n    this.state = {\n      errorMsg: null,\n    };\n  }\n\n  public async componentDidMount() {\n    const { $stateParams, push } = this.props;\n    const authService = StoreRegistry.get<IAuthService>(\"authService\");\n\n    let goToRoute = config.get(\"DEFAULT_ROUTE\");\n    let goToParams = {};\n\n    if (\n      $stateParams.routeTo &&\n      $stateParams.routeTo.name &&\n      !_.include(this.invalidRoutes, $stateParams.routeTo.name)\n    ) {\n      goToRoute = $stateParams.routeTo.name;\n      goToParams = $stateParams.routeParams;\n    }\n\n    try {\n      const result = await (authService as any).oktaLogin({ goToRoute, goToParams });\n\n      if (result) {\n        push({ pathname: goToRoute, query: goToParams });\n      }\n    } catch (e) {\n      this.setState({\n        errorMsg: \"Failed to Login.\",\n      });\n    }\n  }\n\n  public render() {\n    const { errorMsg } = this.state;\n\n    return <OktaView errorMsg={errorMsg} />;\n  }\n}\n\nexport default connector(OktaLogin);\n","import * as React from \"react\";\n\nexport interface OktaLogoutLandingPageProps {}\n\nexport const OktaLogoutLandingPage: React.FunctionComponent<OktaLogoutLandingPageProps> = (_props) => {\n  return (\n    <div className=\"form-section blank-state\">\n      <img src=\"/assets/images/dabella_logo.06709f6a.png\" />\n      <h2>Successfully Logged Out</h2>\n      <h3>\n        <a href=\"/dabella/login\">Login</a>\n      </h3>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { push } from \"app2/src/reducers/router.actions\";\nimport { ILocationData } from \"app2/src/records/Location\";\nimport * as oidc from \"oidc-client\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { IAuthService } from \"app2/src/helpers/Auth.service\";\nimport * as authActions from \"app2/src/reducers/auth.actions\";\nimport { Nullable } from \"app2/src/records\";\nimport { OktaView } from \"./OktaView\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\n\nexport interface OktaCallbackProps {}\n\nexport interface OktaCallbackState {\n  errorMsg: Nullable<string>;\n  user: Nullable<oidc.User>;\n}\n\nconst mapStateToProps = (state: RootState, ownProps: OktaCallbackProps) => {\n  return {};\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: OktaCallbackProps) => {\n  return {\n    push: (location: Partial<ILocationData>) => dispatch(push(location)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & OktaCallbackProps;\n\nclass OktaCallback extends React.Component<Props, OktaCallbackState> {\n  public constructor(props) {\n    super(props);\n\n    this.state = {\n      errorMsg: null,\n      user: null,\n    };\n  }\n\n  public async componentDidMount() {\n    const { push } = this.props;\n\n    const authService = StoreRegistry.get<IAuthService>(\"authService\");\n\n    try {\n      const { appState, user, userInfo, token, idToken } = await (authService as any).handleOktaRedirect();\n\n      StoreRegistry.getStore().dispatch(authActions.AsyncActions.fromData(token, user, idToken));\n\n      Dispatch.dispatch({\n        action: \"login\",\n        category: \"User\",\n        authType: \"dabella\",\n        user: user.id,\n        userId: user.id,\n        org: user.org.id,\n      });\n\n      push({ pathname: appState.goToRoute, query: appState.goToParams });\n    } catch (err) {\n      console.error(\"Auth Error: \", err);\n      Dispatch.dispatch({\n        action: \"failed-login\",\n        category: \"User\",\n        authType: \"dabella\",\n      });\n      this.setState({\n        errorMsg: \"Failed to Login.\",\n      });\n    }\n  }\n\n  public render() {\n    const { errorMsg, user } = this.state;\n\n    return <OktaView errorMsg={errorMsg} />;\n  }\n}\n\nexport default connector(OktaCallback);\n","import { ISession } from \"app/src/Common/SessionService\";\nimport { IUser } from \"app/src/Models/User\";\n\nexport class TermsAndConditionsCtrl {\n  public user: IUser;\n\n  public static $inject = [\"Session\"];\n  constructor(private Session: ISession) {\n    Session.currentUser.$promise.then((user) => {\n      this.user = user;\n    });\n  }\n}\n","import * as React from \"react\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport * as config from \"react-global-configuration\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\ninterface LeadsRedirectComponentProps {}\n\nexport const LeadsRedirectComponent: React.FunctionComponent<LeadsRedirectComponentProps> = () => {\n  React.useEffect(() => {\n    StoreRegistry.get<Window>(\"window\").location = config.get(\"LEADS_URL\");\n  }, []);\n\n  return <Spinner />;\n};\n","import { AccessRecord } from \"app2/src/records/UserRecord\";\nimport * as React from \"react\";\nimport { Card, Col, ListGroup, Row, Image } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport { toMultiLiner } from \"app2/src/records/Address\";\nimport { useSelector } from \"react-redux\";\nimport { currentAccessUid } from \"app2/src/selectors/auth.selectors\";\nimport { org } from \"app2/src/selectors/org.selectors\";\n\nexport interface OrgAccessListItemProps {\n  access: AccessRecord;\n  setCurrentAccess: (access: AccessRecord) => void;\n}\n\nexport const OrgAccessListItem = (props: OrgAccessListItemProps) => {\n  const { access, setCurrentAccess } = props;\n  const selectedAccessUid = useSelector(currentAccessUid);\n  const accessOrg = useSelector((state) => org(state, { orgId: access.org_id }));\n  return (\n    <ListGroup.Item\n      action\n      onClick={() => setCurrentAccess(access)}\n      className={`${access.uid === selectedAccessUid ? \"current-org\" : \"\"}`}\n      data-testid={`org-${access.id}`}>\n      {access.uid === selectedAccessUid && <FontAwesome name=\"check\" className=\"current-org-icon\" size=\"2x\" />}\n      <Card className=\"org-access-item\">\n        <Card.Body>\n          <Row className=\"h-100\">\n            <Col xs={4} md={6} className=\"d-flex align-items-center org-image ml-md-3\">\n              {accessOrg.images.size > 0 && <Image src={getUrl(accessOrg.images.first(), \"medium\")} fluid />}\n            </Col>\n            <Col\n              xs={{ span: 7, offset: 1 }}\n              md={{ span: 7, offset: 1 }}\n              className=\"d-flex flex-column justify-content-center\">\n              <Card.Title>\n                <b>{accessOrg.name}</b>\n              </Card.Title>\n              <div className=\"org-address mw-100 overflow-hidden\">{toMultiLiner(accessOrg.address)}</div>\n            </Col>\n          </Row>\n        </Card.Body>\n      </Card>\n    </ListGroup.Item>\n  );\n};\n","import { orgService } from \"app2/src/api/org.service\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { AccessRecord } from \"app2/src/records/UserRecord\";\nimport { RootState } from \"app2/src/reducers\";\nimport { AsyncActions as authAsyncActions } from \"app2/src/reducers/auth.actions\";\nimport { AsyncActions as orgAsyncActions } from \"app2/src/reducers/org.actions\";\nimport { AsyncActions as accessAsyncActions } from \"app2/src/reducers/access.actions\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { Actions as commonactions } from \"app2/src/reducers/components/common.actions\";\nimport { AsyncActions as tokenAsyncActions } from \"app2/src/reducers/token.actions\";\nimport * as React from \"react\";\nimport { Card, Col, ListGroup, Row } from \"react-bootstrap\";\nimport { Nullable } from \"app2/src/records\";\nimport { LocationStateRecord } from \"app2/src/records/LocationState\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { StandardPagination } from \"../Pagination/Standard\";\nimport { getPaginationByModel, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { SearchBox } from \"./SearchBox\";\nimport { List } from \"immutable\";\nimport { OrgAccessListItem } from \"./OrgAccessListItem\";\nimport { currentUser } from \"app2/src/selectors/user.selectors\";\n\ninterface OrgAccessListProps {\n  $state: any;\n}\n\ninterface OrgAccessListState {\n  showCsvModal: number;\n  savedLocationState: Nullable<LocationStateRecord>;\n  orgName: string;\n}\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: OrgAccessListProps) => {\n  return {\n    getCurrentOrg: (orgId: number) => dispatch(orgAsyncActions.getOrg(orgId, orgService.orgIncludes)),\n    setCurrentAccessUid: (uid: string) => dispatch(authAsyncActions.changeAccessUid(uid)),\n    clearSavedLocationState: () => dispatch(commonactions.setSavedLocationState(null)),\n    queryAccesses: (userId: number, orgName: string, newQueryParams: QueryParamsRecord) =>\n      dispatch(accessAsyncActions.loadAccesses(userId, orgName, newQueryParams)),\n    getAuthorizedTokens: (orgId: number) => dispatch(tokenAsyncActions.getAuthorizedTokens(orgId)),\n  };\n};\n\nconst mapStateToProps = (state: RootState, ownProps: OrgAccessListProps) => {\n  const modelName = \"accesses\";\n  const queryParamsRecord = queryParams(state, { modelName }).set(\"per_page\", 5);\n  const user = currentUser(state);\n  return {\n    currentUserAccesses: getPaginationByModel(state, {\n      path: [modelName, \"byId\"],\n      modelName,\n    }) as List<AccessRecord>,\n    accessCount: user?.accesses_count,\n    userId: user?.id,\n    currentSavedLocationState: state.getIn([\"components\", \"common\", \"savedLocationState\"]),\n    paginationRecord: pagination(state, { modelName, page: queryParamsRecord.get(\"page\") }),\n    queryParamsRecord,\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = OrgAccessListProps & PropsFromRedux;\nclass OrgAccessList extends React.Component<Props, OrgAccessListState> {\n  public constructor(props) {\n    super(props);\n\n    this.state = {\n      showCsvModal: 0,\n      savedLocationState: props.currentSavedLocationState,\n      orgName: \"\",\n    };\n\n    this.setCurrentAccess = this.setCurrentAccess.bind(this);\n    this.getAccesses = this.getAccesses.bind(this);\n    this.searching = this.searching.bind(this);\n  }\n\n  public async setCurrentAccess(access: AccessRecord) {\n    const { $state, getCurrentOrg, setCurrentAccessUid, getAuthorizedTokens } = this.props;\n    const { savedLocationState } = this.state;\n\n    await setCurrentAccessUid(access.uid);\n    await getCurrentOrg(access.org_id);\n    getAuthorizedTokens(access.org_id);\n\n    if (savedLocationState) {\n      StoreRegistry.get<ng.IRootScopeService>(\"$rootScope\").$apply(() => {\n        StoreRegistry.get<ng.ILocationService>(\"$location\").url(\n          `${savedLocationState.pathname}?${savedLocationState.search}`,\n        );\n      });\n    } else {\n      $state.go(\"root.job_list\");\n    }\n  }\n\n  public getAccesses(page: number) {\n    const { userId, queryParamsRecord } = this.props;\n    const newQueryParams = queryParamsRecord.set(\"page\", page);\n    this.props.queryAccesses(userId, this.state.orgName, newQueryParams);\n  }\n\n  public searching(query: string) {\n    this.setState({ orgName: query }, () => this.getAccesses(1));\n  }\n\n  public componentDidMount() {\n    const { accessCount, $state, clearSavedLocationState } = this.props;\n    if (accessCount <= 1) {\n      $state.go(\"root.job_list\");\n    }\n\n    clearSavedLocationState();\n    this.getAccesses(1);\n  }\n\n  public render() {\n    const { currentUserAccesses, paginationRecord } = this.props;\n\n    return (\n      <Card>\n        <Card.Header>\n          <Row className=\"justify-content-between align-items-center\">\n            <Col>\n              <Card.Title className=\"m-0\">Select Active Organization</Card.Title>\n            </Col>\n            <Col>\n              <SearchBox query={this.state.orgName} placeholder=\"Search...\" searching={this.searching} />\n            </Col>\n          </Row>\n        </Card.Header>\n        <Card.Body>\n          <ListGroup variant=\"flush\" className=\"org-access-list overflow-y-auto\">\n            {currentUserAccesses.count() <= 0 && <div>No results</div>}\n            {currentUserAccesses.map((access: AccessRecord, index: number) => {\n              return <OrgAccessListItem access={access} setCurrentAccess={this.setCurrentAccess} key={index} />;\n            })}\n          </ListGroup>\n        </Card.Body>\n        <Card.Footer>\n          <StandardPagination metadata={paginationRecord} pageChanged={this.getAccesses} />\n        </Card.Footer>\n      </Card>\n    );\n  }\n}\n\nexport default connector(OrgAccessList);\n","import * as React from \"react\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { Row, Col } from \"react-bootstrap\";\nimport OrgAccessList from \"../Common/OrgAccessList\";\n\nexport interface OrgAccessChooserProps {\n  $state: any;\n}\n\nexport const OrgAccessChooser: React.FunctionComponent<OrgAccessChooserProps> = ({ $state }) => {\n  return (\n    <Can resource=\"org\" permission=\"read\">\n      <Row className=\"justify-content-center\">\n        <Col xs={10} lg={6}>\n          <OrgAccessList $state={$state} />\n        </Col>\n      </Row>\n    </Can>\n  );\n};\n","import { IVisualization, IVisualizationResource } from \"app/src/Models/Visualization\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { IToolInfo } from \"app/src/Common/ToolInfoService\";\n\nclass VisualizationCardCtrl {\n  public visualization: IVisualization;\n  public job: IJob;\n  public navDisplay: boolean;\n  public onClick: (v: any) => void;\n  public onDelete: (v: any) => void;\n  public onEdit: (v: any) => void;\n  public onEmail: (v: any) => void;\n  public visualizationName = \"\";\n\n  constructor(\n    public Visualization: IVisualizationResource,\n    public ToolInfo: IToolInfo,\n  ) {}\n\n  public $onChanges() {\n    if (this.visualization && this.visualization.id) {\n      this.visualizationName = this.ToolInfo.tools(this.visualization.kind).title;\n    }\n  }\n\n  public showVisualization() {\n    if (!this.onClick) {\n      return;\n    }\n\n    this.onClick({ visualization: this.visualization });\n  }\n\n  public deleteVisualization() {\n    if (!this.onDelete) {\n      return;\n    }\n\n    this.onDelete({ visualization: this.visualization });\n  }\n\n  public editVisualization() {\n    if (!this.onEdit) {\n      return;\n    }\n\n    this.onEdit({ visualization: this.visualization });\n  }\n\n  public emailVisualization() {\n    if (!this.onEmail) {\n      return;\n    }\n\n    this.onEmail({ visualization: this.visualization });\n  }\n}\n\nexport class VisualizationCardComponent implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    visualization: \"<\",\n    job: \"<\",\n    navDisplay: \"<\",\n    onClick: \"&\",\n    onDelete: \"&\",\n    onEdit: \"&\",\n    onEmail: \"&\",\n  };\n  public templateUrl = \"src/Visualization/visualization_card.html\";\n\n  constructor() {\n    this.controller = VisualizationCardCtrl;\n    this.controller.$inject = [\"Visualization\", \"ToolInfo\"];\n  }\n}\n","import { ProductRecord } from \"../records/Product\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport class InvalidConversionError extends Error {\n  public fromUom: string;\n  public toUom: string;\n  public quantity: number;\n\n  constructor(fromUom: string, toUom: string, quantity = 0) {\n    super(`Invalid unit conversion requested.  Unable to convert \"${fromUom}\" to \"${toUom}.\"`);\n    this.fromUom = fromUom;\n    this.toUom = toUom;\n    this.quantity = quantity;\n\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.name = InvalidConversionError.name;\n  }\n}\n\nexport const convert = (\n  value: number,\n  unitFrom: string,\n  unitTo: string,\n  standard_measurement = 0,\n  standard_measurement_uom = \"\",\n): number => {\n  let quantity = value;\n  if (unitFrom === unitTo) {\n    return quantity;\n  } else if (unitFrom === \"sqft\" && unitTo === \"sq\") {\n    if (standard_measurement <= 0) {\n      standard_measurement = 1;\n    }\n    quantity = roundToDecimals(Math.ceil((quantity / 100) * standard_measurement), -2);\n  } else if (unitFrom === \"sqm\" && unitTo === \"sq\") {\n    if (standard_measurement <= 0) {\n      standard_measurement = 1;\n    }\n    quantity = roundToDecimals(Math.ceil(((quantity * 10.76391041671) / 100) * standard_measurement), -2);\n  } else if (standard_measurement_uom) {\n    quantity = convertWithStandardOfMeasure(value, unitFrom, unitTo, standard_measurement_uom, standard_measurement);\n  } else if (unitFrom === \"sqft\" && unitTo === \"sqm\") {\n    quantity = roundToDecimals(quantity / 10.76391041671, -2);\n  } else if (unitFrom === \"lft\" && unitTo === \"m\") {\n    quantity = roundToDecimals(quantity / 3.280839895, -2);\n  } else if (unitFrom === \"in\" && unitTo === \"cm\") {\n    quantity = roundToDecimals(quantity / 2.54, -2);\n  } else if (unitFrom === \"in\" && unitTo === \"m\") {\n    quantity = roundToDecimals(quantity / 39.3700787402, -2);\n  } else if (unitFrom === \"sqm\" && unitTo === \"sqft\") {\n    quantity = roundToDecimals(quantity * 10.76391041671, -2);\n  } else if (unitFrom === \"m\" && unitTo === \"lft\") {\n    quantity = roundToDecimals(quantity * 3.280839895, -2);\n  } else if (unitFrom === \"cm\" && unitTo === \"in\") {\n    quantity = roundToDecimals(quantity * 2.54, -2);\n  } else if (unitFrom === \"m\" && unitTo === \"in\") {\n    quantity = roundToDecimals(quantity * 39.3700787402, -2);\n  } else if (unitFrom === \"mile\" && unitTo === \"km\") {\n    quantity = roundToDecimals(quantity * 1.609344, -2);\n  } else if (unitFrom === \"km\" && unitTo === \"mile\") {\n    quantity = roundToDecimals(quantity / 1.609344, -2);\n  } else if (unitFrom === \"gal\" && unitTo === \"l\") {\n    quantity = roundToDecimals(quantity * 3.785411784, -2);\n  } else if (unitFrom === \"l\" && unitTo === \"gal\") {\n    quantity = roundToDecimals(quantity / 3.785411784, -2);\n  } else if (unitFrom === \"w\" && unitTo === \"kW\") {\n    quantity = roundToDecimals(quantity / 1000, -2);\n  } else if (unitFrom === \"kW\" && unitTo === \"w\") {\n    quantity = roundToDecimals(quantity * 1000, -2);\n  } else {\n    throw new InvalidConversionError(unitFrom, unitTo, quantity);\n  }\n  return quantity;\n};\n\nexport const convertWithStandardOfMeasure = (\n  quantity: number,\n  unitFrom: string,\n  unitTo: string,\n  standard_measurement_uom: string,\n  standard_measurement: number,\n): number => {\n  if (unitFrom === standard_measurement_uom && unitTo === \"ea\" && standard_measurement > 0) {\n    quantity = Math.ceil(quantity / standard_measurement);\n  } else if (unitFrom === \"sqm\" && standard_measurement_uom === \"sq\" && unitTo === \"ea\" && standard_measurement > 0) {\n    // need to handle this explicitly as the `convert` method rounds when we don't want it to.\n    quantity = convert(quantity, unitFrom, \"sqft\", null, null);\n    quantity = Math.ceil(quantity / 100 / standard_measurement);\n  } else if (unitFrom === \"sqft\" && standard_measurement_uom === \"sq\" && unitTo === \"ea\" && standard_measurement > 0) {\n    // need to handle this explicitly as the `convert` method rounds when we don't want it to.\n    quantity = Math.ceil(quantity / 100 / standard_measurement);\n  } else {\n    // let convert do any conversions besides sq, as that rounding is 'fine'?\n    quantity = convert(quantity, unitFrom, standard_measurement_uom, null, null);\n    quantity = Math.ceil(quantity / standard_measurement);\n  }\n\n  return quantity;\n};\n","import { ProductRecord } from \"app2/src/records/Product\";\nimport { convert, InvalidConversionError } from \"app2/src/services/conversion.service\";\nimport { FlashLevels } from \"./FlashLevels\";\nimport { FlashService, IFlash } from \"./FlashService\";\n\nexport interface IConvert {\n  units_of_measure: string[];\n  convert(value: number, unitFrom: string, unitTo: string, product: ProductRecord, showMessage?: boolean);\n}\n\nexport class UnitConversionService implements IConvert {\n  public units_of_measure: string[];\n\n  public static $inject = [\"valid_uom\", \"Flash\"];\n  constructor(\n    public valid_uom: string[],\n    public Flash: IFlash,\n  ) {\n    this.units_of_measure = this.valid_uom;\n  }\n\n  public convert(value: number, unitFrom: string, unitTo: string, product: ProductRecord, showMessage = true): number {\n    let product_standard = 0;\n    let product_standard_uom = \"\";\n    if (product && product.standard_measurement) {\n      product_standard = product.standard_measurement;\n      product_standard_uom = product.standard_uom;\n    }\n    try {\n      return convert(value, unitFrom, unitTo, product_standard, product_standard_uom);\n    } catch (e) {\n      if (e instanceof InvalidConversionError) {\n        let message = `Unable to convert measurement (\"${e.fromUom}\" to \"${e.toUom}\")`;\n        if (product) {\n          message = `Product: ${product.name}. ${message}`;\n        }\n        if (showMessage) {\n          this.Flash.addMessage(FlashLevels.danger, message);\n        }\n        return value;\n      }\n\n      throw e;\n    }\n  }\n}\n","export interface IPretty {\n  name: { [details: string]: string };\n}\n\nexport class PrettyNameService implements IPretty {\n  public name: { [details: string]: string } = {\n    always: \"Always\",\n    never: \"Never\",\n    company_only: \"Edit Mode Only\",\n    customer_only: \"Presentation Mode Only\",\n    customer_main_only: \"Presentation Mode - Included Estimate Groups Only\",\n    customer_option_only: \"Presentation Mode - Not Included Estimate Groups Only\",\n    company_main_only: \"Edit Mode - Included Estimate Groups Only\",\n    company_option_only: \"Edit Mode - Not Included Estimate Groups Only\",\n    company_customer_main: \"Edit and Presentation Mode - Included Estimate Groups Only\",\n    company_customer_option: \"Edit and Presentation Mode - Not Included Estimate Groups Only\",\n    proposal_only: \"Proposal Only\",\n    agreement_only: \"Agreement Only\",\n\n    // fill_pdf values\n    fill_estimate: \"Proposal\",\n    fill_contract: \"Agreement\",\n    fill_inspection: \"Inspection\",\n\n    // billing\n    leads: \"Leads\",\n\n    // Time Periods\n    month: \"Month\",\n    week: \"Week\",\n    day: \"Day\",\n    quarter: \"Quarter\",\n    year: \"Year\",\n\n    // Default Taxable Amount\n    product: \"Product Total\",\n    labor: \"Labor Total\",\n    product_labor: \"Product + Labor Total\",\n\n    // Document Order\n    cover_page: \"Cover Page\",\n    estimate_pdf: \"Estimate PDF\",\n    product_images: \"Product Images\",\n    job_photos: \"Job Photos\",\n    job_documents: \"Job Documents\",\n    org_documents: \"Org Documents\",\n    product_brochures: \"Product Documents\",\n    resource_documents: \"Resource Documents\",\n    inspection: \"Inspection Results\",\n    inspection_pdf: \"Inspection Results PDF\",\n    presentation_template: \"Presentation\",\n    commission: \"Commission\",\n    slide_template: \"Slide Template\",\n    labor_summary: \"Labor Summary\",\n\n    // PDF Options\n    inspection_include_all_items: \"Include All Inspection Items\",\n\n    // Alignment Values\n    left: \"Left\",\n    center: \"Center\",\n    right: \"Right\",\n\n    // Location Values\n    header: \"Header\",\n    footer: \"Footer\",\n\n    // Display Values\n    do_not_display: \"Do Not Display\",\n    both: \"Both\",\n    contract: \"Contract\",\n    estimate: \"Estimate\",\n\n    // Product Kind\n    unset: \"Unset\",\n    window: \"Window\",\n    door: \"Door\",\n\n    // Email\n    customer_document_signed: \"Signed Contract to Customer\",\n    signable_document_signed: \"Signable Document to Customer\",\n\n    // Tools\n    renoworks_masking: \"Order Renoworks Design\",\n    show_renoworks: \"Renoworks\",\n    eagleview_order: \"Order EagleView\",\n    eagleview_order_decra: \"Order Eagleview: Decra\",\n    google_maps: \"Google Maps\",\n    bing_ortho: \"Bing Ortho\",\n    bing_birdseye: \"Bing Birdseye\",\n    zoom_earth: \"Zoom Earth\",\n    terra_server: \"Terra Server\",\n    pictometry_online: \"Pictometry Online\",\n    pictometry_connect: \"Pictometry Connect\",\n    chameleon: \"GAF Chameleon\",\n    chameleon_v2: \"OCC Chameleon\",\n    chi_overhead_door: \"C.H.I. Overhead Door\",\n    map_developers_area: \"Map Developers Area Tool\",\n    ca_3d_demo: \"Chief Architect 3D Demo\",\n    daltile_demo: \"daltile 3D Demo\",\n    abbeycarpet_demo: \"Abbey Carpet Demo\",\n    renuit_cabinet_demo: \"Renuit Cabinet Refacing Demo\",\n    zillow: \"Zillow\",\n    trulia: \"Trulia\",\n    greensky_link: \"GreenSky Financing\",\n    homeguard: \"HomeGuard Windows & Doors\",\n    plygem_visualizer: \"PlyGem Visualizer\",\n    oc_design_eyeq: \"Owens Corning DESIGN EyeQ\",\n    gaf_vhr: \"GAF Virtual Home Remodeler\",\n    gaf_vhr_link: \"GAF Virtual Home Remodeler\",\n    gaf_vent_calc_link: \"GAF Attic Ventilation Calculator\",\n    provia: \"ProVia\",\n    provia_non_portal: \"ProVia (Non-Portal)\",\n    hover: \"HOVER\",\n    quick_measure: \"GAF QuickMeasure\",\n    quick_measure_roofing: \"GAF QuickMeasure\",\n    houzz_link: \"Houzz\",\n    home_advisor_link: \"Home Advisor\",\n    angies_list_link: \"Angie's List\",\n    gaf_quick_measure_link: \"GAF QuickMeasure\",\n    gaf_smart_money_link: \"GAF SmartMoney\",\n    sketchup: \"Sketchup\",\n    global_transport_link: \"Global Transport VT\",\n    service_finance_link: \"Service Finance\",\n    ami_design_showcase_siding: \"AMI Design Showcase: Preservation Siding\",\n    ami_design_showcase_alside_window: \"AMI Design Showcase: Alside Windows\",\n    ami_design_showcase_pres_window: \"AMI Design Showcase: Preservation Windows\",\n    foundation_finance_link: \"Foundation Finance Company\",\n    sighten_solar: \"Sighten Solar\",\n    enerbank_link: \"EnerBank\",\n    pella_portal: \"Pella Portal\",\n    colorview: \"CertainTeed Colorview\",\n    alside_renoworks: \"Alside Visualizer\",\n    advisar_link: \"Advisar\",\n    square_d_link: \"Square D\",\n    lp_smartside_link: \"LP BuildSmart\",\n    lp_smartside_visualizer: \"LP SmartSide Visualizer\",\n    sunrise_configurator: \"Sunrise Windows\",\n    royal_homeplay: \"HomePlay by Royal\",\n    sherwin_williams_colorsnap: \"Sherwin Williams COLORSNAP\",\n    york_hvac_link: \"York HVAC\",\n    foundation_finance_dealer_link: \"Foundation Finance Company Dealer\",\n    sigler_online_link: \"Sigler Online\",\n    hearth_financing_link: \"Hearth Financing\",\n    wellsfargo_link: \"Wells Fargo\",\n    iko_roof_viewer: \"IKO Roof Viewer TM\",\n    square_d_ezsel: \"Square D EZ Selector\",\n    paragon_visualizer: \"Paragon Visualizer\",\n    timbertech_deck_designer: \"TimberTech Deck Designer\",\n    timbertech_worry_less: \"TimberTech: Worry Less\",\n    roof_scope_roofing: \"RoofScope\",\n    plnar_interior: \"plnar\",\n    plnar: \"plnar\",\n    interior: \"Interior\",\n    lowes_deck_designer: \"Lowe's Deck Designer\",\n    thermatru_design_your_door: \"ThermaTru Design Your Door\",\n    pella_lowes_product_designer: \"Pella Lowe's Product Designer\",\n\n    // Plnar Report Types\n    \"3dSnapPlan\": \"Basic Room\",\n    fullScope: \"Detailed Room\",\n\n    // Org Settings\n    IN_BROWSER: \"Chrome Plugin\",\n    NATIVE: \"Desktop App\",\n\n    // Org Preferences\n    BROWSER: \"Browser Window\",\n    USER_SELECT: \"User Selection\",\n\n    // Window Estimator and Use Sales Tax\n    disabled: \"Disabled\",\n    enabled: \"Enabled\",\n\n    // Cronofy\n    by_choice: \"Default to No\",\n    by_default: \"Default to Yes\",\n    cronofy: \"Cronofy Calendar Sync\",\n\n    // Billing\n    chameleon_gaf: \"GAF Chameleon\",\n    renoworks: \"Renoworks\",\n\n    // Users\n    org_admin: \"Org Admin\",\n    admin: \"Admin\",\n    user: \"User\",\n    salesrep: \"Salesrep\",\n    custom: \"Custom\",\n\n    // Billable\n    billable: \"Billable\",\n    free: \"Free\",\n\n    // Audio\n    mute: \"Mute\",\n    basic: \"Basic\",\n    premium: \"Premium\",\n\n    // Measurements\n    imperial: \"Imperial\",\n    metric: \"Metric\",\n    none: \"None\",\n    roof_total_area: \"Roof Total Area\",\n    roof_5pw_total_area: \"Roof Area + 5% Waste\",\n    roof_10pw_total_area: \"Roof Area + 10% Waste\",\n    roof_12pw_total_area: \"Roof Area + 12% Waste\",\n    roof_15pw_total_area: \"Roof Area + 15% Waste\",\n    roof_20pw_total_area: \"Roof Area + 20% Waste\",\n    roof_0_area: \"0/12 Pitch Area\",\n    roof_1_area: \"1/12 Pitch Area\",\n    roof_2_area: \"2/12 Pitch Area\",\n    roof_3_area: \"3/12 Pitch Area\",\n    roof_4_area: \"4/12 Pitch Area\",\n    roof_5_area: \"5/12 Pitch Area\",\n    roof_6_area: \"6/12 Pitch Area\",\n    roof_7_area: \"7/12 Pitch Area\",\n    roof_8_area: \"8/12 Pitch Area\",\n    roof_9_area: \"9/12 Pitch Area\",\n    roof_10_area: \"10/12 Pitch Area\",\n    roof_11_area: \"11/12 Pitch Area\",\n    roof_12_area: \"12/12 Pitch Area\",\n    roof_13_area: \"13/12 Pitch Area\",\n    roof_14_area: \"14/12 Pitch Area\",\n    roof_15_area: \"15/12 Pitch Area\",\n    roof_16_area: \"16/12 Pitch Area\",\n    roof_17_area: \"17/12 Pitch Area\",\n    roof_18_area: \"18/12 Pitch Area\",\n    roof_19_area: \"19/12 Pitch Area\",\n    roof_20_area: \"20/12 Pitch Area\",\n    roof_21_area: \"21/12 Pitch Area\",\n    roof_22_area: \"22/12 Pitch Area\",\n    roof_23_area: \"23/12 Pitch Area\",\n    roof_24_area: \"24/12 Pitch Area\",\n    roof_25_area: \"25/12 Pitch Area\",\n    roof_26p_area: \"26/12+ Pitch Area\",\n    roof_flat_shallow_area: \"Roof Flat Shallow Area\",\n    roof_flat_area: \"Roof Flat Area\",\n    roof_low_slope_area: \"Roof Low Slope Area\",\n    roof_average_slope_area: \"Roof Average Slope Area\",\n    roof_steep_slope_area: \"Roof Steep Slope Area\",\n    roof_ultra_steep_slope_area: \"Roof Ultra Steep Slope Area\",\n    roof_high_roof_area: \"Roof High Roof Area\",\n    roof_sloped_area: \"Roof Sloped Area\",\n    roof_10pw_sloped_area: \"Roof Sloped Area + 10% Waste\",\n    roof_79_area: \"Roof 7-9/12 Pitch Area\",\n    roof_1012_area: \"Roof 10-12/12 Pitch Area\",\n    roof_13p_area: \"Roof 13/12+ Pitch Area\",\n    roof_eave: \"Roof Eave\",\n    roof_rake: \"Roof Rake\",\n    roof_perimeter: \"Roof Perimeter\",\n    roof_ridge: \"Roof Ridge\",\n    roof_hip: \"Roof Hip\",\n    roof_ridge_hip: \"Roof Ridge Hip\",\n    roof_valley: \"Roof Valley\",\n    roof_valley_eave: \"Roof Valley Eave\",\n    roof_valley_eave_rake: \"Roof Valley Eave Rake\",\n    roof_step_flashing: \"Roof Step Flashing\",\n    roof_headwall_flashing: \"Roof Headwall Flashing\",\n    roof_total_flashing: \"Roof Total Flashing\",\n    roof_gutter_miters: \"Roof Gutter Miters\",\n    roof_downspouts: \"Roof Downspouts\",\n    roof_downspout_elbows: \"Roof Downspout Elbows\",\n    siding_total_area: \"Siding Total Area\",\n    siding_5pw_total_area: \"Siding Area + 5% Waste\",\n    siding_10pw_total_area: \"Siding Area + 10% Waste\",\n    siding_15pw_total_area: \"Siding Area + 15% Waste\",\n    siding_18pw_total_area: \"Siding Area + 18% Waste\",\n    siding_inside_corner_qty: \"Siding Inside Corner Quantity\",\n    siding_inside_corner_length: \"Siding Inside Corner Length\",\n    siding_outside_corner_qty: \"Siding Outside Corner Quantity\",\n    siding_outside_corner_length: \"Siding Outside Corner Length\",\n    siding_level_starter: \"Siding Level Starter\",\n    siding_sloped_trim: \"Siding Sloped Trim\",\n    siding_vertical_trim: \"Siding Vertical Trim\",\n    siding_level_frieze_board: \"Siding Level Frieze Board\",\n    siding_sloped_frieze_board: \"Siding Sloped Frieze Board\",\n    siding_frieze_board: \"Siding Frieze Board\",\n    siding_opening_qty: \"Siding Opening Quantity\",\n    siding_windows_qty: \"Siding Windows Quantity\",\n    siding_doors_qty: \"Siding Doors Quantity\",\n    siding_garage_doors_qty: \"Siding Garage Doors Quantity\",\n    siding_opening_tops_length: \"Siding Opening Tops Length\",\n    siding_opening_sills_length: \"Siding Opening Sills Length\",\n    siding_opening_sides_length: \"Siding Opening Sides Length\",\n    siding_shutter_qty: \"Siding Shutter Quantity\",\n    siding_shutter_area: \"Siding Shutter Area\",\n    siding_vents_qty: \"Siding Vents Quantity\",\n    siding_vents_area: \"Siding Vents Area\",\n    siding_soffit_eaves: \"Siding Soffit Eaves\",\n    siding_soffit_level_frieze: \"Siding Soffit Level Frieze\",\n    siding_soffit_rakes: \"Siding Soffit Rakes\",\n    siding_soffit_sloped_frieze: \"Siding Soffit Sloped Frieze\",\n    siding_soffit_total: \"Siding Soffit Total\",\n    roof_faces: \"Roof Faces\",\n    walls: \"Walls\",\n    windows: \"Windows\",\n    doors: \"Doors\",\n    roofing: \"Roofing\",\n    siding: \"Siding\",\n    sunroom: \"Sunroom\",\n    rooms: \"Rooms\",\n    decks: \"Decks\",\n    pools: \"Pools\",\n    fencing: \"Fencing\",\n\n    // Sunroom\n    sunroom_a_wall_length: \"Wall A Length\",\n    sunroom_a_wall_height: \"Wall A Height\",\n    sunroom_a_wall_area: \"Wall A Area\",\n    sunroom_b_wall_length: \"Wall B Length\",\n    sunroom_b_wall_height: \"Wall B Height\",\n    sunroom_b_wall_area: \"Wall B Area\",\n    sunroom_c_wall_length: \"Wall C Length\",\n    sunroom_c_wall_height: \"Wall C Height\",\n    sunroom_c_wall_area: \"Wall C Area\",\n    sunroom_wall_perimeter: \"Perimeter\",\n    sunroom_wall_total_area: \"Wall Total Area\",\n    sunroom_deck_total_area: \"Deck Total Area\",\n    sunroom_ceiling_area: \"Ceiling Area\",\n    sunroom_studio_roof_area: \"Studio Roof Area\",\n    sunroom_cathedral_roof_area: \"Cathedral Roof Area\",\n    sunroom_kw_a_length: \"Knee Wall A Length\",\n    sunroom_kw_a_height: \"Knee Wall A Height\",\n    sunroom_kw_a_area: \"Knee Wall A Area\",\n    sunroom_kw_b_length: \"Knee Wall B Length\",\n    sunroom_kw_b_height: \"Knee Wall B Height\",\n    sunroom_kw_b_area: \"Knee Wall B Area\",\n    sunroom_kw_c_length: \"Knee Wall C Length\",\n    sunroom_kw_c_height: \"Knee Wall C Height\",\n    sunroom_kw_c_area: \"Knee Wall C Area\",\n    sunroom_kw_total_length: \"Knee Wall Total Length\",\n    sunroom_kw_total_area: \"Knee Wall Total Area\",\n\n    // Interior Room\n    area: \"Area\",\n    perimeter: \"Perimeter\",\n    inside_corner: \"Inside Corner\",\n    outside_corner: \"Outside Corner\",\n    threshold: \"Threshold\",\n    ceiling_area: \"Ceiling Area\",\n    ceiling_area_less_structures: \"Ceiling Area Less Structures\",\n    ceiling_perimeter: \"Ceiling Perimeter\",\n    ceiling_perimeter_less_structures: \"Ceiling Perimeter Less Structures\",\n    door_area: \"Door Area\",\n    door_count: \"Door Count\",\n    door_total_width: \"Door Total Width\",\n    exposed_structure_perimeter: \"Exposed Structure Perimeter\",\n    floor_area_less_structures: \"Floor Area Less Structures\",\n    floor_opening_total_width: \"Floor Opening Total Width\",\n    floor_plan_area: \"Floor Plan Area\",\n    floor_plan_perimeter: \"Floor Plan Perimeter\",\n    floor_plan_perimeter_less_structures: \"Floor Plan Perimeter Less Structures\",\n    floor_plan_perimeter_without_openings: \"Floor Plan Perimeter Without Openings\",\n    object_count: \"Object Count\",\n    opening_count: \"Opening Count\",\n    opening_total_area: \"Opening Total Area\",\n    opening_total_width: \"Opening Total Width\",\n    structure_total_ceiling_area: \"Structure Total Ceiling Area\",\n    structure_total_ceiling_width: \"Structure Total Ceiling Width\",\n    structure_total_floor_area: \"Structure Total Floor Area\",\n    structure_total_floor_width: \"Structure Total Floor Width\",\n    structure_total_wall_area: \"Structure Total Wall Area\",\n    volume: \"Volume\",\n    wall_count: \"Wall Count\",\n    wall_total_area: \"Wall Total Area\",\n    wall_total_area_without_openings: \"Wall Total Area without Openings\",\n    window_count: \"Window Count\",\n    window_total_area: \"Window Total Area\",\n\n    // Units of Measure\n    ea: \"Each\",\n    sqft: \"Square Foot\",\n    lft: \"Lineal Foot\",\n    ui: \"United Inch\",\n    in: \"Inch\",\n    sq: \"Square\",\n    pair: \"Pair\",\n    sash: \"Sash\",\n    mile: \"Mile\",\n    gal: \"Gallon\",\n    layer: \"Layer\",\n    hr: \"Hour\",\n    cm: \"Centimeters\",\n    m: \"Meters\",\n    sqm: \"Square Meter\",\n    km: \"Kilometers\",\n    l: \"Liter\",\n    percent: \"Percent\",\n    all: \"All\",\n    w: \"Watts\",\n    kW: \"Kilowatts\",\n\n    // Signature Platform\n    scribble: \"Scribble\",\n\n    // Import Type\n    hover_excel: \"HOVER Excel\",\n    roofscope_csv: \"RoofScope CSV\",\n    roofsnap_csv: \"RoofSnap CSV\",\n    eagleview_xml: \"EagleView XML\",\n    window_nation_json: \"Window Nation JSON\",\n    hover_xml: \"HOVER XML\",\n    picto_connect_csv: \"Pictometry Connect CSV\",\n    skymeasure_csv: \"SkyMeasure CSV\",\n    skymeasure_xml: \"SkyMeasure XML\",\n    aerialreports_xml: \"Aerial Reports XML\",\n    eagleview_qs_json: \"EagleView QuickSquares JSON\",\n    xactimate_xml: \"Xactimate XML\",\n    gaf_quick_measure_xml: \"GAF QuickMeasure XML\",\n    gaf_quickmeasure_xml: \"GAF QuickMeasure XML\",\n    ez3d_csv: \"EZ3D CSV\",\n\n    // Estimator Add Products\n    replace: \"Replace\",\n    merge: \"Merge\",\n    ask: \"Ask\",\n\n    //\n    sent: \"Sent\",\n    created: \"Created\",\n    viewed: \"Viewed\",\n    recipient_signed: \"Signed\",\n    signed: \"Signed\",\n\n    // Product Option Group Selection Mode\n    multi: \"Multiple\",\n    single: \"Single\",\n\n    true: \"True\",\n    false: \"False\",\n\n    // Product Option Type\n    per_quantity: \"Per Line Item Quantity\",\n    per: \"Per Line Item\",\n    per_ui: \"Per UI\",\n    per_sqft: \"Per SQFT\",\n\n    sky_measure: \"Sky Measure\",\n    sky_measure_roofing: \"CoreLogic SkyMeasure Roofing\",\n    wvs_hail: \"CoreLogic WVS Hail\",\n    wvs_wind: \"CoreLogic WVS Wind\",\n    wvs_lightning: \"CoreLogic WVS Lightning\",\n    hail: \"Hail\",\n    wind: \"Wind\",\n    lightning: \"Lightning\",\n    wvs: \"Weather Verification Service\",\n    eagleview_roofing: \"EagleView\",\n    eagleview: \"EagleView\",\n    permit: \"Permit\",\n\n    // Job Menu\n    information: \"Information\",\n    appointments: \"Appointments\",\n    tools: \"Tools\",\n    images: \"Photos\",\n    documents: \"Documents\",\n    measurements: \"Measurements\",\n    notes: \"Notes\",\n    history: \"History\",\n    presentations: \"Presentations\",\n    design_tools: \"Design Tools\",\n    estimates: \"Estimates\",\n    proposals: \"Proposals\",\n    contracts: \"Contracts\",\n    signatures: \"Signatures\",\n\n    // Job Menu URL path\n    info: \"Information\",\n    property: \"Property Data\",\n    \"design-tools\": \"Design Tools\",\n\n    // Status\n    ordered: \"Ordered\",\n    exception: \"Exception\",\n    canceled: \"Canceled\",\n    complete: \"Complete\",\n    paid: \"Paid\",\n    refunded: \"Refunded\",\n    partially_refunded: \"Partially Refunded\",\n\n    // Email Kind\n    appointment_invite: \"Appointment\",\n    document_signed_notification: \"Doc Signed\",\n    image_uploader: \"Image\",\n    proposal: \"Proposal\",\n    screen_share: \"Screen Share\",\n    signature_link: \"Signature\",\n    payment_info_setup: \"Payment Info Request\",\n    payment_info_reminder: \"Payment Info Reminder\",\n\n    // Email Provider\n    postmark: \"Email\",\n    twilio: \"Text\",\n\n    // Email Statuses\n    Delivery: \"Delivered\",\n    Bounce: \"Bounced\",\n    SpamComplaint: \"Reported as Spam\",\n    Open: \"Opened\",\n\n    // Bracket Type\n    unset_bt: \"Unset\",\n    ui_bt: \"UI Based\",\n    width_height_bt: \"Width/Height Based\",\n\n    // Job Nimbus\n    job: \"Job\",\n    contact: \"Contact\",\n\n    // Option Group Type\n    default: \"Default\",\n    cost: \"Cost\",\n    link: \"Link\",\n\n    // Preferences - Measurements\n    annotator: \"Window-inator\",\n    elevation_scaling: \"Opening Measuring\",\n    rapid_area: \"Rapid Area\",\n    satellite_measure: \"Satellite Measure\",\n    sidinginator: \"Siding-inator\",\n    deck_wizard: \"Deck Measurement Tool\",\n    pool_tool: \"Pool Measurement Tool\",\n    fencing_tool: \"Fencing Measurement Tool\",\n\n    // Org Status Events\n    activate: \"Activate\",\n    onboard: \"Onboard\",\n    freemium: \"Freemium\",\n    cancel: \"Cancel\",\n    suspend: \"Suspend\",\n    recreate: \"Re-create\",\n    onboarding: \"Onboarding\",\n    activated: \"Activated\",\n    suspended: \"Suspended\",\n\n    // Address Types\n    administrative_area_level_2: \"County\",\n    administrative_area_level_3: \"Township\",\n\n    // Estimate Templates\n    template: \"template\",\n\n    // Module Names\n    estimate_module: \"One Click Contractor\",\n    leads_module: \"One Click Leads\",\n    job_nimbus: \"JobNimbus\",\n    jobprogress: \"JobProgress\",\n    roof_scope: \"RoofScope\",\n    companycam: \"CompanyCam\",\n    improveit360: \"ImproveIt360\",\n\n    // Job Attributes\n    job_type: \"Job Type\",\n    level: \"Level\",\n    location: \"Location\",\n\n    // Job Query Updated filters\n    \"7days\": \"This Week\",\n    \"14days\": \"Last 2 Weeks\",\n    \"1months\": \"Last Month\",\n    \"3months\": \"Last 3 Months\",\n    \"6months\": \"Last 6 Months\",\n    \"1years\": \"Last 12 Months\",\n    Custom: \"Custom\",\n\n    //ImproveIt360 platforms\n    i360_classic: \"Classic\",\n    i360_lightning: \"Lightning\",\n  };\n\n  public eagleview_delivery_product_name: { [details: string]: string } = {\n    \"1\": \"JPG\",\n    \"2\": \"PDF\",\n    \"3\": \"DOC\",\n    \"4\": \"XML\",\n    \"5\": \"DXF\",\n    \"6\": \"RXF\",\n    \"7\": \"XLS\",\n    \"8\": \"HTML\",\n    \"9\": \"EMF\",\n    \"10\": \"PNG\",\n    \"11\": \"GIF\",\n    \"12\": \"EPS\",\n    \"13\": \"DOCX\",\n    \"14\": \"DOT\",\n    \"15\": \"DOTX\",\n    \"16\": \"XLSX\",\n    \"18\": \"JSON\",\n    \"19\": \"ZIPJPGS\",\n  };\n\n  public eagleview_product_name: { [details: string]: string } = {\n    // Eagleview Report Types\n    \"1\": \"PremiumResidential\",\n    \"2\": \"PremiumCommercial\",\n    \"3\": \"StandardResidential\",\n    \"9\": \"Images\",\n    \"10\": \"ParkingLot\",\n    \"11\": \"SolarResidential\",\n    \"12\": \"SolarCommercial\",\n    \"13\": \"ClaimsReadyResidential\",\n    \"14\": \"ClaimsReadyCommercial\",\n    \"15\": \"AA2D\",\n    \"16\": \"AA3DResidential\",\n    \"17\": \"SketchOnly\",\n    \"18\": \"AA3DCommercial\",\n    \"20\": \"InstallerReport\",\n    \"25\": \"EC3DResidential\",\n    \"26\": \"EC3DCommercial\",\n    \"27\": \"EC2DResidential\",\n    \"28\": \"EC2DCommercial\",\n    \"29\": \"PremiumAWResidential\",\n    \"30\": \"PremiumAWCommercial\",\n    \"31\": \"ECPremiumResidential\",\n    \"32\": \"ECPremiumCommercial\",\n    \"34\": \"PremiumResidentialWallonly\",\n    \"35\": \"PremiumCommercialWallonly\",\n    \"36\": \"FirstChoicePM\",\n    \"37\": \"RiskManagementResidential\",\n    \"38\": \"RiskManagementCommercial\",\n    \"39\": \"Estimate\",\n    \"40\": \"RoofGeometryResidential\",\n    \"41\": \"CarrierEstimate\",\n    \"42\": \"PictometryPremium\",\n    \"43\": \"PictometryStandard\",\n    \"44\": \"QuickSquares\",\n    \"46\": \"GutterResidential\",\n    \"47\": \"GutterCommercial\",\n    \"48\": \"DiagramResidential\",\n    \"49\": \"DiagramCommercial\",\n  };\n\n  public static $inject = [];\n  constructor() {}\n}\n","import { options } from \"@fullcalendar/core/preact\";\nimport * as Handlebars from \"handlebars\";\n\nexport class HandlebarsHelperService {\n  public static $inject = [\"$filter\"];\n\n  constructor(public $filter: ng.IFilterService) {\n    Handlebars.registerHelper(\"ifCond\", this.ifCond);\n    Handlebars.registerHelper(\"formatCurrency\", this.formatCurrency);\n    Handlebars.registerHelper(\"formatDate\", this.formatDate);\n    Handlebars.registerHelper(\"ifTrue\", this.ifTrue);\n    Handlebars.registerHelper(\"moneyOperation\", this.moneyOperation);\n    Handlebars.registerHelper(\"round\", this.round);\n    Handlebars.registerHelper(\"addDays\", this.addDays);\n    Handlebars.registerHelper(\"mathOperation\", this.mathOperation);\n    Handlebars.registerHelper(\"setVar\", this.setVar);\n    Handlebars.registerHelper(\"concat\", this.concat);\n    Handlebars.registerHelper(\"stringIncludes\", this.stringIncludes);\n    Handlebars.registerHelper(\"ifEmpty\", this.ifEmpty);\n    Handlebars.registerHelper(\"ifNotEmpty\", this.ifNotEmpty);\n    Handlebars.registerHelper(\"startsWith\", this.startsWith);\n    Handlebars.registerHelper(\"endsWith\", this.endsWith);\n    Handlebars.registerHelper(\"ifStartsWith\", this.ifStartsWith);\n    Handlebars.registerHelper(\"ifEndsWith\", this.ifEndsWith);\n    Handlebars.registerHelper(\"ifStringIncludes\", this.ifStringIncludes);\n    Handlebars.registerHelper(\"ifPropInObjArray\", this.ifPropInObjArray);\n    Handlebars.registerHelper(\"ifInArray\", this.ifInArray);\n    Handlebars.registerHelper(\"ifPropInEstimateGroups\", this.ifPropInEstimateGroups);\n    Handlebars.registerHelper(\"split\", this.split);\n    Handlebars.registerHelper(\"findArrayItemByProperty\", this.findArrayItemByProperty);\n  }\n\n  public compile(value: any, locals: any) {\n    return Handlebars.compile(value)(locals);\n  }\n\n  public formatCurrency = (value: any) => {\n    if (value === undefined || value === null) {\n      return \"$0.00\";\n    }\n    value = this.$filter(\"currency\")(value, \"$\", 2);\n    return value.toString();\n  };\n\n  public addDays = (value: any, days: any) => {\n    if (value === undefined || value === null) {\n      return \"\";\n    }\n\n    let d = new Date(value);\n    d.setDate(d.getDate() + days);\n\n    d = this.$filter(\"date\")(d, \"MM/dd/yyyy\");\n    return d.toString();\n  };\n\n  public formatDate = (value: any) => {\n    if (value === undefined || value === null) {\n      return \"\";\n    }\n    value = this.$filter(\"date\")(value, \"MM/dd/yyyy\");\n    return value.toString();\n  };\n\n  public ifTrue = function (value: any, options: any) {\n    if (value === \"true\" || value === true) {\n      return options.fn(this);\n    }\n    return options.inverse(this);\n  };\n\n  public round = (value: any, operator: any, precision: any) => {\n    if (\n      value === undefined ||\n      value === null ||\n      operator === undefined ||\n      operator === null ||\n      precision === undefined ||\n      precision === null\n    ) {\n      return \"0\";\n    }\n\n    let new_value: any = 0;\n    const precisionValue = Math.pow(10, precision);\n\n    switch (operator) {\n      case \"ceil\":\n        new_value = Math.ceil(value * precisionValue) / precisionValue;\n        break;\n      case \"floor\":\n        new_value = Math.floor(value * precisionValue) / precisionValue;\n        break;\n      case \"normal\":\n        new_value = Math.round(value * precisionValue) / precisionValue;\n        break;\n    }\n\n    return new_value.toString();\n  };\n\n  public moneyOperation = (v1: any, operator: any, v2: any) => {\n    if (v1 === undefined || v1 === null || v2 === undefined || v2 === null) {\n      return \"$0.00\";\n    }\n\n    let value: any = 0;\n    switch (operator) {\n      case \"+\":\n        value = v1 + v2;\n        break;\n      case \"*\":\n        value = v1 * v2;\n        break;\n      case \"-\":\n        value = v1 - v2;\n        break;\n      case \"/\":\n        value = v1 / v2;\n        break;\n    }\n\n    value = this.$filter(\"currency\")(value, \"$\", 2);\n    return value.toString();\n  };\n\n  public mathOperation = (v1: any, operator: any, v2: any) => {\n    if (v1 === undefined || v1 === null || v2 === undefined || v2 === null) {\n      return 0.0;\n    }\n\n    let value: any = 0;\n    switch (operator) {\n      case \"+\":\n        value = v1 + v2;\n        break;\n      case \"*\":\n        value = v1 * v2;\n        break;\n      case \"-\":\n        value = v1 - v2;\n        break;\n      case \"/\":\n        value = v1 / v2;\n        break;\n    }\n\n    return value;\n  };\n\n  public setVar = function (varName: any, varValue: any, options: any) {\n    if (!varName) {\n      return \"Pattern Error: No variable name sent to setVar\";\n    }\n    options.data.root[varName] = varValue;\n  };\n\n  public stringIncludes = function (variable: any, search_string: any) {\n    if (!variable || variable === \"\") {\n      return \"Pattern Error: Missing variable parameter sent to stringIncludes\";\n    }\n\n    if (!search_string || search_string === \"\") {\n      return \"Pattern Error: Missing search_string parameter sent to stringIncludes\";\n    }\n\n    return variable.indexOf(search_string) !== -1;\n  };\n\n  public concat = function (v1: any, v2: any) {\n    let value1 = \"\";\n    let value2 = \"\";\n    if (v1) {\n      value1 = v1;\n    }\n    if (v2) {\n      value2 = v2;\n    }\n    return value1 + value2;\n  };\n\n  public ifEmpty = function (varValue: any, options: any) {\n    return !varValue || varValue === undefined || varValue.length === 0 ? options.fn(this) : options.inverse(this);\n  };\n\n  public ifNotEmpty = function (varValue: any, options: any) {\n    return !varValue || varValue === undefined || varValue.length === 0 ? options.inverse(this) : options.fn(this);\n  };\n\n  public ifCond = function (v1: any, operator: any, v2: any, options: any) {\n    switch (operator) {\n      case \"==\":\n        return v1 === v2 ? options.fn(this) : options.inverse(this);\n      case \"===\":\n        return v1 === v2 ? options.fn(this) : options.inverse(this);\n      case \"!=\":\n        return v1 !== v2 ? options.fn(this) : options.inverse(this);\n      case \"!==\":\n        return v1 !== v2 ? options.fn(this) : options.inverse(this);\n      case \"<\":\n        return v1 < v2 ? options.fn(this) : options.inverse(this);\n      case \"<=\":\n        return v1 <= v2 ? options.fn(this) : options.inverse(this);\n      case \">\":\n        return v1 > v2 ? options.fn(this) : options.inverse(this);\n      case \">=\":\n        return v1 >= v2 ? options.fn(this) : options.inverse(this);\n      case \"&&\":\n        return v1 && v2 ? options.fn(this) : options.inverse(this);\n      case \"||\":\n        return v1 || v2 ? options.fn(this) : options.inverse(this);\n      default:\n        return options.inverse(this);\n    }\n  };\n\n  public startsWith = function (varValue: any, searchVar: any, options: any) {\n    if (!varValue || !searchVar) {\n      return false;\n    }\n\n    return varValue.startsWith(searchVar);\n  };\n\n  public ifPropInEstimateGroups = function (\n    estimateGroups: any,\n    searchArray: any,\n    searchProperty: any,\n    searchVar: any,\n    options: any,\n  ) {\n    if (!estimateGroups || !searchArray || !searchProperty || !searchVar) {\n      // @ts-ignore\n      return options.inverse(this);\n    }\n\n    if (Array.isArray(estimateGroups) === false) {\n      // @ts-ignore\n      return options.inverse(this);\n    }\n\n    // @ts-ignore\n    return estimateGroups.some((estimateGroup) => {\n      const v = estimateGroup[searchArray] || [];\n\n      //@ts-ignore\n      return v.some((e) => e[searchProperty] === searchVar);\n    }) === true\n      ? //@ts-ignore\n        options.fn(this)\n      : //@ts-ignore\n        options.inverse(this);\n  };\n\n  public ifStartsWith = function (varValue: any, searchVar: any, options: any) {\n    if (!varValue || !searchVar) {\n      return options.inverse(this);\n    }\n\n    return varValue.startsWith(searchVar) === true ? options.fn(this) : options.inverse(this);\n  };\n\n  public ifEndsWith = function (varValue: any, searchVar: any, options: any) {\n    if (!varValue || !searchVar) {\n      return options.inverse(this);\n    }\n\n    return varValue.endsWith(searchVar) === true ? options.fn(this) : options.inverse(this);\n  };\n\n  public ifStringIncludes = function (varValue: any, searchVar: any, options: any) {\n    if (!varValue || !searchVar) {\n      return options.inverse(this);\n    }\n\n    return varValue.indexOf(searchVar) !== -1 ? options.fn(this) : options.inverse(this);\n  };\n\n  public endsWith = function (varValue: any, searchVar: any, options: any) {\n    if (!varValue || !searchVar) {\n      return false;\n    }\n\n    return varValue.endsWith(searchVar);\n  };\n\n  public ifPropInObjArray = function (searchArray: any, searchProperty: any, searchVar: any, options: any) {\n    if (!searchArray || !searchProperty || !searchVar) {\n      return options.inverse(this);\n    }\n\n    if (Array.isArray(searchArray) === false) {\n      return options.inverse(this);\n    }\n\n    return searchArray.some((e) => e[searchProperty] === searchVar) === true ? options.fn(this) : options.inverse(this);\n  };\n\n  public ifInArray = function (searchArray: any, searchVar: any, options: any) {\n    if (!searchArray || !searchVar) {\n      return options.inverse(this);\n    }\n\n    if (Array.isArray(searchArray) === false) {\n      return options.inverse(this);\n    }\n\n    return searchArray.includes(searchVar) === true ? options.fn(this) : options.inverse(this);\n  };\n\n  public split = function (object: any, separator: any, option: any) {\n    if (\n      object === undefined ||\n      object === null ||\n      separator === undefined ||\n      separator === null ||\n      option === undefined ||\n      option === null\n    ) {\n      return \"\";\n    }\n\n    const value = object.split(separator)[option];\n\n    if (value === object) {\n      return \"\";\n    }\n\n    return value;\n  };\n\n  public findArrayItemByProperty = function (\n    query: unknown,\n    object: any,\n    query_property: any,\n    output: any,\n    defaultValue: any,\n  ) {\n    if (\n      query === undefined ||\n      query === null ||\n      object === undefined ||\n      object === null ||\n      query_property === undefined ||\n      query_property === null ||\n      output === undefined ||\n      output === null ||\n      defaultValue === undefined ||\n      defaultValue === null\n    ) {\n      return \"\";\n    }\n\n    const data = object.find((e: any) => e[query_property] === query);\n    if (data) {\n      return data[output];\n    } else {\n      return defaultValue;\n    }\n  };\n}\n","import { ISession } from \"app/src/Common/SessionService\";\nimport { IFlash, FlashLevels } from \"app/src/Common/FlashService\";\nimport { OrgAclType } from \"../../Models/Org\";\nimport { UserPrefConfigType } from \"../../Models/UserPreference\";\nimport { IBaseConfig } from \"../IBaseConfig\";\n\nexport class EstimatorTourService {\n  public tour: any;\n  public props: any = {};\n  public addLineItemStep: any;\n  protected _prevStep: any;\n\n  public static $inject = [\"uiTourService\", \"Session\", \"$sce\", \"Flash\", \"BaseConfig\"];\n\n  constructor(\n    public uiTourService: any,\n    private Session: ISession,\n    public $sce: ng.ISCEService,\n    public Flash: IFlash,\n    public BaseConfig: IBaseConfig,\n  ) {}\n\n  public init(props: any) {\n    if (!props.estimateCtrl.navDisplay) {\n      return;\n    }\n    this.Session.fetchUserPref(UserPrefConfigType.estimator_tour).then((est_tour) => {\n      if (est_tour) {\n        this.props = props || {};\n        this.props.estimateCtrl.activeGroupTab = \"overview\";\n        this.props.estimateCtrl.EventingFactory.trackEvent(\"initialize tour\", {});\n        this.tour = this.uiTourService.getTourByName(\"estimate-tour\");\n        this.tour.do_not_show = true;\n        this.props.estimateCtrl.$timeout().then(() => {\n          if (this.tour._getSteps().length <= 0) {\n            this.createTour();\n          } else if (this.tour.getStatus() === this.tour.Status.OFF) {\n            this.props.estimateCtrl.EventingFactory.trackEvent(\"start tour\", {});\n            this.startTour();\n          }\n        });\n      }\n    });\n  }\n\n  public createTour() {\n    const full = _.include(this.props.estimateCtrl.org.fetchAcl(OrgAclType.estimator), \"full\");\n    const multiple_groups = _.include(this.props.estimateCtrl.org.fetchAcl(OrgAclType.estimator), \"multiple_groups\");\n    this.tour.createStep({\n      selector: \"#uitour000\",\n      order: 10,\n      scrollOffset: 200,\n      title: \"Estimator\",\n      orphan: true,\n      trustedContent: this.$sce.trustAsHtml(\n        \"Welcome to the Estimator.<br/><br/><span class='tour-bold'>Click next</span> to get a walk through on how to create an estimate.<br/><br/>Please don't hesitate to contact the <span class='tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_NAME +\n          \"</span> with any questions you might have.</br></br> Email: <a href='mailto:\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"</span></a></br> Phone: <a href='\" +\n          this.BaseConfig.ONBOARDING_PHONE_DIAL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_PHONE +\n          \"</span></a><br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \"estimate-group\",\n      order: 12,\n      scrollOffset: 200,\n      title: \"Included Estimate Group\",\n      placement: \"top\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"The first line item created is added to an estimate group and the line item editor is opened in line.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \"line-item-editor\",\n      order: 13,\n      scrollOffset: 200,\n      title: \"Line Item Editor\",\n      placement: \"top\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"The line item editor provides everything you need to edit name, description, quantity, pricing, & files of the line item.<br/><br/>\",\n      ),\n    });\n    if (full) {\n      this.tour.createStep({\n        selector: \"#tour-step-product-selector\",\n        order: 14,\n        scrollOffset: 200,\n        title: \"Product Selector\",\n        placement: \"top\",\n        trustedContent: this.$sce.trustAsHtml(\n          \"The product selector is now accessible via a drop down in the line item editor. Search and select products from your price list.<br/><br/>\",\n        ),\n      });\n    }\n    this.tour.createStep({\n      selector: \".line-item-input\",\n      order: 15,\n      scrollOffset: 200,\n      title: \"Line Item Editing\",\n      placement: \"top\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Edit the name, description, quantity, and pricing of your line item.<br/><br/>\",\n      ),\n    });\n    if (full) {\n      this.tour.createStep({\n        selector: \".line-item-editor-tabs\",\n        order: 16,\n        scrollOffset: 200,\n        title: \"Line Item Editor Tabs\",\n        placement: \"top\",\n        trustedContent: this.$sce.trustAsHtml(\n          \"The line item editor tabs will show available measurements, files, and product options to select from. The tabs show/hide based on what's available for the current line item.<br/><br/>\",\n        ),\n      });\n    }\n    this.tour.createStep({\n      selector: \".tour-save-button\",\n      order: 17,\n      scrollOffset: 200,\n      title: \"Save Changes\",\n      placement: \"top\",\n      trustedContent: this.$sce.trustAsHtml(\"Click Save Changes after you are done editing your line item.<br/><br/>\"),\n    });\n    this.tour.createStep({\n      selector: \".editable-footer\",\n      order: 18,\n      scrollOffset: 200,\n      title: \"Save, Cancel, & Delete\",\n      placement: \"top\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Click Cancel to undo any changes you made to the line item or Click Delete Item to remove the line item entirely.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \".nav-tabs\",\n      order: 20,\n      scrollOffset: 200,\n      title: \"Estimate Groups\",\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Estimate Groups allow you to <span class='tour-underline'>organize products</span> on your estimate.<br/><br/>Groups can be used for things like a <span class='tour-bold'>Good/Better/Best</span> organization of product options. It can also be used to group your products for easy reference and the ability to <span class='tour-underline'>total each group</span>.<br/><br/>\",\n      ),\n    });\n    if (multiple_groups) {\n      this.tour.createStep({\n        selector: \".nav-tabs\",\n        order: 25,\n        scrollOffset: 200,\n        title: \"Drag to Reorder\",\n        placement: \"bottom\",\n        trustedContent: this.$sce.trustAsHtml(\n          \"The tabs are <span class='tour-bold'>draggable</span> to allow reordering. <span class='tour-underline'>Included Estimate Groups</span> (with asterisk) will always show up first in the order.<br/><br/>\",\n        ),\n      });\n    }\n    this.tour.createStep({\n      selector: \"#uitour030\",\n      order: 30,\n      scrollOffset: 200,\n      title: \"Overview Tab\",\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"The overview section allows you to <span class='tour-bold'>view all groups</span> and products on your estimate.<br/><br/>It also allows you to <span class='tour-underline'>add discounts</span>, <span class='tour-underline'>set estimated start dates</span>, as well as access the <span class='tour-underline'>payment estimator</span>.<br/><br/>\",\n      ),\n    });\n    if (multiple_groups) {\n      this.tour.createStep({\n        selector: \"#uitour040\",\n        order: 40,\n        scrollOffset: 200,\n        title: \"Add Estimate Group\",\n        placement: \"bottom\",\n        trustedContent: this.$sce.trustAsHtml(\n          \"By clicking on <span class='tour-underline'>Add Group</span>, you can create a new estimate group.<br/></br>\",\n        ),\n      });\n    }\n    this.tour.createStep({\n      selector: \".group-tab\",\n      order: 45,\n      scrollOffset: 200,\n      title: \"Navigate to Group\",\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Click on an estimate group tab to <span class='tour-underline'>see more detail</span> on that estimate group.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \"#uitour050-0\",\n      order: 50,\n      scrollOffset: 200,\n      title: \"Collapsed View\",\n      placement: \"left\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"The new <span class='tour-underline'>collapsed view</span> allows you to see more items in your estimate group. It also allows you to <span class='tour-bold'>reorganize and reorder</span> items quickly and easily.<br/><br/>Try it out!<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \"#uitour100-0-0\",\n      order: 55,\n      scrollOffset: 200,\n      title: \"Drag Handle\",\n      placement: \"top\",\n      popupClass: \"tour-left-250\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"<span class='tour-bold'>Drag</span> the estimate line item to <span class='tour-bold'>reorder</span> using the drag handle on the left.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \"#uitour060-0\",\n      order: 60,\n      scrollOffset: 200,\n      title: \"Editable Group Name\",\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"<span class='tour-bold'>Click the pencil</span> to edit the estimate group name.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \"#uitour070-0\",\n      order: 70,\n      scrollOffset: 200,\n      title: \"Edit Group Name\",\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"The estimate group name can have any name.<br/><br/>You can use this to <span class='tour-bold'>organize</span> your items.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \"#uitour080-0\",\n      order: 80,\n      scrollOffset: 200,\n      title: \"Included Group\",\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Estimate groups marked as <span class='tour-underline'>Included</span> will be <span class='tour-bold'>totaled together</span> for the total price of the estimate.<br/><br/>Estimate groups marked as <span class='tour-underline'>Not Included</span> will be provided as optional items that are <span class='tour-bold'>not included in the total</span>.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \".group-tab\",\n      order: 90,\n      scrollOffset: 200,\n      title: \"Asterisk *\",\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Notice the <span class='tour-bold estimate-group-included'>blue *</span> next to the estimate group name. This denotes the estimate group is <span class='tour-underline'>included</span>.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \".tour-add-template\",\n      order: 95,\n      scrollOffset: 200,\n      title: \"Add Template\",\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Add line items from a Template to your estimate to get your most often quoted services quickly.<br/><br/>\",\n      ),\n    });\n    this.Session.can(\"update\", \"EstimateTemplate\").then((value) => {\n      if (value) {\n        this.tour.createStep({\n          selector: \".tour-save-template\",\n          order: 96,\n          scrollOffset: 200,\n          title: \"Save Template\",\n          placement: \"bottom\",\n          trustedContent: this.$sce.trustAsHtml(\"Save new Templates by clicking on the drop down button.<br/><br/>\"),\n        });\n      }\n    });\n    this.tour.createStep({\n      selector: \".tour-save-estimate\",\n      order: 100,\n      scrollOffset: 200,\n      title: \"Save Estimate\",\n      placement: \"left\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"After completing the estimate, save the estimate by clicking here.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \"#uitour000\",\n      order: 110,\n      scrollOffset: 200,\n      title: \"Questions?\",\n      orphan: true,\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Please don't hesitate to contact the <span class='tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_NAME +\n          \"</span> with any questions you might have.</br></br> Email: <a href='mailto:\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"</span></a></br> Phone: <a href='\" +\n          this.BaseConfig.ONBOARDING_PHONE_DIAL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_PHONE +\n          \"</span></a> <br/><br/>\",\n      ),\n    });\n    this.props.estimateCtrl.EventingFactory.trackEvent(\"start tour\", {});\n    this.props.estimateCtrl.$timeout(() => {\n      this.startTour();\n    });\n  }\n\n  public startTour() {\n    if (this.props.estimateCtrl.estimate.estimateGroups(true).length > 0) {\n      this.tour.start();\n      const group = this.props.estimateCtrl.estimate.existingGroups(true)[0];\n      if (group.line_items.length > 0) {\n        const lineItem = group.line_items[0];\n        lineItem.editing = true;\n      }\n    }\n  }\n\n  public next() {\n    if (this.tour) {\n      this.props.estimateCtrl.$timeout(() => {\n        this.tour.next();\n      });\n    }\n  }\n\n  public help(): ng.IPromise<any> {\n    this.Session.setTourPref(UserPrefConfigType.estimator_tour, true);\n    const preference = this.Session.savePreference();\n    preference.then(() => {\n      this.Flash.addMessage(FlashLevels.success, \"Estimator Tour Enabled.\");\n    });\n    return preference;\n  }\n\n  public onShown() {\n    this.props.estimateCtrl.$timeout().then(() => {\n      this.tour.reposition();\n      if (this.tour._getCurrentStep().order === 12) {\n        this.tour.removeStep(this.addLineItemStep);\n        return;\n      }\n      if (this.tour._getCurrentStep().order === 10) {\n        const group = this.props.estimateCtrl.estimate.existingGroups(true)[0];\n        if (group.line_items.length === 0) {\n          this.props.estimateCtrl.addLineItem(this.props.estimateCtrl.estimate.existingGroups(true)[0]);\n        }\n        return;\n      }\n    });\n  }\n\n  public onEnd() {\n    this.props.estimateCtrl.EventingFactory.trackEvent(\"end tour\", { step_title: this.tour._getCurrentStep().title });\n    this.Session.setTourPref(UserPrefConfigType.estimator_tour, !this.tour.do_not_show);\n    this.Session.savePreference();\n  }\n\n  public onNext() {\n    if (this._prevStep) {\n      this._prevStep.popup.remove();\n      this._prevStep.popup = undefined;\n      this._prevStep.tether = undefined;\n    }\n    this._prevStep = this.tour._getCurrentStep();\n    const order = this._prevStep.order;\n    this.props.estimateCtrl.EventingFactory.trackEvent(\"next tour step\", {\n      step_title: this.tour._getCurrentStep().title,\n    });\n    if (order === 20) {\n      const group = this.props.estimateCtrl.estimate.existingGroups(true)[0];\n      const lineItem = group.line_items[0];\n      lineItem.name = \"Product Name\";\n      lineItem.description = \"This is the product description.\";\n      lineItem.quantity = 1;\n      lineItem.product_price = 10;\n      lineItem.price = 10;\n      lineItem.ext_price = 10;\n      lineItem.editing = false;\n      lineItem.newly_added = false;\n      this.props.estimateCtrl.selectedLineItem = lineItem;\n      this.props.estimateCtrl.lineItemEdited(lineItem, group);\n      return;\n    }\n    if (order === 30) {\n      this.props.estimateCtrl.activeGroupTab = this.props.estimateCtrl.estimate.groups[0].$$hashKey;\n      return;\n    }\n    if (order === 50) {\n      this.props.estimateCtrl.collapsedView = true;\n      return;\n    }\n    if (order === 60) {\n      this.props.estimateCtrl.tourEditNameAction[0] = true;\n      return;\n    }\n  }\n\n  public onPrev() {\n    if (this._prevStep) {\n      this._prevStep.popup.remove();\n      this._prevStep.popup = undefined;\n      this._prevStep.tether = undefined;\n    }\n    this._prevStep = this.tour._getCurrentStep();\n    const order = this._prevStep.order;\n    this.props.estimateCtrl.EventingFactory.trackEvent(\"previous tour step\", {\n      step_title: this.tour._getCurrentStep().title,\n    });\n    if (order === 30) {\n      this.props.estimateCtrl.activeGroupTab = \"overview\";\n      const group = this.props.estimateCtrl.estimate.existingGroups(true)[0];\n      const lineItem = group.line_items[0];\n      lineItem.editing = true;\n    }\n    if (order === 70) {\n      this.props.estimateCtrl.tourEditNameAction[0] = false;\n      return;\n    }\n  }\n}\n","import { ISession } from \"../SessionService\";\nimport { FlashLevels, IFlash } from \"../FlashService\";\nimport { IJob } from \"../../Models/Job\";\nimport { JobShowTourService } from \"./JobShowTourService\";\nimport { UserPrefConfigType } from \"../../Models/UserPreference\";\nimport { IBaseConfig } from \"../IBaseConfig\";\n\nexport class JobInfoTourService {\n  public tour: any;\n  public props: any = {};\n  public job: IJob;\n  protected _prevStep: any;\n\n  public static $inject = [\"uiTourService\", \"JobShowTourService\", \"Session\", \"$sce\", \"Flash\", \"BaseConfig\"];\n\n  constructor(\n    public uiTourService: any,\n    public JobShowTourService: JobShowTourService,\n    private Session: ISession,\n    public $sce: ng.ISCEService,\n    public Flash: IFlash,\n    public BaseConfig: IBaseConfig,\n  ) {}\n\n  public init(props: any) {\n    this.Session.fetchUserPref(UserPrefConfigType.job_info_tour).then((info_tour) => {\n      if (info_tour) {\n        this.props = props || {};\n        this.tour = this.uiTourService.getTourByName(\"job-info-tour\");\n        this.tour.do_not_show = true;\n        this.props.jobInfoCtrl.$timeout().then(() => {\n          if (this.tour._getSteps().length <= 0) {\n            this.createTour();\n          } else if (this.tour.getStatus() === this.tour.Status.OFF) {\n            this.startTour();\n          }\n        });\n      }\n    });\n  }\n\n  public createTour() {\n    this.tour.createStep({\n      selector: \".tour-customer-details\",\n      order: 10,\n      scrollOffset: 200,\n      title: \"Job\",\n      orphan: true,\n      trustedContent: this.$sce.trustAsHtml(\n        \"Welcome to the Job.<br/><br/><span class='tour-bold'>Click next</span> to get a walk through on how to create, edit, and navigate a job.<br/><br/>This information can also be automatically imported via one of our CRM integrations.<br/><br/>Please don't hesitate to contact the <span class='tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_NAME +\n          \"</span> with any questions you might have.</br></br> Email: <a href='mailto:\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"</span></a></br> Phone: <a href='\" +\n          this.BaseConfig.ONBOARDING_PHONE_DIAL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_PHONE +\n          \"</span></a><br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \".tour-customer-details\",\n      order: 20,\n      scrollOffset: 500,\n      title: \"Customer Details\",\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Add the customer's name, email address, lead source, and phone numbers.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \".tour-job-details\",\n      order: 30,\n      scrollOffset: 200,\n      title: \"Job Details\",\n      placement: \"top\",\n      trustedContent: this.$sce.trustAsHtml(\"Add the job name, track the job status, and reassign jobs.<br/><br/>\"),\n    });\n    this.tour.createStep({\n      selector: \".tour-job-address\",\n      order: 40,\n      scrollOffset: 200,\n      title: \"Job Address\",\n      placement: \"top\",\n      trustedContent: this.$sce.trustAsHtml(\"Enter the job's address here.<br/><br/>\"),\n    });\n    this.tour.createStep({\n      selector: \".map-view\",\n      order: 50,\n      scrollOffset: 200,\n      title: \"Map View\",\n      placement: \"top\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"The job's address is automatically located and Google Map is used to visualize the location.<br/><br/>\",\n      ),\n    });\n    this.tour.createStep({\n      selector: \".tour-save\",\n      order: 60,\n      scrollOffset: 200,\n      title: \"Save\",\n      placement: \"left\",\n      trustedContent: this.$sce.trustAsHtml(\"Don't forget to save all the information for the customer.<br/><br/>\"),\n    });\n    this.tour.createStep({\n      selector: \".tour-save\",\n      order: 110,\n      scrollOffset: 200,\n      title: \"Questions?\",\n      orphan: true,\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Please don't hesitate to contact the <span class='tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_NAME +\n          \"</span> with any questions you might have.</br></br> Email: <a href='mailto:\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"</span></a></br> Phone: <a href='\" +\n          this.BaseConfig.ONBOARDING_PHONE_DIAL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_PHONE +\n          \"</span></a> <br/><br/>\",\n      ),\n    });\n\n    this.props.jobInfoCtrl.$timeout(() => {\n      this.startTour();\n    });\n  }\n\n  public startTour() {\n    this.tour.start();\n  }\n\n  public next() {\n    if (this.tour) {\n      this.props.jobInfoCtrl.$timeout(() => {\n        this.tour.next();\n      });\n    }\n  }\n\n  public help(): ng.IPromise<any> {\n    this.Session.setTourPref(UserPrefConfigType.job_info_tour, true);\n    const preference = this.Session.savePreference();\n    preference.then(() => {\n      this.Flash.addMessage(FlashLevels.success, \"Job Tour Enabled.\");\n    });\n    return preference;\n  }\n\n  public onShown() {\n    this.props.jobInfoCtrl.$timeout().then(() => {\n      this.tour.reposition();\n    });\n  }\n\n  public onEnd() {\n    this.props.jobInfoCtrl.EventingFactory.trackEvent(\"end tour\", {\n      tour: \"JobInfoTour\",\n      step_title: this.tour._getCurrentStep().title,\n    });\n    this.Session.setTourPref(UserPrefConfigType.job_info_tour, !this.tour.do_not_show);\n    this.Session.savePreference();\n    this.props.jobInfoCtrl.$timeout(() => {\n      this.JobShowTourService.startTour();\n    });\n  }\n\n  public onNext() {\n    if (this._prevStep) {\n      this._prevStep.popup.remove();\n      this._prevStep.popup = undefined;\n      this._prevStep.tether = undefined;\n    }\n    this._prevStep = this.tour._getCurrentStep();\n    const order = this._prevStep.order;\n    this.props.jobInfoCtrl.EventingFactory.trackEvent(\"next tour step\", {\n      tour: \"JobInfoTour\",\n      step_title: this.tour._getCurrentStep().title,\n    });\n    if (order === 10) {\n      const job = this.props.jobInfoCtrl.job;\n      if (job && job.id) {\n        if (!job.address.isValidLatLon()) {\n          job.address.line_1 = \"5810 Corralberry Court\";\n          job.address.postal_code = \"46033\";\n          job.address.city = \"Carmel\";\n          job.address.state = \"Indiana\";\n          job.address.lat = 39.98627;\n          job.address.lon = -86.05835;\n        }\n      } else {\n        job.name = \"Sample Customer\";\n        job.customer_name = \"Sample Customer\";\n        job.email = this.Session.currentUser.email;\n        job.address.line_1 = \"5810 Corralberry Court\";\n        job.address.postal_code = \"46033\";\n        job.address.city = \"Carmel\";\n        job.address.state = \"Indiana\";\n        job.address.lat = 39.98627;\n        job.address.lon = -86.05835;\n      }\n    }\n  }\n\n  public onPrev() {\n    if (this._prevStep) {\n      this._prevStep.popup.remove();\n      this._prevStep.popup = undefined;\n      this._prevStep.tether = undefined;\n    }\n    this._prevStep = this.tour._getCurrentStep();\n    this.props.jobInfoCtrl.EventingFactory.trackEvent(\"previous tour step\", {\n      tour: \"JobInfoTour\",\n      step_title: this.tour._getCurrentStep().title,\n    });\n  }\n}\n","import { ISession } from \"../SessionService\";\nimport { FlashLevels, IFlash } from \"../FlashService\";\nimport { IJob } from \"../../Models/Job\";\nimport { ISection } from \"../../JobMenu/JobMenuOrderService\";\nimport { UserPrefConfigType } from \"../../Models/UserPreference\";\nimport { IBaseConfig } from \"../IBaseConfig\";\n\nexport class JobShowTourService {\n  public tour: any;\n  public props: any = {};\n  public job: IJob;\n  public tourData: any = {};\n  protected _prevStep: any;\n\n  public static $inject = [\"uiTourService\", \"Session\", \"$sce\", \"Flash\", \"BaseConfig\"];\n\n  constructor(\n    public uiTourService: any,\n    private Session: ISession,\n    public $sce: ng.ISCEService,\n    public Flash: IFlash,\n    public BaseConfig: IBaseConfig,\n  ) {}\n\n  public init(props: any): ng.IPromise<any> {\n    return this.Session.fetchUserPref(UserPrefConfigType.job_show_tour).then((show_tour) => {\n      if (show_tour) {\n        this.props = props || {};\n        this.tour = this.uiTourService.getTourByName(\"job-show-tour\");\n        this.tour.do_not_show = true;\n        return this.props.jobShowCtrl.$timeout().then(() => {\n          if (this.tour._getSteps().length <= 0) {\n            this.createTour();\n          }\n        });\n      }\n    });\n  }\n\n  public createTour() {\n    let menuItems = [];\n    this.tourData = {\n      information: {\n        title: \"Information\",\n        content:\n          \"Welcome to a Job.<br/><br/><span class='tour-bold'>Click next</span> to get a walk through on all of the tabs available at the left.<br/><br/>Please don't hesitate to contact the <span class='tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_NAME +\n          \"</span> with any questions you might have.</br></br> Email: <a href='mailto:\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_EMAIL +\n          \"</span></a></br> Phone: <a href='\" +\n          this.BaseConfig.ONBOARDING_PHONE_DIAL +\n          \"'><span class='tour-bold tour-underline'>\" +\n          this.BaseConfig.ONBOARDING_PHONE +\n          \"</span></a><br/><br/>\",\n      },\n      appointments: {\n        title: \"Appointments\",\n        content:\n          \"The appointments section allows you to create and edit appointments for the given job. These appointments have the ability to <span class='tour bold'>send a screen share invite</span> which you can use to connect directly with your customer remotely.<br/><br/>You can also link up your personal calendar to make sure you don't double book yourself.<br/><br/>\",\n      },\n      tools: {\n        title: \"Tools\",\n        content:\n          \"The tools section allows you to access all of the powerful tools \" +\n          this.BaseConfig.APP_NAME +\n          \" has to offer.<br/><br/>\",\n      },\n      images: {\n        title: \"Photos\",\n        content:\n          \"Upload photos of the property from your computer or device. You can also send an upload invitation (via text or email) for your customer to upload their own photos.<br/><br/>\",\n      },\n      documents: {\n        title: \"Documents\",\n        content:\n          \"Upload documents (pdfs, spreadsheets, measurement data imports, etc.) and store them safely and securely with your job.<br/><br/>When stored in \" +\n          this.BaseConfig.APP_NAME +\n          \" you can always quickly and easily find the right document for the right job.<br/><br/>\",\n      },\n      measurements: {\n        title: \"Measurements\",\n        content:\n          \"Add, edit, or reference measurements for the job quickly and easily in one place.<br/><br/>Measurements can be added manually or imported using one of the many remote measurement providers.<br/><br/>\",\n      },\n      notes: {\n        title: \"Notes\",\n        content: \"Add notes for the job that can be shared and referenced with the entire team.<br/><br/>\",\n      },\n      history: {\n        title: \"History\",\n        content: \"View the history of a job, status of emails sent in the system, all in one place.<br/><br/>\",\n      },\n      presentations: {\n        title: \"Presentations\",\n        content:\n          \"Access your company's presentation material quickly and easily.<br/><br/>With presentations uploaded globally you know you'll always have what you need when you need it.<br/><br/>\",\n      },\n      design_tools: {\n        title: \"Design Tools\",\n        content: \"Utilizing integrated design tools you can help bring your customer's design needs to life.<br/><br/>\",\n      },\n      estimates: {\n        title: \"Estimates\",\n        content:\n          \"Quickly and easily build a price for your customer utilizing the integrated estimation functionality. Our flexible estimator allows you to generate an estimate with your pricing information and communicate that professionally with your customer.<br/><br/>\",\n      },\n      proposals: {\n        title: this.Session.currentUser.org.estimateTitle(true),\n        content:\n          \"Generate professional \" +\n          this.Session.currentUser.org.estimateTitle(true) +\n          \" for your customers each and every time. These documents can also be easily emailed to the customer.<br/><br/>\",\n      },\n      contracts: {\n        title: this.Session.currentUser.org.contractTitle(true),\n        content:\n          \"Generate professional \" +\n          this.Session.currentUser.org.contractTitle(true) +\n          \" for your customer. Utilizing the integrated digital signature feature obtain a signature in the home or remote.<br/><br/>\",\n      },\n    };\n    _.each(this.props.jobShowCtrl.sidebar.sections, (section: ISection) => {\n      menuItems = menuItems.concat(section.menuItems);\n    });\n    _.each(menuItems, (mi, idx) => {\n      if ([\"signatures\", \"inspection\"].includes(mi.id)) return;\n\n      const placement = \"right\";\n      this.tour.createStep({\n        selector: \"#\" + mi.id,\n        order: idx,\n        title: this.tourData[mi.id].title,\n        scrollIntoView: true,\n        placement: placement,\n        trustedContent: this.$sce.trustAsHtml(this.tourData[mi.id].content),\n      });\n    });\n\n    this.tour.createStep({\n      selector: \"#presentation-mode-off\",\n      order: 100,\n      title: \"Presentation Mode\",\n      scrollIntoView: true,\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Turn on presentation mode to hide the menus at the left and enable the screen share.<br/><br/>\",\n      ),\n    });\n\n    this.tour.createStep({\n      selector: \"#presentation-mode-on\",\n      order: 101,\n      title: \"Exiting Presentation Mode\",\n      scrollIntoView: true,\n      placement: \"right-top\",\n      trustedContent: this.$sce.trustAsHtml(\"Exiting presentation mode is as easy as clicking the X.<br/><br/>\"),\n    });\n\n    this.tour.createStep({\n      selector: \"#presentation-mode-start\",\n      order: 102,\n      title: \"Start Screen Share\",\n      scrollIntoView: true,\n      placement: \"right-top\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Instantly start the integrated screen share with the click of a button.<br/><br/>\",\n      ),\n    });\n\n    this.tour.createStep({\n      selector: \"#presentation-mode-invite\",\n      order: 104,\n      title: \"Send Invitation\",\n      scrollIntoView: true,\n      placement: \"bottom\",\n      trustedContent: this.$sce.trustAsHtml(\n        \"Instantly send a screen share invitation via email or text message.<br/><br/>\",\n      ),\n    });\n  }\n\n  public startTour() {\n    this.Session.fetchUserPref(UserPrefConfigType.job_show_tour).then((show_tour) => {\n      if (this.props.jobShowCtrl && show_tour) {\n        this.props.jobShowCtrl.$timeout(() => {\n          const tour = this.props.jobShowCtrl.JobInfoTourService.tour;\n          const tour_feedback = _.isUndefined(tour) || tour.getStatus() === 0;\n          if (this.props.jobShowCtrl.$stateParams[\"id\"] !== \"new\" && tour_feedback) {\n            this.tour.start();\n          }\n        });\n      }\n    });\n  }\n\n  public next() {\n    if (this.tour) {\n      this.props.jobShowCtrl.$timeout(() => {\n        this.tour.next();\n      });\n    }\n  }\n\n  public help(): ng.IPromise<any> {\n    this.Session.setTourPref(UserPrefConfigType.job_show_tour, true);\n    const preference = this.Session.savePreference();\n    preference.then(() => {\n      this.Flash.addMessage(FlashLevels.success, \"Job Tour Enabled.\");\n    });\n    return preference;\n  }\n\n  public onShown() {\n    this.props.jobShowCtrl.$timeout().then(() => {\n      this.tour.reposition();\n    });\n  }\n\n  public onEnd() {\n    this.props.jobShowCtrl.EventingFactory.trackEvent(\"end tour\", {\n      tour: \"JobShowTour\",\n      step_title: this.tour._getCurrentStep().title,\n    });\n    this.Session.setTourPref(UserPrefConfigType.job_show_tour, !this.tour.do_not_show);\n    this.Session.savePreference();\n  }\n\n  public onNext() {\n    if (this._prevStep) {\n      this._prevStep.popup.remove();\n      this._prevStep.popup = undefined;\n      this._prevStep.tether = undefined;\n    }\n\n    this._prevStep = this.tour._getCurrentStep();\n    const order = this._prevStep.order;\n\n    if (order === 100) {\n      this.props.jobShowCtrl.toggleNav();\n    }\n\n    this.props.jobShowCtrl.EventingFactory.trackEvent(\"next tour step\", {\n      tour: \"JobShowTour\",\n      step_title: this.tour._getCurrentStep().title,\n    });\n  }\n\n  public onPrev() {\n    if (this._prevStep) {\n      this._prevStep.popup.remove();\n      this._prevStep.popup = undefined;\n      this._prevStep.tether = undefined;\n    }\n\n    this._prevStep = this.tour._getCurrentStep();\n    const order = this._prevStep.order;\n\n    if (order === 101) {\n      this.props.jobShowCtrl.toggleNav();\n    }\n    this.props.jobShowCtrl.EventingFactory.trackEvent(\"previous tour step\", {\n      tour: \"JobShowTour\",\n      step_title: this.tour._getCurrentStep().title,\n    });\n  }\n}\n","import { IConfirmDialog } from \"app/src/Common/ConfirmDialogService\";\nimport * as ng from \"angular\";\nimport { dispatch, StoreRegistry } from \"app2/src/storeRegistry\";\nimport { push } from \"connected-react-router/immutable\";\n\nexport interface IDirtyMerge {\n  check(): boolean;\n  reset(): ng.IPromise<any>;\n  trackEvent(action, props): void;\n}\n\nexport interface IDirtyWatcher {\n  setup($scope: ng.IScope, watched: IDirtyMerge);\n  cleanup();\n  trackEvent(action, props): void;\n}\n\nclass DirtyWatcher implements IDirtyWatcher {\n  private watched: IDirtyMerge;\n  private _locationChangeBinding: () => void;\n  private _unloadBinding: () => void;\n  private _unblock: () => void;\n  private history;\n\n  constructor(\n    public ConfirmDialog: IConfirmDialog,\n    public $state: ng.ui.IStateService,\n    public $analytics: angulartics.IAnalyticsService,\n  ) {\n    this.history = StoreRegistry.get(\"history\");\n  }\n\n  public setup($scope: ng.IScope, obj: IDirtyMerge) {\n    this.watched = obj;\n\n    this._locationChangeBinding = $scope.$on(\"RSF_StateChange\", (event: ng.IAngularEvent, args: any) => {\n      if (this.watched.check()) {\n        args.transition._deferred.reject();\n        this.ConfirmDialog.confirm(\n          \"There are unsaved changes that will be lost.  Are you sure you want to navigate away?\",\n        )\n          .then(() => {\n            this.watched.reset().then(() => {\n              this.watched.trackEvent(\"close dirty\", {});\n              this.$state.go(args.transition.to().name, args.transition.params());\n            });\n          })\n          .catch(() => {\n            this.watched.trackEvent(\"don't close\", {});\n          });\n      }\n    });\n\n    this._unblock = this.history.block((prompt) => {\n      if (this.watched.check()) {\n        this._locationChangeBinding();\n        this.ConfirmDialog.confirm(\n          \"There are unsaved changes that will be lost.  Are you sure you want to navigate away?\",\n        )\n          .then(async () => {\n            this.watched.trackEvent(\"close dirty\", {});\n            await this.watched.reset();\n            this._unblock();\n            dispatch(push(prompt.pathname + (prompt.search || \"\")));\n          })\n          .catch(() => {\n            this.watched.trackEvent(\"don't close\", {});\n          });\n        return false;\n      }\n    });\n\n    this._unloadBinding = $scope.$on(\"onBeforeUnload\", (event: ng.IAngularEvent, args: any) => {\n      if (this.watched.check()) {\n        args[\"message\"] = \"There are unsaved changes that will be lost.  Are you sure you want to continue?\";\n        event.preventDefault();\n      }\n    });\n\n    $scope.$on(\"$destroy\", () => {\n      this.cleanup();\n    });\n  }\n\n  public cleanup() {\n    if (this._locationChangeBinding) {\n      this._locationChangeBinding();\n    }\n    if (this._unloadBinding) {\n      this._unloadBinding();\n    }\n    if (this.history) {\n      this._unblock();\n    }\n  }\n\n  public trackEvent(action, props): void {\n    this.$analytics.eventTrack(action, props);\n  }\n}\n\nconst factory = (\n  ConfirmDialog: IConfirmDialog,\n  $state: ng.ui.IStateService,\n  $analytics: angulartics.IAnalyticsService,\n) => {\n  return new DirtyWatcher(ConfirmDialog, $state, $analytics);\n};\n\nfactory.$inject = [\"ConfirmDialog\", \"$state\", \"$analytics\"];\n\nexport { factory as DirtyWatcher };\n","import * as angulartics from \"angulartics\";\n\nexport interface IEventingFactory {\n  init(props: any): null;\n  trackEvent(action, props);\n}\n\nclass EventingFactory {\n  public props: any = {};\n\n  constructor(protected $analytics: angulartics.IAnalyticsService) {}\n\n  public init(props: any) {\n    this.props = props || {};\n  }\n\n  public trackEvent(action: string, props: any) {\n    let usedProps = JSON.parse(JSON.stringify(this.props));\n    if (props) {\n      usedProps = angular.extend(usedProps, props);\n    }\n    this.$analytics.eventTrack(action, usedProps);\n  }\n}\n\nconst factory = ($analytics: angulartics.IAnalyticsService) => {\n  return new EventingFactory($analytics);\n};\n\nfactory.$inject = [\"$analytics\"];\n\nexport default factory;\n","import { IDoc, IDocResource } from \"app/src/Models/Doc\";\nimport { IImage, IImageResource } from \"app/src/Models/Image\";\nimport { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { IEventingFactory } from \"app/src/Common/EventingFactory\";\nimport { IBaseConfig } from \"./IBaseConfig\";\nimport { directUpload, createDirect } from \"app2/src/api/image.service\";\nimport { fromJSON as imageFromJSON } from \"app2/src/records/Image\";\nimport { parseFloatSafe } from \"app2/src/helpers/Number\";\nimport { getFileType, dataURLToFile } from \"app2/src/helpers/File\";\nimport { toUnderscore } from \"app2/src/helpers/Format\";\n\nexport interface IFileQueueFactory {\n  queue: IFileQueue;\n  temp_queue: IFileQueue;\n  getObject(file, parent, display?): ng.IPromise<any>;\n  getObjectBlob(type, blob, parent, display?): ng.IPromise<any>;\n  clearTempQueue(): void;\n  clearQueue(): void;\n  getFileId(queue_name): number;\n  setQueue(): void;\n  cleanFileQueue(parent: any, clean_parent: boolean);\n  mergeQueue(parent: any, queue: IFileQueue);\n  uploadFileQueue(parent: any);\n  directUploadFileQueue(parent: any): Promise<any>;\n  uploadFile(type: string, model: string, id: number, file: any, sort_order: number, display?): ng.IPromise<any>;\n  getRemoteFile(url: string, object: any): ng.IPromise<any>;\n}\n\nexport interface IFileQueueInit {\n  getInstance(): IFileQueueFactory;\n}\n\nexport interface IFileQueue {\n  images: {};\n  documents: {};\n}\n\nclass FileQueueInit implements IFileQueueInit {\n  constructor(\n    public Doc: IDocResource,\n    public Image: IImageResource,\n    public EstimatorService: EstimatorService,\n    public $q: ng.IQService,\n    public Upload: ng.angularFileUpload.IUploadService,\n    public BaseConfig: IBaseConfig,\n    public EventingFactory: IEventingFactory,\n    public $http: ng.IHttpService,\n  ) {}\n\n  public getInstance() {\n    return new FileQueueFactory(\n      this.Doc,\n      this.Image,\n      this.EstimatorService,\n      this.$q,\n      this.Upload,\n      this.BaseConfig,\n      this.EventingFactory,\n      this.$http,\n    );\n  }\n}\n\nclass FileQueueFactory implements IFileQueueFactory {\n  public queue: IFileQueue = <IFileQueue>{ images: {}, documents: {} };\n  public temp_queue: IFileQueue = <IFileQueue>{ images: {}, documents: {} };\n  public fileValues: string[] = [\"image\", \"document\"];\n\n  constructor(\n    public Doc: IDocResource,\n    public Image: IImageResource,\n    public EstimatorService: EstimatorService,\n    public $q: ng.IQService,\n    public Upload: ng.angularFileUpload.IUploadService,\n    public BaseConfig: IBaseConfig,\n    public EventingFactory: IEventingFactory,\n    public $http: ng.IHttpService,\n  ) {}\n\n  public getObject(file, parent, display = \"do_not_display\"): ng.IPromise<any> {\n    const type = getFileType(file);\n    const app = this;\n    return this.$q(function (resolve) {\n      const newFile = new FileReader();\n      newFile.onload = function (e: any) {\n        //noinspection TypeScriptUnresolvedVariable\n        const newFile = e.target.result;\n        app.setupTempQueueObject(type, file, parent, display, newFile);\n        resolve();\n      };\n      newFile.readAsDataURL(file);\n    });\n  }\n\n  public getObjectBlob(type, blob, parent, display = \"do_not_display\"): ng.IPromise<any> {\n    let fileType: string;\n\n    try {\n      fileType = blob.split(\",\")[0].split(\":\")[1].split(\";\")[0].split(\"/\")[1];\n    } catch (e) {\n      console.error(blob, e);\n      fileType = \"bmp\";\n    }\n\n    const file = dataURLToFile(blob, \"new.\" + fileType);\n    this.setupTempQueueObject(type, file, parent, display, blob);\n    const promise = this.$q.defer();\n    promise.resolve();\n    return promise.promise;\n  }\n\n  public setQueue() {\n    _.each(this.fileValues, (file: string) => {\n      _.each(Object.keys(this.temp_queue[file + \"s\"]), (key: string) => {\n        this.queue[file + \"s\"][key] = this.temp_queue[file + \"s\"][key];\n      });\n    });\n    this.clearTempQueue();\n  }\n\n  public clearTempQueue() {\n    this.temp_queue.images = {};\n    this.temp_queue.documents = {};\n  }\n\n  public clearQueue() {\n    this.clearTempQueue();\n    this.queue.images = {};\n    this.queue.documents = {};\n  }\n\n  public getFileId(queue_name: string): number {\n    const firstId = -1;\n    const keys = Object.keys(this.temp_queue[queue_name + \"s\"]).concat(Object.keys(this.queue[queue_name + \"s\"]));\n\n    const currentMin = _.chain(keys)\n      .map((k) => {\n        return parseFloatSafe(k);\n      })\n      .min()\n      .value();\n\n    return _.min([firstId, currentMin - 1]);\n  }\n\n  public cleanFileQueue(parent: any, clean_parent: boolean) {\n    _.each(this.fileValues, (type) => {\n      if (parent[type + \"s\"].length > 0) {\n        _.each(parent[type + \"s\"], (obj: IDoc | IImage) => {\n          if (obj.id < 0 && !obj._destroy && parent.classy === \"EstimateLineItem\") {\n            this.queue[type + \"s\"][obj.id].object.li_sort_order = parent.sort_order;\n            this.queue[type + \"s\"][obj.id].object.g_sort_order = parent.estimateGroup.sort_order;\n          } else if (obj.id < 0 && obj._destroy) {\n            delete this.queue[type + \"s\"][obj.id];\n          }\n        });\n        if (clean_parent) {\n          parent[type + \"s\"] = _.filter(parent[type + \"s\"], (obj: IDoc | IImage) => {\n            return obj.id > 0;\n          });\n        }\n      }\n    });\n  }\n\n  public uploadFileQueue(parent: any): ng.IPromise<any> {\n    const promises2 = [];\n    _.each(this.fileValues, (type) => {\n      const queue = this.queue[type + \"s\"];\n      _.each(Object.keys(queue), (key) => {\n        const obj = queue[key];\n        let new_parent = parent;\n        if (parent.classy === \"Estimate\") {\n          new_parent = _.find(parent.lineItems(), (l) => {\n            return l.estimateGroup.sort_order === obj.object.g_sort_order && l.sort_order === obj.object.li_sort_order;\n          });\n          if (!new_parent) {\n            return;\n          }\n        }\n        const parent_class = toUnderscore(new_parent.classy);\n        promises2.push(\n          this.uploadFile(\n            type,\n            parent_class + \"s\",\n            new_parent.id,\n            obj.file,\n            obj.object.sort_order,\n            obj.object.display,\n          ).then((respObj) => {\n            if (new_parent.classy !== \"EstimateTemplate\") {\n              this.EventingFactory.trackEvent(type + \" saved to \" + parent_class, {\n                [parent_class]: new_parent.id,\n                [type]: respObj.id,\n              });\n              new_parent[type + \"s\"].push(respObj);\n              new_parent[type + \"s\"] = _.sortBy(new_parent[type + \"s\"], \"sort_order\");\n            } else {\n              const group = _.find(new_parent.template.groups, (g: any) => {\n                return g.sort_order === obj.object.g_sort_order;\n              });\n              const custom_product = _.find(group.custom_products, (cp: any) => {\n                return cp.sort_order === obj.object.li_sort_order;\n              });\n              custom_product[type + \"_ids\"].push(respObj.id);\n              this.EventingFactory.trackEvent(type + \" saved to estimate_template\", {\n                estimate_template: new_parent.id,\n                [type]: respObj.id,\n              });\n              return this.EstimatorService.updateTemplate(new_parent);\n            }\n          }),\n        );\n      });\n    });\n    return this.$q.all(promises2).finally(() => {\n      if (parent.classy !== \"EstimateTemplate\") {\n        this.clearQueue();\n      }\n    });\n  }\n\n  public directUploadFileQueue(parent: any): Promise<any> {\n    const queue = this.queue.images;\n    const imagesToUpload = [];\n    _.each(Object.keys(queue), (key) => {\n      const obj = queue[key];\n      let new_parent = parent;\n      if (parent.classy === \"Estimate\") {\n        new_parent = _.find(parent.lineItems(), (l) => {\n          return l.estimateGroup.sort_order === obj.object.g_sort_order && l.sort_order === obj.object.li_sort_order;\n        });\n        if (!new_parent) {\n          return;\n        }\n      }\n      imagesToUpload.push({ object: obj, parent: new_parent });\n    });\n\n    return this.batchDirectUploadImages(imagesToUpload, parent);\n  }\n\n  public async batchDirectUploadImages(imagesToUpload: any[], estimate: any): Promise<any> {\n    if (imagesToUpload.length === 0) {\n      return 0;\n    }\n    const { urls } = await directUpload(imagesToUpload.length, \"estimate\", estimate.id);\n\n    let imagesSuccess = 0;\n\n    const uploadPromises = urls.map(async (obj, index) => {\n      try {\n        const imageToUpload = imagesToUpload[index];\n        const file = imageToUpload.object.file;\n        const imageObject = imageToUpload.object.object;\n        await fetch(obj.url, { body: file, method: \"PUT\", headers: { \"Content-Type\": file.type } });\n\n        const record = imageFromJSON({\n          name: file.name,\n          display: imageObject.display || \"do_not_display\",\n          imageable_id: imageToUpload.parent.id,\n          imageable_type: imageToUpload.parent.classy,\n          sort_order: imageObject.sort_order || 0,\n          uuid: obj.id,\n        });\n        const response = await createDirect(record);\n\n        const image = this.Image.fromJSON(response.image) as IImage;\n        image._blob = file?.preview?.url || imageObject._blob;\n        this.EventingFactory.trackEvent(\"image saved to \" + toUnderscore(estimate.classy), {\n          estimate: estimate.id,\n          image: image.id,\n        });\n        imageToUpload.parent.images.push(image as any);\n        imageToUpload.parent.images = _.sortBy(imageToUpload.parent.images, \"sort_order\");\n\n        imagesSuccess += 1;\n        return response;\n      } catch (response) {\n        console.error(response);\n        return response;\n      }\n    });\n\n    await Promise.all(uploadPromises);\n    this.clearQueue();\n    return imagesSuccess;\n  }\n\n  public uploadFile(\n    type: string,\n    model: string,\n    id: number,\n    file: any,\n    sort_order: number,\n    display = \"do_not_display\",\n  ): ng.IPromise<any> {\n    return this.Upload.upload(<ng.angularFileUpload.IFileUploadConfigFile>{\n      url: this.BaseConfig.BASE_URL + \"/api/v1/\" + model + \"/\" + id + \"/\" + type + \"s\",\n      data: { [type]: { file: file, sort_order: sort_order, display: display } },\n    }).then((resp) => {\n      let respObj: any;\n      const props: any = {};\n\n      if (type === \"document\") {\n        respObj = this.Doc.fromJSON(resp.data[type]);\n        props.document = respObj.id;\n      } else if (type === \"image\") {\n        respObj = this.Image.fromJSON(resp.data[type]);\n        props.image = respObj.id;\n      }\n      this.EventingFactory.trackEvent(\"uploaded \" + type, props);\n      return respObj;\n    });\n  }\n\n  public getRemoteFile(url, lineItem): ng.IPromise<any> {\n    const request_url = this.BaseConfig.BASE_URL + \"/integrations/remote_file_url\";\n    const params = { params: { url: url } };\n    const get = this.$http\n      .get(request_url, params)\n      .then((resp) => {\n        const filename = url.split(\"/\").reverse()[0];\n        const file = dataURLToFile(resp.data, filename);\n        let display = \"do_not_display\";\n        if (getFileType(file) === \"document\") {\n          display = \"estimate\";\n        }\n        return this.getObject(file, lineItem, display);\n      })\n      .catch(() => {\n        // don't want to stop on fail\n      });\n    return get;\n  }\n\n  public mergeQueue(parent, temp_queue) {\n    _.each(Object.keys(temp_queue.images), (key) => {\n      parent.images = _.filter(parent.images, (img: IImage) => {\n        return img.id.toString() !== key;\n      });\n      temp_queue.images[key].object.id = this.getFileId(\"image\");\n      parent.images.unshift(temp_queue.images[key].object);\n      this.addTempQueue(\"image\", temp_queue.images[key]);\n    });\n    _.each(Object.keys(temp_queue.documents), (key) => {\n      parent.documents = _.filter(parent.documents, (doc: IDoc) => {\n        return doc.id.toString() !== key;\n      });\n      temp_queue.documents[key].object.id = this.getFileId(\"document\");\n      parent.documents.unshift(temp_queue.documents[key].object);\n      this.addTempQueue(\"document\", temp_queue.documents[key]);\n    });\n  }\n\n  private setupTempQueueObject(type, file, parent, display, blob) {\n    const data = {\n      id: this.getFileId(type),\n      name: file.name,\n      type: type,\n      created_at: new Date(Date.now()),\n      [type + \"able_type\"]: parent.classy,\n      [type + \"able_id\"]: parent.id,\n      sort_order: -1,\n      display: display,\n    };\n    if (parent[type + \"s\"][0]) {\n      data[\"sort_order\"] = parent[type + \"s\"][0].sort_order - 1;\n    }\n\n    this.EventingFactory.trackEvent(type + \" added to temp queue\", {\n      [toUnderscore(parent.classy)]: parent.id,\n      [type]: data.id,\n    });\n    if (type === \"document\") {\n      const doc: IDoc = this.Doc.fromJSON(data);\n      parent.documents.unshift(doc);\n      this.addTempQueue(type, { file: file, object: doc });\n    } else if (type === \"image\") {\n      const img: IImage = this.Image.fromJSON(data);\n      img._blob = blob;\n      parent.images.unshift(img);\n      this.addTempQueue(type, { file: file, object: img });\n    }\n  }\n\n  private addTempQueue(queue_name: string, item: any) {\n    this.temp_queue[queue_name + \"s\"][item.object.id] = item;\n  }\n}\n\nconst factory = (\n  Doc: IDocResource,\n  Image: IImageResource,\n  EstimatorService: EstimatorService,\n  $q: ng.IQService,\n  Upload: ng.angularFileUpload.IUploadService,\n  BaseConfig: IBaseConfig,\n  EventingFactory: IEventingFactory,\n  $http: ng.IHttpService,\n) => {\n  return new FileQueueInit(Doc, Image, EstimatorService, $q, Upload, BaseConfig, EventingFactory, $http);\n};\n\nfactory.$inject = [\"Doc\", \"Image\", \"EstimatorService\", \"$q\", \"Upload\", \"BaseConfig\", \"EventingFactory\", \"$http\"];\n\nexport default factory;\n","import { IDoc, IDocResource } from \"../Models/Doc\";\nimport { FlashLevels, IFlash } from \"./FlashService\";\nimport { ITask, Task } from \"../Models/Task\";\nimport { IImageResource } from \"../Models/Image\";\nimport { IJob } from \"../Models/Job\";\nimport * as angulartics from \"angulartics\";\nimport { IBaseConfig } from \"./IBaseConfig\";\nimport { validImportTypes } from \"app2/src/records/Document\";\n\nexport interface IMeasurementImporterFactory {\n  job: any;\n  category: string;\n  autoImport: boolean;\n  finishedCallback: (result?: any) => void;\n\n  init(job: IJob, autoImport: boolean, category?: string, callback?: (result?: any) => void): void;\n  upload(files: any, invalidFiles: any): ng.IPromise<any>;\n  importMeasurementFile(doc: any, measure_type: string): ng.IPromise<any>;\n}\n\nclass MeasurementImporterFactory implements IMeasurementImporterFactory {\n  public validImportTypes: string[] = validImportTypes;\n  public job: any;\n  public category = \"Documents\";\n  public autoImport = false;\n  public finishedCallback: (result?: any) => void;\n\n  constructor(\n    public Flash: IFlash,\n    public Upload: ng.angularFileUpload.IUploadService,\n    public BaseConfig: IBaseConfig,\n    public Doc: IDocResource,\n    public $q: ng.IQService,\n    public $http: ng.IHttpService,\n    public $timeout: ng.ITimeoutService,\n    public Image: IImageResource,\n    public $analytics: angulartics.IAnalyticsService,\n  ) {}\n\n  public init(job: IJob, autoImport: boolean, category?: string, callback?: (result: any) => void) {\n    this.job = job;\n    this.autoImport = autoImport;\n    if (category) {\n      this.category = category;\n    }\n    if (callback) {\n      this.finishedCallback = callback;\n    }\n  }\n\n  public upload(files: any, invalidFiles: any): ng.IPromise<any> {\n    if (!files) {\n      if (invalidFiles && invalidFiles.length > 0) {\n        this.trackEvent(\"invalid files\", {\n          category: this.category,\n          files: _.map(invalidFiles, (file: File) => {\n            return file.name;\n          }),\n        });\n        this.Flash.addMessage(\n          FlashLevels.warning,\n          \"Invalid file: \" +\n            _.map(invalidFiles, (file: File) => {\n              return file.name;\n            }).join(\", \") +\n            \".  Only document file types are allowed: (.xls, .xlsx, .csv, .xml, .json).\",\n        );\n      }\n      return;\n    }\n    let promises = [];\n    let docSuccess = 0;\n    _.each(files, (file) => {\n      promises = promises.concat(\n        this.Upload.upload(<ng.angularFileUpload.IFileUploadConfigFile>{\n          url: this.BaseConfig.BASE_URL + \"/api/v1/jobs/\" + this.job.id + \"/documents\",\n          data: { document: { file: file } },\n        }).then((resp: any) => {\n          let promise: ng.IPromise<any>;\n          docSuccess += 1;\n          if (_.isArray(resp.data.documents) || _.isArray(resp.data.images)) {\n            const promised = [];\n            _.each(resp.data.documents, (doc: any) => {\n              const newDoc = this.Doc.fromJSON(doc);\n              promised.push(this._watchDoc(newDoc));\n              this.trackEvent(\"document uploaded\", {\n                category: this.category,\n                document: newDoc.id,\n                file: newDoc.name,\n              });\n            });\n            promise = this.$q.all(promised);\n          }\n\n          if (resp.data.document) {\n            const newDoc: IDoc = this.Doc.fromJSON(resp.data.document);\n            promise = this._watchDoc(newDoc);\n            this.trackEvent(\"uploaded\", {\n              category: this.category,\n              document: newDoc.id,\n              file: newDoc.name,\n            });\n          }\n          if (this.autoImport) {\n            return promise;\n          }\n        }),\n      );\n    });\n    return this.$q.all(promises).finally(() => {\n      if (docSuccess === 0 && files.length === 0) {\n        return;\n      }\n      let flashLevel = FlashLevels.warning;\n      if (docSuccess === files.length) {\n        flashLevel = FlashLevels.success;\n      }\n      if (!this.autoImport) {\n        this.Flash.addMessage(flashLevel, docSuccess + \"/\" + files.length + \" Documents successfully uploaded\");\n      }\n      if (!this.autoImport && this.finishedCallback) {\n        this.finishedCallback();\n      }\n    });\n  }\n\n  public importMeasurementFile(doc: any, measure_type: string): ng.IPromise<any> {\n    return doc.$import({ measure_type: measure_type }).then(() => {\n      this.trackEvent(\"import measurements\", {\n        category: this.category,\n        import_type: doc.import_type,\n        document: doc.id,\n      });\n      this.Flash.addMessage(FlashLevels.success, \"Processing Measurement Import for \" + doc.name);\n      return this._watchMeasurementDoc(doc);\n    });\n  }\n\n  public trackEvent(action: string, props: any) {\n    this.$analytics.eventTrack(\n      action,\n      angular.extend(props, {\n        job: this.job.id,\n        org: this.job.org_id,\n      }),\n    );\n  }\n\n  public _watchMeasurementDoc(doc: any): ng.IPromise<any> {\n    if (!doc.location) {\n      return;\n    }\n\n    const deferred = this.$q.defer();\n    doc.processing = true;\n\n    Task.watch(this.$timeout, this.$http, doc.location, (task: ITask) => {\n      if (task.status === \"error\") {\n        this.trackEvent(\"import measurements error\", {\n          category: this.category,\n          document: doc.id,\n          import_type: doc.import_type,\n          task: task.id,\n        });\n        doc.processing = false;\n        deferred.reject();\n        this.Flash.addMessage(FlashLevels.danger, \"There was an error importing your document.\");\n      }\n\n      if (task.status === \"finished\") {\n        this.trackEvent(\"import measurements successfully\", {\n          category: this.category,\n          document: doc.id,\n          import_type: doc.import_type,\n          task: task.id,\n        });\n        this.Flash.addMessage(FlashLevels.success, \"Measurements successfully imported.\");\n        if (this.autoImport && this.finishedCallback) {\n          this.finishedCallback(\"a\");\n        }\n\n        doc.processing = false;\n        deferred.resolve();\n      }\n    });\n    return deferred.promise;\n  }\n\n  public _watchDoc(doc: any) {\n    if (!doc.location) {\n      return;\n    }\n\n    doc.processing = true;\n    const deferred = this.$q.defer();\n\n    Task.watch(this.$timeout, this.$http, doc.location, (task: ITask) => {\n      if (task.status === \"error\") {\n        doc.processing = false;\n        deferred.reject();\n        doc.$get();\n        this.Flash.addMessage(FlashLevels.danger, \"There was an error processing your document.\");\n      }\n\n      if (task.status === \"finished\") {\n        doc.$get().then(() => {\n          if (this.autoImport) {\n            if (_.include(this.validImportTypes, doc.import_type)) {\n              return this.importMeasurementFile(doc, doc.import_type).then(() => {\n                this.Flash.addMessage(FlashLevels.success, \"Document successfully processed.\");\n                doc.processing = false;\n                deferred.resolve();\n              });\n            } else {\n              this.trackEvent(\"import file not supported\", {\n                category: this.category,\n                import_type: doc.import_type,\n                document: doc.id,\n              });\n              this.Flash.addMessage(FlashLevels.danger, \"The measurement import file you uploaded is not supported!\");\n              doc.processing = false;\n              deferred.reject();\n            }\n          } else {\n            this.Flash.addMessage(FlashLevels.success, \"Document successfully processed.\");\n            doc.processing = false;\n            deferred.resolve();\n          }\n        });\n      }\n    });\n    return deferred.promise;\n  }\n}\n\nconst factory = (\n  Flash: IFlash,\n  Upload: ng.angularFileUpload.IUploadService,\n  BaseConfig: IBaseConfig,\n  Doc: IDocResource,\n  $q: ng.IQService,\n  $http: ng.IHttpService,\n  $timeout: ng.ITimeoutService,\n  Image: IImageResource,\n  $analytics: angulartics.IAnalyticsService,\n) => {\n  return new MeasurementImporterFactory(Flash, Upload, BaseConfig, Doc, $q, $http, $timeout, Image, $analytics);\n};\n\nfactory.$inject = [\"Flash\", \"Upload\", \"BaseConfig\", \"Doc\", \"$q\", \"$http\", \"$timeout\", \"Image\", \"$analytics\"];\n\nexport default factory;\n","import { IUserResource } from \"app/src/Models/User\";\nimport { IUserPreferenceResource } from \"app/src/Models/UserPreference\";\nimport { IAddressResource } from \"app/src/Models/Address\";\nimport { IDocResource } from \"app/src/Models/Doc\";\nimport { IMeasurementResource } from \"app/src/Models/Measurement\";\nimport { IOrgResource } from \"app/src/Models/Org\";\nimport { IJobResource } from \"app/src/Models/Job\";\nimport { IProductResource } from \"app/src/Models/Product\";\nimport { IEstimateResource } from \"app/src/Models/Estimate\";\nimport { IPaymentTermResource } from \"app/src/Models/PaymentTerm\";\nimport { IEstimateTemplateResource } from \"app/src/Models/EstimateTemplate\";\nimport { IMeasurementLinkResource } from \"app/src/Models/MeasurementLink\";\nimport { IImageResource } from \"app/src/Models/Image\";\nimport { IPresentationResource } from \"app/src/Models/Presentation\";\nimport { INoteResource } from \"app/src/Models/Note\";\nimport { IEventResource } from \"app/src/Models/Event\";\nimport { IResultResource } from \"app/src/Models/Result\";\nimport { IResultReasonResource } from \"app/src/Models/ResultReason\";\nimport { IScreenShareResource } from \"app/src/Models/ScreenShare\";\nimport { ISignedDocumentRecipientResource } from \"app/src/Models/SignedDocumentRecipient\";\nimport { ISignedDocumentResource } from \"app/src/Models/SignedDocument\";\nimport { IProductOptionGroupResource } from \"app/src/Models/ProductOptionGroup\";\nimport { IProductOptionResource } from \"app/src/Models/ProductOption\";\nimport { IPriceListResource } from \"app/src/Models/PriceList\";\nimport { IActivatedPriceListResource } from \"app/src/Models/ActivatedPriceList\";\nimport { IVisualizationResource } from \"app/src/Models/Visualization\";\nimport { ICalendarResource } from \"app/src/Models/Calendar\";\nimport { IReportResource } from \"app/src/Models/Report\";\nimport { IPhoneNumberResource } from \"../Models/PhoneNumber\";\nimport { ISfUserResource } from \"app/src/Models/SfUser\";\nimport { II360UserResource } from \"app/src/Models/I360User\";\nimport { IEmailResource } from \"../Models/Email\";\nimport { IElevationResource } from \"../Models/Elevation\";\n\nexport interface IRepository {\n  User: IUserResource;\n  UserPreference: IUserPreferenceResource;\n  Address: IAddressResource;\n  Doc: IDocResource;\n  Measurement: IMeasurementResource;\n  Org: IOrgResource;\n  Job: IJobResource;\n  Product: IProductResource;\n  Estimate: IEstimateResource;\n  PaymentTerm: IPaymentTermResource;\n  EstimateTemplate: IEstimateTemplateResource;\n  MeasurementLink: IMeasurementLinkResource;\n  Image: IImageResource;\n  Presentation: IPresentationResource;\n  Note: INoteResource;\n  Event: IEventResource;\n  Result: IResultResource;\n  ResultReason: IResultReasonResource;\n  ScreenShare: IScreenShareResource;\n  SignedDocumentRecipient: ISignedDocumentRecipientResource;\n  SignedDocument: ISignedDocumentResource;\n  ProductOptionGroup: IProductOptionGroupResource;\n  ProductOption: IProductOptionResource;\n  PriceList: IPriceListResource;\n  ActivatedPriceList: IActivatedPriceListResource;\n  Visualization: IVisualizationResource;\n  Calendar: ICalendarResource;\n  Report: IReportResource;\n  PhoneNumber: IPhoneNumberResource;\n  SfUser: ISfUserResource;\n  I360User: II360UserResource;\n  Email: IEmailResource;\n  Elevation: IElevationResource;\n}\n\nexport interface IRsfResource {\n  inject(resources: IRepository);\n}\n\nexport class Repository {\n  public static $inject = [\n    \"User\",\n    \"UserPreference\",\n    \"Address\",\n    \"Doc\",\n    \"Measurement\",\n    \"Org\",\n    \"Job\",\n    \"Product\",\n    \"Estimate\",\n    \"PaymentTerm\",\n    \"EstimateTemplate\",\n    \"MeasurementLink\",\n    \"Image\",\n    \"Presentation\",\n    \"Note\",\n    \"Event\",\n    \"Result\",\n    \"ResultReason\",\n    \"ScreenShare\",\n    \"SignedDocumentRecipient\",\n    \"SignedDocument\",\n    \"ProductOptionGroup\",\n    \"ProductOption\",\n    \"PriceList\",\n    \"ActivatedPriceList\",\n    \"Visualization\",\n    \"Calendar\",\n    \"Report\",\n    \"PhoneNumber\",\n    \"SfUser\",\n    \"I360User\",\n    \"Email\",\n    \"Elevation\",\n  ];\n  constructor(\n    public User: IUserResource,\n    public UserPreference: IUserPreferenceResource,\n    public Address: IAddressResource,\n    public Doc: IDocResource,\n    public Measurement: IMeasurementResource,\n    public Org: IOrgResource,\n    public Job: IJobResource,\n    public Product: IProductResource,\n    public Estimate: IEstimateResource,\n    public PaymentTerm: IPaymentTermResource,\n    public EstimateTemplate: IEstimateTemplateResource,\n    public MeasurementLink: IMeasurementLinkResource,\n    public Image: IImageResource,\n    public Presentation: IPresentationResource,\n    public Note: INoteResource,\n    public Event: IEventResource,\n    public Result: IResultResource,\n    public ResultReason: IResultReasonResource,\n    public ScreenShare: IScreenShareResource,\n    public SignedDocumentRecipient: ISignedDocumentRecipientResource,\n    public SignedDocument: ISignedDocumentResource,\n    public ProductOptionGroup: IProductOptionGroupResource,\n    public ProductOption: IProductOptionResource,\n    public PriceList: IPriceListResource,\n    public ActivatedPriceList: IActivatedPriceListResource,\n    public Visualization: IVisualizationResource,\n    public Calendar: ICalendarResource,\n    public Report: IReportResource,\n    public PhoneNumber: IPhoneNumberResource,\n    public SfUser: ISfUserResource,\n    public I360User: II360UserResource,\n    public Email: IEmailResource,\n    public Elevation: IElevationResource,\n  ) {\n    User.inject(this);\n    UserPreference.inject(this);\n    Address.inject(this);\n    Doc.inject(this);\n    Measurement.inject(this);\n    Org.inject(this);\n    Job.inject(this);\n    Product.inject(this);\n    Estimate.inject(this);\n    PaymentTerm.inject(this);\n    EstimateTemplate.inject(this);\n    MeasurementLink.inject(this);\n    Image.inject(this);\n    Presentation.inject(this);\n    Note.inject(this);\n    Event.inject(this);\n    Result.inject(this);\n    ResultReason.inject(this);\n    ScreenShare.inject(this);\n    SignedDocumentRecipient.inject(this);\n    SignedDocument.inject(this);\n    ProductOptionGroup.inject(this);\n    ProductOption.inject(this);\n    PriceList.inject(this);\n    ActivatedPriceList.inject(this);\n    Visualization.inject(this);\n    Calendar.inject(this);\n    Report.inject(this);\n    PhoneNumber.inject(this);\n    SfUser.inject(this);\n    I360User.inject(this);\n    Email.inject(this);\n    Elevation.inject(this);\n  }\n}\n","export class SetFocus implements ng.IDirective {\n  public restrict = \"A\";\n\n  constructor(\n    public $parse: ng.IParseService,\n    public $timeout: ng.ITimeoutService,\n  ) {}\n\n  public link = (scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes) => {\n    const model = this.$parse(attrs.setFocus);\n    scope.$watch(model, (value) => {\n      if (value === true) {\n        this.$timeout(function () {\n          element[0].focus();\n        });\n      }\n    });\n\n    element.bind(\"blur\", function () {\n      scope.$apply(model.assign(scope, false));\n    });\n  };\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = ($parse: ng.IParseService, $timeout: ng.ITimeoutService) => new SetFocus($parse, $timeout);\n    directive.$inject = [\"$parse\", \"$timeout\"];\n    return directive;\n  }\n}\n","export class RsfTab implements ng.IDirective {\n  public require = \"ngModel\";\n\n  /*\n   jQuery UI Sortable plugin wrapper\n\n   @param [ui-sortable] {object} Options to pass to $.fn.sortable() merged onto ui.config\n   */\n\n  /* eslint-disable prefer-rest-params */\n  constructor(\n    public $timeout: ng.ITimeoutService,\n    public $log: ng.ILogService,\n    public $parse: ng.IParseService,\n  ) {}\n\n  public link = (scope, globalElement, attrs, ngModel) => {\n    const sortableTab = this.$parse(attrs[\"sortableTab\"])(scope);\n    const uiSortableConfig = {\n      items: \"> [ng-repeat],> [data-ng-repeat],> [x-ng-repeat]\",\n    };\n    let savedNodes;\n    let helper;\n\n    const combineCallbacks = function (first, second) {\n      const firstIsFunc = typeof first === \"function\";\n      const secondIsFunc = typeof second === \"function\";\n      if (firstIsFunc && secondIsFunc) {\n        return function () {\n          first.apply(this, arguments);\n          second.apply(this, arguments);\n        };\n      } else if (secondIsFunc) {\n        return second;\n      }\n      return first;\n    };\n\n    const getSortableWidgetInstance = (element) => {\n      // this is a fix to support jquery-ui prior to v1.11.x\n      // otherwise we should be using `element.sortable(\"instance\")`\n      const data = element.data(\"ui-sortable\");\n      if (data && typeof data === \"object\" && data.widgetFullName === \"ui-sortable\") {\n        return data;\n      }\n      return null;\n    };\n\n    const patchSortableOption = (key, value) => {\n      if (callbacks[key]) {\n        if (key === \"stop\") {\n          // call apply after stop\n          value = combineCallbacks(value, function () {\n            scope.$apply();\n          });\n\n          value = combineCallbacks(value, afterStop);\n        }\n        // wrap the callback\n        value = combineCallbacks(callbacks[key], value);\n      } else if (wrappers[key]) {\n        value = wrappers[key](value);\n      }\n\n      // patch the options that need to have values set\n      if (!value && (key === \"items\" || key === \"ui-model-items\")) {\n        value = \"> [ng-repeat],> [data-ng-repeat],> [x-ng-repeat]\";\n      }\n\n      return value;\n    };\n\n    const patchUISortableOptions = (newVal, oldVal?, sortableWidgetInstance?) => {\n      function addDummyOptionKey(value, key) {\n        if (!(key in opts)) {\n          // add the key in the opts object so that\n          // the patch function detects and handles it\n          opts[key] = null;\n        }\n      }\n\n      // for this directive to work we have to attach some callbacks\n      angular.forEach(callbacks, addDummyOptionKey);\n\n      // only initialize it in case we have to\n      // update some options of the sortable\n      let optsDiff = null;\n\n      if (oldVal) {\n        // reset deleted options to default\n        let defaultOptions;\n        angular.forEach(oldVal, function (oldValue: any, key: string) {\n          if (!newVal || !(key in newVal)) {\n            if (key in directiveOpts) {\n              if (key === \"ui-floating\") {\n                opts[key] = \"auto\";\n              } else {\n                opts[key] = patchSortableOption(key, undefined);\n              }\n              return;\n            }\n\n            if (!defaultOptions) {\n              // noinspection TypeScriptUnresolvedVariable\n              defaultOptions = (angular.element as any).ui.sortable().options;\n            }\n            let defaultValue = defaultOptions[key];\n            defaultValue = patchSortableOption(key, defaultValue);\n\n            if (!optsDiff) {\n              optsDiff = {};\n            }\n            optsDiff[key] = defaultValue;\n            opts[key] = defaultValue;\n          }\n        });\n      }\n\n      // update changed options\n      angular.forEach(newVal, function (value: any, key: string) {\n        // if it\"s a custom option of the directive,\n        // handle it approprietly\n        if (key in directiveOpts) {\n          if (key === \"ui-floating\" && (value === false || value === true) && sortableWidgetInstance) {\n            sortableWidgetInstance.floating = value;\n          }\n\n          opts[key] = patchSortableOption(key, value);\n          return;\n        }\n\n        value = patchSortableOption(key, value);\n\n        if (!optsDiff) {\n          optsDiff = {};\n        }\n        optsDiff[key] = value;\n        opts[key] = value;\n      });\n\n      return optsDiff;\n    };\n\n    const getPlaceholderElement = (element) => {\n      const placeholder = element.sortable(\"option\", \"placeholder\");\n\n      // placeholder.element will be a function if the placeholder, has\n      // been created (placeholder will be an object).  If it hasn\"t\n      // been created, either placeholder will be false if no\n      // placeholder class was given or placeholder.element will be\n      // undefined if a class was given (placeholder will be a string)\n      if (placeholder && placeholder.element && typeof placeholder.element === \"function\") {\n        let result = placeholder.element();\n        // workaround for jquery ui 1.9.x,\n        // not returning jquery collection\n        result = angular.element(result);\n        return result;\n      }\n      return null;\n    };\n\n    const getPlaceholderExcludesludes = (element, placeholder) => {\n      // exact match with the placeholder\"s class attribute to handle\n      // the case that multiple connected sortables exist and\n      // the placeholder option equals the class of sortable items\n      const notCssSelector = opts[\"ui-model-items\"].replace(/[^,]*>/g, \"\");\n      const excludes = element.find(\"[class='\" + placeholder.attr(\"class\") + \"']:not(\" + notCssSelector + \")\");\n      return excludes;\n    };\n\n    const hasSortingHelper = (element, ui) => {\n      const helperOption = element.sortable(\"option\", \"helper\");\n      return helperOption === \"clone\" || (typeof helperOption === \"function\" && ui.item.sortable.isCustomHelperUsed());\n    };\n\n    const getSortingHelper = (element, ui /*, savedNodes*/) => {\n      let result = null;\n      if (hasSortingHelper(element, ui) && element.sortable(\"option\", \"appendTo\") === \"parent\") {\n        // The .ui-sortable-helper element (that\"s the default class name)\n        result = helper;\n      }\n      return result;\n    };\n\n    // thanks jquery-ui\n    const isFloating = (item) => {\n      return /left|right/.test(item.css(\"float\")) || /inline|table-cell/.test(item.css(\"display\"));\n    };\n\n    const getElementContext = (elementScopes, element) => {\n      /******\n       * This DISABLES the ability to drag and drop between different groups.\n       * This wasn't working when I 'HACKED' it to not use an isolated scope.\n       */\n      return elementScopes[0];\n      // for (let i = 0; i < elementScopes.length; i++) {\n      //   let c = elementScopes[i];\n      //   if (c.element[0] === element[0]) {\n      //     return c;\n      //   }\n      // }\n    };\n\n    const afterStop = (e, ui) => {\n      ui.item.sortable._destroy();\n    };\n\n    // return the index of ui.item among the items\n    // we can\"t just do ui.item.index() because there it might have siblings\n    // which are not items\n    const getItemIndex = (item) => {\n      return item.parent().find(opts[\"ui-model-items\"]).index(item);\n    };\n\n    const opts = {};\n\n    // directive specific options\n    const directiveOpts = {\n      \"ui-floating\": undefined,\n      \"ui-model-items\": uiSortableConfig.items,\n    };\n\n    const callbacks = {\n      create: null,\n      start: null,\n      activate: null,\n      // sort: null,\n      // change: null,\n      // over: null,\n      // out: null,\n      beforeStop: null,\n      update: null,\n      remove: null,\n      receive: null,\n      deactivate: null,\n      stop: null,\n    };\n\n    const wrappers = {\n      helper: null,\n    };\n\n    angular.extend(opts, directiveOpts, uiSortableConfig, sortableTab);\n\n    if (!(angular.element as any).fn || !(angular.element as any).fn.jquery) {\n      this.$log.error(\"ui.sortable: jQuery should be included before AngularJS!\");\n      return;\n    }\n\n    const wireUp = () => {\n      // When we add or remove elements, we need the sortable to \"refresh\"\n      // so it can find the new/removed elements.\n      scope.$watchCollection(\"ngModel\", () => {\n        // Timeout to let ng-repeat modify the DOM\n        this.$timeout(\n          function () {\n            // ensure that the jquery-ui-sortable widget instance\n            // is still bound to the directive\"s element\n            if (getSortableWidgetInstance(globalElement)) {\n              globalElement.sortable(\"refresh\");\n            }\n          },\n          0,\n          false,\n        );\n      });\n\n      callbacks.start = function (e, ui) {\n        if (opts[\"ui-floating\"] === \"auto\") {\n          // since the drag has started, the element will be\n          // absolutely positioned, so we check its siblings\n          const siblings = ui.item.siblings();\n          const sortableWidgetInstance = getSortableWidgetInstance(angular.element(e.target));\n          sortableWidgetInstance.floating = isFloating(siblings);\n        }\n\n        // Save the starting position of dragged item\n        const index = getItemIndex(ui.item);\n        ui.item.sortable = {\n          model: ngModel.$modelValue[index],\n          index: index,\n          source: globalElement,\n          sourceList: ui.item.parent(),\n          sourceModel: ngModel.$modelValue,\n          cancel: function () {\n            ui.item.sortable._isCanceled = true;\n          },\n          isCanceled: function () {\n            return ui.item.sortable._isCanceled;\n          },\n          isCustomHelperUsed: function () {\n            return !!ui.item.sortable._isCustomHelperUsed;\n          },\n          _isCanceled: false,\n          _isCustomHelperUsed: ui.item.sortable._isCustomHelperUsed,\n          _destroy: function () {\n            angular.forEach(ui.item.sortable, (value, key) => {\n              ui.item.sortable[key] = undefined;\n            });\n          },\n          _connectedSortables: [],\n          _getElementContext: function (element) {\n            return getElementContext(this._connectedSortables, element);\n          },\n        };\n      };\n\n      callbacks.activate = function (e, ui) {\n        const isSourceContext = ui.item.sortable.source === globalElement;\n        const savedNodesOrigin = isSourceContext ? ui.item.sortable.sourceList : globalElement;\n        const elementContext = {\n          element: globalElement,\n          ngModel: ngModel.$modelValue,\n          scope: this,\n          isSourceContext: isSourceContext,\n          savedNodesOrigin: savedNodesOrigin,\n        };\n\n        // save the directive\"s scope so that it is accessible from ui.item.sortable\n        ui.item.sortable._connectedSortables.push(elementContext);\n\n        // We need to make a copy of the current element\"s contents so\n        // we can restore it after sortable has messed it up.\n        // This is inside activate (instead of start) in order to save\n        // both lists when dragging between connected lists.\n        savedNodes = savedNodesOrigin.contents();\n        helper = ui.helper;\n\n        // If this list has a placeholder (the connected lists won\"t),\n        // don\"t inlcude it in saved nodes.\n        const placeholder = getPlaceholderElement(globalElement);\n        if (placeholder && placeholder.length) {\n          const excludes = getPlaceholderExcludesludes(globalElement, placeholder);\n          savedNodes = savedNodes.not(excludes);\n        }\n      };\n\n      callbacks.update = function (e, ui) {\n        // Save current drop position but only if this is not a second\n        // update that happens when moving between lists because then\n        // the value will be overwritten with the old value\n        if (!ui.item.sortable.received) {\n          ui.item.sortable.dropindex = getItemIndex(ui.item);\n          const droptarget = ui.item.parent().closest(\"[ui-sortable], [data-ui-sortable], [x-ui-sortable]\");\n\n          ui.item.sortable.droptarget = droptarget;\n          ui.item.sortable.droptargetList = ui.item.parent();\n\n          const droptargetContext = ui.item.sortable._getElementContext(droptarget);\n          ui.item.sortable.droptargetModel = droptargetContext.ngModel;\n\n          // Cancel the sort (let ng-repeat do the sort for us)\n          // Don\"t cancel if this is the received list because it has\n          // already been canceled in the other list, and trying to cancel\n          // here will mess up the DOM.\n          globalElement.sortable(\"cancel\");\n        }\n\n        // Put the nodes back exactly the way they started (this is very\n        // important because ng-repeat uses comment elements to delineate\n        // the start and stop of repeat sections and sortable doesn\"t\n        // respect their order (even if we cancel, the order of the\n        // comments are still messed up).\n        const sortingHelper = !ui.item.sortable.received && getSortingHelper(globalElement, ui);\n        if (sortingHelper && sortingHelper.length) {\n          // Restore all the savedNodes except from the sorting helper element.\n          // That way it will be garbage collected.\n          savedNodes = savedNodes.not(sortingHelper);\n        }\n        const elementContext = ui.item.sortable._getElementContext(globalElement);\n        savedNodes.appendTo(elementContext.savedNodesOrigin);\n\n        // If this is the target connected list then\n        // it\"s safe to clear the restored nodes since:\n        // update is currently running and\n        // stop is not called for the target list.\n        if (ui.item.sortable.received) {\n          savedNodes = null;\n        }\n\n        // If received is true (an item was dropped in from another list)\n        // then we add the new item to this list otherwise wait until the\n        // stop event where we will know if it was a sort or item was\n        // moved here from another list\n        if (ui.item.sortable.received && !ui.item.sortable.isCanceled()) {\n          scope.$apply(function () {\n            ngModel.$modelValue.splice(ui.item.sortable.dropindex, 0, ui.item.sortable.moved);\n          });\n          scope.$emit(\"ui-sortable:moved\", ui);\n        }\n      };\n\n      callbacks.stop = function (e, ui) {\n        // If the received flag hasn\"t be set on the item, this is a\n        // normal sort, if dropindex is set, the item was moved, so move\n        // the items in the list.\n        const wasMoved = \"dropindex\" in ui.item.sortable && !ui.item.sortable.isCanceled();\n\n        if (wasMoved && !ui.item.sortable.received) {\n          scope.$apply(function () {\n            ngModel.$modelValue.splice(\n              ui.item.sortable.dropindex,\n              0,\n              ngModel.$modelValue.splice(ui.item.sortable.index, 1)[0],\n            );\n          });\n          scope.$emit(\"ui-sortable:moved\", ui);\n        } else if (!wasMoved && !angular.equals(globalElement.contents().toArray(), savedNodes.toArray())) {\n          // if the item was not moved\n          // and the DOM element order has changed,\n          // then restore the elements\n          // so that the ngRepeat\"s comment are correct.\n\n          const sortingHelper = getSortingHelper(globalElement, ui);\n          if (sortingHelper && sortingHelper.length) {\n            // Restore all the savedNodes except from the sorting helper element.\n            // That way it will be garbage collected.\n            savedNodes = savedNodes.not(sortingHelper);\n          }\n          const elementContext = ui.item.sortable._getElementContext(globalElement);\n          savedNodes.appendTo(elementContext.savedNodesOrigin);\n        }\n\n        // It\"s now safe to clear the savedNodes and helper\n        // since stop is the last callback.\n        savedNodes = null;\n        helper = null;\n      };\n\n      callbacks.receive = function (e, ui) {\n        // An item was dropped here from another list, set a flag on the\n        // item.\n        ui.item.sortable.received = true;\n      };\n\n      callbacks.remove = function (e, ui) {\n        // Workaround for a problem observed in nested connected lists.\n        // There should be an \"update\" event before \"remove\" when moving\n        // elements. If the event did not fire, cancel sorting.\n        if (!(\"dropindex\" in ui.item.sortable)) {\n          globalElement.sortable(\"cancel\");\n          ui.item.sortable.cancel();\n        }\n\n        // Remove the item from this list\"s model and copy data into item,\n        // so the next list can retrive it\n        if (!ui.item.sortable.isCanceled()) {\n          scope.$apply(function () {\n            ui.item.sortable.moved = ngModel.$modelValue.splice(ui.item.sortable.index, 1)[0];\n          });\n        }\n      };\n\n      // setup attribute handlers\n      angular.forEach(callbacks, function (value, key) {\n        callbacks[key] = combineCallbacks(callbacks[key], function () {\n          const attrHandler = scope[key];\n          let attrHandlerFn;\n          if (\n            typeof attrHandler === \"function\" &&\n            (\"sortableTab\" + key.substring(0, 1).toUpperCase() + key.substring(1)).length &&\n            typeof (attrHandlerFn = attrHandler()) === \"function\"\n          ) {\n            attrHandlerFn.apply(this, arguments);\n          }\n        });\n      });\n\n      wrappers.helper = function (inner) {\n        if (inner && typeof inner === \"function\") {\n          return function (e, item) {\n            const oldItemSortable = item.sortable;\n            const index = getItemIndex(item);\n            item.sortable = {\n              model: ngModel.$modelValue[index],\n              index: index,\n              source: globalElement,\n              sourceList: item.parent(),\n              sourceModel: ngModel.$modelValue,\n              _restore: function () {\n                angular.forEach(item.sortable, function (value, key) {\n                  item.sortable[key] = undefined;\n                });\n\n                item.sortable = oldItemSortable;\n              },\n            };\n\n            const innerResult = inner.apply(this, arguments);\n            item.sortable._restore();\n            item.sortable._isCustomHelperUsed = item !== innerResult;\n            return innerResult;\n          };\n        }\n        return inner;\n      };\n\n      scope.$watchCollection(\n        \"sortableTab\",\n        function (newVal, oldVal) {\n          // ensure that the jquery-ui-sortable widget instance\n          // is still bound to the directive\"s element\n          const sortableWidgetInstance = getSortableWidgetInstance(globalElement);\n          if (sortableWidgetInstance) {\n            const optsDiff = patchUISortableOptions(newVal, oldVal, sortableWidgetInstance);\n\n            if (optsDiff) {\n              globalElement.sortable(\"option\", optsDiff);\n            }\n          }\n        },\n        true,\n      );\n\n      patchUISortableOptions(opts);\n    };\n\n    const init = () => {\n      if (ngModel) {\n        wireUp();\n      } else {\n        this.$log.info(\"ui.sortable: ngModel not provided!\", globalElement);\n      }\n\n      // Create sortable\n      globalElement.sortable(opts);\n    };\n\n    const initIfEnabled: { (): any; cancelWatcher: () => void } = (() => {\n      const _f: any = () => {\n        if (sortableTab && sortableTab.disabled) {\n          return false;\n        }\n\n        init();\n\n        // Stop Watcher\n        initIfEnabled.cancelWatcher();\n        initIfEnabled.cancelWatcher = angular.noop;\n\n        return true;\n      };\n      _f.cancelWatcher = null;\n      return _f;\n    })();\n\n    initIfEnabled.cancelWatcher = angular.noop;\n\n    if (!initIfEnabled()) {\n      initIfEnabled.cancelWatcher = scope.$watch(\"sortableTab.disabled\", initIfEnabled);\n    }\n  };\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = ($timeout: ng.ITimeoutService, $log: ng.ILogService, $parse: ng.IParseService) =>\n      new RsfTab($timeout, $log, $parse);\n    directive.$inject = [\"$timeout\", \"$log\", \"$parse\"];\n    return directive;\n  }\n  /* eslint-enable prefer-rest-params */\n}\n","export class ScrollIf implements ng.IDirective {\n  public restrict = \"A\";\n\n  constructor() {}\n\n  public link = (scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes) => {\n    scope.$watch(attrs.scrollIf, (value) => {\n      if (value) {\n        (element as any).scrollParent()[0].scroll(0, 0);\n      }\n    });\n  };\n\n  public static factory(): ng.IDirectiveFactory {\n    const directive = ($parse: ng.IParseService, $timeout: ng.ITimeoutService) => new ScrollIf();\n    directive.$inject = [];\n    return directive;\n  }\n}\n","import * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { connectFC } from \"app2/src/connect\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useTracking } from \"react-tracking\";\nimport { push } from \"connected-react-router/immutable\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { currentJobId, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { paymentAuth } from \"app2/src/selectors/payment.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { paymentProviders } from \"app2/src/records/PaymentAuthorizationRecord\";\nimport * as cardConnectActions from \"app2/src/reducers/integrations/cardconnect.actions\";\nimport * as paySimpleActions from \"app2/src/reducers/integrations/paysimple.actions\";\nimport { authorizationRecord as cardConnectAuthSelector } from \"app2/src/selectors/cardconnect.selectors\";\nimport { authorizationRecord as paySimpleAuthSelector } from \"app2/src/selectors/paySimple.selectors\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { estimate, estimateOverview } from \"app2/src/selectors/estimate.selectors\";\n\nconst MakePaymentButton: React.FC = () => {\n  // state\n  const [hideButton, setHideButton] = useState(true);\n  // selectors\n  const path = useSelector(pathname);\n  const jobId = useSelector(currentJobId);\n  const orgId = useSelector(currentOrgId);\n  const estimateId = useSelector(selectedEstimateId);\n  const estimateRecord = useSelector((state: RootState) => estimate(state, { jobId, estimateId }));\n  const auth = useSelector((state: RootState) => paymentAuth(state, { orgId }));\n  const cardConnectAuth = useSelector((state: RootState) => cardConnectAuthSelector(state, orgId));\n  const paySimpleAuth = useSelector((state: RootState) => paySimpleAuthSelector(state, orgId));\n  const occPayToken = useSelector((state: RootState) => token(state, { kind: \"occ_pay\" }));\n  const userCanEmailText = Acl.can(\"email_text\", \"payment\");\n  const userCanOnscreen = Acl.can(\"onscreen\", \"payment\");\n  const userCanSaveMethod = Acl.can(\"create\", \"payment_method\");\n  const occPayTokenOptions = occPayToken?.getIn([\"data\", \"payment_options\"]);\n  const canEmailTextOCCPay = userCanEmailText && occPayTokenOptions?.includes(\"email_text_to_pay\");\n  const canOnscreenOCCPay = userCanOnscreen && occPayTokenOptions?.includes(\"onscreen\");\n  const canSaveMethodOCCPay = userCanSaveMethod && occPayTokenOptions?.includes(\"store_payment_method_only\");\n\n  // hooks\n  const tracking = useTracking();\n  const dispatch = useDispatch();\n\n  const navigate = () => {\n    tracking.trackEvent({ action: \"open make payment modal\" });\n\n    if (!estimateRecord && estimateId) {\n      dispatch(estimateActions.AsyncActions.getEstimate(estimateId));\n    }\n\n    dispatch(push(`${path}/payments`));\n  };\n\n  useEffect(() => {\n    if (!jobId) {\n      setHideButton(true);\n    } else if (paymentProviders.some((v) => auth?.get(v as any))) {\n      setHideButton(false);\n      if (auth.get(\"card_connect\")) dispatch(cardConnectActions.AsyncActions.getAuthorization(orgId));\n      if (auth.get(\"pay_simple\")) dispatch(paySimpleActions.AsyncActions.getAuthorization(orgId));\n      if (auth.get(\"occ_pay\")) dispatch(tokenActions.AsyncActions.getToken(orgId, \"occ_pay\"));\n    } else {\n      setHideButton(true);\n    }\n  }, [jobId, auth]);\n\n  if (\n    hideButton ||\n    // User Permissions\n    (!occPayToken && !userCanEmailText && !userCanOnscreen) ||\n    // Org Token Settings\n    (occPayToken && !canOnscreenOCCPay && !canEmailTextOCCPay && !canSaveMethodOCCPay)\n  )\n    return null;\n\n  return (\n    <Button className=\"ml-2\" onClick={navigate}>\n      Make Payment\n    </Button>\n  );\n};\n\nexport default connectFC(MakePaymentButton);\n","import * as React from \"react\";\nimport { DateFormat, CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\nimport { PaymentRecord } from \"app2/src/records/PaymentRecord\";\n\nexport interface IPaySimpleListViewProps {\n  idx: number;\n  payment: PaymentRecord;\n}\n\nexport default class PaySimpleListView extends React.PureComponent<IPaySimpleListViewProps> {\n  public render() {\n    const { idx, payment } = this.props;\n    return (\n      <tr key={idx}>\n        <td>{DateFormat(payment.created_at)}</td>\n        <td>\n          <OverlayTrigger overlay={<Tooltip id={payment.id.toString()}>PaySimple</Tooltip>}>\n            <span>{payment.payload.get(\"Id\")}</span>\n          </OverlayTrigger>\n        </td>\n        <td>{CurrencyFormat(payment.amount)}</td>\n        <td>{payment.charge_type === \"credit_card\" ? \"Credit Card\" : \"ACH\"}</td>\n        <td>{payment.status}</td>\n      </tr>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { DateFormat, CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\nimport { PaymentRecord } from \"app2/src/records/PaymentRecord\";\n\nexport interface ICardConnectListViewProps {\n  idx: number;\n  payment: PaymentRecord;\n}\n\nexport default class CardConnectListView extends React.PureComponent<ICardConnectListViewProps> {\n  public render() {\n    const { idx, payment } = this.props;\n    return (\n      <tr key={idx}>\n        <td>{DateFormat(payment.created_at)}</td>\n        <td>\n          <OverlayTrigger overlay={<Tooltip id={payment.id.toString()}>Clover Connect</Tooltip>}>\n            <span>{payment.payload.get(\"authcode\") || payment.payload.getIn([\"FailureData\", \"Description\"])}</span>\n          </OverlayTrigger>\n        </td>\n        <td>{CurrencyFormat(payment.amount)}</td>\n        <td>{payment.charge_type === \"credit_card\" ? \"Credit Card\" : \"ACH\"}</td>\n        <td>{payment.status}</td>\n      </tr>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { Col, Row, OverlayTrigger, Tooltip } from \"react-bootstrap\";\nimport { List } from \"immutable\";\nimport * as paymentActions from \"app2/src/reducers/payment.actions\";\nimport { PaymentRecord } from \"app2/src/records/PaymentRecord\";\nimport { getPagedPayments } from \"app2/src/selectors/payment.selectors\";\nimport { DateFormat, CurrencyFormat } from \"app2/src/helpers/Format\";\nimport PaySimpleListView from \"./PaySimple/PaySimpleListView\";\nimport CardConnectListView from \"./CardConnect/CardConnectListView\";\n\nconst mapStateToProps = (state: RootState, ownProps: IPaymentListProps) => {\n  const page = state.getIn([\"leads\", \"page\"], 1);\n\n  return {\n    payments: getPagedPayments(state, { page: page }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: IPaymentListProps) => {\n  return {\n    loadPage: (jobId: number, page: number) => dispatch(paymentActions.AsyncActions.getPage({ page, job_id: jobId })),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface IPaymentListProps {\n  jobId: number;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IPaymentListProps;\n\nexport interface IPaymentListState {\n  page: number;\n}\n\nclass PaymentList extends React.Component<Props, IPaymentListState> {\n  private _initialized = false;\n\n  public constructor(props) {\n    super(props);\n\n    this.state = {\n      page: 1,\n    };\n  }\n\n  public componentDidMount() {\n    this.tryInitialize();\n  }\n\n  public componentDidUpdate() {\n    this.tryInitialize();\n  }\n\n  public render() {\n    const { payments } = this.props;\n\n    if (payments.count() <= 0) {\n      return (\n        <Row>\n          <Col md={12}>\n            <p>No Payments</p>\n          </Col>\n        </Row>\n      );\n    }\n\n    return (\n      <Row>\n        <Col md={12}>\n          <table className=\"table table-striped\">\n            <thead>\n              <tr>\n                <th>Date</th>\n                <th>Transaction ID</th>\n                <th>Amount</th>\n                <th>Payment Method</th>\n                <th>Status</th>\n              </tr>\n            </thead>\n            <tbody>\n              {payments.map((p, idx) => {\n                switch (p.kind) {\n                  case \"cardconnect\":\n                    return <CardConnectListView key={idx} idx={idx} payment={p} />;\n                  default:\n                    //default AND PaySimple\n                    return <PaySimpleListView key={idx} idx={idx} payment={p} />;\n                }\n              })}\n            </tbody>\n          </table>\n        </Col>\n      </Row>\n    );\n  }\n\n  protected tryInitialize() {\n    if (this._initialized) {\n      return;\n    }\n\n    const { page } = this.state;\n    const { loadPage, jobId } = this.props;\n\n    if (jobId > 0) {\n      this._initialized = true;\n      loadPage(jobId, page);\n    }\n  }\n}\n\nexport default connector(PaymentList);\n","import { StandardPagination } from \"app2/src/components/Pagination/Standard\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getPaginationByModel, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { AsyncActions } from \"app2/src/reducers/financeApplication.actions\";\nimport { List } from \"immutable\";\nimport { FinanceApplicationRecord } from \"app2/src/records/FinanceApplication\";\nimport DateTime from \"app2/src/components/Common/DateTime\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { Table } from \"react-bootstrap\";\n\nexport interface FinanceApplicationListProps {}\n\nexport const FinanceApplicationList = (props: FinanceApplicationListProps) => {\n  const dispatch = useDispatch();\n  const modelName = \"financeApplications\";\n\n  const { financeApplications, queryParamsRecord } = useSelector((state: RootState) => {\n    return {\n      financeApplications: getPaginationByModel(state, {\n        path: [modelName, \"byEstimateId\"],\n        modelName,\n      }) as List<FinanceApplicationRecord>,\n      queryParamsRecord: queryParams(state, { modelName }),\n    };\n  });\n  const paginationRecord = useSelector((state: RootState) => {\n    return pagination(state, { modelName, page: queryParamsRecord.get(\"page\") });\n  });\n\n  const queryFinanceApplications = (page: number) => {\n    const newQueryParams = queryParamsRecord.set(\"page\", page).set(\"per_page\", 5);\n    dispatch(AsyncActions.loadFinanceApplications(newQueryParams));\n  };\n\n  React.useEffect(() => {\n    queryFinanceApplications(1);\n  }, []);\n\n  if (!financeApplications.count()) return <p>No applications</p>;\n\n  return (\n    <>\n      <Table className=\"table table-striped\">\n        <thead>\n          <tr>\n            <td>Created At</td>\n            <td>Loan Status</td>\n            <td>Details Link</td>\n          </tr>\n        </thead>\n        <tbody>\n          {financeApplications.map((application, index) => (\n            <tr key={index}>\n              <td>\n                <DateTime date={application.created_at} variant=\"vertical\" />\n              </td>\n              <td>{application.loan_status}</td>\n              <td>\n                {application.details_url && (\n                  <a href={application.details_url} target=\"_blank\">\n                    Details\n                  </a>\n                )}\n              </td>\n            </tr>\n          ))}\n        </tbody>\n      </Table>\n      <StandardPagination metadata={paginationRecord} pageChanged={queryFinanceApplications} />\n    </>\n  );\n};\n\nexport default FinanceApplicationList;\n","import { StandardPagination } from \"app2/src/components/Pagination/Standard\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getPaginationByModel, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { AsyncActions } from \"app2/src/reducers/paymentRequest.actions\";\nimport DateTime from \"app2/src/components/Common/DateTime\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { Button, Table } from \"react-bootstrap\";\nimport { PaymentRequestRecord } from \"app2/src/records/PaymentRequest\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { AsyncActions as EmailAsyncActions } from \"app2/src/reducers/email.actions\";\n\nexport const PaymentRequestList = () => {\n  const modelName = \"paymentRequests\";\n  // Hooks\n  const dispatch = useDispatch();\n\n  // Selectors\n  const { paymentRequests, queryParamsRecord } = useSelector((state: RootState) => {\n    return {\n      paymentRequests: getPaginationByModel(state, { modelName, path: [modelName, \"byId\"] }),\n      queryParamsRecord: queryParams(state, { modelName }) as QueryParamsRecord,\n    };\n  });\n  const paginationRecord = useSelector((state: RootState) => {\n    return pagination(state, { modelName, page: queryParamsRecord.get(\"page\") });\n  });\n\n  // Methods\n  const queryPaymentRequests = (page: number) => {\n    const newQueryParams = queryParamsRecord.set(\"page\", page);\n    dispatch(AsyncActions.loadPaymentRequests(newQueryParams));\n  };\n  const resend = (paymentRequest: PaymentRequestRecord) => {\n    dispatch(\n      EmailAsyncActions.sendMessage({\n        kind: \"payment_request\",\n        provider: paymentRequest.provider,\n        to: paymentRequest.to,\n        data: paymentRequest.toJS(),\n      }),\n    );\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    queryPaymentRequests(1);\n  }, []);\n\n  if (!paymentRequests.count()) return <p>No payment requests</p>;\n\n  return (\n    <>\n      <Table className=\"table table-striped\">\n        <thead>\n          <tr>\n            <td>To</td>\n            <td>Amount</td>\n            <td>Provider</td>\n            <td>Description</td>\n            <td>Created At</td>\n            <td>Actions</td>\n          </tr>\n        </thead>\n        <tbody>\n          {paymentRequests.map((pr, index) => (\n            <tr key={index}>\n              <td>{pr.to}</td>\n              <td>{!pr.amount || pr.kind === \"paysimple\" ? \"N/A\" : CurrencyFormat(parseFloat(pr.amount))}</td>\n              <td>{pr.provider}</td>\n              <td>{pr.description}</td>\n              <td>\n                <DateTime date={pr.created_at} variant=\"vertical\" />\n              </td>\n              <td>\n                <Button onClick={() => resend(pr)}>Resend</Button>\n              </td>\n            </tr>\n          ))}\n        </tbody>\n      </Table>\n      <StandardPagination metadata={paginationRecord} pageChanged={queryPaymentRequests} />\n    </>\n  );\n};\n\nexport default PaymentRequestList;\n","import { DateFormat } from \"app2/src/helpers/Format\";\nimport { RootState } from \"app2/src/reducers\";\nimport { customForm } from \"app2/src/selectors/customForm.selectors\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useTracking } from \"react-tracking\";\n\nexport const FormRow: React.FC<{ id: number; scope: any }> = ({ id, scope }) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const form = useSelector((state: RootState) => customForm(state, { id: id.toString() }));\n  const { trackEvent } = useTracking<any>({ component: \"FormRow\" });\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n\n  // Methods\n  const handleView = () => {\n    trackEvent({ action: \"view finance application\" });\n    scope.$apply(() => {\n      dispatch(push(`/jobs/${jobId}/info/custom_form/${id}/signature_request`));\n    });\n  };\n\n  return (\n    <tr>\n      <td>{DateFormat(form?.created_at)}</td>\n      <td>{form?.form_data?.get(\"application_status\")}</td>\n      <td>\n        <Button onClick={handleView}>View</Button>\n      </td>\n    </tr>\n  );\n};\n","import * as React from \"react\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { currentJobApplicantCount } from \"app2/src/selectors/customForm.selectors\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { push } from \"connected-react-router\";\nimport { useState } from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useTracking } from \"react-tracking\";\n\nexport const SubmitFinanceApplicationButton: React.FC<{ className?: string; scope: any }> = ({ className, scope }) => {\n  // State\n  const [applicantLimitModal, setApplicantLimitModal] = useState(false);\n\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"SubmitFinanceApplicationButton\" });\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n  const applicantCount = useSelector(currentJobApplicantCount);\n\n  const navigateFinancing = () => {\n    if (applicantCount >= 6) {\n      trackEvent({ action: \"open finance application applicant limit modal\" });\n      setApplicantLimitModal(true);\n    } else {\n      trackEvent({ action: \"open finance application form\" });\n      scope.$apply(() => {\n        dispatch(push(`/jobs/${jobId}/info/custom_form`));\n      });\n    }\n  };\n\n  const closeApplicantLimitModal = () => {\n    setApplicantLimitModal(false);\n    trackEvent({ action: \"close finance application applicant limit modal\" });\n  };\n\n  return (\n    <Can resource=\"CustomForm\" permission=\"create\">\n      <Button className={className} onClick={navigateFinancing}>\n        Submit Finance Application\n      </Button>\n      <Modal show={applicantLimitModal}>\n        <Modal.Header>\n          <h3>\n            You're unable to create a finance application because you've exceeded the maximum number of applicants.\n          </h3>\n        </Modal.Header>\n\n        <Modal.Footer>\n          <Button onClick={closeApplicantLimitModal}>OK</Button>\n        </Modal.Footer>\n      </Modal>\n    </Can>\n  );\n};\n","import { FormRow } from \"app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/CustomForms/FormRow\";\nimport { SubmitFinanceApplicationButton } from \"app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/CustomForms/SubmitFinanceApplicationButton\";\nimport { RootState } from \"app2/src/reducers\";\nimport { AsyncActions } from \"app2/src/reducers/customForm.actions\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { ids } from \"app2/src/selectors/pagination.selectors\";\nimport * as React from \"react\";\nimport { useEffect } from \"react\";\nimport { Col, Row, Table } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nexport const FormsList: React.FC<{ scope: any }> = ({ scope }) => {\n  // Hooks\n  const dispatch = useDispatch();\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n  const customFormIds = useSelector((state: RootState) => ids(state, { modelName: \"customForms\" }));\n\n  useEffect(() => {\n    dispatch(AsyncActions.listCustomForms(jobId));\n  }, [jobId]);\n\n  if (!customFormIds || customFormIds.size === 0) {\n    return (\n      <Row>\n        <Col>\n          <div className=\"text-center\">\n            <h2>No finance applications, click to submit one</h2>\n            <SubmitFinanceApplicationButton scope={scope} />\n          </div>\n        </Col>\n      </Row>\n    );\n  }\n\n  return (\n    <Table className=\"table table-striped\">\n      <thead>\n        <tr>\n          <td>Date Created</td>\n          <td>Application Status</td>\n          <td>Actions</td>\n        </tr>\n      </thead>\n      <tbody>\n        {customFormIds.map((id, index) => (\n          <FormRow key={index} id={id} scope={scope} />\n        ))}\n      </tbody>\n    </Table>\n  );\n};\n","import { Can } from \"app2/src/components/Common/CanComponent\";\nimport { FormsList } from \"app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/CustomForms/FormsList\";\nimport * as React from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport { SubmitFinanceApplicationButton } from \"app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/CustomForms/SubmitFinanceApplicationButton\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { RootState } from \"app2/src/reducers\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { isCurrentPageLoading } from \"app2/src/selectors/pagination.selectors\";\n\nexport const CustomForms: React.FC<{ scope: any }> = ({ scope }) => {\n  // Selectors\n  const createPermission = Acl.can(\"create\", \"CustomForm\" as any);\n  const readPermission = Acl.can(\"read\", \"CustomForm\" as any);\n  const enabled = useSelector((state: RootState) => currentOrgPrefConfig(state, { path: [\"finance_app\", \"enabled\"] }));\n  const isLoading = useSelector((state: RootState) => isCurrentPageLoading(state, { modelName: \"customForms\" }));\n\n  if (!readPermission && !createPermission) return null;\n\n  return (\n    <>\n      <SpinnerComponent localProperty={isLoading} />\n      {enabled && (\n        <Row>\n          <Col md=\"12\">\n            <div className=\"form-section\">\n              <div className=\"form-section-heading\">\n                <Row>\n                  <Col>\n                    <h3>Finance Applications</h3>\n                  </Col>\n                  <Col>\n                    <SubmitFinanceApplicationButton className=\"pull-right\" scope={scope} />\n                  </Col>\n                </Row>\n              </div>\n              <div className=\"form-section-content\">\n                <Can resource=\"CustomForm\" permission=\"read\">\n                  <FormsList scope={scope} />\n                </Can>\n              </div>\n            </div>\n          </Col>\n        </Row>\n      )}\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport PaymentList from \"app2/src/components/Payments/PaymentList\";\nimport FinanceApplicationList from \"./FinanceApplicationList\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { paymentAuthorized as paymentAuthorizedSelector } from \"app2/src/selectors/payment.selectors\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { getAuthorization } from \"app2/src/selectors/token.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { connectFC } from \"app2/src/connect\";\nimport { useSelector } from \"react-redux\";\nimport PaymentRequestList from \"./PaymentRequestList\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { CustomForms } from \"app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/CustomForms\";\nimport { useTracking } from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport MakePaymentButton from \"app2/src/components/PaymentsModal/MakePaymentButton\";\n\nconst PaymentsAndApplications: React.FC<{ $scope: any }> = ({ $scope }) => {\n  // Selectors\n  const paymentAuthorized = useSelector(paymentAuthorizedSelector);\n  const jobId = useSelector(currentJobId);\n  const orgId = useSelector(currentOrgId);\n  const showApplications = useSelector((state: RootState) => {\n    const orgId = currentOrgId(state);\n    return getAuthorization(state, { orgId, integration: \"fin_mkt\" });\n  });\n\n  // Hooks\n  const { Track, trackEvent } = useTracking<any>(\n    {\n      component: \"PaymentsAndApplications\",\n      category: \"payments and applications\",\n      org: orgId,\n    },\n    { dispatch: Dispatch.dispatch },\n  );\n\n  if (!jobId) return null;\n\n  return (\n    <Track>\n      {paymentAuthorized && (\n        <Row>\n          <Col md=\"12\">\n            <div className=\"form-section tour-job-details\">\n              <div className=\"form-section-heading\">\n                <Row>\n                  <Col>\n                    <h3>Payments</h3>\n                  </Col>\n                  <Col className=\"d-flex justify-content-end align-items-start\">\n                    <MakePaymentButton />\n                  </Col>\n                </Row>\n              </div>\n              <div className=\"form-section-content\">\n                <PaymentList jobId={jobId} />\n              </div>\n            </div>\n          </Col>\n        </Row>\n      )}\n      <Row>\n        <Col md=\"12\">\n          <div className=\"form-section tour-job-details\">\n            <div className=\"form-section-heading\">\n              <h3>Payment Requests</h3>\n            </div>\n            <div className=\"form-section-content\">\n              <PaymentRequestList />\n            </div>\n          </div>\n        </Col>\n      </Row>\n      <Can resource=\"CustomForm\" permission=\"read\" inverse>\n        <Can resource=\"CustomForm\" permission=\"create\" inverse>\n          {showApplications && (\n            <Row>\n              <Col md=\"12\">\n                <div className=\"form-section tour-job-details\">\n                  <div className=\"form-section-heading\">\n                    <h3>Finance Applications</h3>\n                  </div>\n                  <div className=\"form-section-content\">\n                    <FinanceApplicationList />\n                  </div>\n                </div>\n              </Col>\n            </Row>\n          )}\n        </Can>\n      </Can>\n      <CustomForms scope={$scope} />\n    </Track>\n  );\n};\n\nexport default connectFC(PaymentsAndApplications);\n","import { react2angular } from \"react2angular\";\nimport MakePaymentButton from \"app2/src/components/PaymentsModal/MakePaymentButton\";\nimport PaymentsAndApplications from \"app2/src/components/JobTabs/InformationTab/PaymentsAndApplications/index\";\n\nexport class BillingRoutes {\n  public static modules = [];\n\n  public static load(app: ng.IModule) {\n    _.each(BillingRoutes.modules, (module) => {\n      module.load(app);\n    });\n\n    app.component(\"paymentsAndApplications\", react2angular(PaymentsAndApplications, [], [\"$scope\"]));\n    app.component(\"makePaymentButton\", react2angular(MakePaymentButton));\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    _.each(BillingRoutes.modules, (module) => {\n      module.configure($stateProvider, resolveAuth);\n    });\n  }\n}\n","export const JobMenuValues = [\n  \"information\",\n  \"appointments\",\n  \"tools\",\n  \"images\",\n  \"documents\",\n  \"measurements\",\n  \"inspection\",\n  \"notes\",\n  \"history\",\n  \"presentations\",\n  \"design_tools\",\n  \"estimates\",\n  \"proposals\",\n  \"contracts\",\n  \"signatures\",\n];\n","import { IPretty } from \"../Common/PrettyNameService\";\nimport { IOrg } from \"../Models/Org\";\nimport { SortableOptions } from \"../Common/SortableOptions\";\nimport { IMenuItem, ISection, ISideBarMenu } from \"./JobMenuOrderService\";\nimport { HandlebarsHelperService } from \"../Patterns/HandlebarsHelperService\";\n\nclass JobMenuManagerCtrl {\n  public sortableOptions = new SortableOptions();\n  public org: IOrg;\n  public available: string[];\n  public availableMenuItems: IMenuItem[];\n  public jobMenu: ISideBarMenu;\n  public cloneMenu: ISideBarMenu;\n  public update: (data: any) => void;\n  public templateSettings;\n\n  constructor(\n    public Pretty: IPretty,\n    protected HandlebarsHelperService: HandlebarsHelperService,\n  ) {\n    this.sortableOptions.stop = () => {\n      this.triggerUpdate();\n    };\n  }\n\n  public $onChanges() {\n    if (this.jobMenu && !this.cloneMenu && this.available && this.org) {\n      this.templateSettings = {\n        estimates_title: this.org.estimateTitle(true),\n        estimate_title: this.org.estimateTitle(false),\n        contracts_title: this.org.contractTitle(true),\n        contract_title: this.org.contractTitle(false),\n        estimator_title: this.org.estimatorTitle(false),\n        estimators_title: this.org.estimatorTitle(true),\n        org_name: this.org.name,\n      };\n\n      this.cloneMenu = JSON.parse(angular.toJson(this.jobMenu));\n\n      _.each(this.cloneMenu.sections, (s: ISection) => this.compileSectionLabel(s));\n\n      this.availableMenuItems = _.chain(this.available)\n        .sortBy()\n        .map((id) => <IMenuItem>{ id: id })\n        .reject((mi: IMenuItem) => {\n          return _.any(this.cloneMenu.sections, (s: ISection) => {\n            return _.any(s.menuItems, (cmi: IMenuItem) => cmi.id === mi.id);\n          });\n        })\n        .value();\n    }\n  }\n\n  public removeSection(section: ISection) {\n    this.cloneMenu.sections = _.reject(this.cloneMenu.sections, (s: ISection) => {\n      return (\n        section.renderedLabel === s.renderedLabel &&\n        section.label === s.label &&\n        _.all(section.menuItems, (mi: IMenuItem) => {\n          return _.find(s.menuItems, (cmi: IMenuItem) => mi.id === cmi.id) !== undefined;\n        })\n      );\n    });\n\n    _.each(section.menuItems, (mi: IMenuItem) => this.availableMenuItems.push(mi));\n\n    this.triggerUpdate();\n  }\n\n  public addSection() {\n    this.cloneMenu.sections.push(<ISection>{\n      label: \"New Section\",\n      renderedLabel: \"New Section\",\n      class: \"yellow\",\n      menuItems: [],\n    });\n\n    this.triggerUpdate();\n  }\n\n  public moveSectionUp(idx: number) {\n    if (idx === 0) {\n      return;\n    }\n    this.moveMenuItem(idx, idx - 1);\n    this.triggerUpdate();\n  }\n\n  public moveSectionDown(idx: number) {\n    if (idx === this.cloneMenu.sections.length - 1) {\n      return;\n    }\n    this.moveMenuItem(idx, idx + 1);\n    this.triggerUpdate();\n  }\n\n  public removeMenuItem(section: ISection, menuItem: IMenuItem) {\n    section.menuItems = _.select(section.menuItems, (mi: IMenuItem) => mi.id !== menuItem.id);\n    this.availableMenuItems.push(menuItem);\n\n    this.triggerUpdate();\n  }\n\n  public sectionLabelChanged(section: ISection) {\n    this.compileSectionLabel(section);\n    this.triggerUpdate();\n  }\n\n  protected moveMenuItem(old_idx, new_idx) {\n    this.cloneMenu.sections.splice(new_idx, 0, this.cloneMenu.sections.splice(old_idx, 1)[0]);\n  }\n\n  protected compileSectionLabel(section: ISection) {\n    section.renderedLabel = this.HandlebarsHelperService.compile(section.label, this.templateSettings);\n  }\n\n  protected triggerUpdate() {\n    if (this.update) {\n      this.update({ menu: this.cloneMenu });\n    }\n  }\n}\n\nexport class JobMenuManagerComponent implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    available: \"<\",\n    jobMenu: \"<\",\n    org: \"<\",\n    update: \"&\",\n  };\n  public templateUrl = \"src/JobMenu/job_menu_manager.html\";\n\n  constructor() {\n    this.controller = JobMenuManagerCtrl;\n    this.controller.$inject = [\"Pretty\", \"HandlebarsHelperService\"];\n  }\n}\n","import { IOrg } from \"../Models/Org\";\nimport { IJob } from \"../Models/Job\";\nimport { IJobFetcherService } from \"../Jobs/JobFetcherService\";\nimport { HandlebarsHelperService } from \"../Patterns/HandlebarsHelperService\";\nimport { IStateService } from \"angular-ui-router\";\nimport { useSelector, dispatch } from \"app2/src/storeRegistry\";\nimport { jobDocumentCount, jobImageCount, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { push } from \"connected-react-router/immutable\";\n\nexport interface IMenuItem {\n  id: string;\n  newJobVisible?: boolean;\n  analyticsEvent?: string;\n  pageUrl?: string;\n  iconImg?: string;\n  label?: string;\n  hideInPresentMode?: boolean;\n  navigate?: () => void;\n  badge?: () => number;\n}\n\nexport interface ISection {\n  class: string;\n  label: string;\n  renderedLabel?: string;\n  menuItems: IMenuItem[];\n}\n\nexport interface ISideBarMenu {\n  sections: ISection[];\n}\n\nexport interface IJobMenuOrderService {\n  buildTabs(org: IOrg, job: IJob);\n\n  gotoEstimateTab(resource: string);\n  available(org: IOrg, job: IJob);\n  countDocsNotSigned(job: IJob);\n  countDesignTools(job: IJob);\n  countPresentations(org: IOrg, job: IJob);\n}\n\nexport class JobMenuOrderService {\n  public static $inject = [\"$state\", \"JobFetcher\", \"HandlebarsHelperService\"];\n\n  constructor(\n    protected $state: IStateService,\n    protected JobFetcher: IJobFetcherService,\n    protected HandlebarsHelperService: HandlebarsHelperService,\n  ) {}\n\n  public navigate(path, job) {\n    dispatch(push(`/jobs/${job.id}/${path}`));\n  }\n\n  public buildTabs(org, job) {\n    const available: IMenuItem[] = this.available(org, job);\n    const menu: ISideBarMenu = JSON.parse(angular.toJson(org.preferences.config.job_menu));\n\n    const templateSettings = {\n      estimates_title: org.estimateTitle(true),\n      estimate_title: org.estimateTitle(false),\n      contracts_title: org.contractTitle(true),\n      contract_title: org.contractTitle(false),\n      estimators_title: org.estimatorTitle(true),\n      estimator_title: org.estimatorTitle(false),\n      org_name: org.name,\n    };\n\n    menu.sections = _.filter(menu.sections, (section: ISection) => {\n      if (!section.class) {\n        section.class = \"yellow\";\n      }\n\n      try {\n        section.renderedLabel = this.HandlebarsHelperService.compile(section.label, templateSettings);\n      } catch (e) {\n        section.renderedLabel = section.label;\n      }\n\n      _.each(section.menuItems, (menuItem: IMenuItem, idx) => {\n        const config: IMenuItem = _.find(available, (mi) => mi.id === menuItem.id);\n        section.menuItems[idx] = { ...config, ...menuItem };\n      });\n\n      if (!job) {\n        section.menuItems = _.filter(section.menuItems, (menuItem) => {\n          return menuItem.newJobVisible;\n        });\n      }\n\n      return section.menuItems.length > 0;\n    });\n\n    return menu;\n  }\n\n  public countDocsNotSigned(job): number {\n    if (!job) {\n      return 0;\n    }\n    return useSelector((state) => jobDocumentCount(state, { jobId: job.id }));\n  }\n\n  public countPresentations(org, job): number {\n    if (!job || !org || !org.presentation_count) {\n      return 0;\n    }\n\n    return org.presentation_count;\n  }\n\n  public countDesignTools(job): number {\n    if (!job || !job.visualizations) {\n      return 0;\n    }\n    return job.visualizations.length;\n  }\n\n  public gotoEstimateTab(resource, job) {\n    let path = resource;\n\n    const estimateId = useSelector((state) => selectedEstimateId(state));\n    if (estimateId) {\n      path = `${path}/${estimateId}`;\n    }\n\n    this.navigate(path, job);\n  }\n\n  public buildEstimateContractTitle(org) {\n    if (!org) {\n      return;\n    }\n\n    return `${org.estimateTitle(false)} & ${org.contractTitle(false)}`;\n  }\n\n  public available(org: IOrg, job: IJob) {\n    return [\n      {\n        id: \"information\",\n        newJobVisible: true,\n        analyticsEvent: \"Information\",\n        pageUrl: \"/info\",\n        iconImg: \"/assets/images/icons/i_customer-info.4627f852.png\",\n        label: \"Information\",\n        navigate: () => {\n          if (job) {\n            this.navigate(\"info\", job);\n          }\n        },\n      },\n      {\n        id: \"appointments\",\n        newJobVisible: false,\n        analyticsEvent: \"Appointments\",\n        pageUrl: \"/appointments\",\n        iconImg: \"/assets/images/icons/i_customer-appts.54b57644.png\",\n        label: \"Appointments\",\n        badge: () => job.appointments.length,\n        navigate: () => this.navigate(\"appointments\", job),\n      },\n      {\n        id: \"tools\",\n        newJobVisible: false,\n        analyticsEvent: \"Tools\",\n        pageUrl: \"/tools\",\n        iconImg: \"/assets/images/icons/i_customer-tools.fb727a50.png\",\n        label: \"Tools\",\n        navigate: () => this.navigate(\"tools\", job),\n      },\n      {\n        id: \"images\",\n        newJobVisible: false,\n        analyticsEvent: \"Photos\",\n        pageUrl: \"/images\",\n        iconImg: \"/assets/images/icons/i_customer-photos.26dc1b4c.png\",\n        label: \"Photos\",\n        badge: () => useSelector((state) => jobImageCount(state, { jobId: job.id })),\n        navigate: () => this.navigate(\"images\", job),\n      },\n      {\n        id: \"documents\",\n        newJobVisible: false,\n        analyticsEvent: \"Documents\",\n        pageUrl: \"/documents\",\n        iconImg: \"/assets/images/icons/i_customer-docs.2eb4235f.png\",\n        label: \"Documents\",\n        badge: () => this.countDocsNotSigned(job),\n        navigate: () => this.navigate(\"documents\", job),\n      },\n      {\n        id: \"measurements\",\n        newJobVisible: false,\n        analyticsEvent: \"Measurements\",\n        pageUrl: \"/measurements\",\n        iconImg: \"/assets/images/icons/i_customer-measure.75ad2262.png\",\n        label: \"Measurements\",\n        navigate: () => this.navigate(\"measurements\", job),\n      },\n      {\n        id: \"notes\",\n        newJobVisible: false,\n        analyticsEvent: \"Notes\",\n        pageUrl: \"/notes\",\n        iconImg: \"/assets/images/icons/i_customer-notes.b9bf3aaa.png\",\n        label: \"Notes\",\n        hideInPresentMode: true,\n        badge: () => job.notes.length,\n        navigate: () => this.navigate(\"notes\", job),\n      },\n      {\n        id: \"history\",\n        newJobVisible: false,\n        analyticsEvent: \"History\",\n        pageUrl: \"/history\",\n        iconImg: \"/assets/images/icons/i_customer-history.e28799a3.png\",\n        label: \"History\",\n        hideInPresentMode: true,\n        navigate: () => this.navigate(\"history\", job),\n      },\n      {\n        id: \"presentations\",\n        newJobVisible: false,\n        analyticsEvent: \"Presentations\",\n        pageUrl: \"/presentations\",\n        iconImg: \"/assets/images/icons/i_presentation-present.ca10d2bd.png\",\n        label: \"Presentations\",\n        badge: () => this.countPresentations(org, job),\n        navigate: () => this.navigate(\"presentations\", job),\n      },\n      {\n        id: \"design_tools\",\n        newJobVisible: false,\n        analyticsEvent: \"Design Tools\",\n        pageUrl: \"/design-tools\",\n        iconImg: \"/assets/images/icons/i_presentation-design.06966acd.png\",\n        label: \"Design Tools\",\n        badge: () => this.countDesignTools(job),\n        navigate: () => this.navigate(\"design-tools\", job),\n      },\n      {\n        id: \"inspection\",\n        newJobVisible: false,\n        analyticsEvent: \"Inspection\",\n        pageUrl: \"/inspection\",\n        iconImg: \"/assets/images/inspection.2131a823.png\",\n        label: \"Inspection\",\n        navigate: () => this.navigate(\"inspection\", job),\n      },\n      {\n        id: \"estimates\",\n        newJobVisible: false,\n        analyticsEvent: \"Estimates\",\n        pageUrl: \"/estimates\",\n        iconImg: \"/assets/images/icons/i_presentation-estimate.93212a6d.png\",\n        label: org.estimatorTitle(false),\n        badge: () => job.estimates.length,\n        navigate: () => this.gotoEstimateTab(\"estimates\", job),\n      },\n      {\n        id: \"proposals\",\n        newJobVisible: false,\n        analyticsEvent: \"Proposals\",\n        pageUrl: \"/proposals\",\n        iconImg: \"/assets/images/icons/i_contracts-proposals.23a15c54.png\",\n        label: org.estimateTitle(false),\n        navigate: () => this.navigate(\"proposals\", job),\n      },\n      {\n        id: \"contracts\",\n        newJobVisible: false,\n        analyticsEvent: \"Contracts\",\n        pageUrl: \"/contracts\",\n        iconImg: \"/assets/images/icons/i_contracts-agreement.7f7d6227.png\",\n        label: org.contractTitle(false),\n        navigate: () => this.navigate(\"contracts\", job),\n      },\n      {\n        id: \"signatures\",\n        newJobVisible: false,\n        analyticsEvent: \"Signatures\",\n        pageUrl: \"/signatures\",\n        iconImg: \"/assets/images/icons/i_signatures.ecd30c5e.png\",\n        label: \"Signatures\",\n        navigate: () => this.navigate(\"signatures\", job),\n      },\n    ];\n  }\n}\n","import { IUser } from \"../Models/User\";\nimport { IOrg } from \"../Models/Org\";\nimport { IReportResource } from \"../Models/Report\";\nimport { IEagleviewOrder, IEagleviewProduct, IEagleviewProductReturn } from \"./EagleviewReport\";\nimport { IJob } from \"../Models/Job\";\nimport { IAddress } from \"../Models/Address\";\nimport { FlashLevels, IFlash } from \"../Common/FlashService\";\nimport { ISession } from \"../Common/SessionService\";\nimport { IPretty } from \"../Common/PrettyNameService\";\nimport { AbstractWizardController } from \"../Common/AbstractWizardController\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nclass EagleviewOrderingModalCtrl extends AbstractWizardController implements ng.IComponentController {\n  public spinnerPromise: ng.IPromise<any>;\n  public resolve: any;\n  public importExisting = false;\n  public close: () => null;\n  public dismiss: () => null;\n\n  public order: IEagleviewOrder = <IEagleviewOrder>{\n    add_on_products: [],\n  };\n  public products: IEagleviewProductReturn;\n  public org: IOrg;\n  public job: IJob;\n  public user: IUser;\n\n  public static $inject = [\"Report\", \"US_STATES\", \"$scope\", \"Flash\", \"Session\", \"Pretty\", \"COUNTRIES\", \"GeoCoder\"];\n  constructor(\n    public Report: IReportResource,\n    public US_STATES: string[],\n    public $scope: ng.IScope,\n    protected Flash: IFlash,\n    protected Session: ISession,\n    protected Pretty: IPretty,\n    public COUNTRIES: string[],\n    public GeoCoder: any,\n  ) {\n    super();\n  }\n\n  public $onInit() {\n    this.user = this.resolve.user;\n    this.org = this.resolve.org;\n    this.job = this.resolve.job;\n\n    this.order.insured_name = this.job.customer_name;\n    this.order.address = this.job.address.clone();\n    this.order.measurement_request_type = 2;\n\n    this.products = this.Report.pricing({ provider: \"eagleview\", kind: \"roofing\" }) as any as IEagleviewProductReturn;\n  }\n\n  public productChanged() {\n    this.order.delivery_product = _.first(this.order.product.delivery_products);\n    this.order.add_on_products = [];\n  }\n\n  public isStep0Valid() {\n    return true;\n  }\n\n  public isStep1Valid() {\n    return !!this.order.product && !!this.order.delivery_product;\n  }\n\n  public isStep2Valid() {\n    return this.order.address.isValid();\n  }\n\n  public isStep3Valid() {\n    return !!this.order.insured_name;\n  }\n\n  public toggleSelection(product: IEagleviewProduct) {\n    const idx = _.findIndex(this.order.add_on_products, (p: IEagleviewProduct) => {\n      return p.product_id === product.product_id;\n    });\n    if (idx >= 0) {\n      this.order.add_on_products = _.select(\n        this.order.add_on_products,\n        (p: IEagleviewProduct) => p.product_id !== product.product_id,\n      );\n    } else {\n      this.order.add_on_products.push(product);\n    }\n  }\n\n  public selected(product: IEagleviewProduct): boolean {\n    return _.any(this.order.add_on_products, (p: IEagleviewProduct) => {\n      return p.product_id === product.product_id;\n    });\n  }\n\n  public back() {\n    if (this.activeStep > 3) {\n      this.activeStep = 0;\n    } else {\n      super.back();\n    }\n  }\n\n  public cancel() {\n    if (this.importExisting) {\n      this.importExisting = false;\n      return;\n    }\n\n    if (this.dismiss) {\n      this.dismiss();\n    }\n  }\n\n  public submitOrder() {\n    const orderData = {\n      report_addresses: [this.addressToEv(this.order.address)],\n      primary_product_id: this.order.product.product_id,\n      delivery_product_id: this.order.delivery_product.product_id,\n      add_on_product_ids: _.pluck(this.order.add_on_products, \"product_id\"),\n      measurement_instruction_type: this.order.measurement_request_type,\n      claim_number: this.order.claim_number,\n      claim_info: this.order.claim_info,\n      po_number: this.order.po_number,\n      comments: this.order.comments,\n      cat_id: this.order.cat_id,\n      changes_in_last_4_years: this.order.changes_in_last_4_years,\n      insured_name: this.order.insured_name,\n    };\n\n    const report = this.Report.fromJSON({\n      job_id: this.job.id,\n      order_data: orderData,\n      provider: \"eagleview\",\n      kind: \"roofing\",\n      user_id: this.Session.currentUser.id,\n    });\n\n    this.spinnerPromise = report\n      .$create()\n      .then(() => {\n        this.Flash.addMessage(\n          FlashLevels.success,\n          this.Pretty.name[\"eagleview_roofing\"] + \" report successfully ordered!\",\n        );\n        this.close();\n      })\n      .catch((response) => {\n        let errors = \"\";\n        if (response.data[\"order_data\"]) {\n          errors = response.data[\"order_data\"].join(\"  \") + \"  \";\n        }\n\n        const message = `There was a problem ordering your report. ${errors}If the problem persists, please contact support.`;\n        this.Flash.addMessage(FlashLevels.danger, message);\n      });\n  }\n\n  public locationUpdated(address: IAddress) {\n    this.order.address.lat = Math.round(address.lat * Math.pow(10, 6)) / Math.pow(10, 6);\n    this.order.address.lon = Math.round(address.lon * Math.pow(10, 6)) / Math.pow(10, 6);\n    this.$scope.$digest();\n  }\n\n  /* eslint-disable @typescript-eslint/member-ordering */\n  public debouncedAddressChanged = _.debounce(() => {\n    this.GeoCoder.geocode({ address: this.order.address.fullAddress() }).then((results: any) => {\n      const geoLocation = results[0].geometry.location;\n\n      this.order.address.lat = roundToDecimals(geoLocation.lat(), -6);\n      this.order.address.lon = roundToDecimals(geoLocation.lng(), -6);\n      this.$scope.$digest();\n    });\n  }, 500);\n  /* tslint:enable:member-ordering */\n\n  protected addressToEv(addr: IAddress) {\n    return {\n      address: `${addr.line_1} ${addr.line_2}`.trim(),\n      city: addr.city,\n      state: addr.state,\n      zip: addr.postal_code,\n      country: addr.country,\n      latitude: addr.lat,\n      longitude: addr.lon,\n      address_type: 4,\n    };\n  }\n}\n\nexport class EagleviewOrderingModalComponent implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    resolve: \"<\",\n    close: \"&\",\n    dismiss: \"&\",\n  };\n  public templateUrl = \"src/Reports/eagleview_ordering_modal_component.html\";\n\n  constructor() {\n    this.controller = EagleviewOrderingModalCtrl;\n  }\n}\n","import { FlashLevels, IFlash } from \"../Common/FlashService\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\n\nclass EagleviewLoginModalCtrl implements ng.IComponentController {\n  public spinnerPromise: ng.IPromise<any>;\n  public resolve: any;\n  public close: () => null;\n  public dismiss: () => null;\n\n  public credentials = {\n    username: \"\",\n    password: \"\",\n  };\n\n  public static $inject = [\"$http\", \"$scope\", \"Flash\", \"BaseConfig\"];\n  constructor(\n    protected $http: ng.IHttpService,\n    protected $scope: ng.IScope,\n    protected Flash: IFlash,\n    protected BaseConfig: IBaseConfig\n  ) {}\n\n  public login() {\n    this.spinnerPromise = this.$http\n      .post(this.BaseConfig.BASE_URL + \"/integrations/eagleview/login\", this.credentials)\n      .then(() => {\n        this.Flash.addMessage(FlashLevels.success, \"Successfully authenticated with EagleView\");\n        this.close();\n      })\n      .catch(() => {\n        this.Flash.addMessage(\n          FlashLevels.danger,\n          \"There were problems authenticating with EagleView.  Please check your username & password then try again.\"\n        );\n      });\n  }\n}\n\nexport class EagleviewLoginModalComponent implements ng.IComponentOptions {\n  public controller: any;\n  public bindings: any = {\n    resolve: \"<\",\n    close: \"&\",\n    dismiss: \"&\",\n  };\n  public templateUrl = \"src/Reports/eagleview_login_modal.html\";\n\n  constructor() {\n    this.controller = EagleviewLoginModalCtrl;\n  }\n}\n","import * as ng from \"angular\";\nimport * as angulartics from \"angulartics\";\nimport { IPretty } from \"../Common/PrettyNameService\";\nimport { IReportResponse } from \"../Models/Report\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IUser } from \"../Models/User\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IOrgFetcherService } from \"app/src/Orgs/OrgFetcherService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { IHeaderSearchArgs, IHeaderShowArgs } from \"app/src/Header/HeaderCtrl\";\n\nexport class ReportListCtrl {\n  public spinnerPromise: ng.IPromise<any>;\n  public org: IOrg;\n  public reportResponse: any;\n  public totalCount = 0;\n  public currentPage = 1;\n  public perPage = 20;\n  public sort: any = {\n    by: \"reports.created_at\",\n    order: \"desc\",\n  };\n  public queryParams: any = {\n    id: null,\n    job_id: null,\n    provider: null,\n    kind: null,\n    status: null,\n  };\n  public providers: string[] = this.BaseConfig.REPORT_PROVIDERS;\n  public kinds: string[] = this.BaseConfig.REPORT_KINDS;\n  public statuses: string[] = [\n    \"created\",\n    \"ordered\",\n    \"exception\",\n    \"canceled\",\n    \"complete\",\n    \"paid\",\n    \"refunded\",\n    \"partially_refunded\",\n  ];\n  public searchVisible = false;\n  public search: string;\n\n  protected users: { number: IUser } = {} as { number: IUser };\n  protected orgs: { number: IOrg } = {} as { number: IOrg };\n\n  private validSortOrders: string[] = [\n    \"reports.id\",\n    \"reports.created_at\",\n    \"reports.status\",\n    \"users.last_name, users.first_name\",\n    \"reports.provider, reports.kind\",\n    \"reports.delivered_at\",\n  ];\n\n  public static $inject = [\n    \"$location\",\n    \"$state\",\n    \"$stateParams\",\n    \"Repository\",\n    \"Pretty\",\n    \"$window\",\n    \"BaseConfig\",\n    \"$uibModal\",\n    \"OrgFetcher\",\n    \"Session\",\n    \"$scope\",\n    \"$analytics\",\n    \"$rootScope\",\n  ];\n\n  constructor(\n    public $location: ng.ILocationService,\n    public $state: ng.ui.IStateService,\n    public $stateParams: ng.ui.IStateParamsService,\n    public Repository: IRepository,\n    public Pretty: IPretty,\n    public $window: ng.IWindowService,\n    public BaseConfig: IBaseConfig,\n    public $uibModal: ng.ui.bootstrap.IModalService,\n    public OrgFetcher: IOrgFetcherService,\n    public Session: ISession,\n    public $scope: ng.IScope,\n    public $analytics: angulartics.IAnalyticsService,\n    public $rootScope: RsfRootScope\n  ) {\n    $scope.$emit(\"header:search\", <IHeaderShowArgs>{ show: true });\n    $scope.$on(\"header:search_change\", (e: ng.IAngularEvent, args: IHeaderSearchArgs) => {\n      this.$analytics.eventTrack(\"search\", { category: \"Report List\" });\n      this.search = args.searchString;\n      this.$location.search(\"q\", this.search);\n      this.spinnerPromise = this.query();\n    });\n    this.spinnerPromise = this.updateFromQuerystring().then(() => {\n      if (_.isUndefined(this.search) || this.search.length > 0) {\n        $rootScope.$emit(\"header:search_update\", { searchString: this.search });\n      }\n      this.totalCount = this.reportResponse.meta.pagination.total_count;\n      return this.OrgFetcher.loadOrg(this.Session.currentUser.org_id).then((org: IOrg) => {\n        this.org = org;\n      });\n    });\n  }\n\n  public sortBy(by: string) {\n    if (!_.include(this.validSortOrders, by)) {\n      return;\n    }\n\n    if (this.sort.by !== by) {\n      this.sort.by = by;\n      this.sort.order = \"desc\";\n    } else {\n      this.sort.order = this.sort.order === \"asc\" ? \"desc\" : \"asc\";\n    }\n\n    this.$location.search(\"by\", this.sort.by);\n    this.$location.search(\"order\", this.sort.order);\n\n    this.query();\n  }\n\n  public sortingBy(by: string, order: string) {\n    return this.sort.by === by && this.sort.order === order;\n  }\n\n  public pageChanged() {\n    this.$location.search(\"page\", this.currentPage);\n    return this.query();\n  }\n\n  public updateFromQuerystring() {\n    this.currentPage = parseInt(this.$stateParams[\"page\"]) || this.currentPage;\n    this.perPage = parseInt(this.$stateParams[\"per\"]) || this.perPage;\n    this.sort.by = this.$stateParams[\"by\"] || this.sort.by;\n    this.sort.order = this.$stateParams[\"order\"] || this.sort.order;\n    this.search = this.$stateParams[\"q\"] || this.search;\n    return this.query();\n  }\n\n  public clearSearch() {\n    this.search = \"\";\n    this.$location.search(\"q\", this.search);\n    return this.query();\n  }\n\n  public query(): ng.IPromise<any> {\n    const params: any = {\n      page: this.currentPage,\n      per_page: this.perPage,\n      sort_by: this.sort.by,\n      sort_order: this.sort.order,\n    };\n\n    if (this.search) {\n      params[\"query\"] = this.search;\n    }\n\n    params[\"include\"] = [\"org\", \"user\"];\n\n    this.reportResponse = this.Repository.Report.query(params) as IReportResponse;\n\n    this.spinnerPromise = this.reportResponse.$promise.then(() => {\n      if (this.reportResponse.meta.pagination.total_count > 0) {\n        if (this.currentPage > this.reportResponse.meta.pagination.total_pages) {\n          this.currentPage = 1;\n          this.$location.search(\"page\", this.currentPage);\n          this.query();\n        }\n      }\n      this.totalCount = this.reportResponse.meta.pagination.total_count;\n    });\n\n    return this.spinnerPromise;\n  }\n\n  public openSMOrder() {\n    this.$uibModal\n      .open(<ng.ui.bootstrap.IModalSettings>{\n        size: \"skymeasure\",\n        component: \"skyMeasureOrder\",\n        backdrop: \"static\",\n        resolve: {\n          org: this.org,\n        },\n      })\n      .result.then((result) => {\n        const report = this.Repository.Report.fromJSON(result);\n        this.reportResponse.reports.unshift(report);\n      });\n  }\n}\n","import * as React from \"react\";\nimport { DateFormat } from \"../../helpers/Format\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ModelCache } from \"./ModelCache\";\nimport { RootState } from \"app2/src/reducers\";\nimport { OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { UserRecord, IUserData } from \"app2/src/records/UserRecord\";\n\nconst mapStateToProps = (state: RootState, ownProps: EventStatProps) => {\n  let user = new UserRecord();\n  if (ownProps.event.data.userId) {\n    user = state.getIn([\"users\", \"usersById\", parseInt(ownProps.event.data.userId)], {});\n  }\n\n  let org = new OrgRecord();\n  if (ownProps.event.data.orgId) {\n    org = state.getIn([\"orgs\", \"orgsById\", parseInt(ownProps.event.data.orgId)], org);\n  }\n\n  return {\n    cachedUser: user,\n    cachedOrg: org,\n  };\n};\n\nconst mapDispatchToProps = () => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface EventStatProps {\n  event: any;\n  ModelCache: ModelCache;\n}\n\nexport interface EventStatState {\n  expanded: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & EventStatProps;\n\nclass EventStat extends React.Component<Props, EventStatState> {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      expanded: false,\n    };\n\n    this.renderEvent.bind(this);\n    this.renderPageView.bind(this);\n  }\n\n  public componentDidMount() {\n    const { ModelCache, event } = this.props;\n\n    if (event.data.userId) {\n      ModelCache.getUser(parseInt(event.data.userId));\n    }\n\n    if (event.data.orgId) {\n      ModelCache.getOrg(parseInt(event.data.orgId));\n    }\n  }\n\n  public render() {\n    const { event } = this.props;\n\n    switch (event.data.hitType) {\n      case \"pageview\":\n        return this.renderPageView(event);\n      case \"event\":\n        return this.renderEvent(event);\n    }\n  }\n\n  public renderEvent(event) {\n    const { cachedUser, cachedOrg } = this.props;\n    let orgCol = <td></td>;\n    let userCol = <td></td>;\n\n    if (cachedOrg) {\n      orgCol = (\n        <td>\n          <a ui-sref=\"root.org_show.info({org.id})\">{cachedOrg.name}</a>\n        </td>\n      );\n    }\n\n    if (cachedUser) {\n      userCol = <td>{cachedUser.email}</td>;\n    }\n\n    return (\n      <tr key={event.id}>\n        <td>Event</td>\n        <td>{event.data.category}</td>\n        <td>{event.data.action}</td>\n        {userCol}\n        {orgCol}\n        <td>{DateFormat(event.inserted_at, \"short\")}</td>\n      </tr>\n    );\n  }\n\n  public renderPageView(event) {\n    return (\n      <tr key={event.id}>\n        <td>Page View</td>\n        <td></td>\n        <td>{event.data.page}</td>\n        <td></td>\n        <td></td>\n        <td>{DateFormat(event.inserted_at, \"short\")}</td>\n      </tr>\n    );\n  }\n}\n\nexport default connector(EventStat);\n","import * as React from \"react\";\nimport { DateFormat } from \"../../helpers/Format\";\nimport { ModelCache } from \"./ModelCache\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { IUserData } from \"app2/src/records/UserRecord\";\n\nconst mapStateToProps = (state: RootState, ownProps: UserStatProps) => {\n  return {\n    cachedUser: state.getIn([\"users\", \"usersById\", parseInt(ownProps.user.userId)], {}),\n  };\n};\n\nconst mapDispatchToProps = () => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface UserStatProps {\n  user: any;\n  ModelCache: ModelCache;\n}\n\nexport interface UserStatState {\n  expanded: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & UserStatProps;\n\nexport class UserStat extends React.Component<Props, UserStatState> {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      expanded: false,\n    };\n  }\n\n  public componentDidMount() {\n    const { ModelCache, user } = this.props;\n\n    ModelCache.getUser(parseInt(user.userId));\n    // loaded.$promise.then(() => {\n    //   this.setState({\n    //     cachedUser: loaded\n    //   });\n    // });\n  }\n\n  public render() {\n    const { user, cachedUser } = this.props;\n\n    return (\n      <tr>\n        <td>{cachedUser.email}</td>\n        <td>{user.eventCount}</td>\n        <td>{DateFormat(user.lastSeen, \"short\")}</td>\n        <td>{DateFormat(user.firstSeen, \"short\")}</td>\n      </tr>\n    );\n  }\n}\n\nexport default connector(UserStat);\n","import { IOrg } from \"app/src/Models/Org\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { useState, dispatch } from \"app2/src/storeRegistry\";\nimport * as userActions from \"app2/src/reducers/user.actions\";\nimport * as orgActions from \"app2/src/reducers/org.actions\";\nimport { OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { UserRecord } from \"app2/src/records/UserRecord\";\n\nexport class ModelCache {\n  public cache: any = {\n    org: {},\n  };\n\n  public constructor(public Repository: IRepository) {}\n\n  public getUser(userId: number): UserRecord {\n    const cached = useState().getIn([\"users\", \"usersById\", userId]);\n    if (cached) {\n      return cached;\n    }\n\n    dispatch(userActions.AsyncActions.getUser(userId));\n\n    return new UserRecord();\n  }\n\n  public getOrg(orgId: number): OrgRecord {\n    const cached = useState().getIn([\"orgs\", \"orgsById\", orgId]);\n    if (cached) {\n      return cached;\n    }\n\n    dispatch(orgActions.AsyncActions.getOrg(orgId));\n\n    return new OrgRecord();\n  }\n}\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Tabs, Tab, Table, Container, Col, Row } from \"react-bootstrap\";\nimport { IRepository } from \"../../../../app/src/Common/Repository\";\nimport EventStat from \"./EventStat\";\nimport UserStat from \"./UserStat\";\nimport { ModelCache } from \"./ModelCache\";\nimport { StandardPagination } from \"../Pagination/Standard\";\nimport * as eventsActions from \"app2/src/reducers/analytics.actions\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { IPagination } from \"app2/src/api/integrations/eagleview.service\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\n\nconst mapStateToProps = (state: RootState, ownProps: DashboardComponentProps) => {\n  const eventPage = state.getIn([\"analytics\", \"eventPagination\", \"page\"], 1);\n  const userPage = state.getIn([\"analytics\", \"userPagination\", \"page\"], 1);\n\n  return {\n    eventPage: eventPage,\n    userPage: userPage,\n    eventsData: state.getIn([\"analytics\", \"eventPagination\", \"pages\", eventPage]),\n    usersData: state.getIn([\"analytics\", \"userPagination\", \"pages\", userPage]),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: DashboardComponentProps) => {\n  return {\n    queryEventData: (page: number) => {\n      return dispatch(eventsActions.AsyncActions.getPage(page));\n    },\n    queryUserData: (page: number) => {\n      return dispatch(eventsActions.AsyncActions.getUsersPage(page));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface DashboardComponentProps {\n  Repository: IRepository;\n}\n\nexport interface DashboardComponentState {\n  users: { data: any[]; pagination: any; currentPage: number };\n  ModelCache: ModelCache;\n  page: number;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & DashboardComponentProps;\n\nclass DashboardComponent extends React.Component<Props, DashboardComponentState> {\n  constructor(props: Props) {\n    super(props);\n    this.state = {\n      users: { data: [], pagination: null, currentPage: 1 },\n      ModelCache: new ModelCache(this.props.Repository),\n      page: 1,\n    };\n\n    // this.queryData(1);\n    props.queryEventData(1);\n    props.queryUserData(1);\n  }\n\n  public render() {\n    return (\n      <Can resource=\"global\" permission=\"org\">\n        <Container>\n          <Row>\n            <Col md={12}>\n              <h2>Analytics Dashboard</h2>\n            </Col>\n          </Row>\n          <Row>\n            <Col md={12}>\n              <Tabs id=\"analytics\" defaultActiveKey=\"users\">\n                <Tab eventKey=\"users\" title=\"Users\">\n                  <br />\n                  {this.renderUsers()}\n                </Tab>\n                <Tab eventKey=\"activity\" title=\"Activity\">\n                  <br />\n                  {this.renderEvents()}\n                </Tab>\n              </Tabs>\n            </Col>\n          </Row>\n        </Container>\n      </Can>\n    );\n  }\n\n  public renderUsers() {\n    const { userPage, usersData, queryUserData } = this.props;\n    const { ModelCache } = this.state;\n\n    let data: eventsActions.IUserAnalyticsData[], pagination: IPagination;\n    if (!usersData) {\n      data = [];\n      pagination = {} as IPagination;\n    } else {\n      data = usersData.data;\n      pagination = usersData.pagination;\n    }\n\n    return (\n      <Spinner stateProperty={[\"analytics\", \"userPagination\", \"pages\", userPage, \"loading\"]}>\n        <Table striped bordered hover>\n          <thead>\n            <tr>\n              <th>User</th>\n              <th>Events</th>\n              <th>Last Seen</th>\n              <th>First Seen</th>\n            </tr>\n          </thead>\n          <tbody>\n            {data.map((user, idx) => {\n              return <UserStat key={idx} user={user} ModelCache={ModelCache}></UserStat>;\n            })}\n            <tr>\n              <td colSpan={4}>\n                <StandardPagination metadata={pagination} pageChanged={queryUserData}></StandardPagination>\n              </td>\n            </tr>\n          </tbody>\n        </Table>\n      </Spinner>\n    );\n  }\n\n  public renderEvents() {\n    const { eventPage, eventsData, queryEventData } = this.props;\n    const { ModelCache } = this.state;\n\n    let data: eventsActions.EventData[], pagination: IPagination;\n    if (!eventsData) {\n      data = [];\n      pagination = {} as IPagination;\n    } else {\n      data = eventsData.data;\n      pagination = eventsData.pagination;\n    }\n\n    return (\n      <Spinner stateProperty={[\"analytics\", \"eventPagination\", \"pages\", eventPage, \"loading\"]}>\n        <Table striped bordered hover>\n          <thead>\n            <tr>\n              <th>Type</th>\n              <th>Category</th>\n              <th>Action</th>\n              <th>User</th>\n              <th>Org</th>\n              <th>Date</th>\n            </tr>\n          </thead>\n          <tbody>\n            {data.map((event) => {\n              return <EventStat key={event.id} event={event} ModelCache={ModelCache}></EventStat>;\n            })}\n            <tr>\n              <td colSpan={6}>\n                <StandardPagination metadata={pagination} pageChanged={queryEventData}></StandardPagination>\n              </td>\n            </tr>\n          </tbody>\n        </Table>\n      </Spinner>\n    );\n  }\n}\n\nexport default connector(DashboardComponent);\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Container, Col, Row, Button, FormControl, DropdownButton, Dropdown } from \"react-bootstrap\";\nimport { StandardPagination } from \"../Pagination/Standard\";\nimport * as leadsActions from \"app2/src/reducers/leads.actions\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { IPagination } from \"app2/src/api/integrations/eagleview.service\";\nimport { Map } from \"immutable\";\nimport { LeadRecord } from \"app2/src/reducers/leads.reducer\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { IHeaderSearchArgs } from \"app/src/Header/HeaderCtrl\";\nimport { ILeadQueryParams } from \"app2/src/reducers/leads.actions\";\n\nconst mapStateToProps = (state: RootState, ownProps: LeadsComponentProps) => {\n  const page = state.getIn([\"leads\", \"page\"], 1);\n  return {\n    leadsData: state.getIn([\"leads\", \"pages\", page]),\n    leadsById: state.getIn([\"leads\", \"leadsById\"]),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: LeadsComponentProps) => {\n  return {\n    queryLeadData: (params: ILeadQueryParams) => {\n      return dispatch(leadsActions.AsyncActions.getPage(params));\n    },\n    createJob: (lead_id: number) => {\n      return dispatch(leadsActions.AsyncActions.createJob(lead_id));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface LeadsComponentProps {\n  $state: ng.ui.IStateService;\n  $scope: ng.IScope;\n}\n\nexport interface LeadsComponentState {\n  params: ILeadQueryParams;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & LeadsComponentProps;\n\nclass LeadsComponent extends React.Component<Props, LeadsComponentState> {\n  constructor(props: Props) {\n    super(props);\n\n    props.$scope.$emit(\"header:search\", { show: true });\n    props.$scope.$on(\"header:search_change\", (e: ng.IAngularEvent, args: IHeaderSearchArgs) => {\n      // this.$analytics.eventTrack(\"search\", { category: \"Job List\" });\n      const editedParams = this.state.params;\n      editedParams.query = args.searchString;\n      props.queryLeadData(editedParams);\n    });\n\n    this.state = {\n      params: {\n        page: 1,\n        filter: \"unclaimed\",\n        query: \"\",\n      },\n    };\n\n    props.queryLeadData(this.state.params);\n    this.clearSearch = this.clearSearch.bind(this);\n  }\n\n  public queryPage = (page: number) => {\n    const editParams = this.state.params;\n    editParams.page = page;\n    this.props.queryLeadData(editParams);\n  };\n\n  public handleAccept(lead) {\n    this.props.createJob(lead.id);\n  }\n\n  public handleJob(lead) {\n    this.props.$state.go(\"job_header.job_show.info\", { id: lead.job_id });\n  }\n\n  public handleFilter(filter: string) {\n    const editedParams = this.state.params;\n    editedParams.filter = filter;\n    this.props.queryLeadData(editedParams);\n  }\n\n  public handleReassign(event, lead) {\n    // let newLeadsById = _.clone(this.state.leadsById);\n    // newLeadsById[lead.id].org_id = event.target.value;\n    // this.setState({\n    //   leadsById: newLeadsById\n    // });\n  }\n\n  public isEven(idx) {\n    return idx % 2 === 0;\n  }\n\n  public buttonActions(lead_id) {\n    const { leadsById } = this.props;\n    if (leadsById.getIn([lead_id]).loading) {\n      return <FontAwesome name=\"circle-o-notch fa-spin fa-gray\" size=\"lg\" />;\n    } else if (leadsById.getIn([lead_id]).job_id > 0) {\n      return (\n        <Button\n          size=\"sm\"\n          variant=\"default\"\n          onClick={() => {\n            this.handleJob(leadsById.getIn([lead_id]));\n          }}>\n          Details\n        </Button>\n      );\n    } else {\n      return (\n        <Button\n          size=\"sm\"\n          variant=\"add\"\n          onClick={() => {\n            this.handleAccept(leadsById.getIn([lead_id]));\n          }}>\n          Accept\n        </Button>\n      );\n    }\n  }\n\n  public clearSearch() {\n    const editedParams = this.state.params;\n    editedParams.query = \"\";\n    this.props.queryLeadData(editedParams);\n  }\n\n  public render() {\n    const { leadsData } = this.props;\n    const { query } = this.state.params;\n    return (\n      <Spinner stateProperty={[\"leads\", \"pages\", this.state.params.page, \"loading\"]}>\n        <Container>\n          <Row>\n            <Col xs={6}>\n              <h1>Leads</h1>\n            </Col>\n            <Col xs={6}>\n              <div className=\"pull-right\">\n                <DropdownButton title={\"Filter\"} id={\"dropdown-filter\"} variant=\"info\">\n                  <Dropdown.Item eventKey=\"1\" onClick={() => this.handleFilter(\"claimed\")}>\n                    Claimed\n                  </Dropdown.Item>\n                  <Dropdown.Item eventKey=\"2\" onClick={() => this.handleFilter(\"unclaimed\")}>\n                    Unclaimed\n                  </Dropdown.Item>\n                  <Dropdown.Item eventKey=\"3\" onClick={() => this.handleFilter(\"\")}>\n                    All\n                  </Dropdown.Item>\n                </DropdownButton>\n              </div>\n            </Col>\n          </Row>\n          <Row>\n            {query.length > 0 && leadsData && leadsData.leads.length === 0 ? (\n              <Row>\n                <Col md={12}>\n                  <div className=\"form-section blank-state\">\n                    <img src=\"/assets/images/icons-large/docs.33cddf3f.png\" />\n                    <h2>Your search returned no results.</h2>\n                    <Button onClick={this.clearSearch}>Reset Search</Button>\n                  </div>\n                </Col>\n              </Row>\n            ) : null}\n            {query.length === 0 && leadsData && leadsData.leads.length === 0 ? (\n              <Row>\n                <Col md={12}>\n                  <div className=\"form-section blank-state\">\n                    <img src=\"/assets/images/icons-large/docs.33cddf3f.png\" />\n                    <h2>Sorry, you don't have any leads.</h2>\n                  </div>\n                </Col>\n              </Row>\n            ) : null}\n            {leadsData && leadsData.leads.length > 0 ? <Col md={12}>{this.renderLeadList()}</Col> : null}\n          </Row>\n        </Container>\n      </Spinner>\n    );\n  }\n\n  public renderAdminLeadList() {\n    const { leadsData } = this.props;\n    const { leads } = leadsData;\n    return (\n      <Container>\n        <Row className=\"list-header\">\n          <Col sm={3}>Name</Col>\n          <Col sm={3}>Created</Col>\n          <Col sm={3}>Assignment</Col>\n        </Row>\n        {Object.keys(leads).map((lead_id, idx) => {\n          return (\n            <Row key={idx} className={`list-row ${this.isEven(idx) ? \"even-row\" : \"odd-row\"}`}>\n              <Col sm={4}>{leads[lead_id].first_name + \" \" + leads[lead_id].last_name}</Col>\n              <Col sm={4}>\n                {new Date(leads[lead_id].created_at).toLocaleString([], {\n                  year: \"numeric\",\n                  month: \"2-digit\",\n                  day: \"numeric\",\n                  hour: \"2-digit\",\n                  minute: \"2-digit\",\n                })}\n              </Col>\n              <Col sm={4}>\n                <FormControl\n                  as=\"select\"\n                  value={leads[lead_id].org_id}\n                  onChange={(ev) => {\n                    this.handleReassign(ev, leads[lead_id]);\n                  }}\n                  disabled={leads[lead_id].job_id > 0}>\n                  {/*{Object.keys(this.state.orgsById).map((org_id) => {*/}\n                  {/*return (*/}\n                  {/*<option key={lead_id + \"-\" + org_id} value={this.state.orgsById[org_id].id}>{this.state.orgsById[org_id].name}</option>*/}\n                  {/*);*/}\n                  {/*})}*/}\n                  {/*<option key={lead_id + \"-unassign\"} value=\"unassign\">Unassign</option>*/}\n                </FormControl>\n              </Col>\n            </Row>\n          );\n        })}\n        <StandardPagination metadata={this.props.leadsData.pagination} pageChanged={this.queryPage} />\n      </Container>\n    );\n  }\n\n  public renderLeadList() {\n    const { leadsData, leadsById } = this.props;\n    let leads: number[], pagination: IPagination;\n    if (!leadsData) {\n      leads = [];\n      pagination = {} as IPagination;\n    } else {\n      leads = leadsData.leads;\n      pagination = leadsData.pagination;\n    }\n\n    return (\n      <Container>\n        <Row className=\"list-header\">\n          <Col sm={5}>Name</Col>\n          <Col sm={5}>Created</Col>\n          <Col sm={2} />\n        </Row>\n        {leads.map((lead_id, idx) => {\n          return (\n            <Row key={idx} className={`list-row ${this.isEven(idx) ? \"even-row\" : \"odd-row\"}`}>\n              <Col sm={5}>{leadsById.getIn([lead_id]).first_name + \" \" + leadsById.getIn([lead_id]).last_name}</Col>\n              <Col sm={5}>\n                {new Date(leadsById.getIn([lead_id]).created_at).toLocaleString([], {\n                  year: \"numeric\",\n                  month: \"2-digit\",\n                  day: \"numeric\",\n                  hour: \"2-digit\",\n                  minute: \"2-digit\",\n                })}\n              </Col>\n              <Col sm={2}>{this.buttonActions(lead_id)}</Col>\n            </Row>\n          );\n        })}\n        <StandardPagination metadata={pagination} pageChanged={this.queryPage} />\n      </Container>\n    );\n  }\n}\n\nexport default connector(LeadsComponent);\n","import * as React from \"react\";\nimport { Button, Table, Row, Col } from \"react-bootstrap\";\n\nexport interface IJobListContainerData {\n  id: number;\n  name: string;\n}\n\nexport interface JobListContainerProps {\n  jobs: IJobListContainerData[];\n  action: string;\n  actionFired: (job: IJobListContainerData) => void;\n}\n\nexport interface JobListContainerState {}\n\nexport class JobListContainer extends React.Component<JobListContainerProps, JobListContainerState> {\n  constructor(props: JobListContainerProps) {\n    super(props);\n  }\n\n  public render() {\n    const { jobs, action, actionFired } = this.props;\n\n    if (!_.isArray(jobs)) {\n      return <h3>Loading...</h3>;\n    }\n\n    if (jobs.length === 0) {\n      return this.renderEmptyList();\n    }\n\n    return (\n      <Row>\n        <Col md={12}>\n          <Table striped>\n            <thead>\n              <tr>\n                <td>ID</td>\n                <td>Job</td>\n                <td></td>\n              </tr>\n            </thead>\n            <tbody>\n              {jobs.map((job) => {\n                return (\n                  <tr key={job.id}>\n                    <td>{job.id}</td>\n                    <td>{job.name}</td>\n                    <td>\n                      <Button size=\"sm\" onClick={() => actionFired(job)}>\n                        {action}\n                      </Button>\n                    </td>\n                  </tr>\n                );\n              })}\n            </tbody>\n          </Table>\n        </Col>\n      </Row>\n    );\n  }\n\n  public renderEmptyList() {\n    return (\n      <Table>\n        <tbody>\n          <tr className=\"text-center\">\n            <td>\n              <h2>No Jobs Found</h2>\n            </td>\n          </tr>\n        </tbody>\n      </Table>\n    );\n  }\n}\n","import * as React from \"react\";\nimport * as eagleviewActions from \"app2/src/reducers/integrations/eagleview.actions\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { JobListContainer, IJobListContainerData } from \"../JobListContainer\";\nimport { StandardPagination } from \"app2/src/components/Pagination/Standard\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { Page } from \"app2/src/api/integrations/eagleview.service\";\n\nconst mapStateToProps = (state: RootState, ownProps: EagleviewReportImportProps) => {\n  const page = state.getIn([\"integrations\", \"eagleview\", \"page\"], 1);\n\n  return {\n    page: page,\n    reports: state.getIn([\"integrations\", \"eagleview\", \"pages\", page]),\n  };\n};\n\nconst mapDispatchToProps = (\n  dispatch: ThunkDispatch<RootState, {}, RootActions>,\n  ownProps: EagleviewReportImportProps,\n) => {\n  return {\n    queryReportPage: (page: number) => {\n      return dispatch(eagleviewActions.AsyncActions.getPage(page));\n    },\n    importReport: (report: IJobListContainerData) => {\n      return dispatch(eagleviewActions.AsyncActions.importReport(report.id));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface EagleviewReportImportProps {}\n\ninterface EagleviewReportImportState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport type Props = PropsFromRedux & EagleviewReportImportProps;\n\nclass EagleviewReportImportComponent extends React.Component<Props, EagleviewReportImportState> {\n  constructor(props: Props) {\n    super(props);\n\n    props.queryReportPage(1);\n  }\n\n  public render() {\n    const { page, reports, importReport } = this.props;\n\n    let jobs, meta;\n    if (reports && reports.reports) {\n      jobs = reports.reports.map((r) => {\n        return {\n          id: r.id,\n          name: `${r.street_1} ${r.city}, ${r.state} ${r.zip}`,\n        };\n      });\n\n      meta = reports.meta.pagination;\n    } else {\n      jobs = [];\n      meta = {};\n    }\n\n    return (\n      <Spinner stateProperty={[\"integrations\", \"eagleview\", \"pages\", page, \"loading\"]}>\n        <>\n          <JobListContainer action={\"Import\"} actionFired={this.props.importReport} jobs={jobs}></JobListContainer>\n          <StandardPagination pageChanged={this.props.queryReportPage} metadata={meta}></StandardPagination>\n        </>\n      </Spinner>\n    );\n  }\n}\n\nexport default connector(EagleviewReportImportComponent);\n","import * as React from \"react\";\nimport { connectFC } from \"app2/src/connect\";\nimport { Col, Pagination, Row } from \"react-bootstrap\";\nimport { useTracking } from \"react-tracking\";\nimport { IMetaCountlessPaginationData } from \"app2/src/records/MetaPagination\";\n\ninterface CountlessProps {\n  pageChanged: (page: number) => void;\n  metadata: IMetaCountlessPaginationData;\n}\n\nconst NgCountless: React.FC<CountlessProps> = ({ metadata, pageChanged }) => {\n  const { trackEvent } = useTracking();\n\n  const handlePageChange = (page: number) => {\n    trackEvent({ action: \"pagination page changed\", page });\n    pageChanged(page);\n  };\n\n  if (!metadata || (metadata.first_page && _.isNull(metadata.next_page))) {\n    return (\n      <Row>\n        <Col md={12}>\n          <Pagination className=\"justify-content-center\">\n            <Pagination.Ellipsis />\n          </Pagination>\n        </Col>\n      </Row>\n    );\n  }\n\n  const { current_page, next_page, prev_page, first_page, last_page } = metadata;\n\n  let preEllipsis = null,\n    preArrow = null;\n  let postArrow = null;\n\n  const pre = [],\n    post = [];\n\n  if (!first_page && prev_page) {\n    const preNumber = Math.max(1, current_page - 2);\n\n    for (let i = preNumber; i < current_page; i++) {\n      pre.push(\n        <Pagination.Item key={i} onClick={() => handlePageChange(i)}>\n          {i}\n        </Pagination.Item>,\n      );\n    }\n\n    if (preNumber > 1) {\n      preEllipsis = <Pagination.Ellipsis />;\n    }\n\n    preArrow = <Pagination.Prev onClick={() => handlePageChange(prev_page)} />;\n  }\n\n  if (next_page) {\n    post.push(\n      <Pagination.Item key={next_page} onClick={() => handlePageChange(next_page)}>\n        {next_page}\n      </Pagination.Item>,\n    );\n  }\n\n  if (!last_page) {\n    postArrow = <Pagination.Next onClick={() => handlePageChange(next_page)} />;\n  }\n\n  return (\n    <Row>\n      <Col md={12}>\n        <Pagination className=\"justify-content-center\">\n          <Pagination.First disabled={first_page} onClick={() => handlePageChange(1)} />\n          {preArrow}\n          {preEllipsis}\n          {pre}\n          <Pagination.Item active onClick={() => handlePageChange(current_page)}>\n            {current_page}\n          </Pagination.Item>\n          {post}\n          {postArrow}\n        </Pagination>\n      </Col>\n    </Row>\n  );\n};\n\nexport default connectFC(NgCountless);\n","import * as React from \"react\";\nimport * as hoverActions from \"app2/src/reducers/integrations/hover.actions\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { JobListContainer, IJobListContainerData } from \"../JobListContainer\";\nimport { Modal, Row, Col, Button } from \"react-bootstrap\";\nimport NgCountless from \"app2/src/components/Pagination/NgCountless\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { Dispatch, TrackingData } from \"app2/src/helpers/Analytics\";\nimport { RootState } from \"app2/src/reducers\";\nimport { TaskPoller } from \"app2/src/api/task.service\";\nimport { SearchBox } from \"app2/src/components/Common/SearchBox\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nconst mapStateToProps = (state: RootState, ownProps: ImportJobProps) => {\n  const page = state.getIn([\"integrations\", \"hover\", \"page\"], 1);\n\n  return {\n    page: page,\n    search: state.getIn([\"integrations\", \"hover\", \"search\"]),\n    reports: state.getIn([\"integrations\", \"hover\", \"pages\", page]),\n    jobId: state.getIn([\"integrations\", \"hover\", \"currentJob\"]),\n    importing: state.getIn([\"integrations\", \"hover\", \"importing\"]),\n    importLogs: state.getIn([\"integrations\", \"hover\", \"importLog\"]),\n    errorLogs: state.getIn([\"integrations\", \"hover\", \"errors\"]),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: ImportJobProps) => {\n  return {\n    queryReportPage: (params: hoverActions.IHoverParams) => {\n      return dispatch(hoverActions.AsyncActions.getPage(params));\n    },\n    importReport: (report: IJobListContainerData, jobId: number) => {\n      return dispatch(hoverActions.AsyncActions.importReport(report.id, jobId)) as any as Promise<TaskPoller>;\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface ImportJobProps {\n  modalInstance: ng.ui.bootstrap.IModalInstanceService;\n  tracking?: TrackingProp;\n}\n\nconst track: Track<TrackingData, ImportJobProps> = _track;\n\nexport interface ImportJobState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImportJobProps;\n\n@track(\n  (props: Props) => {\n    return {\n      category: \"HOVER Import\",\n      job: props.jobId,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n  },\n)\nexport class ImportJobComponent extends React.Component<Props, ImportJobState> {\n  constructor(props: Props) {\n    super(props);\n\n    props.queryReportPage({\n      page: 1,\n      search: \"\",\n    });\n\n    this.startImport = this.startImport.bind(this);\n    this.cancelImport = this.cancelImport.bind(this);\n    this.queryPage = this.queryPage.bind(this);\n    this.searching = this.searching.bind(this);\n  }\n\n  @track({ action: \"Importing Job\" })\n  public startImport(hoverJob: IJobListContainerData): Promise<boolean> {\n    const { modalInstance, jobId, importReport } = this.props;\n\n    return importReport(hoverJob, jobId).then((poller) => {\n      return poller.promise.then(() => {\n        modalInstance.close();\n        return true;\n      });\n    });\n  }\n\n  public searching(query: string) {\n    this.props.queryReportPage({\n      page: 1,\n      search: query,\n    });\n  }\n\n  public queryPage(page: number) {\n    this.props.queryReportPage({\n      page: page,\n      search: this.props.search,\n    });\n  }\n\n  @track((props: Props) => ({\n    action: `${props.importing ? \"Background\" : \"Cancel\"} HOVER Import`,\n  }))\n  public cancelImport(): void {\n    const { modalInstance } = this.props;\n    modalInstance.close();\n  }\n\n  public render() {\n    const { importing, importLogs, errorLogs, reports } = this.props;\n\n    let jobs, meta;\n    if (reports && reports.jobs) {\n      jobs = reports.jobs.map((r) => {\n        return {\n          id: r.id,\n          name: `${r.name}: ${r.location_line_1} ${r.location_city}, ${r.location_region} ${r.location_postal_code}`,\n        };\n      });\n\n      meta = reports.meta.pagination;\n    } else {\n      jobs = [];\n      meta = {};\n    }\n\n    let header = \"Choose a HOVER Job\";\n    let cancel = \"Cancel\";\n\n    let modalBody = (\n      <Modal.Body className=\"vh-height-modal-body\">\n        {reports && reports.loading ? (\n          <div className=\"text-center\">\n            <img className=\"spinner-graphic\" />\n          </div>\n        ) : (\n          <>\n            <JobListContainer action={\"Import\"} actionFired={this.startImport} jobs={jobs}></JobListContainer>\n            <NgCountless pageChanged={this.queryPage} metadata={meta}></NgCountless>\n          </>\n        )}\n      </Modal.Body>\n    );\n\n    if (importing) {\n      modalBody = (\n        <Modal.Body>\n          <pre style={{ minHeight: \"200px\", lineHeight: \"1.5em\" }}>{importLogs}</pre>\n        </Modal.Body>\n      );\n\n      header = \"Importing HOVER Measurements\";\n      cancel = \"Finish in Background\";\n    }\n\n    if (_.compact(errorLogs).length > 0) {\n      modalBody = <Modal.Body>{_.compact(errorLogs).join(\"<br />\")}</Modal.Body>;\n    }\n\n    return (\n      <>\n        <Modal.Header onHide={this.cancelImport} closeButton>\n          <Row>\n            <Col>\n              <Modal.Title>\n                <h3>{header}</h3>\n              </Modal.Title>\n            </Col>\n            <Col>\n              {importing ? null : <SearchBox searching={this.searching} placeholder=\"Search Hover Jobs\" query=\"\" />}\n            </Col>\n          </Row>\n        </Modal.Header>\n        {modalBody}\n        <Modal.Footer>\n          <Button type=\"button\" variant=\"cancel\" onClick={this.cancelImport}>\n            {cancel}\n          </Button>\n        </Modal.Footer>\n      </>\n    );\n  }\n}\n\nexport default connector(ImportJobComponent);\n","import * as React from \"react\";\nimport { Col, FormControl, FormGroup, FormLabel, Row } from \"react-bootstrap\";\nimport { geocode } from \"app2/src/services/geocode.service\";\nimport { us_states } from \"app/src/Common/StatesConstant\";\nimport { AddressRecord, toOneLiner } from \"app2/src/records/Address\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\ninterface AddressShowState {\n  address: AddressRecord;\n}\n\ninterface AddressShowProps {\n  address: AddressRecord;\n  update: (address: AddressRecord) => void;\n}\n\nexport class AddressShow extends React.Component<AddressShowProps, AddressShowState> {\n  public constructor(props) {\n    super(props);\n\n    this.state = {\n      address: props.address,\n    };\n\n    this.handleInput = this.handleInput.bind(this);\n  }\n\n  public handleInput(e: any): void {\n    //@ts-ignore\n    const value = e.target.value;\n    //@ts-ignore\n    const name = e.target.id;\n\n    this.setState((state: AddressShowState) => {\n      let address = state.address;\n      address = address.set(name, value);\n\n      this.props.update(address);\n      return {\n        address: address,\n      };\n    });\n\n    this.geocode();\n  }\n\n  // eslint-disable-next-line\n  public geocode = _.debounce(() => {\n    let { address } = this.state;\n\n    geocode({ address: toOneLiner(address) }).then((results: any) => {\n      const geoLocation = results[0].geometry.location;\n\n      const area_2 = _.find(results[0].address_components, function (ac: any) {\n        return _.contains(ac[\"types\"], \"administrative_area_level_2\");\n      });\n      let administrative_area_level_2 = \"\";\n      if (area_2 && area_2[\"short_name\"]) {\n        administrative_area_level_2 = area_2[\"short_name\"];\n      }\n\n      const area_3 = _.find(results[0].address_components, function (ac: any) {\n        return _.contains(ac[\"types\"], \"administrative_area_level_3\");\n      });\n      let administrative_area_level_3 = \"\";\n      if (area_3 && area_3[\"short_name\"]) {\n        administrative_area_level_3 = area_3[\"short_name\"];\n      }\n\n      address = address.merge({\n        lat: roundToDecimals(geoLocation.lat(), -6),\n        lon: roundToDecimals(geoLocation.lng(), -6),\n        administrative_area_level_2: administrative_area_level_2,\n        administrative_area_level_3: administrative_area_level_3,\n      });\n\n      this.props.update(address);\n      this.setState({\n        address: address,\n      });\n    });\n  }, 500);\n\n  public render() {\n    const { address } = this.state;\n\n    return (\n      <React.Fragment>\n        <Row>\n          <Col md={6}>\n            <FormGroup>\n              <FormLabel>\n                <span className=\"asterisk\">*</span>&nbsp;Address 1\n              </FormLabel>\n              <FormControl type=\"text\" id=\"line_1\" value={address.line_1} onChange={this.handleInput} required />\n            </FormGroup>\n          </Col>\n          <Col md={6}>\n            <FormGroup>\n              <FormLabel>Address 2</FormLabel>\n              <FormControl type=\"text\" id=\"line_2\" value={address.line_2} onChange={this.handleInput} />\n            </FormGroup>\n          </Col>\n        </Row>\n        <Row>\n          <Col md={6}>\n            <FormGroup>\n              <FormLabel>\n                <span className=\"asterisk\">*</span>&nbsp;City\n              </FormLabel>\n              <FormControl type=\"text\" id=\"city\" value={address.city} onChange={this.handleInput} required />\n            </FormGroup>\n          </Col>\n          <Col md={3}>\n            <FormGroup>\n              <FormLabel>\n                <span className=\"asterisk\">*</span>&nbsp;State\n              </FormLabel>\n              <FormControl\n                as=\"select\"\n                type=\"text\"\n                id=\"state\"\n                value={address.state}\n                onChange={this.handleInput}\n                required>\n                <option key={-1} value={\"\"} />\n                {us_states.map((state, idx) => {\n                  return (\n                    <option key={idx} value={state}>\n                      {state}\n                    </option>\n                  );\n                })}\n              </FormControl>\n            </FormGroup>\n          </Col>\n          <Col md={3}>\n            <FormGroup>\n              <FormLabel>\n                <span className=\"asterisk\">*</span>&nbsp;Zip Code\n              </FormLabel>\n              <FormControl\n                type=\"text\"\n                id=\"postal_code\"\n                value={address.postal_code}\n                maxLength={10}\n                onChange={this.handleInput}\n                required\n              />\n            </FormGroup>\n          </Col>\n        </Row>\n      </React.Fragment>\n    );\n  }\n}\n","export const geocode = (options) => {\n  return new Promise((resolve, reject) => {\n    const geocoder = new google.maps.Geocoder();\n    geocoder.geocode(options, (results, status) => {\n      if (status === google.maps.GeocoderStatus.OK) {\n        resolve(results);\n      } else {\n        reject(results);\n      }\n    });\n  });\n};\n","import * as React from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport GoogleMapReact from \"google-map-react\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { AddressRecord } from \"app2/src/records/Address\";\n\ninterface GoogleMapState {\n  googleMapOptions: google.maps.MapOptions;\n  options: GoogleMapOptions;\n  address: AddressRecord;\n}\n\ninterface GoogleMapProps {\n  address: AddressRecord;\n  googleMapOptions?: google.maps.MapOptions;\n  options?: GoogleMapOptions;\n  mapChange?: (e) => void;\n}\n\ninterface GoogleMapOptions {\n  height: string;\n}\n\nexport class GoogleMap extends React.Component<GoogleMapProps, GoogleMapState> {\n  public defaultGoogleMapOptions: google.maps.MapOptions = {\n    mapTypeControl: true,\n    mapTypeId: google.maps.MapTypeId.SATELLITE,\n    streetViewControl: true,\n  };\n  public defaultMapOptions: GoogleMapOptions = {\n    height: \"350px\",\n  };\n\n  public constructor(props) {\n    super(props);\n\n    this.state = {\n      googleMapOptions: { ...this.defaultGoogleMapOptions, ...props.googleMapOptions },\n      options: { ...this.defaultMapOptions, ...props.options },\n      address: props.address,\n    };\n  }\n\n  public componentDidUpdate(prevProps) {\n    const { address } = this.state;\n    const { lat, lon } = this.props.address;\n    if (!(lat && lon)) {\n      return;\n    }\n    if (lat !== address.lat || lon !== address.lon) {\n      this.setState({\n        address: this.props.address,\n      });\n    }\n  }\n\n  public render() {\n    const { mapChange } = this.props;\n    const { googleMapOptions, options, address } = this.state;\n\n    return (\n      <Row>\n        <Col style={{ height: options.height }}>\n          {address.lat && address.lon ? (\n            <React.Fragment>\n              <GoogleMapReact\n                onChange={mapChange}\n                center={{\n                  lat: address.lat,\n                  lng: address.lon,\n                }}\n                defaultZoom={19}\n                options={googleMapOptions}\n              />\n              <FontAwesome name=\"map-marker\" className=\"map-overlay fa-3x\" title=\"Location\" size=\"lg\" />\n              <Row>\n                <Col className=\"col-md-12\">\n                  <p className=\"pull-right\">Click & drag the map to center the structure under the marker.</p>\n                </Col>\n              </Row>\n            </React.Fragment>\n          ) : (\n            <div className=\"form-section text-center\">\n              <h2>No valid address</h2>\n              <p>Enter a valid address to generate a map.</p>\n            </div>\n          )}\n        </Col>\n      </Row>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { Row, Col, Modal, Form, FormControl, FormGroup, FormLabel, Button } from \"react-bootstrap\";\nimport { AddressShow } from \"app2/src/components/Address/AddressShow\";\nimport { GoogleMap } from \"app2/src/components/Common/GoogleMap\";\nimport { AddressRecord } from \"app2/src/records/Address\";\nimport { FlashLevels } from \"app/src/Common/FlashService\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as reportActions from \"app2/src/reducers/report.actions\";\nimport * as config from \"react-global-configuration\";\nimport { fromJSON, ReportRecord } from \"app2/src/records/Report\";\nimport * as integrationsViewActions from \"app2/src/reducers/components/integrationsView.actions\";\nimport { is } from \"immutable\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { quickMeasureProductCodes } from \"app/src/Common/Constants\";\n\nconst mapStateToProps = (state: RootState, ownProps: QuickMeasureOrderProps) => {\n  return {\n    authorized: state.getIn([\"integrations\", \"quickMeasure\", \"authorized\"], false),\n    currentUser: denormalizedReduxUser(state),\n    openModal: state.getIn([\"components\", \"integrations\", \"showQuickMeasureModal\"]),\n    job: currentJob(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: QuickMeasureOrderProps) => {\n  return {\n    addFlashMessage: (level: FlashLevels, message: string) =>\n      dispatch(commonActions.Actions.flashAddAlert(level, message)),\n    submitReport: (jobId: number, report: ReportRecord) =>\n      dispatch(reportActions.AsyncActions.addJobReport(jobId, report)),\n    closeModal: () => dispatch(integrationsViewActions.Actions.closeQuickMeasureModal()),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface QuickMeasureOrderProps {\n  address: AddressRecord;\n  product_code: string;\n}\n\ninterface QuickMeasureOrderState {\n  address: AddressRecord;\n  loading: boolean;\n  product_code: string;\n  question: string;\n  instructions: string;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & QuickMeasureOrderProps;\n\nclass QuickMeasureOrder extends React.Component<Props, QuickMeasureOrderState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      address: null,\n      loading: false,\n      product_code: \"SF-QM-USA\",\n      question: \"\",\n      instructions: \"\",\n    };\n\n    this.request = this.request.bind(this);\n    this.update = this.update.bind(this);\n    this.mapChange = this.mapChange.bind(this);\n    this.close = this.close.bind(this);\n    this.handleProductCode = this.handleProductCode.bind(this);\n    this.handleStructures = this.handleStructures.bind(this);\n    this.handleInstructions = this.handleInstructions.bind(this);\n  }\n\n  public componentDidUpdate(prevProps) {\n    const { authorized, addFlashMessage, address, openModal } = this.props;\n    if (!openModal) {\n      return;\n    }\n\n    if (!is(address, prevProps.address)) {\n      if (authorized) {\n        this.update(address);\n      } else {\n        addFlashMessage(\n          FlashLevels.danger,\n          \"QuickMeasure is not authorized. Contact your Organization Administrator to enable QuickMeasure Measurements directly from \" +\n            config.get(\"APP_NAME\") +\n            \".\",\n        );\n        this.props.closeModal();\n      }\n    }\n  }\n\n  public handleProductCode(e: React.ChangeEvent<HTMLInputElement>): void {\n    const value = e.target.value;\n    this.setState({ product_code: value });\n  }\n\n  public handleStructures(e: React.ChangeEvent<HTMLInputElement>): void {\n    const { id } = e.target;\n    this.setState({ question: id });\n    switch (id) {\n      case \"primary_structure\":\n        this.setState({\n          instructions: \"Primary Structure Only - Please include only the primary structure in my report.\",\n        });\n        break;\n      case \"all_structures\":\n        this.setState({\n          instructions: \"All Structures on Parcel - Please include all structures on the property in my report.\",\n        });\n        break;\n      case \"all_except_primary_structure\":\n        this.setState({\n          instructions:\n            \"All Structures Except Primary Structure - Please include all structures except the primary structure in my report.\",\n        });\n        break;\n    }\n  }\n\n  public handleInstructions(e: React.ChangeEvent<HTMLInputElement>): void {\n    const value = e.target.value;\n    this.setState({ instructions: value });\n  }\n\n  public async request(e) {\n    const { currentUser, job } = this.props;\n    const { address, product_code, instructions } = this.state;\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.setState({\n      loading: true,\n    });\n    try {\n      await this.props.submitReport(\n        job.id,\n        fromJSON({\n          kind: \"roofing\",\n          provider: \"quick_measure\",\n          job_id: job.id,\n          user_id: currentUser.id,\n          order_data: { app_address: address, product_code, instructions },\n        }),\n      );\n      this.props.closeModal();\n    } catch (error) {\n      console.error(error);\n    }\n    this.setState({\n      loading: false,\n    });\n  }\n\n  public update(address: AddressRecord) {\n    this.setState({\n      address: address,\n      loading: false,\n    });\n  }\n\n  public mapChange(e) {\n    let { address } = this.state;\n    address = address.merge({\n      lat: e.center.lat,\n      lon: e.center.lng,\n    });\n    this.update(address);\n  }\n\n  public close() {\n    this.props.closeModal();\n  }\n\n  public render() {\n    const { openModal, authorized } = this.props;\n    const { address, loading, product_code, instructions } = this.state;\n    const address_loading = _.isNull(address) || _.isUndefined(address);\n    if (!authorized) {\n      return <span />;\n    }\n\n    return (\n      <Modal className=\"quick-measure-modal\" show={openModal} onHide={this.close} size=\"lg\" backdrop={\"static\"}>\n        <Spinner localProperty={loading} />\n        <Modal.Header closeButton>\n          <Modal.Title>\n            <h3>GAF QuickMeasure Request</h3>\n          </Modal.Title>\n        </Modal.Header>\n        <Form onSubmit={this.request}>\n          <Modal.Body>\n            <Row>\n              <Col sm={12}>\n                <FormGroup>\n                  <FormLabel>Product Type</FormLabel>\n                  <FormControl\n                    as=\"select\"\n                    type=\"text\"\n                    id=\"product_type\"\n                    value={product_code}\n                    onChange={this.handleProductCode}>\n                    {quickMeasureProductCodes.map(({ label, value, description }, index) => (\n                      <option key={index} value={value} title={description}>\n                        {label}\n                      </option>\n                    ))}\n                  </FormControl>\n                </FormGroup>\n              </Col>\n            </Row>\n            {address_loading ? (\n              \"Loading...\"\n            ) : (\n              <React.Fragment>\n                <AddressShow update={this.update} address={address} />\n                <GoogleMap address={address} googleMapOptions={{ tilt: 0 }} mapChange={this.mapChange} />\n              </React.Fragment>\n            )}\n            <Row className=\"mt-4\">\n              <Col>\n                <h4 className=\"mb-1\">Structures</h4>\n                <p>What structures would you like included in your reports?</p>\n                <Form.Check\n                  className=\"mt-2\"\n                  label=\"Primary Structure Only\"\n                  type=\"radio\"\n                  checked={this.state.question === \"primary_structure\"}\n                  onChange={this.handleStructures}\n                  id=\"primary_structure\"\n                />\n                <Form.Check\n                  className=\"mt-2\"\n                  label=\"All Structures on Parcel\"\n                  type=\"radio\"\n                  checked={this.state.question === \"all_structures\"}\n                  onChange={this.handleStructures}\n                  id=\"all_structures\"\n                />\n                <Form.Check\n                  className=\"mt-2\"\n                  label=\"All Structures Except Primary Structure\"\n                  type=\"radio\"\n                  checked={this.state.question === \"all_except_primary_structure\"}\n                  onChange={this.handleStructures}\n                  id=\"all_except_primary_structure\"\n                />\n              </Col>\n            </Row>\n            <Row className=\"mt-2\">\n              <Col>\n                <FormGroup>\n                  <FormLabel htmlFor=\"instructions\">Instructions</FormLabel>\n                  <FormControl\n                    id=\"instructions\"\n                    type=\"text\"\n                    as=\"textarea\"\n                    value={instructions}\n                    onChange={this.handleInstructions}\n                  />\n                </FormGroup>\n              </Col>\n            </Row>\n          </Modal.Body>\n          <Modal.Footer>\n            <Button variant=\"default\" type=\"submit\">\n              Request\n            </Button>\n            <Button type=\"button\" variant=\"cancel\" onClick={this.close}>\n              Cancel\n            </Button>\n          </Modal.Footer>\n        </Form>\n      </Modal>\n    );\n  }\n}\n\nexport default connector(QuickMeasureOrder);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { Row, Col, Modal, Form, FormControl, FormGroup, FormLabel, Button } from \"react-bootstrap\";\nimport { AddressShow } from \"app2/src/components/Address/AddressShow\";\nimport { GoogleMap } from \"app2/src/components/Common/GoogleMap\";\nimport { AddressRecord } from \"app2/src/records/Address\";\nimport { FlashLevels } from \"app/src/Common/FlashService\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as reportActions from \"app2/src/reducers/report.actions\";\nimport * as config from \"react-global-configuration\";\nimport { UserRecord } from \"app2/src/records/UserRecord\";\nimport { fromJSON, ReportRecord } from \"app2/src/records/Report\";\nimport * as integrationsViewActions from \"app2/src/reducers/components/integrationsView.actions\";\nimport { is } from \"immutable\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { toOneLiner } from \"app2/src/records/Address\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: RoofScopeReportModalProps) => {\n  return {\n    authorized: state.getIn([\"integrations\", \"roofScope\", \"authorized\"]),\n    currentUser: denormalizedReduxUser(state),\n    openModal: state.getIn([\"components\", \"integrations\", \"showRoofScopeModal\"]),\n    job: currentJob(state),\n  };\n};\n\nconst mapDispatchToProps = (\n  dispatch: ThunkDispatch<RootState, {}, RootActions>,\n  ownProps: RoofScopeReportModalProps,\n) => {\n  return {\n    addFlashMessage: (level: FlashLevels, message: string) =>\n      dispatch(commonActions.Actions.flashAddAlert(level, message)),\n    submitReport: (jobId: number, report: ReportRecord) =>\n      dispatch(reportActions.AsyncActions.addJobReport(jobId, report)),\n    closeModal: () => dispatch(integrationsViewActions.Actions.closeRoofScopeModal()),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface RoofScopeReportModalProps {\n  address: AddressRecord;\n}\n\ninterface RoofScopeReportModalState {\n  address: AddressRecord;\n  loading: boolean;\n  scopeTypeId: string;\n  propertyType: string;\n  size: string;\n  numberOfStructures: string;\n  disableSubmit: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & RoofScopeReportModalProps;\n\nclass RoofScopeReportModal extends React.Component<Props, RoofScopeReportModalState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      address: props.address,\n      loading: false,\n      scopeTypeId: \"\",\n      propertyType: \"\",\n      size: \"\",\n      numberOfStructures: \"\",\n      disableSubmit: true,\n    };\n\n    this.request = this.request.bind(this);\n    this.update = this.update.bind(this);\n    this.updateAddress = this.updateAddress.bind(this);\n    this.mapChange = this.mapChange.bind(this);\n    this.close = this.close.bind(this);\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const { authorized, addFlashMessage, address, openModal } = this.props;\n    const { address: stateAddress, scopeTypeId, propertyType, size, numberOfStructures } = this.state;\n    if (!openModal) {\n      return;\n    }\n\n    let localAddress: any = stateAddress;\n    let localDisableSubmit = true;\n\n    if (!is(address, prevProps.address)) {\n      if (authorized) {\n        localAddress = address;\n      } else {\n        addFlashMessage(\n          FlashLevels.danger,\n          \"Scope Technologies is not authorized. Contact your Organization Administrator to enable Scope Technologies directly from \" +\n            config.get(\"APP_NAME\") +\n            \".\",\n        );\n        this.props.closeModal();\n      }\n    }\n\n    if (scopeTypeId !== \"\" && propertyType !== \"\" && parseInt(numberOfStructures) > 0 && size !== \"\") {\n      localDisableSubmit = false;\n    }\n\n    if (!is(localAddress, stateAddress) || (localDisableSubmit !== true && prevState.disableSubmit === true)) {\n      this.setState({\n        address: localAddress,\n        disableSubmit: localDisableSubmit,\n      });\n    }\n  }\n\n  public async request(e) {\n    e.preventDefault();\n    e.stopPropagation();\n    const { currentUser, addFlashMessage, job } = this.props;\n    const { address, scopeTypeId, propertyType, size, numberOfStructures } = this.state;\n\n    this.setState({\n      loading: true,\n    });\n    try {\n      await this.props.submitReport(\n        job.id,\n        fromJSON({\n          kind: \"roofing\",\n          provider: \"roof_scope\",\n          job_id: job.id,\n          user_id: currentUser.id,\n          order_data: {\n            address: toOneLiner(address),\n            lat: address.lat.toString(),\n            lng: address.lon.toString(),\n            scopeTypeId: parseInt(scopeTypeId),\n            propertyType,\n            size,\n            numberOfStructures: parseInt(numberOfStructures),\n          },\n        }),\n      );\n      this.props.closeModal();\n    } catch (errors) {\n      console.error(errors);\n    }\n    this.setState({\n      loading: false,\n    });\n  }\n\n  public updateAddress(address: AddressRecord) {\n    this.setState({\n      address,\n      loading: false,\n    });\n  }\n\n  public update(formData: RoofScopeReportModalState) {\n    this.setState({\n      ...formData,\n      loading: false,\n    });\n  }\n\n  public mapChange(e) {\n    let { address } = this.state;\n    address = address.merge({\n      lat: e.center.lat,\n      lon: e.center.lng,\n    });\n    this.updateAddress(address);\n  }\n\n  public close() {\n    const { address } = this.props;\n    this.setState({\n      address,\n      loading: false,\n      scopeTypeId: \"\",\n      propertyType: \"\",\n      size: \"\",\n      numberOfStructures: \"\",\n      disableSubmit: true,\n    });\n    this.props.closeModal();\n  }\n\n  public render() {\n    const { openModal, authorized } = this.props;\n    const { address, loading, scopeTypeId, propertyType, size, numberOfStructures, disableSubmit } = this.state;\n    const address_loading = _.isNull(address) || _.isUndefined(address);\n    if (!authorized) {\n      return <span />;\n    }\n\n    return (\n      <Modal show={openModal} onHide={this.close} size=\"lg\" backdrop={\"static\"}>\n        <Spinner localProperty={loading} />\n        <Modal.Header closeButton>\n          <Modal.Title>\n            <h3>Scope Technologies Request</h3>\n          </Modal.Title>\n        </Modal.Header>\n        <Form onSubmit={this.request}>\n          <Modal.Body>\n            <Row>\n              <Col sm={12} md={6}>\n                <FormGroup>\n                  <FormLabel>\n                    <span className=\"asterisk\">*</span>&nbsp;Scope Type\n                  </FormLabel>\n                  <FormControl\n                    as=\"select\"\n                    type=\"text\"\n                    id=\"scopeTypeId\"\n                    data-testid=\"scopeTypeId\"\n                    value={scopeTypeId}\n                    onChange={(e: any) =>\n                      this.update({ [e.target.id]: e.target.value } as any as RoofScopeReportModalState)\n                    }>\n                    <option value=\"\">--Select--</option>\n                    <option value=\"1\">RoofScope</option>\n                    <option value=\"4\">GutterScope</option>\n                    <option value=\"6\">SidingScope</option>\n                    <option value=\"7\">InsulationScope</option>\n                    <option value=\"10\">ConcreteScope</option>\n                    <option value=\"11\">PaintScope</option>\n                    <option value=\"12\">RoofScopeX</option>\n                  </FormControl>\n                </FormGroup>\n              </Col>\n              <Col sm={12} md={6}>\n                <FormGroup>\n                  <FormLabel>\n                    <span className=\"asterisk\">*</span>&nbsp;Property Type\n                  </FormLabel>\n                  <FormControl\n                    as=\"select\"\n                    type=\"text\"\n                    id=\"propertyType\"\n                    data-testid=\"propertyType\"\n                    value={propertyType}\n                    onChange={(e: any) =>\n                      this.update({ [e.target.id]: e.target.value } as any as RoofScopeReportModalState)\n                    }>\n                    <option value=\"\">--Select--</option>\n                    <option value=\"Residential\">Residential</option>\n                    <option value=\"Commercial\">Commercial</option>\n                  </FormControl>\n                </FormGroup>\n              </Col>\n            </Row>\n            <Row>\n              <Col sm={12} md={6}>\n                <FormGroup>\n                  <FormLabel>\n                    <span className=\"asterisk\">*</span>&nbsp;Size\n                  </FormLabel>\n                  <FormControl\n                    as=\"select\"\n                    type=\"text\"\n                    id=\"size\"\n                    data-testid=\"size\"\n                    value={size}\n                    onChange={(e: any) =>\n                      this.update({ [e.target.id]: e.target.value } as any as RoofScopeReportModalState)\n                    }>\n                    <option value=\"\">--Select--</option>\n                    <option value=\"Small\">Small</option>\n                    <option value=\"Large\">Large</option>\n                  </FormControl>\n                </FormGroup>\n              </Col>\n              <Col sm={12} md={6}>\n                <FormGroup>\n                  <FormLabel>\n                    <span className=\"asterisk\">*</span>&nbsp;Number of Structures\n                  </FormLabel>\n                  <FormControl\n                    type=\"number\"\n                    id=\"numberOfStructures\"\n                    data-testid=\"numberOfStructures\"\n                    value={numberOfStructures}\n                    onChange={(e: any) =>\n                      this.update({ [e.target.id]: e.target.value } as any as RoofScopeReportModalState)\n                    }></FormControl>\n                </FormGroup>\n              </Col>\n            </Row>\n            {address_loading ? (\n              \"Loading...\"\n            ) : (\n              <React.Fragment>\n                <AddressShow update={this.updateAddress} address={address} />\n                <GoogleMap address={address} googleMapOptions={{ tilt: 0 }} mapChange={this.mapChange} />\n              </React.Fragment>\n            )}\n          </Modal.Body>\n          <Modal.Footer>\n            <Button variant=\"default\" type=\"submit\" disabled={disableSubmit}>\n              Request\n            </Button>\n            <Button variant=\"cancel\" type=\"button\" onClick={this.close}>\n              Cancel\n            </Button>\n          </Modal.Footer>\n        </Form>\n      </Modal>\n    );\n  }\n}\n\nexport default connector(RoofScopeReportModal);\n","import { RootState } from \"app2/src/reducers\";\nimport * as React from \"react\";\nimport { connectFC } from \"app2/src/connect\";\nimport { Row, Col, Modal, Form, FormControl, FormGroup, FormLabel } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Actions } from \"app2/src/reducers/components/integrationsView.actions\";\nimport { AddressShow } from \"../../Address/AddressShow\";\nimport { AddressRecord } from \"app2/src/records/Address\";\nimport * as reportActions from \"app2/src/reducers/report.actions\";\nimport { fromJSON as reportFromJson } from \"app2/src/records/Report\";\nimport { currentUser } from \"app2/src/selectors/user.selectors\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { firstName as firstNameParser, lastName as lastNameParser } from \"app2/src/services/string.service\";\nimport { fromJSON } from \"app2/src/records/PhoneNumber\";\nimport { useTracking } from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { plnarPricing, plnarPricingLoading } from \"app2/src/selectors/report.selectors\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport ButtonFooter from \"../../Common/ButtonFooter\";\nimport { ConfirmDialog } from \"../../Common/ConfirmDialog\";\nimport SpinnerComponent from \"../../SpinnerComponent\";\n\nexport interface PlnarReportModalProps {\n  address: AddressRecord;\n  jobId: number;\n}\n\nconst PlnarReportModal: React.FC<PlnarReportModalProps> = ({ address }) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"PlnarReportModal\" }, { dispatch: Dispatch.dispatch });\n\n  // Selectors\n  const openModal = useSelector((state: RootState) => state.getIn([\"components\", \"integrations\", \"showPlnarModal\"]));\n  const user = useSelector(currentUser);\n  const job: JobRecord = useSelector(currentJob);\n  const pricing = useSelector(plnarPricing);\n  const loading = useSelector(plnarPricingLoading);\n  const pretty: IPretty = StoreRegistry.get(\"Pretty\");\n\n  // Local State\n  const [selectedJobType, setSelectedJobType] = React.useState(null);\n  const [projectName, setProjectName] = React.useState(\"\");\n  const [firstName, setFirstName] = React.useState(\"\");\n  const [lastName, setLastName] = React.useState(\"\");\n  const [email, setEmail] = React.useState(\"\");\n  const [mobileNumber, setMobileNumber] = React.useState(\"\");\n  const [referenceNumber, setReferenceNumber] = React.useState(\"\");\n  const [formAddress, setFormAddress] = React.useState(address);\n  const formRef = React.useRef<HTMLFormElement>(null);\n  const [showConfirm, setShowConfirm] = React.useState(0);\n\n  // Life Cycle\n  React.useEffect(() => {\n    if (openModal) {\n      dispatch(reportActions.AsyncActions.getPlnarPricing());\n    }\n  }, [openModal]);\n\n  React.useEffect(() => {\n    setFormAddress(address);\n  }, [address]);\n\n  React.useEffect(() => {\n    // Initialize selectedJobType once pricing is loaded\n    if (pricing) {\n      setSelectedJobType(pricing.get(0).get(\"type\"));\n    }\n  }, [pricing]);\n\n  React.useEffect(() => {\n    if (job) {\n      setFirstName(firstNameParser(job.get(\"customer_name\")));\n      setLastName(lastNameParser(job.get(\"customer_name\")));\n      setEmail(job.get(\"email\", \"\"));\n      setMobileNumber(\n        job\n          .get(\"phone_numbers\")\n          .first(fromJSON({ number: \"\" }))\n          .get(\"number\", \"\"),\n      );\n    }\n  }, [job]);\n\n  // Methods\n  const close = () => {\n    trackEvent({ action: \"close plnar modal\" });\n    dispatch(Actions.closePlnarModal());\n  };\n\n  const request = async () => {\n    trackEvent({ action: \"request plnar report\" });\n    try {\n      dispatch(\n        reportActions.AsyncActions.addJobReport(\n          job.get(\"id\"),\n          reportFromJson({\n            kind: \"interior\",\n            provider: \"plnar\",\n            job_id: job.get(\"id\"),\n            user_id: user.get(\"id\"),\n            order_data: {\n              name: projectName,\n              type: \"PLNAR Snap\",\n              jobType: selectedJobType,\n              address: {\n                address1: formAddress.get(\"line_1\"),\n                address2: formAddress.get(\"line_2\", \"\"),\n                city: formAddress.get(\"city\"),\n                stateProvince: formAddress.get(\"state\"),\n                postalCode: formAddress.get(\"postal_code\"),\n                country: \"USA\",\n              },\n              user: {\n                email: user.get(\"email\"),\n                firstName: user.get(\"first_name\"),\n                lastName: user.get(\"last_name\"),\n              },\n              reporter: {\n                firstName,\n                lastName,\n                mobileNumber,\n                email,\n              },\n              referenceNumber,\n              notifications: true,\n              communication: {\n                personalization: true,\n                orgBranding: true,\n              },\n            },\n          }),\n        ),\n      );\n    } catch (errors) {\n      console.error(errors);\n    }\n    dispatch(Actions.closePlnarModal());\n  };\n\n  return (\n    <>\n      <SpinnerComponent localProperty={loading} />\n      <Modal show={openModal} onHide={close} backdrop={\"static\"} size=\"lg\" className=\"import-modal\">\n        <Modal.Header closeButton>\n          <Modal.Title>\n            <h3>SmartInteriors&trade; Room Measurement Request</h3>\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <Form ref={formRef}>\n            <Row>\n              <Col sm={12}>\n                <Row>\n                  <Col sm={12} md={6}>\n                    <FormGroup>\n                      <FormLabel>\n                        <span className=\"asterisk\">*</span>&nbsp;Project Name\n                      </FormLabel>\n                      <FormControl\n                        type=\"text\"\n                        id=\"project_name\"\n                        value={projectName}\n                        onChange={(e) => setProjectName(e.target.value)}\n                        required\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col sm={12} md={6}>\n                    <FormGroup>\n                      <FormLabel htmlFor=\"job_type\">\n                        <span className=\"asterisk\">*</span>&nbsp;Report Type\n                      </FormLabel>\n                      <FormControl\n                        as=\"select\"\n                        type=\"text\"\n                        id=\"job_type\"\n                        value={selectedJobType}\n                        onChange={(evt) => setSelectedJobType(evt.currentTarget.value)}\n                        required>\n                        {pricing?.toJS()?.map(({ type, display }) => {\n                          return (\n                            <option key={type} value={type}>\n                              {pretty.name[type]} ({display})\n                            </option>\n                          );\n                        })}\n                      </FormControl>\n                    </FormGroup>\n                  </Col>\n                </Row>\n                <h5 className=\"font-weight-bold\">Customer Information</h5>\n                <Row>\n                  <Col sm={12} md={6}>\n                    <FormGroup>\n                      <FormLabel>\n                        <span className=\"asterisk\">*</span>&nbsp;First Name\n                      </FormLabel>\n                      <FormControl\n                        type=\"text\"\n                        id=\"first_name\"\n                        value={firstName}\n                        onChange={(e) => setFirstName(e.target.value)}\n                        required\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col sm={12} md={6}>\n                    <FormGroup>\n                      <FormLabel>\n                        <span className=\"asterisk\">*</span>&nbsp;Last Name\n                      </FormLabel>\n                      <FormControl\n                        type=\"text\"\n                        id=\"last_name\"\n                        value={lastName}\n                        onChange={(e) => setLastName(e.target.value)}\n                        required\n                      />\n                    </FormGroup>\n                  </Col>\n                </Row>\n                <Row>\n                  <Col sm={12} md={6}>\n                    <FormGroup>\n                      <FormLabel>\n                        <span className=\"asterisk\">*</span>&nbsp;Email\n                      </FormLabel>\n                      <FormControl\n                        type=\"text\"\n                        id=\"email\"\n                        value={email}\n                        onChange={(e) => setEmail(e.target.value)}\n                        required\n                      />\n                    </FormGroup>\n                  </Col>\n                  <Col sm={12} md={6}>\n                    <FormGroup>\n                      <FormLabel>\n                        <span className=\"asterisk\">*</span>&nbsp;Mobile Number\n                      </FormLabel>\n                      <FormControl\n                        type=\"text\"\n                        id=\"mobile_number\"\n                        value={mobileNumber}\n                        onChange={(e) => setMobileNumber(e.target.value)}\n                        required\n                      />\n                    </FormGroup>\n                  </Col>\n                </Row>\n                <Row>\n                  <Col sm={12} md={6}>\n                    <FormGroup>\n                      <FormLabel>Reference Number</FormLabel>\n                      <FormControl\n                        type=\"text\"\n                        id=\"reference_number\"\n                        value={referenceNumber}\n                        onChange={(e) => setReferenceNumber(e.target.value)}\n                      />\n                    </FormGroup>\n                  </Col>\n                </Row>\n                <h5 className=\"font-weight-bold\">Address Information</h5>\n                {formAddress && <AddressShow update={(address) => setFormAddress(address)} address={formAddress} />}\n              </Col>\n            </Row>\n            <Row>\n              <Col>\n                <div>This will be billed based upon your arrangement with One Click Contractor.</div>\n              </Col>\n            </Row>\n          </Form>\n        </Modal.Body>\n        <ConfirmDialog\n          title=\"This will be billed based upon your arrangement with One Click Contractor. Are you sure you wish to continue?\"\n          onConfirm={request}\n          openDialog={showConfirm}\n        />\n        <Modal.Footer>\n          <ButtonFooter\n            cancel={close}\n            update={() => {\n              if (formRef.current.reportValidity()) {\n                setShowConfirm(showConfirm + 1);\n              }\n            }}\n            saveText=\"Request\"\n          />\n        </Modal.Footer>\n      </Modal>\n    </>\n  );\n};\n\nexport default connectFC(PlnarReportModal);\n","import { Visualizer, IMeasurementMetadata } from \"rsf-visualizer\";\nimport { Annotator, IAnnotation as IDrawingAnnotation } from \"rsf-visualizer\";\nimport { WindowScaler, WindowScalerTool } from \"rsf-visualizer\";\nimport * as Konva from \"konva\";\nimport { TextCallout } from \"rsf-visualizer\";\nimport { Annotation, IAnnotation } from \"../Models/Annotation\";\nimport { IElevation } from \"../Models/Elevation\";\n\nexport interface UpdatedParams {\n  annotations: IAnnotation[];\n}\n\nexport interface IAnnotationMeasuredEvent {\n  annotation: IAnnotation;\n  width: number;\n  height: number;\n}\n\nlet currentId = 0;\n\nclass DrawingComponentCtrl implements ng.IComponentController {\n  public zoomLevel = 50;\n  public editable = true;\n  public measuring = true;\n  public imageUrl: string;\n  public elevation: IElevation;\n  public selectedAnnotations: IAnnotation[];\n  public prefix: string;\n  public updated: (params: UpdatedParams) => void;\n  public id: number;\n  public canvasId: string;\n  public lockZoom = false;\n  public showingGrid = true;\n  public currentTool = 0;\n\n  public annotationAdded: () => string;\n  protected visualizer: Visualizer;\n  protected annotator: Annotator;\n  protected measurer: WindowScaler;\n\n  private _element: any;\n  private _annotationsGuids: string[];\n  private _abbr: string;\n\n  public static $inject = [\"$timeout\", \"$scope\", \"$window\"];\n  constructor(\n    protected $timeout: ng.ITimeoutService,\n    protected $scope: ng.IScope,\n    protected $window: ng.IWindowService,\n  ) {\n    this.id = currentId++;\n    this.canvasId = `rsf-drawing-canvas${this.id}`;\n\n    this.$scope.$on(\"rsf:drawing:render\", (event, args: any) => {\n      if (this.elevation && this.elevation.id === args.id) {\n        this._render();\n      }\n    });\n\n    this.$scope.$on(\"rsf:measurements:save\", (e: ng.IAngularEvent, args: { elevation: IElevation }) => {\n      if (this.elevation && this.elevation.id === args.elevation.id) {\n        args.elevation.drawingMetadata = this.measurer.save() as any;\n      }\n    });\n  }\n\n  public $onInit() {\n    this._abbr = this.elevation.abbr;\n\n    if (this.editable === null || this.editable === undefined) {\n      this.editable = true;\n    }\n\n    if (this.measuring === null || this.measuring === undefined) {\n      this.measuring = false;\n    }\n\n    this.$timeout(() => {\n      this.visualizer = new Visualizer(this.canvasId, { width: 800, height: 800 });\n\n      // Not 100% why this is required\n      this.elevation.annotations = this.elevation.annotations.slice(0);\n\n      if (!this.measuring) {\n        this._setupAnnotator();\n      }\n\n      if (this.measuring) {\n        this._setupMeasurer();\n      }\n\n      this._element = (angular.element(`#${this.canvasId}`) as any).closest(\"rsf-drawing\");\n      this._resize();\n\n      angular.element(this.$window).bind(\"resize\", () => {\n        this.visualizer.setSize(this._element.width(), this._element.height());\n      });\n\n      /**\n       * Highlight potential initial selection\n       */\n      this.$timeout(() => {\n        this.$onChanges();\n      });\n    });\n  }\n\n  public isCurrentTool(tool: number) {\n    if (this.currentTool === 0) {\n      return false;\n    }\n    return this.currentTool === tool;\n  }\n\n  public $doCheck() {\n    this._checkGuids();\n    this._checkAbbr();\n  }\n\n  public $onChanges() {\n    if (this.annotator && this.selectedAnnotations) {\n      this.annotator.highlightAnnotations(this.selectedAnnotations as any as IDrawingAnnotation[], \"#a9de94\");\n    }\n  }\n\n  public zoomIn() {\n    this.zoomLevel += 0.25;\n    this._zoom();\n  }\n\n  public zoomOut() {\n    this.zoomLevel -= 0.25;\n    this._zoom();\n  }\n\n  public zoomLock() {\n    this.lockZoom = !this.lockZoom;\n    if (this.lockZoom) {\n      this.zoomLevel = this.measurer.zoom;\n    } else {\n      this.zoomLevel = this.measurer.imageZoom;\n    }\n  }\n\n  public zoomChanged() {\n    this._zoom();\n  }\n\n  public measureLines() {\n    this._setTool(WindowScalerTool.line);\n  }\n\n  public measureWindows() {\n    this._setTool(WindowScalerTool.window);\n  }\n\n  public reset() {\n    (this.measurer as any).reset();\n    this.lockZoom = false;\n    this.zoomLevel = this.measurer.imageZoom;\n  }\n\n  public toggleGrid() {\n    this._setTool(WindowScalerTool.scaling);\n  }\n\n  public measureDaylight() {\n    this._setTool(WindowScalerTool.daylight);\n  }\n\n  public measurePolygon() {\n    this._setTool(WindowScalerTool.polygon);\n  }\n\n  private _render() {\n    this.annotator.highlightAnnotations([], \"#a9de94\");\n    this.visualizer.setSize(1000, 1000);\n    this.visualizer.renderAll();\n    this.annotator.layer.batchDraw();\n\n    const image = this.visualizer.stage.toDataURL({ mimeType: \"png\", quality: 1 });\n\n    this.visualizer.setSize(this._element.width(), this._element.height());\n    this.visualizer.renderAll();\n    this.annotator.layer.batchDraw();\n    this.annotator.highlightAnnotations(this.selectedAnnotations as any as IDrawingAnnotation[], \"#a9de94\");\n\n    this.$scope.$emit(\"rsf:drawing:rendered\", { id: this.elevation.id, dataUrl: image });\n  }\n\n  private _fireUpdate() {\n    if (this.updated) {\n      this.updated({ annotations: this.elevation.annotations });\n    }\n  }\n\n  private _saveGuids() {\n    this._annotationsGuids = _.chain(this.elevation.annotations).pluck(\"guid\").sort().value();\n  }\n\n  private _checkGuids() {\n    if (!this._annotationsGuids) {\n      return;\n    }\n\n    const currentGuids = _.chain(this.elevation.annotations).pluck(\"guid\").sort().value();\n\n    const toRemove = _.difference(this._annotationsGuids, currentGuids);\n\n    if (toRemove.length <= 0) {\n      return;\n    }\n\n    _.each(toRemove, (guid: string) => {\n      const ann = _.find(this.annotator.annotations, (annotation: TextCallout) => {\n        return guid === annotation.guid;\n      });\n\n      if (ann) {\n        this.annotator.removeAnnotation(ann);\n      }\n    });\n\n    _.each(this.elevation.annotations, (ann: IAnnotation, idx: number) => {\n      ann.id = idx + 1;\n    });\n\n    this._updateText();\n\n    this.visualizer.renderAll();\n\n    this._saveGuids();\n  }\n\n  private _checkAbbr() {\n    if (this._abbr === this.elevation.abbr) {\n      return;\n    }\n    this._abbr = this.elevation.abbr;\n\n    this._updateText();\n\n    this.visualizer.renderAll();\n  }\n\n  private _updateText() {\n    this.elevation.annotations.forEach((annotation: IAnnotation) => {\n      this.annotator.updateAnnotation(annotation.guid, annotation.text);\n    });\n  }\n\n  private _setupAnnotator() {\n    this.annotator = new Annotator(\n      (a: TextCallout) => {\n        const annotation = new Annotation(this.elevation.annotations.length + 1, this.elevation);\n        const position = this.visualizer.getScaledLocation(a);\n        annotation.x = position.x;\n        annotation.y = position.y;\n        annotation.guid = a.guid;\n\n        this.elevation.annotations.push(annotation);\n\n        a.setText(annotation.text);\n        this._checkGuids();\n        this._saveGuids();\n        this._fireUpdate();\n        return a;\n      },\n      (a: TextCallout) => {\n        const ann = _.find(this.elevation.annotations, (annotation: IAnnotation) => {\n          return a.guid === annotation.guid;\n        });\n\n        if (!ann) {\n          return;\n        }\n\n        const position = this.visualizer.getScaledLocation(a);\n        ann.x = position.x;\n        ann.y = position.y;\n\n        this._fireUpdate();\n      },\n    );\n\n    this.visualizer.setTool(this.annotator);\n\n    this.visualizer.addBackgroundImage(this.elevation.src_image.file.url + \"?cb=1\", () => {\n      this.annotator.loadAnnotations(this.elevation.annotations as any as IDrawingAnnotation[]);\n\n      if (!this.editable) {\n        this.annotator.disable();\n      }\n\n      this.annotator.layer.batchDraw();\n      this._saveGuids();\n      this._resize();\n    });\n  }\n\n  private _setupMeasurer() {\n    this.measurer = new WindowScaler();\n    this.visualizer.setTool(this.measurer);\n    this.measurer.addImage(\n      this.elevation.src_image.file.url + \"?cb=1\",\n      (img: Konva.Image) => {\n        this.zoomLevel = this.measurer.imageZoom;\n        this.$scope.$digest();\n\n        this.measurer.loadAnnotations(this.elevation.annotations as any as IDrawingAnnotation[]);\n        this._resize();\n\n        if (this.measurer.all.length > 0) {\n          this.zoomLock();\n        }\n      },\n      this.elevation.drawingMetadata as any,\n    );\n\n    this.measurer.onWindowIntersection = (guid: string, width: number, height: number) => {\n      const window = _.find(this.elevation.annotations, (a: IAnnotation) => a.guid === guid);\n      if (window) {\n        this.$scope.$emit(\"rsf:drawing:setmeasurements\", { annotation: window, width: width, height: height });\n      }\n    };\n\n    this.measurer.onMeasurementChange = (shape: IMeasurementMetadata) => {\n      this.$scope.$emit(\"rsf:drawing:updateshape\", { shape: shape });\n    };\n  }\n\n  private _zoom() {\n    if (this.lockZoom) {\n      this.measurer.setZoom(this.zoomLevel);\n    } else {\n      this.measurer.setImageZoom(this.zoomLevel);\n    }\n    this.visualizer.renderAll();\n  }\n\n  private _setTool(tool: WindowScalerTool) {\n    if (this.currentTool === tool) {\n      this.currentTool = 0;\n    } else {\n      this.currentTool = tool;\n    }\n    this.measurer.setTool(tool);\n    this.showingGrid = !!this.measurer.grid;\n  }\n\n  private _resize() {\n    this.visualizer.setSize(this._element.width(), this._element.height());\n  }\n}\n\nexport class DrawingComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/Drawing/drawing_component.html\";\n  public bindings: any = {\n    imageUrl: \"<\",\n    elevation: \"<\",\n    selectedAnnotations: \"<\",\n    updated: \"&\",\n    editable: \"<\",\n    measuring: \"<\",\n  };\n\n  constructor() {\n    this.controller = DrawingComponentCtrl;\n  }\n}\n","import { IToolInfo } from \"../ToolInfoService\";\nimport { IJob } from \"../../Models/Job\";\nimport { IBaseConfig } from \"../IBaseConfig\";\n\nclass ToolDisplayCtrl {\n  public toolConfig: any;\n  public job: IJob;\n  public navDisplay: boolean;\n  public key: string;\n  public static $inject;\n\n  constructor(\n    public ToolInfo: IToolInfo,\n    public BaseConfig: IBaseConfig,\n  ) {}\n\n  public $onChanges() {\n    if (this.job && this.key) {\n      this.toolConfig = this.ToolInfo.tools(this.key);\n    }\n  }\n}\n\nexport class ToolDisplayComponent {\n  public controller: any;\n  public bindings: any = {\n    key: \"<\",\n    job: \"<\",\n    navDisplay: \"<\",\n  };\n\n  public templateUrl = \"src/Common/Components/tool_display.html\";\n\n  constructor() {\n    this.controller = ToolDisplayCtrl;\n    this.controller.$inject = [\"ToolInfo\", \"BaseConfig\"];\n  }\n}\n","import * as moment from \"moment\";\n\nclass RefreshButtonController implements ng.IComponentController {\n  [s: string]: any;\n  public refresh: () => ng.IPromise<boolean>;\n  public trigger: any;\n\n  public countdown: number = null;\n  public defaultTimer = 10;\n  public currentTimer;\n  public defaultTimerPeriod = 5;\n\n  protected refreshing: moment.Moment;\n\n  private _toggleState: any;\n\n  public static $inject = [\"$timeout\"];\n  constructor(protected $timeout: ng.ITimeoutService) {}\n\n  public $onInit() {\n    this._toggleState = this.trigger;\n  }\n\n  public $onChanges() {\n    if (this._toggleState !== undefined && this._toggleState !== this.trigger) {\n      this.startRefreshing();\n      this._toggleState = this.trigger;\n    }\n  }\n\n  public $doCheck(): void {}\n\n  public $onDestroy(): void {}\n\n  public $postLink(): void {}\n\n  public startRefreshing() {\n    if (!this.refreshing) {\n      this.refreshing = moment();\n\n      this.refresh().then((extend: boolean) => {\n        if (this.refreshing) {\n          if (extend) this.refreshing = moment();\n        }\n\n        this.countdown = this.defaultTimer;\n        this.currentTimer = this.$timeout(() => this.counter(), 1000);\n      });\n    } else {\n      this.countdown = this.defaultTimer;\n      this.currentTimer = this.$timeout(() => this.counter(), 1000);\n    }\n  }\n\n  public stopRefreshing() {\n    if (this.currentTimer) {\n      this.$timeout.cancel(this.currentTimer);\n    }\n\n    this.countdown = null;\n    this.refreshing = null;\n  }\n\n  private counter() {\n    this.countdown--;\n\n    if (this.countdown <= 0) {\n      this.refresh().then(() => {\n        if (this.refreshing.clone().add(this.defaultTimerPeriod, \"minutes\").isAfter(moment())) {\n          this.startRefreshing();\n        } else {\n          this.countdown = null;\n          this.refreshing = null;\n        }\n      });\n    } else {\n      this.currentTimer = this.$timeout(() => this.counter(), 1000);\n    }\n  }\n}\n\nexport class RefreshButtonComponent implements ng.IComponentOptions {\n  public controller = RefreshButtonController;\n  public templateUrl = \"src/Common/Components/refresh_button.html\";\n  public bindings: any = {\n    refresh: \"&\",\n    trigger: \"<\",\n  };\n}\n","export class TosHttpInterceptor implements ng.IHttpInterceptor {\n  constructor(\n    private $q: ng.IQService,\n    private $injector: ng.auto.IInjectorService,\n  ) {}\n\n  public responseError = (rejection: ng.IHttpPromiseCallbackArg<any>): ng.IPromise<any> => {\n    if (rejection.status === 454) {\n      const $state = this.$injector.get(\"$state\") as ng.ui.IStateService;\n      $state.go(\"root.tos\");\n    }\n    return this.$q.reject(rejection);\n  };\n\n  public static factory($q: ng.IQService, $injector: ng.auto.IInjectorService): TosHttpInterceptor {\n    return new TosHttpInterceptor($q, $injector);\n  }\n}\n\nTosHttpInterceptor.factory.$inject = [\"$q\", \"$injector\"];\n","import * as ng from \"angular\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\n\nclass GmapsAutocompleteCtrl implements ng.IComponentController {\n  [s: string]: any;\n  public placeChanged: (params: any) => void;\n  public address: string;\n  public focus: number;\n  public input: any;\n  public autocomplete: any;\n\n  public static $inject = [\"$scope\", \"BaseConfig\"];\n\n  constructor(\n    public $scope: ng.IScope,\n    public BaseConfig: IBaseConfig,\n  ) {\n    this.input = document.getElementById(\"ac-input\");\n    this.autocomplete = new google.maps.places.Autocomplete(this.input);\n\n    this.autocomplete.setComponentRestrictions({ country: this.BaseConfig.AUTOCOMPLETE_COUNTRIES });\n\n    this.autocomplete.addListener(\"place_changed\", () => {\n      const place = this.autocomplete.getPlace();\n\n      this.placeChanged({ place: place });\n    });\n  }\n}\n\nexport class GmapsAutocompleteComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/GoogleMapsAutocomplete/gmaps_autocomplete_component.html\";\n  public bindings: any = {\n    address: \"<\",\n    focus: \"<\",\n    placeChanged: \"&\",\n  };\n\n  constructor() {\n    this.controller = GmapsAutocompleteCtrl;\n  }\n}\n","import { IBaseConfig } from \"app/src/Common/IBaseConfig\";\nimport * as L from \"leaflet\";\n\nclass LeafletMapCtrl implements ng.IComponentController {\n  [s: string]: any;\n  public mapData: any;\n  public mapDataChanged: (params: any) => void;\n  public myMap: any;\n  public marker: any;\n  public icon: any;\n\n  public static $inject = [\"$timeout\", \"BaseConfig\"];\n\n  constructor(\n    public $timeout: ng.ITimeoutService,\n    public BaseConfig: IBaseConfig,\n  ) {\n    this.$timeout(() => {\n      this.initMap();\n    });\n  }\n\n  public initMap() {\n    if (this.mapData) {\n      this.myMap = L.map(\"mapid\", <L.MapOptions>{ measureControl: false, attributionControl: false }).setView(\n        [this.mapData.lat, this.mapData.lng],\n        this.mapData.zoom,\n      );\n\n      const nearmap_attribution = L.control.attribution({ prefix: false });\n      nearmap_attribution.addAttribution(\"Imagery &copy; NearMap\");\n      this.myMap.addControl(nearmap_attribution);\n\n      // Nearmap.com Tiles\n      const nmMap = L.tileLayer(\n        \"https://{rc}{number}.nearmap.com/maps?x={x}&y={y}&z={z}&nml={nml}&version={version}&httpauth={httpauth}&apikey={apikey}\",\n        {\n          maxZoom: 25,\n          rc: \"us\",\n          number: \"0\",\n          nml: \"v\",\n          version: 2,\n          httpauth: false,\n          apikey: this.BaseConfig.NEARMAP_API_KEY,\n        } as any,\n      );\n      nmMap.addTo(this.myMap);\n\n      const googleRoadonly = (L.gridLayer as any).googleMutant({\n        type: \"roadmap\",\n        styles: [\n          { featureType: \"geometry\", stylers: [{ visibility: \"off\" }] },\n          { featureType: \"road\", stylers: [{ visibility: \"on\" }] },\n          {\n            featureType: \"administrative.land_parcel\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ visibility: \"on\" }],\n          },\n        ],\n      });\n      googleRoadonly.addTo(this.myMap);\n\n      const Icon = L.Icon.extend({\n        options: {\n          iconSize: [25, 41],\n          iconAnchor: [12, 41],\n          popupAnchor: [1, -34],\n          tooltipAnchor: [16, -28],\n          shadowSize: [41, 41],\n        },\n      });\n      this.icon = new (Icon as any)({\n        iconUrl: \"/assets/images/marker-icon.2273e3d8.png\",\n        shadowUrl: \"/assets/images/marker-shadow.44a526ee.png\",\n      });\n\n      this.setMarker();\n    }\n  }\n\n  public $onChanges() {\n    if (this.myMap) {\n      this.moveMap();\n    }\n  }\n\n  public moveMap() {\n    this.myMap.setView([this.mapData.lat, this.mapData.lng], this.mapData.zoom);\n    this.myMap.removeLayer(this.marker);\n    this.setMarker();\n  }\n\n  public setMarker() {\n    this.marker = L.marker([this.mapData.lat, this.mapData.lng], { icon: this.icon, draggable: true }).addTo(\n      this.myMap,\n    );\n    this.marker.on(\"moveend\", () => {\n      const place = this.marker.getLatLng();\n      this.mapDataChanged({ mapData: { lat: place.lat, lng: place.lng } });\n    });\n  }\n}\n\nexport class LeafletMapComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/LeafletMap/leaflet_map_component.html\";\n  public bindings: any = {\n    mapData: \"<\",\n    mapDataChanged: \"&\",\n  };\n\n  constructor() {\n    this.controller = LeafletMapCtrl;\n  }\n}\n","import * as uuid from \"uuid/v4\";\nimport { IBaseConfig } from \"app/src/Common/IBaseConfig\";\nimport { IAddress } from \"app/src/Models/Address\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nimport * as L from \"leaflet\";\n\nexport interface IRsfMapOptions {\n  imagery: string;\n  layers: string[];\n  defaultZoom: number;\n  marker: boolean;\n  one_layer: boolean;\n  labels: boolean;\n}\n\nclass RsfMapCtrl implements ng.IComponentController {\n  [s: string]: any;\n  public options: IRsfMapOptions;\n  public defaultOptions = <IRsfMapOptions>{\n    imagery: \"\",\n    layers: [],\n    defaultZoom: 19,\n    marker: true,\n    one_layer: false,\n    labels: true,\n  };\n  public map_options: IRsfMapOptions;\n  public address: IAddress;\n  public addressChanged: (params: any) => void;\n  public measureFinished: (params: any) => void;\n  public exportData: (params: any) => void;\n  public measureData: any[];\n  public myMap: any;\n  public marker: any;\n  public icon: any;\n\n  public static $inject = [\"$timeout\", \"BaseConfig\", \"Repository\"];\n\n  constructor(\n    public $timeout: ng.ITimeoutService,\n    public BaseConfig: IBaseConfig,\n    public Repository: IRepository,\n  ) {}\n\n  public initMap() {\n    if (this.address) {\n      const layers = [];\n      if (this.map_options.imagery === \"nearmap\" && _.isString(this.BaseConfig.NEARMAP_API_KEY)) {\n        // Nearmap.com Tiles\n        const nmMap = L.tileLayer(\n          \"https://{rc}{number}.nearmap.com/maps?x={x}&y={y}&z={z}&nml={nml}&version={version}&httpauth={httpauth}&apikey={apikey}\",\n          {\n            attribution: 'Imagery &copy; <a href=\"https://nearmap.com\">NearMap</a>',\n            maxZoom: 25,\n            rc: \"us\",\n            number: \"0\",\n            nml: \"v\",\n            version: 2,\n            httpauth: false,\n            apikey: this.BaseConfig.NEARMAP_API_KEY,\n          } as any,\n        );\n        layers.push(nmMap);\n      } else if (\n        this.map_options.imagery === \"google\" ||\n        (this.map_options.imagery === \"nearmap\" && !_.isString(this.BaseConfig.NEARMAP_API_KEY))\n      ) {\n        const googleSatellite = L.gridLayer.googleMutant({\n          type: \"satellite\",\n        });\n        layers.push(googleSatellite);\n      }\n\n      const googleRoadonly = L.gridLayer.googleMutant({\n        type: \"roadmap\",\n        styles: [\n          { featureType: \"geometry\", stylers: [{ visibility: \"off\" }] },\n          { featureType: \"road\", stylers: [{ visibility: \"on\" }] },\n          {\n            featureType: \"administrative.land_parcel\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ visibility: \"on\" }],\n          },\n        ],\n      });\n      layers.push(googleRoadonly);\n\n      this.myMap = L.map(\"rsf-map\", <L.MapOptions>{ layers: layers }).setView(\n        [this.address.lat, this.address.lon],\n        this.map_options.defaultZoom,\n      );\n\n      if (this.map_options.marker) {\n        this.initMarker();\n        this.setMarker();\n      }\n\n      if (_.contains(this.map_options.layers, \"measure\")) {\n        this.setupMeasure();\n      }\n    }\n  }\n\n  public $onChanges() {\n    if (this.myMap) {\n      this.setupOptions();\n      this.moveMap();\n    } else {\n      this.$timeout(() => {\n        if (!this.measureData) {\n          this.measureData = [];\n        }\n        this.setupOptions();\n        this.initMap();\n      });\n    }\n  }\n\n  public setupOptions() {\n    this.map_options = this.defaultOptions;\n    if (this.options.defaultZoom) {\n      this.map_options.defaultZoom = this.options.defaultZoom;\n    }\n    if (this.options.imagery) {\n      this.map_options.imagery = this.options.imagery;\n    }\n    if (this.options.layers) {\n      this.map_options.layers = this.options.layers;\n    }\n    if (this.options.one_layer) {\n      this.map_options.one_layer = this.options.one_layer;\n    }\n    if (_.isBoolean(this.options.labels)) {\n      this.map_options.labels = this.options.labels;\n    }\n    if (_.isBoolean(this.options.marker)) {\n      this.map_options.marker = this.options.marker;\n    }\n  }\n\n  public moveMap() {\n    this.myMap.setView([this.address.lat, this.address.lon], this.map_options.defaultZoom);\n    this.myMap.removeLayer(this.marker);\n    this.setMarker();\n  }\n\n  public initMarker() {\n    const Icon = L.Icon.extend({\n      options: {\n        iconSize: [25, 41],\n        iconAnchor: [12, 41],\n        popupAnchor: [1, -34],\n        tooltipAnchor: [16, -28],\n        shadowSize: [41, 41],\n      },\n    });\n    this.icon = new (Icon as any)({\n      iconUrl: \"/assets/images/marker-icon.2273e3d8.png\",\n      shadowUrl: \"/assets/images/marker-shadow.44a526ee.png\",\n    });\n  }\n\n  public setMarker() {\n    this.marker = L.marker([this.address.lat, this.address.lon], { icon: this.icon, draggable: true }).addTo(\n      this.myMap,\n    );\n    this.marker.on(\"moveend\", () => {\n      const place = this.marker.getLatLng();\n      this.address.lat = place.lat;\n      this.address.lon = place.lng;\n      this.moveMap();\n      this.addressChanged({ address: this.address });\n    });\n  }\n\n  public setupMeasure() {\n    const options = {\n      labels: this.map_options.labels,\n      postion: \"topright\",\n      primaryLengthUnit: \"feet\",\n      secondaryLengthUnit: \"\",\n      primaryAreaUnit: \"sqfeet\",\n      completedColor: \"#ff0000\",\n      data: this.Repository.Measurement.toLeafletMeasure(this.measureData),\n    };\n    const measureControl = (L.control as any).measure(options);\n    measureControl.addTo(this.myMap);\n    this.myMap.on(\"measurefinish\", (data) => {\n      this.$timeout(() => {\n        this.export_data();\n        this.measureFinished({\n          data: {\n            area: roundToDecimals(data.area * 10.7639, -2),\n            perimeter: roundToDecimals(data.length * 3.28084, -2),\n            points: this.export_data(),\n          },\n        });\n      });\n    });\n\n    this.myMap.on(\"measurestart\", () => {\n      if (this.map_options.one_layer) {\n        this.remove_layers();\n      }\n    });\n\n    this.myMap.on(\"layerremove\", () => {\n      this.export_data();\n    });\n\n    this.myMap.on(\"layeradd\", () => {\n      this.export_data();\n    });\n\n    this.myMap.on(\"zoomend\", () => {\n      this.export_data();\n    });\n  }\n\n  public export_data() {\n    const geoJSON_data = [];\n    this.myMap.eachLayer((layer) => {\n      if (\n        typeof layer.toGeoJSON === \"function\" &&\n        layer.options.className &&\n        layer.options.className.indexOf(\"layer-measure\") === 0\n      ) {\n        const poly = layer.toGeoJSON();\n\n        geoJSON_data.push(poly);\n      }\n    });\n    this.exportData({ data: { points: geoJSON_data, zoom: this.myMap._zoom } });\n    return geoJSON_data;\n  }\n\n  public remove_layers() {\n    this.myMap.eachLayer((layer) => {\n      if (\n        typeof layer.toGeoJSON === \"function\" &&\n        layer.options.className &&\n        layer.options.className.indexOf(\"layer-measure\") === 0\n      ) {\n        layer.remove();\n      }\n    });\n  }\n}\n\nexport class RsfMapComponent implements ng.IComponentOptions {\n  public controller: any;\n  public templateUrl = \"src/RsfMap/rsf_map_component.html\";\n  public bindings: any = {\n    options: \"<\",\n    address: \"<\",\n    measureData: \"<\",\n    addressChanged: \"&\",\n    measureFinished: \"&\",\n    exportData: \"&\",\n  };\n\n  constructor() {\n    this.controller = RsfMapCtrl;\n  }\n}\n","export class OrgActivationHttpInterceptor implements ng.IHttpInterceptor {\n  constructor(\n    private $q: ng.IQService,\n    private $injector: ng.auto.IInjectorService,\n  ) {}\n\n  public responseError = (rejection: ng.IHttpPromiseCallbackArg<any>): ng.IPromise<any> => {\n    if (rejection.status === 455) {\n      const $state = this.$injector.get(\"$state\") as ng.ui.IStateService;\n      $state.go(\"root.alert\");\n    }\n    return this.$q.reject(rejection);\n  };\n\n  public static factory($q: ng.IQService, $injector: ng.auto.IInjectorService): OrgActivationHttpInterceptor {\n    return new OrgActivationHttpInterceptor($q, $injector);\n  }\n}\n\nOrgActivationHttpInterceptor.factory.$inject = [\"$q\", \"$injector\"];\n","import * as ng from \"angular\";\nimport * as angulartics from \"angulartics\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { IPretty } from \"../Common/PrettyNameService\";\nimport { ISignedDocumentResponse } from \"../Models/SignedDocument\";\nimport { IUser } from \"../Models/User\";\nimport { IBaseConfig } from \"../Common/IBaseConfig\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IOrgFetcherService } from \"app/src/Orgs/OrgFetcherService\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { IRepository } from \"app/src/Common/Repository\";\nimport { IHeaderSearchArgs, IHeaderShowArgs } from \"app/src/Header/HeaderCtrl\";\n\nexport class SignedDocListCtrl {\n  public spinnerPromise: ng.IPromise<any>;\n  public org: IOrg;\n  public signedDocResponse: any;\n  public totalCount = 0;\n  public currentPage = 1;\n  public perPage = 20;\n  public sort: any = {\n    by: \"signed_documents.created_at\",\n    order: \"desc\",\n  };\n  public queryParams: any = {\n    id: null,\n    estimate_id: null,\n    status: null,\n  };\n  public searchVisible = false;\n  public search: string;\n\n  protected users: { number: IUser } = <{ number: IUser }>{};\n  protected orgs: { number: IOrg } = <{ number: IOrg }>{};\n\n  private validSortOrders: string[] = [\n    \"signed_documents.id\",\n    \"signed_documents.created_at\",\n    \"signed_documents.updated_at\",\n    \"signed_documents.status\",\n    \"estimates.name\",\n  ];\n\n  public static $inject = [\n    \"$location\",\n    \"$state\",\n    \"$stateParams\",\n    \"Repository\",\n    \"Pretty\",\n    \"$window\",\n    \"BaseConfig\",\n    \"OrgFetcher\",\n    \"Session\",\n    \"$scope\",\n    \"$analytics\",\n    \"$rootScope\",\n  ];\n\n  constructor(\n    public $location: ng.ILocationService,\n    public $state: ng.ui.IStateService,\n    public $stateParams: ng.ui.IStateParamsService,\n    public Repository: IRepository,\n    public Pretty: IPretty,\n    public $window: ng.IWindowService,\n    public BaseConfig: IBaseConfig,\n    public OrgFetcher: IOrgFetcherService,\n    public Session: ISession,\n    public $scope: ng.IScope,\n    public $analytics: angulartics.IAnalyticsService,\n    public $rootScope: RsfRootScope,\n  ) {\n    $scope.$emit(\"header:search\", <IHeaderShowArgs>{ show: true });\n    $scope.$on(\"header:search_change\", (e: ng.IAngularEvent, args: IHeaderSearchArgs) => {\n      this.$analytics.eventTrack(\"search\", { category: \"Signed Doc List\" });\n      this.search = args.searchString;\n      this.$location.search(\"q\", this.search);\n      this.spinnerPromise = this.query();\n    });\n    this.spinnerPromise = this.updateFromQuerystring().then(() => {\n      if (_.isUndefined(this.search) || this.search.length > 0) {\n        $rootScope.$emit(\"header:search_update\", { searchString: this.search });\n      }\n      this.totalCount = this.signedDocResponse.meta.pagination.total_count;\n      return this.OrgFetcher.loadOrg(this.Session.currentUser.org_id).then((org: IOrg) => {\n        this.org = org;\n      });\n    });\n  }\n\n  public sortBy(by: string) {\n    if (!_.include(this.validSortOrders, by)) {\n      return;\n    }\n\n    if (this.sort.by !== by) {\n      this.sort.by = by;\n      this.sort.order = \"desc\";\n    } else {\n      this.sort.order = this.sort.order === \"asc\" ? \"desc\" : \"asc\";\n    }\n\n    this.$location.search(\"by\", this.sort.by);\n    this.$location.search(\"order\", this.sort.order);\n\n    this.query();\n  }\n\n  public sortingBy(by: string, order: string) {\n    return this.sort.by === by && this.sort.order === order;\n  }\n\n  public pageChanged() {\n    this.$location.search(\"page\", this.currentPage);\n    return this.query();\n  }\n\n  public updateFromQuerystring() {\n    this.currentPage = parseInt(this.$stateParams[\"page\"]) || this.currentPage;\n    this.perPage = parseInt(this.$stateParams[\"per\"]) || this.perPage;\n    this.sort.by = this.$stateParams[\"by\"] || this.sort.by;\n    this.sort.order = this.$stateParams[\"order\"] || this.sort.order;\n    this.search = this.$stateParams[\"q\"] || this.search;\n    return this.query();\n  }\n\n  public clearSearch() {\n    this.search = \"\";\n    this.$location.search(\"q\", this.search);\n    return this.query();\n  }\n\n  public query(): ng.IPromise<any> {\n    const params: any = {\n      page: this.currentPage,\n      per_page: this.perPage,\n      sort_by: this.sort.by,\n      sort_order: this.sort.order,\n      include: [\"estimate\", \"assignments\", \"job\"],\n    };\n\n    if (this.search) {\n      params[\"query\"] = this.search;\n    }\n\n    this.signedDocResponse = <ISignedDocumentResponse>this.Repository.SignedDocument.query(params);\n\n    this.spinnerPromise = this.signedDocResponse.$promise.then(() => {\n      if (this.signedDocResponse.meta.pagination.total_count > 0) {\n        if (this.currentPage > this.signedDocResponse.meta.pagination.total_pages) {\n          this.currentPage = 1;\n          this.$location.search(\"page\", this.currentPage);\n          this.query();\n        }\n      }\n      this.totalCount = this.signedDocResponse.meta.pagination.total_count;\n    });\n\n    return this.spinnerPromise;\n  }\n}\n","import { dispatch } from \"app2/src/storeRegistry\";\nimport { Actions as commonActions } from \"app2/src/reducers/components/common.actions\";\nimport { LocationStateRecord } from \"app2/src/records/LocationState\";\n\nexport class ForbiddenHttpInterceptor implements ng.IHttpInterceptor {\n  constructor(\n    private $q: ng.IQService,\n    private $injector: ng.auto.IInjectorService,\n  ) {}\n\n  public responseError = (rejection: ng.IHttpResponse<any>): ng.IPromise<any> => {\n    if (rejection.status === 404) {\n      const $state = this.$injector.get(\"$state\") as ng.ui.IStateService;\n      $state.go(\"root.error\");\n    }\n\n    if (rejection.status === 403 && rejection.config?.params?.catchAuth !== false) {\n      const $state = this.$injector.get(\"$state\") as ng.ui.IStateService;\n      const $window = this.$injector.get(\"$window\") as ng.IWindowService;\n      (dispatch(\n        commonActions.setSavedLocationState(\n          new LocationStateRecord({\n            pathname: $window.location.pathname,\n            search: $window.location.search,\n            hash: $window.location.hash,\n          }),\n        ),\n      ),\n        $state.go(\"root.permissions\"));\n    }\n    return this.$q.reject(rejection);\n  };\n\n  public static factory($q: ng.IQService, $injector: ng.auto.IInjectorService): ForbiddenHttpInterceptor {\n    return new ForbiddenHttpInterceptor($q, $injector);\n  }\n}\n\nForbiddenHttpInterceptor.factory.$inject = [\"$q\", \"$injector\"];\n","import { fetchCustomerAddress, JobRecord } from \"app2/src/records/Job\";\nimport { toCityStateZip, toOneLiner } from \"app2/src/records/Address\";\nimport { DateFormat, SnakeToPascal } from \"app2/src/helpers/Format\";\nimport { emptyUserValue, getFullName } from \"app2/src/records/UserRecord\";\nimport { getIn } from \"immutable\";\nimport { OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { us_states_abbreviation } from \"configs/states/us-ca\";\n\nexport const staticFields = (job: JobRecord, org: OrgRecord) => {\n  return {\n    CustomerName: job.customer_name,\n    JobName: job.name,\n    CustomerPhone: job.phone_numbers.first({ number: \"\" }).number,\n    CustomerPhone2: job.getIn([\"phone_numbers\", 1, \"number\"]) || \"\",\n    CustomerPhone3: job.getIn([\"phone_numbers\", 2, \"number\"]) || \"\",\n    CustomerFullAddress: toOneLiner(job.address),\n    CustomerAddressLine1: job.address.line_1,\n    CustomerAddressLine2: job.address.line_2,\n    CustomerAddressCity: job.address.city,\n    CustomerAddressState: job.address.state,\n    CustomerAddressStateCode: us_states_abbreviation[job.address.state],\n    CustomerAddressZip: job.address.postal_code,\n    CustomerAddressCityStateZip: toCityStateZip(job.address),\n    JobFullAddress: toOneLiner(job.address),\n    JobAddressLine1: job.address.line_1,\n    JobAddressLine2: job.address.line_2,\n    JobAddressCity: job.address.city,\n    JobAddressState: job.address.state,\n    JobAddressStateCode: us_states_abbreviation[job.address.state],\n    JobAddressZip: job.address.postal_code,\n    JobAddressCityStateZip: toCityStateZip(job.address),\n    JobCustomerFullAddress: toOneLiner(fetchCustomerAddress(job)),\n    JobCustomerAddressLine1: fetchCustomerAddress(job).line_1,\n    JobCustomerAddressLine2: fetchCustomerAddress(job).line_2,\n    JobCustomerAddressCity: fetchCustomerAddress(job).city,\n    JobCustomerAddressState: fetchCustomerAddress(job).state,\n    JobCustomerAddressStateCode: us_states_abbreviation[fetchCustomerAddress(job).state],\n    JobCustomerAddressZip: fetchCustomerAddress(job).postal_code,\n    JobCustomerAddressCityStateZip: toCityStateZip(fetchCustomerAddress(job)),\n    CustomerEmail: job.email,\n    CurrentDate: DateFormat(new Date(), \"shortDate\"),\n    SalesrepFirstName: getIn(job, [\"assignments\", \"0\", \"user\", \"first_name\"], \"\"),\n    SalesrepLastName: getIn(job, [\"assignments\", \"0\", \"user\", \"last_name\"], \"\"),\n    SalesrepName: getFullName(getIn(job, [\"assignments\", \"0\", \"user\"], emptyUserValue)),\n    SalesrepEmail: getIn(job, [\"assignments\", \"0\", \"user\", \"email\"], \"\"),\n    SalesrepPhone: getIn(job, [\"assignments\", \"0\", \"user\", \"phone\"], \"\"),\n    AdditionalSalesrepFirstName: getIn(job, [\"additional_assignment\", \"user\", \"first_name\"], \"\"),\n    AdditionalSalesrepLastName: getIn(job, [\"additional_assignment\", \"user\", \"last_name\"], \"\"),\n    AdditionalSalesrepName: getFullName(getIn(job, [\"additional_assignment\", \"user\"], emptyUserValue)),\n    AdditionalSalesrepEmail: getIn(job, [\"additional_assignment\", \"user\", \"email\"], \"\"),\n    AdditionalSalesrepPhone: getIn(job, [\"additional_assignment\", \"user\", \"phone\"], \"\"),\n    OrgName: org.name,\n    OrgFullAddress: toOneLiner(org.address),\n    OrgAddressLine1: org.address.line_1,\n    OrgAddressLine2: org.address.line_2,\n    OrgAddressCity: org.address.city,\n    OrgAddressState: org.address.state,\n    OrgAddressStateCode: us_states_abbreviation[org.address.state],\n    OrgAddressZip: org.address.postal_code,\n    OrgAddressCityStateZip: toCityStateZip(org.address),\n    OrgPhone: org.phone_number,\n    OrgWebsite: org.website,\n    OrgEmail: org.metadata?.email_address,\n    OrgLegalName: org.metadata?.legal_name,\n    OrgPhone2: org.metadata?.phone_number_2,\n    OrgPhone3: org.metadata?.phone_number_3,\n    OrgLicenseNumber: org.metadata?.license_number,\n  };\n};\n\nexport const dynamicFields = (job: JobRecord) => {\n  const fieldsData = {};\n  const jobMetadata = job.metadata.toJSON();\n\n  if (!jobMetadata) return;\n\n  let integrationKeyIndex = 0;\n\n  while (integrationKeyIndex < 6) {\n    if (\n      jobMetadata[`integration_key_${integrationKeyIndex}`] &&\n      jobMetadata[`integration_value_${integrationKeyIndex}`]\n    ) {\n      fieldsData[SnakeToPascal(jobMetadata[`integration_key_${integrationKeyIndex}`])] =\n        jobMetadata[`integration_value_${integrationKeyIndex}`];\n    }\n    integrationKeyIndex++;\n  }\n\n  Object.keys(jobMetadata).forEach((key) => {\n    if (key.endsWith(\"_id\")) fieldsData[SnakeToPascal(key)] = jobMetadata[key];\n  });\n\n  return fieldsData;\n};\nexport const fillableFields = (job: JobRecord, org: OrgRecord) => {\n  if (!job || !org) return;\n\n  return { ...staticFields(job, org), ...dynamicFields(job) };\n};\n\nexport const buildFileName = (job: JobRecord, documentName: string): string => {\n  const date = DateFormat(new Date(), \"short-hyphenated\").replace(\":\", \"\");\n  if (documentName) {\n    return `Filled ${documentName.replace(\".pdf\", \"\")} - Saved ${date}.pdf`;\n  }\n\n  return `${job?.name} - Saved ${date}.pdf`;\n};\n\nexport const downloadFileName = (name: string): string => {\n  return name.replace(/[ \\:\\+\\(\\)]/g, \"_\");\n};\n","import * as React from \"react\";\nimport { Modal, Button, Row, Col } from \"react-bootstrap\";\n\ninterface SavePdfModalProps {\n  download: any;\n  saveToDocs: any;\n  saveToDocsAndAgreement: any;\n  agreementText: string;\n}\n\ninterface SavePdfModalState {}\n\nexport default class SavePdfModal extends React.Component<SavePdfModalProps, SavePdfModalState> {\n  constructor(props) {\n    super(props);\n  }\n\n  public render() {\n    const { download, saveToDocs, saveToDocsAndAgreement, agreementText } = this.props;\n\n    return (\n      <React.Fragment>\n        <Modal.Header closeButton={true}>\n          <Row>\n            <Col title=\"Heading\" sm={12}>\n              Save PDF\n            </Col>\n          </Row>\n        </Modal.Header>\n        <Modal.Body>\n          <div className=\"row-even-spacing\">\n            <div className=\"col\">\n              Download\n              <Button title=\"Download\" variant=\"default\" onClick={download}>\n                <span>\n                  <i className=\"fa fa-download\" />\n                </span>\n              </Button>\n            </div>\n            <div className=\"col\">\n              Save to Documents\n              <Button title=\"Save to Docs\" variant=\"save\" onClick={saveToDocs}>\n                <span>\n                  <i className=\"fa fa-save\" />\n                </span>\n              </Button>\n            </div>\n            <div className=\"col\">\n              Save to Documents <br />\n              {agreementText}\n              <Button title=\"Save to Docs and Agreement\" variant=\"save\" onClick={saveToDocsAndAgreement}>\n                <div>\n                  <i className=\"fa fa-save\" />\n                  &nbsp;+&nbsp;\n                  <img\n                    ng-src=\"/assets/images/icons/i_contracts-agreement.7f7d6227.png\"\n                    title=\"Agreement\"\n                    src=\"/assets/images/icons/i_contracts-agreement.7f7d6227.png\"\n                  />\n                </div>\n              </Button>\n            </div>\n          </div>\n        </Modal.Body>\n      </React.Fragment>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Modal, Button, Row, Col, Form } from \"react-bootstrap\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { ILocationData } from \"app2/src/records/Location\";\nimport { push } from \"app2/src/reducers/router.actions\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\n\nconst mapStateToProps = (state: RootState) => {\n  return {\n    jobId: currentJobId(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    push: (location: Partial<ILocationData>) => dispatch(push(location)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface SaveToDocumentsModalProps {\n  save: any;\n  contractName: string;\n  estimateName: string;\n  closeModal: any;\n}\n\ninterface SaveToDocumentsModalState {\n  contractChecked: boolean;\n  estimateChecked: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & SaveToDocumentsModalProps;\n\nclass SaveToDocumentsModal extends React.Component<Props, SaveToDocumentsModalState> {\n  constructor(props) {\n    super(props);\n    this.state = {\n      contractChecked: false,\n      estimateChecked: false,\n    };\n\n    this.save = this.save.bind(this);\n  }\n\n  public async save() {\n    const { save, jobId, push } = this.props;\n    const { contractChecked, estimateChecked } = this.state;\n    await save(contractChecked, estimateChecked);\n    push({ pathname: \"job_header.job_show.documents\", query: { id: jobId, document_id: undefined } });\n  }\n\n  public render() {\n    const { contractName, estimateName, closeModal } = this.props;\n    const { contractChecked, estimateChecked } = this.state;\n\n    return (\n      <React.Fragment>\n        <Modal.Header closeButton={true}>\n          <Row>\n            <Col title=\"Heading\" sm={12}>\n              Save PDF\n            </Col>\n          </Row>\n        </Modal.Header>\n        <Modal.Body>\n          <Row>\n            <Col sm={12}>\n              <Form.Check\n                title=\"Docs Check\"\n                type=\"checkbox\"\n                inline\n                label=\"Save To Documents\"\n                checked\n                readOnly></Form.Check>\n            </Col>\n          </Row>\n          <Row>\n            <Col sm={12}>\n              <Form.Check\n                title=\"Contract Check\"\n                type=\"checkbox\"\n                inline\n                label={`Add To ${contractName}`}\n                checked={contractChecked}\n                onChange={() => this.setState({ contractChecked: !contractChecked })}></Form.Check>\n            </Col>\n          </Row>\n          <Row>\n            <Col sm={12}>\n              <Form.Check\n                title=\"Estimate Check\"\n                type=\"checkbox\"\n                inline\n                label={`Add To ${estimateName}`}\n                checked={estimateChecked}\n                onChange={() => this.setState({ estimateChecked: !estimateChecked })}></Form.Check>\n            </Col>\n          </Row>\n        </Modal.Body>\n        <Modal.Footer>\n          <Button title=\"Save\" variant=\"save\" onClick={this.save}>\n            Save\n          </Button>\n          <Button title=\"Cancel\" variant=\"cancel\" onClick={closeModal}>\n            Cancel\n          </Button>\n        </Modal.Footer>\n      </React.Fragment>\n    );\n  }\n}\n\nexport default connector(SaveToDocumentsModal);\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Modal } from \"react-bootstrap\";\nimport { PdfDisplay } from \"./PdfDisplay\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport * as config from \"react-global-configuration\";\nimport { DocumentRecord, fromJSON, setDisplay } from \"app2/src/records/Document\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport * as orgActions from \"app2/src/reducers/org.actions\";\nimport { WebViewerInstance } from \"@pdftron/webviewer\";\nimport { getContractName, getEstimateName } from \"app2/src/records/OrgRecord\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { fillableFields, buildFileName, downloadFileName } from \"./pdf.service\";\nimport SavePdfModal from \"./SavePdfModal\";\nimport SaveToDocumentsModal from \"./SaveToDocumentsModal\";\nimport DirtyWatcher from \"app2/src/components/Common/DirtyWatcher\";\nimport { Map, List } from \"immutable\";\nimport { debounce, isFunction } from \"underscore\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState, ownProps: SaveablePdfDisplayProps) => {\n  let org = null;\n  if (ownProps.job && ownProps.job.org_id) {\n    org = state.getIn([\"orgs\", \"orgsById\", ownProps.job.org_id]);\n  }\n  return {\n    org,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: SaveablePdfDisplayProps) => {\n  return {\n    createDocument: (doc: DocumentRecord) => {\n      return dispatch(documentActions.AsyncActions.updateOrCreateDocument(doc));\n    },\n    loadOrg: () => {\n      return dispatch(orgActions.AsyncActions.getOrg(ownProps.job.org_id));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface SaveablePdfDisplayProps {\n  job: JobRecord;\n  pdfUrl: string;\n  documentName?: string;\n  disabledFeatures?: string[];\n  modifyDoc?: (isModified: boolean, getDoc: () => Promise<DocumentRecord>, requiredPdfFieldsFilled?: boolean) => void;\n  requiredPdfFieldsFilled?: boolean;\n  requiredFieldsMissing?: () => void;\n}\n\ninterface SaveablePdfDisplayState {\n  showingModal: boolean;\n  saving: boolean;\n  blob: Blob;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & SaveablePdfDisplayProps;\n\nclass SaveablePdfDisplay extends React.PureComponent<Props, SaveablePdfDisplayState> {\n  public additionalItems: any[];\n  public dirtyWatcherReset = false;\n  public initialAnnotationState = Map();\n  public pageLayoutChanges = Map<string, List<any>>({\n    added: List(),\n    removed: List(),\n    moved: List(),\n    contentChanged: List(),\n    annotationsChanged: List(),\n  });\n  public instance: WebViewerInstance = null;\n  protected debouncedModified: () => void;\n\n  public constructor(props) {\n    super(props);\n    this.state = {\n      showingModal: false,\n      saving: false,\n      blob: null,\n    };\n\n    this.additionalItems = [\n      {\n        type: \"actionButton\",\n        img: `${config.get(\"APP_URL\")}/assets/assets/icons8-save-64.e49a357c.png`,\n        onClickHandler: (docViewer, annotationManager) => {\n          if ((document as any).fullscreenElement) {\n            (document as any).exitFullscreen();\n          }\n\n          if (this.props.requiredPdfFieldsFilled) {\n            if (!annotationManager.getFieldManager().areRequiredFieldsFilled()) {\n              this.props.requiredFieldsMissing();\n              return;\n            }\n          }\n\n          this.setState({ saving: true });\n          const doc = docViewer.getDocument();\n\n          annotationManager.exportAnnotations().then((xfdfString) => {\n            doc\n              .getFileData({\n                xfdfString,\n                flatten: true,\n              })\n              .then(\n                (data) => {\n                  const arr = new Uint8Array(data);\n                  const blob = new Blob([arr], { type: \"application/pdf\" });\n                  this.setState({\n                    showingModal: true,\n                    blob: blob,\n                    saving: false,\n                  });\n                },\n                (err) => console.error(err),\n              );\n          });\n        },\n      },\n    ];\n\n    this.download = this.download.bind(this);\n    this.save = this.save.bind(this);\n    this.saveToDocs = this.saveToDocs.bind(this);\n    this.saveToDocsAndAgreement = this.saveToDocsAndAgreement.bind(this);\n    this.fillForm = this.fillForm.bind(this);\n    this.init = this.init.bind(this);\n    this.check = this.check.bind(this);\n    this.reset = this.reset.bind(this);\n    this.viewerBuilt = this.viewerBuilt.bind(this);\n    this.initializeState = this.initializeState.bind(this);\n    this.triggerModifed = this.triggerModifed.bind(this);\n    this.getFile = this.getFile.bind(this);\n    this.debouncedModified = debounce(this.triggerModifed, 25);\n  }\n\n  public componentDidMount() {\n    this.init();\n  }\n\n  public componentDidUpdate() {\n    this.init();\n  }\n\n  public async initializeState() {\n    if (isNullOrUndefined(this.instance)) {\n      return;\n    }\n    const annotations = this.instance.Core.annotationManager.getAnnotationsList();\n    this.initialAnnotationState = buildAnnotation(annotations);\n  }\n\n  public viewerBuilt(instance: WebViewerInstance) {\n    this.instance = instance;\n    const { documentViewer, annotationManager } = this.instance.Core;\n\n    documentViewer.addEventListener(\"annotationsLoaded\", async () => {\n      await this.fillForm();\n      this.initializeState();\n      this.debouncedModified();\n    });\n    documentViewer.addEventListener(\"pagesUpdated\", this.debouncedModified);\n    documentViewer.addEventListener(\"pagesUpdated\", (changes) => {\n      /**\n       THE CHANGES ARE UPDATED AS FOLLOWS:\n       * Deleting a page => Updates the removed array but also updates the moved array because in the place of removed page, the page beneath it replaces it and so on.\n       * Addition of a page => Updates the added array but also updates the moved array because due to the additions, the page beneath it moves down as well and so on.\n       * Moving a page up/down => Updates the moved array.\n       * Rotation of a page => Updates the contentChanged array.\n       * As for the annotationsChanged array it does not change in any case I tested for so I guess the annotationChanged event handler is already doing the work for us so it is not required.\n       */\n      this.pageLayoutChanges = buildPageLayoutChanges(changes, this.pageLayoutChanges);\n    });\n    annotationManager.addEventListener(\"annotationChanged\", this.debouncedModified);\n    annotationManager.addEventListener(\"fieldChanged\", this.debouncedModified);\n  }\n\n  public async fillForm(): Promise<void> {\n    const { documentViewer, annotationManager } = this.instance.Core;\n    const { job, org } = this.props;\n    await documentViewer.getAnnotationsLoadedPromise();\n\n    const fieldManager = annotationManager.getFieldManager();\n\n    const fillableFieldsObject = fillableFields(job, org);\n\n    Object.keys(fillableFieldsObject || {}).forEach((fieldKey) => {\n      const formField = fieldManager.getField(fieldKey);\n\n      if (!formField) {\n        return;\n      }\n\n      formField.setValue(fillableFieldsObject[fieldKey] || \"\");\n    });\n  }\n\n  public async triggerModifed() {\n    const { modifyDoc } = this.props;\n    const { annotationManager } = this.instance.Core;\n\n    if (!isFunction(modifyDoc)) return;\n\n    const requiredPdfFieldsFilled = annotationManager.getFieldManager().areRequiredFieldsFilled();\n\n    modifyDoc(true, this.getFile, requiredPdfFieldsFilled);\n  }\n\n  public async getFile(): Promise<DocumentRecord> {\n    const { documentViewer, annotationManager } = this.instance.Core;\n    const { job, documentName } = this.props;\n\n    const doc = documentViewer.getDocument();\n\n    annotationManager.deselectAllAnnotations();\n    const xfdfString = await annotationManager.exportAnnotations();\n    const docData = await doc.getFileData({\n      xfdfString,\n      flatten: true,\n    });\n\n    const arr = new Uint8Array(docData);\n    const blob = new Blob([arr], { type: \"application/pdf\" });\n\n    let data: any;\n\n    try {\n      data = new File([blob], documentName, { type: \"application/pdf\" });\n    } catch (_err) {\n      data = new Blob([blob], { type: \"application/pdf\" });\n    }\n\n    const record = fromJSON({\n      name: documentName,\n      documentable_type: \"Job\",\n      documentable_id: job.id,\n      data,\n    });\n\n    return record.set(\"display\", setDisplay(record));\n  }\n\n  public download(): void {\n    const { blob } = this.state;\n    const { job } = this.props;\n\n    let name = buildFileName(job);\n    name = downloadFileName(name);\n\n    if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) {\n      (window.navigator as any).msSaveOrOpenBlob(blob, name);\n    } else {\n      const tmpHref = document.createElement(\"a\");\n      document.body.appendChild(tmpHref);\n      //@ts-ignore\n      tmpHref.style = \"display: none\";\n      const csvUrl = URL.createObjectURL(blob);\n      tmpHref.href = csvUrl;\n      tmpHref.download = name;\n      tmpHref.click();\n      URL.revokeObjectURL(tmpHref.href);\n      tmpHref.remove();\n    }\n\n    this.setState({ showingModal: false });\n  }\n\n  public save(displayInAgreement: boolean, displayInProposal: boolean): Promise<void> {\n    const { job, createDocument, documentName } = this.props;\n    const { blob } = this.state;\n    const name = buildFileName(job, documentName);\n\n    let data: any;\n\n    try {\n      data = new File([blob], name, { type: \"application/pdf\" });\n    } catch (_err) {\n      data = new Blob([blob], { type: \"application/pdf\" });\n    }\n\n    let record = fromJSON({\n      name: name,\n      documentable_type: \"Job\",\n      documentable_id: job.id,\n      data,\n    });\n    record = record.merge({ displayInAgreement, displayInProposal });\n    record = record.set(\"display\", setDisplay(record));\n\n    this.setState({ showingModal: false, saving: true });\n    return createDocument(record).then(() => {\n      this.setState({\n        saving: false,\n      });\n      this.initializeState();\n    });\n  }\n\n  public saveToDocs() {\n    this.save(false, false);\n  }\n\n  public saveToDocsAndAgreement() {\n    this.save(true, false);\n  }\n\n  public reset() {\n    this.dirtyWatcherReset = true;\n  }\n\n  public check() {\n    if (this.dirtyWatcherReset) {\n      return false;\n    }\n\n    if (isNullOrUndefined(this.instance)) {\n      return false;\n    }\n\n    const { annotationManager } = this.instance.Core;\n    const annotations = annotationManager.getAnnotationsList();\n    const newState = buildAnnotation(annotations);\n\n    return (\n      !newState.equals(this.initialAnnotationState) || !this.pageLayoutChanges.every((change) => change.size === 0)\n    );\n  }\n\n  public render() {\n    const { pdfUrl, org, documentName, disabledFeatures } = this.props;\n    const { saving, showingModal } = this.state;\n    let defaultDisabledFeatures = [\"Download\"];\n\n    const contractName = getContractName(org);\n    const estimateName = getEstimateName(org);\n\n    if (disabledFeatures) {\n      defaultDisabledFeatures = defaultDisabledFeatures.concat(disabledFeatures);\n    }\n\n    let agreementText = \"\";\n    if (org) {\n      agreementText = `& Add to ${contractName}`;\n    }\n    return (\n      <React.Fragment>\n        <Spinner localProperty={saving} />\n        {defaultDisabledFeatures.includes(\"Annotations\") ? null : (\n          <DirtyWatcher check={this.check} reset={this.reset} reactRouter />\n        )}\n        <PdfDisplay\n          pdfUrl={pdfUrl}\n          additionalItems={this.additionalItems}\n          disabledFeatures={defaultDisabledFeatures}\n          viewerBuiltCallback={this.viewerBuilt}\n        />\n        <Modal\n          className=\"save-pdf-dialog\"\n          size=\"lg\"\n          show={showingModal}\n          onHide={() => this.setState({ showingModal: false })}>\n          {documentName ? (\n            <SaveToDocumentsModal\n              save={this.save}\n              contractName={contractName}\n              estimateName={estimateName}\n              closeModal={() => this.setState({ showingModal: false })}\n            />\n          ) : (\n            <SavePdfModal\n              download={this.download}\n              saveToDocs={this.saveToDocs}\n              saveToDocsAndAgreement={this.saveToDocsAndAgreement}\n              agreementText={agreementText}\n            />\n          )}\n        </Modal>\n      </React.Fragment>\n    );\n  }\n\n  protected init() {\n    const { loadOrg, job, org } = this.props;\n    if (!org && job && job.id) {\n      loadOrg();\n    }\n  }\n}\n\nexport default connector(SaveablePdfDisplay);\n\n/**\n * builds a PDF annotation state with (Id (unique identifier) immutable Map to track changes before and after editing PDF annotations\n * and removes columns that do not represent changes while editing\n * @param {any[]} annotations annotations pulled from the PDF\n * @returns {PdfAnnotationState} uses the Id (unique identifier) as a key in an immutable Map of annotations\n */\nexport const buildAnnotation = (annotations: any[]) => {\n  let initialAnnotations = Map();\n  annotations.forEach((ann: any) => {\n    initialAnnotations = initialAnnotations.set(ann.Id, ann.value);\n  });\n  return initialAnnotations;\n};\n\nexport const buildPageLayoutChanges = (\n  updatedLayoutChanges: any,\n  initialPageLayoutChanges: Map<string, List<any>>,\n): Map<string, List<any>> => {\n  return initialPageLayoutChanges.reduce((reduction: Map<string, List<any>>, value: List<any>, key: string) => {\n    if (key === \"moved\" && !_.isEmpty(updatedLayoutChanges[key])) {\n      return reduction.set(key, value.push(updatedLayoutChanges.moved));\n    }\n    if (updatedLayoutChanges[key].length) {\n      return reduction.set(key, value.push(...updatedLayoutChanges[key]));\n    }\n\n    return reduction;\n  }, initialPageLayoutChanges);\n};\n","import { dispatch } from \"../storeRegistry\";\nimport { IFlashAlertAction } from \"app2/src/records/FlashAlert\";\n\n/**\n * Dynamically dispatches a Redux action based on FlashAlert metadata.\n * Similar to TaskSync pattern - imports the action module and calls the handler.\n *\n * @param actionMeta - Metadata describing which action to dispatch\n */\nexport const dispatchFlashAction = async (actionMeta: IFlashAlertAction): Promise<void> => {\n  const { model, handler, payload } = actionMeta;\n\n  try {\n    const module = await import(`app2/src/reducers/${model}.actions.ts`);\n    const action = module.AsyncActions?.[handler];\n\n    if (!action) {\n      console.error(`[FlashAlertDispatcher] Action '${handler}' not found in ${model}.actions AsyncActions`);\n      return;\n    }\n\n    dispatch(action(payload));\n  } catch (error) {\n    console.error(\"[FlashAlertDispatcher] Error dispatching action:\", error);\n  }\n};\n","import * as React from \"react\";\nimport { Fragment } from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { Alert, Button } from \"react-bootstrap\";\nimport { FlashLevels, FlashLevelTypes } from \"app/src/Common/FlashLevels\";\nimport { IFlashAlertData } from \"app2/src/records/FlashAlert\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { dispatchFlashAction } from \"app2/src/helpers/FlashAlertDispatcher\";\n\nconst mapStateToProps = (state: RootState, ownProps: FlashAlertProps) => {\n  const flashAlerts: List<IFlashAlertData> = state.getIn([\"components\", \"common\", \"flashAlerts\"], List());\n\n  return {\n    flashAlerts: flashAlerts,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: FlashAlertProps) => {\n  return {\n    closeFlashMessage: (idx: number) => dispatch(commonActions.Actions.flashRemoveAlert(idx)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface FlashAlertProps {}\n\ninterface FlashAlertState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport type Props = PropsFromRedux & FlashAlertProps;\n\nclass FlashAlert extends React.Component<Props, FlashAlertState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {};\n  }\n\n  public render(): React.ReactNode {\n    const { flashAlerts, closeFlashMessage } = this.props;\n\n    return (\n      <div className=\"alert-stack\">\n        {flashAlerts.toArray().map((the_alert: IFlashAlertData, idx: number) => {\n          if (the_alert.autoDismiss !== false) {\n            setTimeout(() => {\n              closeFlashMessage(idx);\n            }, 5000);\n          }\n\n          const handleActionClick = () => {\n            closeFlashMessage(idx);\n            // Dispatch action if provided\n            if (the_alert.actionButton?.action) {\n              dispatchFlashAction(the_alert.actionButton.action);\n            }\n          };\n\n          const handleDismiss = () => {\n            closeFlashMessage(idx);\n            // Dispatch onDismiss action if provided\n            if (the_alert.onDismiss) {\n              dispatchFlashAction(the_alert.onDismiss);\n            }\n          };\n\n          return (\n            <Alert\n              key={idx}\n              onClose={handleDismiss}\n              variant={FlashLevels[the_alert.level] as FlashLevelTypes}\n              dismissible>\n              <div className=\"alert-circle\"></div>\n              <div className=\"d-flex align-items-start justify-content-center\">\n                <div className=\"alert-message mr-3\">\n                  {typeof the_alert.message === \"string\"\n                    ? the_alert.message\n                    : the_alert.message.map((m, idx) => (\n                        <Fragment key={idx}>\n                          {m} <br />\n                        </Fragment>\n                      ))}\n                </div>\n                {the_alert.actionButton && (\n                  <Button\n                    variant={FlashLevels[the_alert.level] as FlashLevelTypes}\n                    size=\"sm\"\n                    onClick={handleActionClick}>\n                    {the_alert.actionButton.text}\n                  </Button>\n                )}\n              </div>\n            </Alert>\n          );\n        })}\n      </div>\n    );\n  }\n}\n\nexport default connector(FlashAlert);\n","import * as React from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { Field, FieldProps } from \"react-final-form\";\nimport { BootstrapInputAdapter } from \"./BootstrapInputAdapter\";\n\nexport interface RsfFormGroupProps extends FieldProps<any, any> {\n  /** The input element type. If undefined, \"input\" will be used */\n  as?: \"input\" | \"select\" | \"textarea\" | undefined;\n  /** If the input field should be disabled */\n  disabled?: boolean;\n  /** Text to display in the field label */\n  label: string;\n  /** HTML name of the form element. This should match the record's key name. */\n  name: string;\n  /** A custom onChange event handler to fire */\n  onChange?: any;\n  /** Placeholder text. If undefined, the label will be used */\n  placeholder?: string;\n  /** If the presence of a value should be validated by the UI */\n  required?: boolean;\n  /** The value to set on the input field */\n  storevalue?: string;\n  /** Optional input validator */\n  validate?: any;\n  className?: string;\n}\n\nexport const RsfFormGroup: React.FunctionComponent<RsfFormGroupProps> = (props) => {\n  const {\n    as,\n    children,\n    disabled,\n    label,\n    name,\n    onChange,\n    placeholder,\n    required,\n    storevalue,\n    validate,\n    type,\n    className,\n    testId,\n    id,\n  } = props;\n  const inputType = as || \"input\";\n  const nameTestId = testId || name;\n  const nameId = id || name;\n\n  return (\n    <Form.Group className={className}>\n      {label === \"\" ? null : (\n        <Form.Label htmlFor={name} className=\"p-copy\">\n          {label}\n        </Form.Label>\n      )}\n      <Field\n        as={inputType}\n        component={BootstrapInputAdapter}\n        disabled={disabled}\n        name={name}\n        onChange={onChange}\n        parse={(val) => (val == null ? \"\" : val)}\n        placeholder={placeholder || label}\n        required={required}\n        storevalue={storevalue}\n        type={type || inputType}\n        data-testid={nameTestId}\n        aria-label={label === \"\" ? name : null}\n        id={nameId}\n        validate={validate}>\n        {children}\n      </Field>\n    </Form.Group>\n  );\n};\n","import * as React from \"react\";\nimport { Modal, Row, Col, Button } from \"react-bootstrap\";\n\ninterface TroubleshootingModalState {\n  openScreenShareHelp: boolean;\n}\n\ninterface TroubleshootingModalProps {\n  openModal: number;\n}\n\nexport default class TroubleshootingModal extends React.Component<\n  TroubleshootingModalProps,\n  TroubleshootingModalState\n> {\n  constructor(props: TroubleshootingModalProps) {\n    super(props);\n\n    this.state = {\n      openScreenShareHelp: false,\n    };\n\n    this.closeScreenShareHelp = this.closeScreenShareHelp.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: TroubleshootingModalProps): void {\n    const { openModal } = this.props;\n    if (prevProps.openModal !== openModal) {\n      this.setState({ openScreenShareHelp: true });\n    }\n  }\n\n  public closeScreenShareHelp(): void {\n    this.setState({ openScreenShareHelp: false });\n  }\n\n  public render(): JSX.Element {\n    const { openScreenShareHelp } = this.state;\n\n    return (\n      <Modal show={openScreenShareHelp} onHide={this.closeScreenShareHelp} size=\"lg\" backdrop=\"static\">\n        <div className=\"general-wizard\">\n          <Modal.Header closeButton>\n            <Modal.Title>\n              <h3>Screen Share Troubleshooting</h3>\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <Row>\n              <Col>\n                <Row>\n                  <Col>\n                    <h3>\n                      <strong>Question 1</strong>: Did the user receive the email?\n                    </h3>\n\n                    <ul className=\"screen-share-troubles\">\n                      <li>\n                        <u>If no:</u> <br />\n                        <br />\n                        <ul>\n                          <li>\n                            <strong>Option 1</strong>: Have the user check their SPAM or Junk Email Box.\n                          </li>\n                          <li>\n                            <strong>Option 2</strong>: The Screen Share invite email was also sent to the Job's Sales\n                            Representative. You can simply access your email and forward to the user.\n                          </li>\n                          <li>\n                            <strong>Option 3</strong>: Try another email address for the user.\n                          </li>\n                        </ul>\n                        <br />\n                      </li>\n                      <li>\n                        <u>If yes, skip to Question 2.</u>\n                      </li>\n                    </ul>\n\n                    <br />\n                    <br />\n\n                    <h3>\n                      <strong>Question 2</strong>: The user has received the email and is unable to access the screen\n                      share.\n                    </h3>\n\n                    <h4>\n                      <u>\n                        <strong>The User receives the \"Waiting for Presenter\" screen.</strong>\n                      </u>\n                    </h4>\n                    <ul className=\"screen-share-troubles\">\n                      <li>\n                        Have you started the screen share? If not, start the screen share and the user should be\n                        connected momentarily.\n                      </li>\n                      <li>\n                        If you already started the screen share, allow 5 to 10 seconds for the session to connect. If\n                        the user is still unable to access the screen share, please have the user click the refresh\n                        button.\n                      </li>\n                      <li>If that does not work, try the options below.</li>\n                    </ul>\n\n                    <br />\n                    <br />\n\n                    <h4>\n                      <u>\n                        <strong>The user receives a blank white screen or is unable to connect.</strong>\n                      </u>\n                    </h4>\n                    <ul className=\"screen-share-troubles\">\n                      <li>\n                        In most cases, this is caused by an unsupported browser. Please ask the user which browser they\n                        are using. We support Internet Explorer 10+, the latest versions of Edge, Firefox, Safari, and\n                        Chrome.\n                      </li>\n                      <li>\n                        At the bottom of the screen share email invitation, there is a link you can have the user copy\n                        and paste into the other browser.\n                      </li>\n                      <li>\n                        You can also text the user an invitation to the Screen Share for access on a mobile device.\n                      </li>\n                    </ul>\n                  </Col>\n                </Row>\n              </Col>\n            </Row>\n          </Modal.Body>\n        </div>\n        <Modal.Footer>\n          <Button variant=\"cancel\" type=\"button\" onClick={this.closeScreenShareHelp}>\n            Cancel\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Modal, Row, Col, Button } from \"react-bootstrap\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { sendInviteModal, sendInviteType } from \"app2/src/selectors/components/common.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { IInviteArgs } from \"app2/src/api/job.service\";\nimport { Form as FinalForm } from \"react-final-form\";\nimport { RsfFormGroup } from \"app2/src/components/RsfForms/RsfFormGroup\";\nimport { validateEmail, validatePhoneNumber } from \"app2/src/helpers/InputValidator\";\nimport { SelectMobilePhoneNumber } from \"app2/src/helpers/Format\";\nimport TroubleshootingModal from \"app2/src/components/ScreenShare/TroubleshootingModal\";\nimport track, { TrackingProp } from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\n\nconst mapStateToProps = (state: RootState, ownProps: InviteModalProps) => {\n  return {\n    sendInviteModal: sendInviteModal(state),\n    sendInviteType: sendInviteType(state),\n    job: currentJob(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: InviteModalProps) => {\n  return {\n    closeSendInviteModal: (sent: boolean) => dispatch(commonActions.Actions.closeSendInviteModal(sent)),\n    invite: (args: IInviteArgs) => dispatch(jobActions.AsyncActions.invite(args)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface InviteModalState {\n  openScreenShareHelp: number;\n}\n\ninterface InviteModalProps {\n  tracking?: TrackingProp;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & InviteModalProps;\n\n@track(\n  (props: Props) => {\n    return {\n      component: \"InviteModal\",\n      sendInviteType: props.sendInviteType,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n  },\n)\nclass InviteModal extends React.Component<Props, InviteModalState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      openScreenShareHelp: 0,\n    };\n\n    this.openScreenShareHelp = this.openScreenShareHelp.bind(this);\n    this.submitEmail = this.submitEmail.bind(this);\n    this.submitText = this.submitText.bind(this);\n    this.closeModal = this.closeModal.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: Props): void {\n    const { tracking, sendInviteModal } = this.props;\n    if (!prevProps.sendInviteModal && sendInviteModal) {\n      tracking.trackEvent({ action: \"open invite modal\" });\n    }\n  }\n  @track(() => ({\n    action: \"close invite modal\",\n  }))\n  public closeModal(): void {\n    this.props.closeSendInviteModal(false);\n  }\n\n  @track((props: Props) => ({\n    action: `${props.sendInviteType} email invite sent`,\n  }))\n  public submitEmail(formData) {\n    const { invite, sendInviteType, closeSendInviteModal } = this.props;\n\n    invite({ invite_type: sendInviteType, invite_method: \"email\", emails: formData.emails });\n    closeSendInviteModal(true);\n  }\n\n  @track((props: Props) => ({\n    action: `${props.sendInviteType} sms invite sent`,\n  }))\n  public submitText(formData) {\n    const { invite, sendInviteType, closeSendInviteModal } = this.props;\n\n    invite({ invite_type: sendInviteType, invite_method: \"sms\", emails: formData.emails });\n    closeSendInviteModal(true);\n  }\n\n  @track(() => ({\n    action: \"open screen share help\",\n  }))\n  public openScreenShareHelp() {\n    this.setState((state: InviteModalState) => ({ openScreenShareHelp: state.openScreenShareHelp + 1 }));\n  }\n\n  public render() {\n    const { sendInviteModal, sendInviteType, job, closeSendInviteModal } = this.props;\n    const { openScreenShareHelp } = this.state;\n\n    if (!sendInviteModal) {\n      return null;\n    }\n\n    return (\n      <Modal show={sendInviteModal} onHide={() => closeSendInviteModal(false)} size={\"fixed\" as any} backdrop=\"static\">\n        <Modal.Header closeButton>\n          <Modal.Title>\n            {sendInviteType === \"screenshare\" ? <h3>Send Meeting Invite</h3> : null}\n            {sendInviteType === \"image_uploader\" ? <h3>Send Upload Invite</h3> : null}\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <FinalForm\n            onSubmit={this.submitEmail}\n            validate={(values) => {\n              const errors = {} as any;\n              if (!values.emails) {\n                errors.emails = \"Required\";\n              }\n\n              if (!validateEmail(values.emails)) {\n                errors.emails = \"Improperly formatted emails '_@__.__' (comma separated)\";\n              }\n\n              return errors;\n            }}\n            initialValues={{\n              emails: job?.email,\n            }}>\n            {({ handleSubmit }) => (\n              <form onSubmit={handleSubmit}>\n                <Row>\n                  <Col sm={9}>\n                    <RsfFormGroup label=\"Emails\" name=\"emails\" component=\"input\" id=\"emailsid\" />\n                  </Col>\n\n                  <Col sm={3}>\n                    <Button variant=\"default\" type=\"submit\" className=\"dummy-label\">\n                      Send Email\n                    </Button>\n                  </Col>\n                </Row>\n              </form>\n            )}\n          </FinalForm>\n\n          <hr />\n\n          <FinalForm\n            onSubmit={this.submitText}\n            validate={(values) => {\n              const errors = {} as any;\n              if (!values.emails) {\n                errors.emails = \"Required\";\n              }\n\n              if (!validatePhoneNumber(values.emails)) {\n                errors.emails = \"Improperly formatted Phone Number. Numeric Only.\";\n              }\n              return errors;\n            }}\n            initialValues={{\n              emails: SelectMobilePhoneNumber(job.phone_numbers),\n            }}>\n            {({ handleSubmit }) => (\n              <form onSubmit={handleSubmit}>\n                <Row>\n                  <Col sm={9}>\n                    <RsfFormGroup\n                      label=\"Phone Number\"\n                      name=\"emails\"\n                      testId=\"phonenumber\"\n                      component=\"input\"\n                      id=\"phonenumberid\"\n                    />\n                  </Col>\n\n                  <Col sm={3}>\n                    <Button variant=\"default\" type=\"submit\" className=\"dummy-label\">\n                      Send Text\n                    </Button>\n                  </Col>\n                </Row>\n              </form>\n            )}\n          </FinalForm>\n\n          {sendInviteType === \"screenshare\" ? (\n            <>\n              <hr />\n              <span className=\"login-text\">\n                <small>\n                  Having trouble setting up the Screen Share?&nbsp;\n                  <a href=\"#\" onClick={this.openScreenShareHelp}>\n                    Click Here\n                  </a>\n                </small>\n              </span>\n            </>\n          ) : null}\n        </Modal.Body>\n        <Modal.Footer>\n          <Button variant=\"cancel\" type=\"button\" onClick={this.closeModal}>\n            Cancel\n          </Button>\n        </Modal.Footer>\n        {sendInviteType === \"screenshare\" ? <TroubleshootingModal openModal={openScreenShareHelp} /> : null}\n      </Modal>\n    );\n  }\n}\n\nexport default connector(InviteModal);\n","import * as React from \"react\";\nimport { Modal, Row, Col, Button } from \"react-bootstrap\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { UserRecord } from \"app2/src/records/UserRecord\";\nimport CameraPhoto from \"jslib-html5-camera-photo\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: WebCamModalProps) => {\n  return {\n    displayWebCam: state.getIn([\"components\", \"common\", \"displayWebCam\"], false),\n    currentUser: denormalizedReduxUser(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: WebCamModalProps) => {\n  return {\n    closeWebCam: () => dispatch(commonActions.Actions.closeWebCamModal()),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface WebCamModalState {\n  size: string;\n}\n\ninterface WebCamModalProps {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & WebCamModalProps;\n\nclass WebCamModal extends React.Component<Props, WebCamModalState> {\n  public videoRef: any;\n  public cameraPhoto: any = null;\n\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      size: \"small\",\n    };\n\n    this.videoRef = React.createRef();\n    this.toggleSize = this.toggleSize.bind(this);\n  }\n\n  public componentDidUpdate(prevProps): void {\n    const { displayWebCam } = this.props;\n    if (!prevProps.displayWebCam && displayWebCam) {\n      this.setupCamera();\n      this.setState({\n        size: \"small\",\n      });\n    }\n    if (prevProps.displayWebCam && !displayWebCam) {\n      this.stopCamera();\n    }\n  }\n\n  public stopCamera() {\n    this.cameraPhoto.stopCamera().catch((error) => {\n      console.error(\"No camera to stop!:\", error);\n    });\n  }\n\n  public setupCamera() {\n    this.cameraPhoto = new CameraPhoto(this.videoRef.current);\n    this.cameraPhoto.startCamera().catch((err) => {\n      console.error(err);\n    });\n  }\n\n  public toggleSize() {\n    this.setState((state) => {\n      let size = \"small\";\n      if (state.size === \"small\") {\n        size = \"large\";\n      }\n      return {\n        size: size,\n      };\n    });\n  }\n\n  public render() {\n    const { displayWebCam, closeWebCam, currentUser } = this.props;\n    const { size } = this.state;\n    const modalClass = \"web-cam-modal \" + size;\n\n    return (\n      <Modal\n        show={displayWebCam}\n        onHide={closeWebCam}\n        className={modalClass}\n        backdrop={false}\n        autoFocus={false}\n        enforceFocus={false}>\n        <Modal.Header closeButton>\n          <Row>\n            <Col>\n              <Modal.Title>\n                {currentUser ? (\n                  <h3>\n                    {currentUser.first_name} {currentUser.last_name}\n                  </h3>\n                ) : (\n                  <h3 />\n                )}\n              </Modal.Title>\n            </Col>\n            <Col>\n              <Button className=\"btn-expand\" onClick={this.toggleSize}>\n                <FontAwesome name=\"expand\" />\n              </Button>\n            </Col>\n          </Row>\n        </Modal.Header>\n        <Modal.Body>\n          <video ref={this.videoRef} autoPlay={true} />\n          {size === \"large\" ? (\n            <a className=\"fullscreen\" onClick={this.toggleSize}>\n              <FontAwesome className=\"link\" name=\"close\" />\n              &nbsp;Close\n            </a>\n          ) : null}\n        </Modal.Body>\n      </Modal>\n    );\n  }\n}\n\nexport default connector(WebCamModal);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { ScreenShareService } from \"app/src/Jobs/ScreenShareService\";\nimport WebCamModal from \"app2/src/components/ScreenShare/components/WebCamModal\";\nimport { ScreenShareKindValues, ScreenShareStatusValues } from \"app2/src/reducers/screenShare.reducer\";\nimport { IJobRecord } from \"app2/src/records/Job\";\nimport { IScreenShareData, ScreenShareRecord } from \"app2/src/records/ScreenShare\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as screenShareActions from \"app2/src/reducers/screenShare.actions\";\nimport { UserRecord } from \"app2/src/records/UserRecord\";\nimport { getPrefConfig } from \"app2/src/records/OrgRecord\";\nimport { getRemoteStorage } from \"app2/src/api/remoteStorage.service\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: ScreenShareProps) => {\n  const job = state.getIn([\"components\", \"common\", \"currentJob\"]);\n\n  return {\n    screenShareKind: state.getIn([\"screenShares\", \"byJobId\", job.id, \"screenShareKind\"], \"basic\"),\n    screenShareStatus: state.getIn([\"screenShares\", \"byJobId\", job.id, \"screenShareStatus\"], null),\n    token: state.getIn([\"auth\", \"token\"]),\n    currentJob: job,\n    currentUser: denormalizedReduxUser(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ScreenShareProps) => {\n  return {\n    setRemoteScreenShareKind: (jobId: number, kind: ScreenShareKindValues) => {\n      dispatch(screenShareActions.AsyncActions.setRemoteScreenShareKind(jobId, kind));\n    },\n    setRemoteScreenShareStatus: (jobId: number, status: ScreenShareStatusValues) => {\n      dispatch(screenShareActions.AsyncActions.setRemoteScreenShareStatus(jobId, status));\n    },\n    saveScreenShareStop: (jobId: number, screenShareId: number) =>\n      dispatch(screenShareActions.AsyncActions.saveScreenShareStop(jobId, screenShareId)),\n    notifierAddRemoteMessage: (msg) => dispatch(commonActions.AsyncActions.notifierAddRemoteMessage(msg)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ScreenShareProps {\n  $scope: ng.IScope;\n  ScreenShareService: ScreenShareService;\n  $state: ng.ui.IStateService;\n}\n\ninterface ScreenShareState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ScreenShareProps;\n\nclass ScreenShare extends React.Component<Props, ScreenShareState> {\n  private _cleanupListeners: any[] = [];\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {};\n\n    props.$scope.$on(\"$destroy\", () => {\n      _.each(this._cleanupListeners, (func: () => void) => {\n        if (_.isFunction(func)) {\n          func();\n        }\n      });\n    });\n  }\n\n  public componentDidUpdate(prevProps: Props) {\n    const { screenShareKind, currentJob, setRemoteScreenShareKind, currentUser, token } = this.props;\n\n    if (token && currentUser && currentUser.id > 0 && !getRemoteStorage().initialized) {\n      getRemoteStorage().connect(currentUser.uuid);\n    }\n\n    if (prevProps.token && !token) {\n      getRemoteStorage().disconnect();\n    }\n\n    if (prevProps.currentJob.id !== currentJob.id) {\n      setRemoteScreenShareKind(currentJob.id, getPrefConfig(currentUser.org, [\"screen_share\", \"kind\"]));\n    } else {\n      switch (screenShareKind) {\n        case \"basic\":\n          this.basicScreenShareWatch(prevProps);\n          break;\n        case \"premium\":\n          this.premiumScreenShareWatch(prevProps);\n          break;\n      }\n    }\n  }\n\n  public basicScreenShareWatch(prevProps: Props) {\n    const { screenShareStatus, $scope, ScreenShareService, setRemoteScreenShareKind, currentUser, currentJob } =\n      this.props;\n    if (_.includes([\"stop_requested\", \"off\"], prevProps.screenShareStatus) && screenShareStatus === \"start_requested\") {\n      ScreenShareService.setup($scope);\n      ScreenShareService.startSharing();\n    }\n    if (\n      _.includes([\"start_requested\", \"active\", \"tab_opened\"], prevProps.screenShareStatus) &&\n      screenShareStatus === \"stop_requested\"\n    ) {\n      ScreenShareService.stop();\n      setRemoteScreenShareKind(currentJob.id, getPrefConfig(currentUser.org, [\"screen_share\", \"kind\"]));\n    }\n  }\n\n  public premiumScreenShareWatch(prevProps: Props) {\n    const { screenShareStatus, $state, currentJob } = this.props;\n\n    if (_.includes([\"stop_requested\", \"off\"], prevProps.screenShareStatus) && screenShareStatus === \"start_requested\") {\n      const url = $state.href(\"screen_share_host\", {\n        uid: currentJob.uid,\n        job_id: currentJob.id,\n      });\n      window.open(url, \"_blank\");\n    }\n  }\n\n  public render() {\n    return (\n      <React.Fragment>\n        <WebCamModal />\n      </React.Fragment>\n    );\n  }\n}\n\nexport default connector(ScreenShare);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { Toast } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { List } from \"immutable\";\n\nconst mapStateToProps = (state: RootState, ownProps: NotiferProps) => {\n  return {\n    notifierMessages: state.getIn([\"components\", \"common\", \"notifierMessages\"], List()),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: NotiferProps) => {\n  return {\n    closeNotifierMessage: (idx: number) => dispatch(commonActions.Actions.notifierRemoveMessage(idx)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface NotiferProps {}\n\ninterface NotiferState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport type Props = PropsFromRedux & NotiferProps;\n\nclass Notifer extends React.Component<Props, NotiferState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {};\n  }\n\n  public render() {\n    const { notifierMessages, closeNotifierMessage } = this.props;\n    return (\n      <div className=\"toast-container\">\n        <div className=\"toast-stack\">\n          <React.Fragment>\n            {notifierMessages.toArray().map((message: string, idx: number) => {\n              setTimeout(() => {\n                closeNotifierMessage(idx);\n              }, 5000);\n              return (\n                <Toast key={idx}>\n                  <Toast.Body>\n                    <FontAwesome name=\"info-circle\" id=\"info-icon\" />\n                    &nbsp;&nbsp;\n                    {message}\n                  </Toast.Body>\n                </Toast>\n              );\n            })}\n          </React.Fragment>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default connector(Notifer);\n","import * as React from \"react\";\nimport { List, Record } from \"immutable\";\nimport Select, { Options } from \"react-select\";\n\ninterface ReactSelectWrapperProps {\n  defaultValue: List<Record<{ id: number; name: string }>>;\n  available: List<Record<{ id: number; name: string }>>;\n  onChange: (list: Options<List<Record<{ id: number; name: string }>>>) => void;\n}\n\nexport interface ReactSelectWrapperState {}\n\nexport class ReactSelectWrapper extends React.Component<ReactSelectWrapperProps, ReactSelectWrapperState> {\n  constructor(props: ReactSelectWrapperProps) {\n    super(props);\n\n    this.state = {};\n  }\n\n  public render() {\n    const { defaultValue, available, onChange } = this.props;\n\n    if (!defaultValue) {\n      return <></>;\n    }\n\n    return (\n      <Select\n        defaultValue={defaultValue || []}\n        options={(available || List()).toArray()}\n        onChange={onChange}\n        closeMenuOnSelect={false}\n        isMulti\n        getOptionLabel={(x: any) => x.name.toString()}\n        getOptionValue={(x: any) => x.id.toString()}></Select>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { Modal, Button, Row, Col, Alert } from \"react-bootstrap\";\nimport Files from \"react-files\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport * as config from \"react-global-configuration\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { ITaskData } from \"app2/src/records/Task\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { Dispatch, TrackingData } from \"app2/src/helpers/Analytics\";\nimport { Actions as CommonActions } from \"app2/src/reducers/components/common.actions\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nconst mapStateToProps = (state: RootState) => {\n  return {\n    orgId: state.getIn([\"users\", \"currentUser\", \"org_id\"]),\n    getTask: (taskId: string) => state.getIn([\"tasks\", \"byId\", taskId]),\n    showImportModal: state.getIn([\"components\", \"common\", \"showImportModal\"]),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    importJobs: (orgId: number, csvText: string) => {\n      return dispatch(jobActions.AsyncActions.importJobs(orgId, csvText));\n    },\n    closeImportModal: () => dispatch(CommonActions.closeImportModal()),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ImportCsvProps {\n  refreshQuery: any;\n  tracking?: TrackingProp;\n}\n\ninterface ImportCsvState {\n  csvText: string;\n  fileName: string;\n  taskId: string;\n  updatedJobList: boolean;\n  showInvalidCSVError: boolean;\n  invalidCSVReason: string;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImportCsvProps;\n\nconst track: Track<TrackingData, ImportCsvProps> = _track;\n\n@track(\n  (props: ImportCsvProps) => {\n    return {\n      category: \"ImportCsv Modal\",\n      action: \"show\",\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n    dispatchOnMount: true,\n  },\n)\nclass ImportCsv extends React.Component<Props, ImportCsvState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.importCsv = this.importCsv.bind(this);\n    this.closeModal = this.closeModal.bind(this);\n    this.onFilesChanged = this.onFilesChanged.bind(this);\n    this.updateJobList = this.updateJobList.bind(this);\n    this.closeAlert = this.closeAlert.bind(this);\n    this.cleanState = this.cleanState.bind(this);\n\n    this.state = {\n      csvText: \"\",\n      fileName: \"\",\n      taskId: \"\",\n      updatedJobList: false,\n      showInvalidCSVError: false,\n      invalidCSVReason: \"\",\n    };\n  }\n\n  public cleanState() {\n    this.setState({\n      csvText: \"\",\n      fileName: \"\",\n      taskId: \"\",\n      updatedJobList: false,\n      showInvalidCSVError: false,\n      invalidCSVReason: \"\",\n    });\n  }\n\n  public componentDidUpdate(prevProps: ImportCsvProps) {\n    const { getTask, tracking } = this.props;\n    const { updatedJobList, taskId } = this.state;\n    const task = getTask(taskId);\n    if (task && task.status === \"finished\" && updatedJobList === false) {\n      this.updateJobList();\n      this.setState({ updatedJobList: true });\n      tracking.trackEvent({\n        action: \"Successfully Imported CSV\",\n      });\n    } else if (task && task.status === \"error\") {\n      tracking.trackEvent({\n        action: \"Error Importing CSV\",\n      });\n    }\n  }\n\n  public updateJobList() {\n    const { refreshQuery } = this.props;\n    refreshQuery();\n  }\n\n  public closeModal() {\n    const { closeImportModal } = this.props;\n    closeImportModal();\n    this.cleanState();\n  }\n\n  public trackSupportUrl() {\n    const { tracking } = this.props;\n    tracking.trackEvent({\n      action: \"Clicked Support URL\",\n    });\n  }\n\n  public trackSampleFileUrl() {\n    const { tracking } = this.props;\n    tracking.trackEvent({\n      action: \"Clicked Sample File URL\",\n    });\n  }\n\n  @track({ action: \"CSV Import Started\" })\n  public async importCsv() {\n    this.setState({\n      showInvalidCSVError: false,\n      invalidCSVReason: \"\",\n    });\n    const { csvText } = this.state;\n    const { orgId, importJobs } = this.props;\n    try {\n      const taskId = await importJobs(orgId, csvText);\n      this.setState({ taskId });\n    } catch (e) {\n      console.error(e);\n      this.setState({\n        showInvalidCSVError: true,\n        invalidCSVReason: e.data.error,\n      });\n    }\n  }\n\n  @track({ action: \"CSV File Uploaded\" })\n  public async onFilesChanged(files: any) {\n    const file = files[0];\n    const csvText = await file.text();\n    this.setState({ csvText, fileName: file.name });\n  }\n\n  public closeAlert() {\n    this.setState({\n      showInvalidCSVError: false,\n      invalidCSVReason: \"\",\n    });\n  }\n\n  public render() {\n    const { csvText, fileName, taskId, showInvalidCSVError, invalidCSVReason } = this.state;\n    const { getTask, showImportModal } = this.props;\n    const task = getTask(taskId);\n    let logItems;\n    if (task && task.logs) {\n      logItems = task.logs.split(\"<br>\").map((log: string, idx: number) => {\n        return (\n          <div key={idx}>\n            {log}\n            <br />\n          </div>\n        );\n      });\n    }\n    return (\n      <Modal show={showImportModal}>\n        <Modal.Header>\n          <Modal.Title>Import CSV</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <Row>\n            <Col>\n              To bulk import jobs from a CSV, please upload a file below.\n              <br></br>\n              <a href={config.get(\"SAMPLE_JOB_CSV_FILE_URL\")} target=\"_blank\" onClick={this.trackSampleFileUrl}>\n                <u>Here is a sample import file</u>\n              </a>\n            </Col>\n          </Row>\n          <Row>\n            <Col md={4}>\n              <Files accepts={[\".csv\"]} maxFileSize={1000000} onChange={this.onFilesChanged} multiple={false} clickable>\n                <Button variant=\"default\">Select CSV</Button>\n              </Files>\n            </Col>\n            <Col md={8}>\n              <h5>Uploaded: {fileName !== \"\" ? fileName : \"No File Uploaded\"}</h5>\n            </Col>\n          </Row>\n          <Row className=\"d-flex justify-content-end\">\n            <Col md={6}>\n              Need help?\n              <br></br>\n              <a href={config.get(\"SUPPORT_URL\")} target=\"_blank\" onClick={this.trackSupportUrl}>\n                <u>Click here for support.</u>\n              </a>\n            </Col>\n          </Row>\n          <Row>\n            <Alert show={showInvalidCSVError} variant=\"delete\" dismissible onClose={this.closeAlert}>\n              <br></br>\n              {invalidCSVReason}\n            </Alert>\n          </Row>\n          {taskId !== \"\" && task !== undefined && (\n            <>\n              <Row>\n                <Col>\n                  <h5>Status: {task.status}</h5>\n                </Col>\n              </Row>\n              <Row>\n                <Col>\n                  <h5>Results: {task.results[task.status] || \"\"}</h5>\n                </Col>\n              </Row>\n              <Row>\n                <Col>\n                  <h5>\n                    Log:\n                    <pre>{logItems}</pre>\n                  </h5>\n                </Col>\n              </Row>\n            </>\n          )}\n        </Modal.Body>\n        <Modal.Footer>\n          <Button onClick={this.closeModal} variant=\"cancel\">\n            Close\n          </Button>\n          <Button disabled={csvText === \"\"} onClick={this.importCsv} variant=\"default\">\n            Import\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    );\n  }\n}\n\nexport default connector(ImportCsv);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { getFullName } from \"app2/src/records/UserRecord\";\nimport ImportCsv from \"app2/src/components/JobList/ImportCsv\";\nimport { Dropdown, Row, Col, Image } from \"react-bootstrap\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport * as config from \"react-global-configuration\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\nimport { Actions as CommonActions } from \"app2/src/reducers/components/common.actions\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { Dispatch, TrackingData } from \"app2/src/helpers/Analytics\";\nimport { getIn } from \"immutable\";\nimport { org as orgById } from \"app2/src/selectors/org.selectors\";\nimport { CustomLink } from \"app2/src/components/Common/CustomLink\";\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>) => {\n  return {\n    openImportModal: () => dispatch(CommonActions.openImportModal()),\n  };\n};\n\nconst mapStateToProps = (state: RootState, ownProps: UserHeaderInfoProps) => {\n  const currentUser = denormalizedReduxUser(state);\n  const currentUserOrgId = getIn(currentUser, [\"org_id\"], null);\n  return {\n    currentUser: currentUser,\n    currentOrg: orgById(state, { orgId: currentUserOrgId }),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface UserHeaderInfoProps {\n  detailed: boolean;\n  refreshQuery: any;\n  navDisplay: boolean;\n  $state: any;\n  tracking?: TrackingProp;\n}\n\ninterface ServiceProps {\n  JobInfoTourService: any;\n  $rootScope: any;\n  JobShowTourService: any;\n}\n\ninterface UserHeaderInfoState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport type Props = PropsFromRedux & UserHeaderInfoProps & ServiceProps;\nconst track: Track<TrackingData, UserHeaderInfoProps> = _track;\n\n@track(\n  (props: UserHeaderInfoProps) => {\n    return {\n      category: \"UserHeaderInfo\",\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n    dispatchOnMount: true,\n  },\n)\nclass UserHeaderInfo extends React.Component<Props, UserHeaderInfoState> {\n  public constructor(props) {\n    super(props);\n\n    this.logout = this.logout.bind(this);\n    this.jobInfo = this.jobInfo.bind(this);\n  }\n\n  public logout() {\n    const { $state } = this.props;\n    $state.go(\"root.logout\");\n  }\n\n  public jobInfo() {\n    const { tracking, JobInfoTourService, $rootScope, JobShowTourService, navDisplay } = this.props;\n    tracking.trackEvent({\n      action: \"job tour requested\",\n      navDisplay: !navDisplay,\n    });\n    JobInfoTourService.help().then(() => {\n      $rootScope.$broadcast(\"header:help:job_info\");\n      JobShowTourService.help();\n    });\n  }\n\n  public render() {\n    const { currentUser, currentOrg, refreshQuery, detailed, $state, openImportModal } = this.props;\n\n    if (!currentUser || !currentOrg) {\n      return <div />;\n    }\n\n    return (\n      <Dropdown className=\"user-header-info-dropdown\">\n        <Dropdown.Toggle\n          variant=\"secondary\"\n          size=\"sm\"\n          as=\"div\"\n          id=\"dropdown-basic\"\n          className=\"d-flex align-items-center\"\n          style={{ cursor: \"pointer\" }}\n          data-testid=\"dropdown-toggle\">\n          <Row>\n            {detailed && currentOrg.images && currentOrg.images.size > 0 && (\n              <Col xs={3} md={3} className=\"d-flex align-items-center pr-0 user-header-info-image\">\n                <Image src={getUrl(currentOrg.images.first(), \"small\")} fluid />\n              </Col>\n            )}\n            <Col xs={detailed ? 9 : 12} md={detailed ? 9 : 12} className=\"d-flex flex-column small\">\n              <h4 className=\"mb-0\">\n                <b className=\"d-inline-block text-truncate user-full-name\">{getFullName(currentUser)}</b>\n              </h4>\n              <div className=\"org-info\">\n                {currentOrg.name}\n                {detailed && (\n                  <>\n                    <br />\n                    {currentOrg.address.city} {currentOrg.address.state}\n                  </>\n                )}\n              </div>\n            </Col>\n          </Row>\n        </Dropdown.Toggle>\n        <Dropdown.Menu className=\"user-header-info-dropdown-menu\">\n          {currentUser.accesses_count > 1 && (\n            <>\n              <Dropdown.Item as=\"div\" className=\"m-0 p-0\">\n                <CustomLink tag=\"a\" to={$state.href(\"root.accesses\")} className=\"dropdown-item\">\n                  Select Organization\n                </CustomLink>\n              </Dropdown.Item>\n              <Dropdown.Divider />\n            </>\n          )}\n          <Dropdown.Item as=\"div\" className=\"m-0 p-0\">\n            <CustomLink tag=\"a\" to={$state.href(\"root.profile\")} className=\"dropdown-item\">\n              Profile\n            </CustomLink>\n          </Dropdown.Item>\n          <Dropdown.Divider />\n          {config.get(\"SUPPORT_URL\") && (\n            <>\n              <Dropdown.Item href={config.get(\"SUPPORT_URL\")} target=\"_blank\">\n                Support Resources\n              </Dropdown.Item>\n              <Dropdown.Divider />\n            </>\n          )}\n          <Dropdown.Item onClick={this.jobInfo}>Job Tour</Dropdown.Item>\n          <Dropdown.Divider />\n          <Dropdown.Item>Version {(config.get(\"VERSION\") || \"\").toString().toUpperCase()}</Dropdown.Item>\n          <Can resource=\"HeaderPanel\" permission=\"signed_docs\">\n            <Dropdown.Divider />\n            <Dropdown.Item as=\"div\">\n              <CustomLink tag=\"a\" to={$state.href(\"root.signed_doc_list\")} data-testid=\"signed_doc_list\">\n                Signatures\n              </CustomLink>\n            </Dropdown.Item>\n          </Can>\n          <Dropdown.Divider />\n          <Dropdown.Item onClick={openImportModal}>Import</Dropdown.Item>\n          <ImportCsv refreshQuery={refreshQuery} />\n          <Dropdown.Divider />\n          <Dropdown.Item onClick={this.logout}>Logout</Dropdown.Item>\n        </Dropdown.Menu>\n      </Dropdown>\n    );\n  }\n}\n\nexport default connector(UserHeaderInfo);\n","import * as React from \"react\";\nimport { Badge, Row, Col, ButtonGroup } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { appMessage } from \"app2/src/selectors/appMessage.selectors\";\nimport { AppMessageRecipientRecord, isRead } from \"app2/src/records/AppMessage\";\nimport { AsyncActions } from \"app2/src/reducers/appMessage.actions\";\nimport DateTime from \"app2/src/components/Common/DateTime\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\n\ninterface AppMessageItemProps {\n  messageId: string;\n  isExpanded: boolean;\n  onToggleExpand: (id: string) => void;\n}\n\nconst AppMessageItem: React.FC<AppMessageItemProps> = ({ messageId, isExpanded, onToggleExpand }) => {\n  const dispatch = useDispatch();\n  const message: AppMessageRecipientRecord = useSelector((state) => appMessage(state, { messageId }));\n\n  const handleViewClick = () => {\n    onToggleExpand(message.id);\n\n    // Mark as read when viewing if it's unread\n    if (!isRead(message)) {\n      dispatch(AsyncActions.markAsRead(message.id));\n    }\n  };\n\n  const onArchive = () => {\n    dispatch(AsyncActions.archiveMessage(message.id));\n  };\n\n  const isUnread = !isRead(message);\n\n  return (\n    <>\n      <Row className=\"table-row\" data-testid=\"AppMessageItem\">\n        <Col sm={2} onClick={handleViewClick} style={{ cursor: \"pointer\" }}>\n          <Badge variant={message.app_message.level} style={!isUnread ? { opacity: 0.5 } : undefined}>\n            {isUnread ? (\n              <>\n                <i className=\"fa fa-circle mr-1\" style={{ fontSize: \"8px\" }}></i>\n                Unread\n              </>\n            ) : (\n              \"Read\"\n            )}\n          </Badge>\n        </Col>\n        <Col\n          className=\"break-word\"\n          title={message.app_message.subject}\n          onClick={handleViewClick}\n          style={{ cursor: \"pointer\" }}>\n          {message.app_message.subject}\n        </Col>\n        <Col sm={2} onClick={handleViewClick} style={{ cursor: \"pointer\" }}>\n          <DateTime date={message.created_at} variant=\"vertical\" />\n        </Col>\n        <Col sm={2}>\n          <ButtonGroup>\n            <a\n              className=\"action-button\"\n              href=\"#\"\n              title={isExpanded ? \"Hide Details\" : \"View Details\"}\n              onClick={(e) => {\n                e.preventDefault();\n                handleViewClick();\n              }}>\n              <i className={`rsf-base-link fa-${isExpanded ? \"chevron-up\" : \"chevron-down\"} rsf-base-66`}></i>\n            </a>\n            <ConfirmDialog title=\"Are you sure you want to delete this message?\">\n              {(confirm) => (\n                <a className=\"action-button\" href=\"#\" title=\"Archive Message\" onClick={confirm(onArchive)}>\n                  <i className=\"rsf-base-link fa-trash rsf-base-66\"></i>\n                </a>\n              )}\n            </ConfirmDialog>\n          </ButtonGroup>\n        </Col>\n      </Row>\n      {isExpanded && (\n        <Row className=\"table-row\">\n          <Col sm={12}>\n            <div className=\"p-3\">\n              <div dangerouslySetInnerHTML={{ __html: message.app_message.body_html }} />\n            </div>\n          </Col>\n        </Row>\n      )}\n    </>\n  );\n};\n\nexport default AppMessageItem;\n","import * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Card, Row, Col } from \"react-bootstrap\";\nimport AppMessageItem from \"./AppMessageItem\";\nimport { getViewMessageId } from \"app2/src/selectors/appMessage.selectors\";\nimport { Actions, AsyncActions } from \"app2/src/reducers/appMessage.actions\";\nimport { StandardPagination } from \"../Pagination/Standard\";\nimport { ids, pageRecord, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\n\nconst AppMessagesList: React.FC = () => {\n  const dispatch = useDispatch();\n  const expandedId = useSelector(getViewMessageId);\n\n  const messageQueryParams = useSelector((state) => queryParams(state, { modelName: \"appMessages\" }));\n  const messagePagination = useSelector((state) =>\n    pagination(state, { modelName: \"appMessages\", page: messageQueryParams.get(\"page\") }),\n  );\n\n  const page = useSelector((state) =>\n    pageRecord(state, { modelName: \"appMessages\", page: messageQueryParams.get(\"page\") }),\n  );\n  const messageIds = useSelector((state) => ids(state, { modelName: \"appMessages\" }));\n\n  React.useEffect(() => {\n    loadMessagesPage(1);\n  }, [dispatch]);\n\n  const handleToggleExpand = (id: string) => {\n    const nextId = expandedId === id ? null : id;\n    dispatch(Actions.showMessageModal(nextId));\n  };\n\n  const loadMessagesPage = (page: number) => {\n    dispatch(AsyncActions.loadMessages(messageQueryParams.set(\"page\", page)));\n  };\n\n  return (\n    <>\n      <SpinnerComponent localProperty={page?.isLoading} />\n      <div className=\"app-messages-container\">\n        {messageIds?.size > 0 ? (\n          <Card className=\"shadow-sm\">\n            <div className=\"list-group list-group-flush\">\n              {messageIds.map((messageId) => (\n                <AppMessageItem\n                  key={messageId}\n                  messageId={messageId}\n                  isExpanded={expandedId === messageId}\n                  onToggleExpand={handleToggleExpand}\n                />\n              ))}\n            </div>\n          </Card>\n        ) : (\n          <Row>\n            <Col>\n              <div className=\"form-section blank-state\">\n                <img src=\"/assets/images/icons-large/empty-inbox.c8828f22.png\" />\n                <h2>No messages.</h2>\n                <p>You're all caught up!</p>\n              </div>\n            </Col>\n          </Row>\n        )}\n      </div>\n      {messageIds?.size > 0 ? <StandardPagination metadata={messagePagination} pageChanged={loadMessagesPage} /> : null}\n    </>\n  );\n};\n\nexport default AppMessagesList;\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { Modal, Button } from \"react-bootstrap\";\nimport AppMessagesList from \"app2/src/components/AppMessages/AppMessagesList\";\nimport { Actions, AsyncActions } from \"app2/src/reducers/appMessage.actions\";\nimport { getShowMessageModal } from \"app2/src/selectors/appMessage.selectors\";\nimport { getRemoteStorage } from \"app2/src/api/remoteStorage.service\";\nimport { queryParamsFromJSON } from \"app2/src/records/Page\";\n\ninterface BellProps {\n  hideLeftSeparator?: boolean;\n}\n\nexport const Bell: React.FunctionComponent<BellProps> = ({ hideLeftSeparator }) => {\n  const dispatch = useDispatch();\n  const unreadCount = useSelector((state: RootState) => state.getIn([\"appMessages\", \"metadata\", \"unread_total\"], 0));\n  const remoteStorage = getRemoteStorage();\n  const showModal = useSelector(getShowMessageModal);\n\n  // Initialize AppMessage WebSocket subscriptions when component mounts\n  // IMPORTANT: Must initialize callbacks BEFORE joining channel to receive initial messages\n  React.useEffect(() => {\n    if (remoteStorage && remoteStorage?.initialized) {\n      dispatch(AsyncActions.initializeAppMessages(remoteStorage));\n    }\n  }, [remoteStorage]);\n\n  const handleClick = () => {\n    dispatch(Actions.showMessageModal(null));\n    dispatch(AsyncActions.loadMessages(queryParamsFromJSON({ page: 1 })));\n  };\n\n  const handleClose = () => {\n    dispatch(Actions.hideMessageModal());\n  };\n\n  const displayCount = unreadCount > 99 ? \"99+\" : unreadCount.toString();\n\n  return (\n    <>\n      <div className=\"d-inline-flex align-items-center\">\n        {!hideLeftSeparator && (\n          <span\n            className=\"border-right\"\n            style={{\n              height: \"30px\",\n              borderColor: \"#dee2e6\",\n              marginRight: \"20px\",\n            }}\n          />\n        )}\n        <div\n          className=\"message-bell position-relative d-inline-flex align-items-center\"\n          style={{ cursor: \"pointer\" }}\n          onClick={handleClick}>\n          <i className=\"fa fa-bell fa-2x text-muted\" title=\"Messages\"></i>\n          {unreadCount > 0 && (\n            <span\n              className=\"badge badge-danger position-absolute rounded-pill\"\n              style={{\n                top: \"-5px\",\n                right: \"-12px\",\n                fontSize: \"0.65rem\",\n                minWidth: \"18px\",\n                height: \"18px\",\n                display: \"flex\",\n                alignItems: \"center\",\n                justifyContent: \"center\",\n                padding: \"0 4px\",\n              }}>\n              {displayCount}\n            </span>\n          )}\n        </div>\n        <span\n          className=\"border-left\"\n          style={{\n            height: \"30px\",\n            borderColor: \"#dee2e6\",\n            marginLeft: \"20px\",\n          }}\n        />\n      </div>\n      <Modal show={showModal} onHide={handleClose} size=\"xl\">\n        <Modal.Header closeButton>\n          <Modal.Title>Messages</Modal.Title>\n        </Modal.Header>\n        <Modal.Body className=\"p-0 overflow-y-auto overflow-x-hidden\">\n          <AppMessagesList />\n        </Modal.Body>\n        <Modal.Footer>\n          <Button onClick={handleClose}>Close</Button>\n        </Modal.Footer>\n      </Modal>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Bell } from \"app2/src/components/Common/MessageBell/Bell\";\n\nconst connector = connect(\n  () => ({}),\n  () => ({}),\n);\n\ninterface MessageBellProps {\n  hideLeftSeparator?: boolean;\n}\n\ninterface MessageBellState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport type Props = PropsFromRedux & MessageBellProps;\n\nclass MessageBell extends React.Component<Props, MessageBellState> {\n  public constructor(props: Props) {\n    super(props);\n    this.state = {};\n  }\n\n  public render(): React.ReactNode {\n    const { hideLeftSeparator } = this.props;\n\n    return <Bell hideLeftSeparator={hideLeftSeparator} />;\n  }\n}\n\nexport default connector(MessageBell);\n","import { subscriber } from \"app2/src/helpers/Subscribe\";\nimport { RouterState } from \"app2/src/reducers/router.reducer\";\n\nclass RouterHelper {\n  private $state: ng.ui.IStateService;\n\n  constructor() {\n    subscriber.subscribe(\"routerPush\", (data: RouterState) => {\n      const { pathname, query } = data.location;\n\n      if (!pathname) {\n        return;\n      }\n\n      const options: any = {};\n      if (data.action === \"replace\") {\n        options.notify = false;\n        options.location = \"replace\";\n        options.reload = false;\n      }\n\n      this.$state.go(pathname, query, options);\n    });\n  }\n\n  public setup($state: ng.ui.IStateService) {\n    this.$state = $state;\n  }\n}\n\nexport const Router = new RouterHelper();\n","import * as React from \"react\";\nimport { Row, Col, ButtonGroup } from \"react-bootstrap\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport DateTime from \"app2/src/components/Common/DateTime\";\nimport { image as imageRecord } from \"app2/src/selectors/image.selectors\";\nimport { ImageRecord, getUrl } from \"app2/src/records/Image\";\nimport * as imageActions from \"app2/src/reducers/image.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { IncludeCheckBox } from \"app2/src/components/Common/IncludeCheckBox\";\nimport { List } from \"immutable\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport track, { TrackingProp } from \"react-tracking\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { coverImage } from \"app2/src/selectors/job.selectors\";\nimport { elevationExists } from \"app2/src/selectors/elevation.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState, ownProps: ImageProps) => {\n  const image = imageRecord(state, { imageId: ownProps.imageId });\n  return {\n    image,\n    coverImageCheck: coverImage(state, { imageUuid: image?.uuid }),\n    elevationExists: elevationExists(state, { imageId: ownProps.imageId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: ImageProps) => {\n  return {\n    destroyImage: (image: ImageRecord) => dispatch(imageActions.AsyncActions.destroyImage(image)),\n    editBoolean: (name: string, value: boolean) =>\n      dispatch(imageActions.Actions.editBoolean(ownProps.imageId, name, value)),\n    updateImage: () => dispatch(imageActions.AsyncActions.batchUpdateImage(List([ownProps.imageId]))),\n    editCoverImage: (uuid: string) => dispatch(jobActions.AsyncActions.editCoverImage(uuid)),\n    setCurrentImageId: () => dispatch(imageActions.Actions.setCurrentImageId(ownProps.imageId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ImageState {}\n\ninterface ImageProps {\n  imageId: number;\n  dragHandle?: any;\n  allowDestroy?: boolean;\n  tracking?: TrackingProp;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImageProps;\n@track((props) => {\n  return {\n    component: \"Image\",\n    image: props.imageId,\n  };\n})\nclass Image extends React.Component<Props, ImageState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.checkBoxOnChange = this.checkBoxOnChange.bind(this);\n    this.destroyImage = this.destroyImage.bind(this);\n    this.edit = this.edit.bind(this);\n    this.setCoverImage = this.setCoverImage.bind(this);\n    this.removeCoverImage = this.removeCoverImage.bind(this);\n    this.viewImageLink = this.viewImageLink.bind(this);\n  }\n\n  @track((_props, _state, [event]) => ({\n    action: \"checkBoxChanged\",\n    category: \"CheckBox\",\n    label: \"\",\n    type: event.target.name,\n    value: event.target.checked,\n    checkboxType: event.target.name,\n  }))\n  public checkBoxOnChange(event: any): void {\n    const { editBoolean, updateImage } = this.props;\n    editBoolean(event.target.name, event.target.checked);\n    if (event.target.name !== \"selected\") {\n      updateImage();\n    }\n  }\n\n  @track(() => ({\n    action: \"open photo editor\",\n  }))\n  public edit(): void {\n    this.props.setCurrentImageId();\n  }\n\n  @track(() => ({\n    action: \"photo deleted\",\n  }))\n  public async destroyImage() {\n    const { image, destroyImage } = this.props;\n    await destroyImage(image);\n  }\n\n  @track(() => ({\n    action: \"view photo link\",\n  }))\n  public viewImageLink(): void {}\n\n  @track(() => ({\n    action: \"cover image set\",\n  }))\n  public setCoverImage(): void {\n    const { image } = this.props;\n    this.props.editCoverImage(image.uuid);\n  }\n\n  @track(() => ({\n    action: \"remove cover image\",\n  }))\n  public removeCoverImage(): void {\n    this.props.editCoverImage(null);\n  }\n\n  public render() {\n    const { image, dragHandle, coverImageCheck, elevationExists } = this.props;\n\n    if (isNullOrUndefined(image)) {\n      return null;\n    }\n\n    return (\n      <>\n        <Row className=\"table-row\" data-testid=\"Image\">\n          <Col sm={1} className=\"pr-0\">\n            <Can resource=\"job\" permission=\"update\">\n              <IncludeCheckBox name=\"selected\" checked={image.selected} onChange={this.checkBoxOnChange} />\n              {coverImageCheck ? (\n                <a\n                  title=\"Remove as Cover Photo\"\n                  style={{ marginRight: \"0.75em\" }}\n                  onClick={this.removeCoverImage}\n                  href=\"#\">\n                  <i className=\"fa fa-gray fa-star link\"></i>\n                </a>\n              ) : (\n                <a title=\"Mark as Cover Photo\" style={{ marginRight: \"0.75em\" }} onClick={this.setCoverImage} href=\"#\">\n                  <i className=\"fa fa-gray fa-star-o link\"></i>\n                </a>\n              )}\n              {dragHandle && <img {...dragHandle} src=\"/assets/images/icons/ic_sort.ea6f8933.png\" />}\n            </Can>\n          </Col>\n          <Col sm={1}>\n            <a href={image.file.url} target=\"_blank\" title=\"Open Image in new tab\">\n              <img className=\"img-contain\" style={{ maxHeight: \"44px\" }} src={getUrl(image, \"small\")} />\n            </a>\n          </Col>\n          <Col className=\"break-word\" title={image.title || image.name}>\n            {image.title || image.name}\n          </Col>\n          <Col sm={2}>\n            <DateTime date={image.created_at} variant=\"vertical\" />\n          </Col>\n          <Col sm={2}>\n            <SpinnerComponent localProperty={image.loading} localInline />\n            {!image.loading && (\n              <Can resource=\"job\" permission=\"update\">\n                <IncludeCheckBox\n                  name=\"displayInProposal\"\n                  label=\"\"\n                  checked={image.displayInProposal}\n                  onChange={this.checkBoxOnChange}\n                />\n              </Can>\n            )}\n          </Col>\n          <Col sm={2}>\n            <SpinnerComponent localProperty={image.loading} localInline />\n            {!image.loading && (\n              <Can resource=\"job\" permission=\"update\">\n                <IncludeCheckBox\n                  name=\"displayInAgreement\"\n                  checked={image.displayInAgreement}\n                  onChange={this.checkBoxOnChange}\n                />\n              </Can>\n            )}\n          </Col>\n          <Col sm={1}>\n            <Can resource=\"job\" permission=\"update\">\n              <ButtonGroup>\n                <a\n                  className=\"action-button job-edit-photo\"\n                  href=\"#\"\n                  title=\"Edit Title and Description\"\n                  onClick={this.edit}>\n                  <i className=\"rsf-edit-link rsf-base-66\"></i>\n                </a>\n                {elevationExists ? (\n                  <a className=\"action-button\" title=\"Image used for Elevation - Delete not available\">\n                    <i className=\"rsf-info-link rsf-base-66\"></i>\n                  </a>\n                ) : (\n                  <ConfirmDialog title={`Are you sure you want to delete image: ${image.name}?`}>\n                    {(confirm) => (\n                      <a\n                        className=\"action-button\"\n                        data-testid=\"destroy\"\n                        title=\"Delete Image\"\n                        onClick={confirm(this.destroyImage)}>\n                        <i className=\"rsf-delete-link rsf-base-66\"></i>\n                      </a>\n                    )}\n                  </ConfirmDialog>\n                )}\n              </ButtonGroup>\n            </Can>\n          </Col>\n        </Row>\n      </>\n    );\n  }\n}\n\nexport default connector(Image);\n","import * as React from \"react\";\nimport { Modal, Row, Col } from \"react-bootstrap\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentImageId, image } from \"app2/src/selectors/image.selectors\";\nimport * as imageActions from \"app2/src/reducers/image.actions\";\nimport track from \"react-tracking\";\nimport { RsfFormGroup } from \"app2/src/components/RsfForms/RsfFormGroup\";\nimport { Form as FinalForm } from \"react-final-form\";\nimport ButtonFooter from \"app2/src/components/Common/ButtonFooter\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  const imageId = currentImageId(state);\n  return {\n    imageId: imageId,\n    image: image(state, { imageId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    saveForm: (formData: any) => dispatch(imageActions.AsyncActions.saveForm(formData)),\n    setCurrentImageId: () => dispatch(imageActions.Actions.setCurrentImageId(null)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ImageEditorModalState {\n  show: boolean;\n}\n\ninterface ImageEditorModalProps {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImageEditorModalProps;\n@track((props) => {\n  return {\n    component: \"ImageEditorModal\",\n    image: props.imageId,\n  };\n})\nclass ImageEditorModal extends React.Component<Props, ImageEditorModalState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      show: true,\n    };\n\n    this.onSubmit = this.onSubmit.bind(this);\n    this.onHide = this.onHide.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: Props): void {\n    const { imageId } = this.props;\n    if (_.isNull(prevProps.imageId) && !isNullOrUndefined(imageId)) {\n      this.setState({ show: true });\n    }\n  }\n\n  @track(() => ({\n    action: \"save photo title and description\",\n  }))\n  public onSubmit(formData): void {\n    const { saveForm } = this.props;\n    saveForm(formData);\n    this.onHide();\n  }\n\n  @track(() => ({\n    action: \"close modal\",\n  }))\n  public onHide(): void {\n    this.props.setCurrentImageId();\n    this.setState({ show: false });\n  }\n\n  public render() {\n    const { image, imageId } = this.props;\n    const { show } = this.state;\n\n    if (isNullOrUndefined(imageId)) {\n      return null;\n    }\n\n    return (\n      <Modal show={show} onHide={this.onHide}>\n        <Modal.Header closeButton>\n          <Modal.Title>\n            <h3>Image Editor</h3>\n          </Modal.Title>\n        </Modal.Header>\n        <FinalForm\n          onSubmit={this.onSubmit}\n          initialValues={{\n            id: imageId,\n            title: image.title,\n            description: image.description,\n          }}>\n          {({ handleSubmit, form }) => (\n            <form onSubmit={handleSubmit}>\n              <Modal.Body>\n                <Row>\n                  <Col>\n                    <RsfFormGroup label=\"Title\" name=\"title\" component=\"input\" placeholder=\"Title\" />\n                    <RsfFormGroup\n                      label=\"Description\"\n                      name=\"description\"\n                      as=\"textarea\"\n                      component=\"input\"\n                      placeholder=\"Description\"\n                    />\n                  </Col>\n                </Row>\n              </Modal.Body>\n              <Modal.Footer>\n                <ButtonFooter cancel={this.onHide} />\n              </Modal.Footer>\n            </form>\n          )}\n        </FinalForm>\n      </Modal>\n    );\n  }\n}\n\nexport default connector(ImageEditorModal);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport * as imageActions from \"app2/src/reducers/image.actions\";\nimport { ids, pageRecord, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { StandardPagination } from \"app2/src/components/Pagination/Standard\";\nimport track from \"react-tracking\";\nimport Image from \"app2/src/components/JobTabs/ImageTab/Images/ImageList/Image\";\nimport { List } from \"immutable\";\nimport { push } from \"app2/src/reducers/router.actions\";\nimport { ILocationData } from \"app2/src/records/Location\";\nimport { IncludeCheckBox } from \"app2/src/components/Common/IncludeCheckBox\";\nimport { allImagesBoolean } from \"app2/src/selectors/image.selectors\";\nimport { Sortable } from \"app2/src/components/Common/Sortable\";\nimport { contractTitle, estimateTitle } from \"app2/src/selectors/org.selectors\";\nimport ImageEditorModal from \"app2/src/components/JobTabs/ImageTab/Images/ImageList/ImageEditorModal\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"image\",\n    imageQueryParams = queryParams(state, { modelName });\n  const page = imageQueryParams.get(\"page\");\n  const imageIds = ids(state, { modelName }) || List();\n  return {\n    imageIds,\n    page: pageRecord(state, { modelName, page }),\n    pagination: pagination(state, { modelName, page }),\n    selectedCheck: allImagesBoolean(state, { booleanName: \"selected\" }),\n    estimateTitle: estimateTitle(state),\n    contractTitle: contractTitle(state),\n    proposalCheck: allImagesBoolean(state, { booleanName: \"displayInProposal\" }),\n    agreementCheck: allImagesBoolean(state, { booleanName: \"displayInAgreement\" }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    push: (location: Partial<ILocationData>) => dispatch(push(location)),\n    onSortEnd: (oldIndex: number, newIndex: number) =>\n      dispatch(imageActions.AsyncActions.onSortEnd(oldIndex, newIndex)),\n    batchEditBoolean: (imageIds: List<number>, name: string, value: boolean) =>\n      dispatch(imageActions.Actions.batchEditBoolean(imageIds, name, value)),\n    batchUpdateImage: (imageIds: List<number>) => dispatch(imageActions.AsyncActions.batchUpdateImage(imageIds)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ImageListProps {\n  queryImages: (page: number) => void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImageListProps;\n\n@track(() => {\n  return {\n    component: \"ImageList\",\n  };\n})\nclass ImageList extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.checkBoxOnChange = this.checkBoxOnChange.bind(this);\n    this.onDragEnd = this.onDragEnd.bind(this);\n  }\n\n  @track((props, _state, [event]) => ({\n    action: \"checkAll\",\n    category: \"CheckBox\",\n    label: \"\",\n    type: event.target.name,\n    value: event.target.checked,\n    checkboxType: event.target.name,\n    images: props.imageIds.toArray(),\n  }))\n  public checkBoxOnChange(event: any): void {\n    const { imageIds, batchEditBoolean, batchUpdateImage } = this.props;\n    batchEditBoolean(imageIds, event.target.name, event.target.checked);\n    if (event.target.name !== \"selected\") {\n      batchUpdateImage(imageIds);\n    }\n  }\n\n  @track((props, _state, [oldIndex, newIndex]) => ({\n    action: \"onDragEnd\",\n    oldIndex: oldIndex,\n    newIndex: newIndex,\n    images: props.imageIds.toArray(),\n  }))\n  public onDragEnd(oldIndex: number, newIndex: number): void {\n    const { onSortEnd } = this.props;\n    onSortEnd(oldIndex, newIndex);\n  }\n\n  public render(): React.ReactNode {\n    const {\n      imageIds,\n      pagination,\n      selectedCheck,\n      estimateTitle,\n      contractTitle,\n      proposalCheck,\n      agreementCheck,\n      queryImages,\n    } = this.props;\n\n    return (\n      <Row>\n        <Col>\n          <Row className=\"table-header\">\n            <Col sm={1} style={{ paddingLeft: \"15px\" }}>\n              <IncludeCheckBox name=\"selected\" checked={selectedCheck} onChange={this.checkBoxOnChange} />\n            </Col>\n            <Col>Name</Col>\n            <Col sm={2}>Uploaded On</Col>\n            <Col sm={2}>\n              <IncludeCheckBox\n                name=\"displayInProposal\"\n                label={estimateTitle}\n                checked={proposalCheck}\n                onChange={this.checkBoxOnChange}\n              />\n            </Col>\n            <Col sm={2}>\n              <IncludeCheckBox\n                name=\"displayInAgreement\"\n                label={contractTitle}\n                checked={agreementCheck}\n                onChange={this.checkBoxOnChange}\n              />\n            </Col>\n            <Col sm={1}>Actions</Col>\n          </Row>\n          <Sortable\n            dragHandle\n            items={imageIds}\n            onDragEnd={this.onDragEnd}\n            renderItem={({ item, dragHandle }) => {\n              return <Image imageId={item} dragHandle={dragHandle} />;\n            }}\n          />\n          <StandardPagination metadata={pagination} pageChanged={queryImages} />\n          <br />\n          <ImageEditorModal />\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(ImageList);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getUrl } from \"app2/src/records/Image\";\nimport track from \"react-tracking\";\nimport { Carousel } from \"react-bootstrap\";\nimport { image, showInfo } from \"app2/src/selectors/image.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: ImageProps) => {\n  return {\n    image: image(state, { imageId: ownProps.imageId }),\n    showInfo: showInfo(state),\n  };\n};\n\nconst mapDispatchToProps = () => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ImageState {}\n\ninterface ImageProps {\n  imageId: number;\n  key: string;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImageProps;\n@track((props) => {\n  return {\n    component: \"Image\",\n    image: props.imageId,\n  };\n})\nclass Image extends React.Component<Props, ImageState> {\n  public filesRef;\n\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {};\n  }\n\n  public render() {\n    const { image, showInfo } = this.props;\n    return (\n      <Carousel.Item {..._.omit(this.props, [\"imageId\", \"image\", \"showInfo\"])}>\n        <img className=\"img-contain\" src={image?.file?.url} />\n        {showInfo ? (\n          <Carousel.Caption className=\"carousel-caption\">\n            <h4>{image.title}</h4>\n            <p>{image.description}</p>\n          </Carousel.Caption>\n        ) : null}\n      </Carousel.Item>\n    );\n  }\n}\n\nexport default connector(Image);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { image } from \"app2/src/selectors/image.selectors\";\nimport { getUrl } from \"app2/src/records/Image\";\n\nconst mapStateToProps = (state: RootState, ownProps: ImageThumbProps) => {\n  return {\n    image: image(state, { imageId: ownProps.imageId }),\n  };\n};\n\nconst mapDispatchToProps = () => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ImageThumbProps {\n  imageId: number;\n  index: number;\n  handleSelect: (index: number) => void;\n}\n\ninterface ImageThumbState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImageThumbProps;\n\nclass ImageThumb extends React.Component<Props, ImageThumbState> {\n  constructor(props: Props) {\n    super(props);\n  }\n\n  public render(): React.ReactNode {\n    const { index, image, handleSelect } = this.props;\n    return (\n      <li key={index.toString()}>\n        <a className=\"img-container\" onClick={() => handleSelect(index)} href=\"#\">\n          <img className=\"img-contain\" style={{ width: \"50px\", maxHeight: \"35px\" }} src={getUrl(image, \"thumb\")} />\n        </a>\n      </li>\n    );\n  }\n}\n\nexport default connector(ImageThumb);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport track from \"react-tracking\";\nimport { List } from \"immutable\";\nimport { Row, Col, Carousel } from \"react-bootstrap\";\nimport Image from \"app2/src/components/JobTabs/ImageTab/Images/ImageCarousel/Image\";\nimport { ids, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport ImageThumb from \"app2/src/components/JobTabs/ImageTab/Images/ImageCarousel/ImageThumb\";\nimport { StandardPagination } from \"app2/src/components/Pagination/Standard\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"image\";\n  const imageQueryParams = queryParams(state, { modelName });\n  const imageIds = ids(state, { modelName }) || List();\n  const page = imageQueryParams.get(\"page\");\n  return {\n    imageIds,\n    pagination: pagination(state, { modelName, page }),\n  };\n};\n\nconst mapDispatchToProps = () => {\n  return {};\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ImageCarouselProps {\n  queryImages: (page: number) => void;\n}\ninterface ImageCarouselState {\n  index: number;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImageCarouselProps;\n\n@track(() => {\n  return {\n    component: \"ImageCarousel\",\n  };\n})\nclass ImageCarousel extends React.Component<Props, ImageCarouselState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      index: 0,\n    };\n\n    this.handleSelect = this.handleSelect.bind(this);\n  }\n\n  @track((props) => ({\n    action: \"show\",\n    image: props.imageIds.first(),\n    index: 0,\n  }))\n  public componentDidMount() {}\n\n  @track((props, _state, [index]) => ({\n    action: \"select photo\",\n    image: props.imageIds.get(index),\n    index: index,\n  }))\n  public handleSelect(index: number) {\n    this.setState({ index });\n  }\n\n  public render(): React.ReactNode {\n    const { imageIds, queryImages, pagination } = this.props;\n    const { index } = this.state;\n    return (\n      <>\n        <Carousel activeIndex={index} onSelect={this.handleSelect} interval={null}>\n          {imageIds.map((id: number) => {\n            return <Image key={id.toString()} imageId={id} />;\n          })}\n        </Carousel>\n        <Row>\n          <Col>\n            <div className=\"image-slider\">\n              <ul>\n                {imageIds.map((id: number, idx: number) => (\n                  <ImageThumb key={idx.toString()} imageId={id} index={idx} handleSelect={this.handleSelect} />\n                ))}\n              </ul>\n            </div>\n            <StandardPagination metadata={pagination} pageChanged={queryImages} />\n            <br />\n          </Col>\n        </Row>\n      </>\n    );\n  }\n}\n\nexport default connector(ImageCarousel);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport * as imageActions from \"app2/src/reducers/image.actions\";\nimport { ids, pageRecord, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { Row, Col } from \"react-bootstrap\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport track from \"react-tracking\";\nimport { List } from \"immutable\";\nimport { push } from \"app2/src/reducers/router.actions\";\nimport { ILocationData } from \"app2/src/records/Location\";\nimport { navDisplay } from \"app2/src/selectors/components/common.selectors\";\nimport ImageList from \"app2/src/components/JobTabs/ImageTab/Images/ImageList\";\nimport ImageCarousel from \"app2/src/components/JobTabs/ImageTab/Images/ImageCarousel\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"image\",\n    imageQueryParams = queryParams(state, { modelName });\n  const page = imageQueryParams.get(\"page\");\n  const imageIds = ids(state, { modelName }) || List();\n  return {\n    imageIds,\n    page: pageRecord(state, { modelName, page }),\n    pagination: pagination(state, { modelName, page }),\n    imageQueryParams,\n    navDisplay: navDisplay(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: ImagesProps) => {\n  return {\n    listImages: (queryParams: QueryParamsRecord) =>\n      dispatch(\n        imageActions.AsyncActions.listImages(\n          {\n            imageableType: \"job\",\n            folder_id: ownProps.folderParentId,\n          },\n          queryParams,\n        ),\n      ),\n    push: (location: Partial<ILocationData>) => dispatch(push(location)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ImagesProps {\n  folderParentId: number;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImagesProps;\n\n@track(() => {\n  return {\n    component: \"Images\",\n  };\n})\nclass Images extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.queryImages = this.queryImages.bind(this);\n  }\n\n  @track((_props, _state, [page]) => ({\n    action: \"queryImages\",\n    page: page,\n  }))\n  public queryImages(page: number): void {\n    const { listImages, imageQueryParams } = this.props;\n    const newQueryParams = imageQueryParams.setIn([\"page\"], page);\n    listImages(newQueryParams);\n  }\n\n  public render(): React.ReactNode {\n    const { imageIds, page, navDisplay } = this.props;\n\n    if (page?.loading) {\n      return <SpinnerComponent localProperty={true} />;\n    }\n\n    if (isNullOrUndefined(page) || imageIds.size === 0) {\n      return (\n        <Row>\n          <Col>\n            <div className=\"form-section blank-state\">\n              <img src=\"/assets/images/icons-large/photos.08c0f5bd.png\" />\n              <h2>No photos added. Let's add one.</h2>\n              <p>Click on the add photos button in the top right to add one.</p>\n            </div>\n          </Col>\n        </Row>\n      );\n    }\n\n    if (navDisplay) {\n      return <ImageList queryImages={this.queryImages} />;\n    } else {\n      return <ImageCarousel queryImages={this.queryImages} />;\n    }\n  }\n}\n\nexport default connector(Images);\n","import * as React from \"react\";\nimport track from \"react-tracking\";\nimport { Button } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\n\ninterface RefreshButtonProps {\n  className?: string;\n  trigger?: number;\n  refresh: () => void;\n}\n\ninterface RefreshButtonState {\n  refreshing: boolean;\n  counter: number;\n  interval: any;\n}\n\n@track(() => ({\n  component: \"RefreshButton\",\n}))\nexport default class RefreshButton extends React.Component<RefreshButtonProps, RefreshButtonState> {\n  constructor(props: RefreshButtonProps) {\n    super(props);\n\n    this.state = {\n      refreshing: false,\n      counter: 0,\n      interval: null,\n    };\n\n    this.startRefreshing = this.startRefreshing.bind(this);\n    this.stopRefreshing = this.stopRefreshing.bind(this);\n    this.callRefresh = this.callRefresh.bind(this);\n    this.counter = this.counter.bind(this);\n  }\n\n  public componentDidUpdate(prevProps: RefreshButtonProps): void {\n    if (prevProps.trigger !== this.props.trigger) {\n      this.startRefreshing();\n    }\n  }\n\n  public componentWillUnmount(): void {\n    this.stopRefreshing();\n  }\n\n  @track(() => ({\n    action: \"start refreshing\",\n  }))\n  public startRefreshing(): void {\n    this.setState({\n      refreshing: true,\n      counter: 10,\n      interval: setInterval(() => this.counter(), 1000),\n    });\n  }\n\n  @track(() => ({\n    action: \"stop refreshing\",\n  }))\n  public stopRefreshing(): void {\n    const { interval } = this.state;\n    clearInterval(interval);\n\n    this.setState({\n      refreshing: false,\n      interval: null,\n    });\n  }\n\n  @track(() => ({\n    action: \"refresh\",\n  }))\n  public callRefresh(): void {\n    const { refresh } = this.props;\n    refresh();\n  }\n\n  public counter(): void {\n    this.setState((state: RefreshButtonState) => {\n      if (state.counter === 0) {\n        this.callRefresh();\n        return { counter: 10 };\n      }\n      return {\n        counter: state.counter - 1,\n      };\n    });\n  }\n\n  public render(): React.ReactNode {\n    const { refreshing, counter } = this.state;\n    const { className } = this.props;\n\n    if (refreshing) {\n      return (\n        <Button variant=\"borderless\" className={className || \"\"} onClick={this.stopRefreshing}>\n          Refreshing in {counter} <FontAwesome name=\"close\" />\n        </Button>\n      );\n    }\n\n    return (\n      <Button variant=\"borderless\" className={className} onClick={this.startRefreshing}>\n        Refresh <FontAwesome name=\"refresh\" />\n      </Button>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Row, Col, Button } from \"react-bootstrap\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport Folders from \"app2/src/components/Folders\";\nimport track, { TrackingProp } from \"react-tracking\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport Images from \"app2/src/components/JobTabs/ImageTab/Images\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport Files from \"react-files\";\nimport MoveFilesDropdown from \"app2/src/components/Folders/MoveFilesDropdown\";\nimport { imagesBoolean, showInfo } from \"app2/src/selectors/image.selectors\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport * as imageActions from \"app2/src/reducers/image.actions\";\nimport * as elevationActions from \"app2/src/reducers/elevation.actions\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as folderActions from \"app2/src/reducers/folder.actions\";\nimport { IImageOptions } from \"app2/src/api/image.service\";\nimport { navDisplay, sendInviteSent } from \"app2/src/selectors/components/common.selectors\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport RefreshButton from \"app2/src/components/Common/RefreshButton\";\nimport { currentElevationsLoading } from \"app2/src/selectors/elevation.selectors\";\nimport { push, replace } from \"connected-react-router/immutable\";\nimport { queryNumber } from \"app2/src/selectors/router.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  return {\n    queryFolderParentId: queryNumber(state, { queryKey: \"folder_parent_id\" }),\n    folderParentId: queryParams(state, { modelName: \"folder\" }).getIn([\"folder_id\"]),\n    jobId: currentJobId(state),\n    selectedCheck: imagesBoolean(state, { booleanName: \"selected\" }),\n    showInfo: showInfo(state),\n    navDisplay: navDisplay(state),\n    currentQueryParams: queryParams(state, { modelName: \"image\" }),\n    sendInviteSent: sendInviteSent(state),\n    elevationsLoading: currentElevationsLoading(state, {}),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    createImages: (files: any[], options: IImageOptions) =>\n      dispatch(imageActions.AsyncActions.batchCreateImage(files, options)),\n    push: (path: string) => dispatch(push(path)),\n    replace: (path: string) => dispatch(replace(path)),\n    flashAddAlert: (level: FlashLevels, msg: string) => dispatch(commonActions.Actions.flashAddAlert(level, msg)),\n    setShowInfo: (showInfo: boolean) => dispatch(imageActions.Actions.setShowInfo(showInfo)),\n    openSendInviteModal: (folderId: number) =>\n      dispatch(commonActions.Actions.openSendInviteModal(\"image_uploader\", { folder_id: folderId })),\n    listFolders: (folderParentId: number, jobId: number) =>\n      dispatch(\n        folderActions.AsyncActions.listFolders(folderParentId, { folderable_type: \"Job\", name: \"Photos\" }, () =>\n          replace(`/jobs/${jobId}/images`),\n        ),\n      ),\n    listImages: (folderId: number, refreshLoad = false, queryParams: QueryParamsRecord = new QueryParamsRecord()) =>\n      dispatch(\n        imageActions.AsyncActions.listImages(\n          {\n            imageableType: \"job\",\n            refreshLoad,\n            folder_id: folderId,\n          },\n          queryParams,\n        ),\n      ),\n    listElevations: () => dispatch(elevationActions.AsyncActions.listElevationsByMeasurement()),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ImageTabProps {\n  tracking?: TrackingProp;\n}\n\ninterface ImageTabState {\n  loading: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ImageTabProps;\n@track((props) => {\n  return {\n    component: \"JobImagesTab\",\n    category: \"Photos\",\n    action: \"show\",\n    job: props.jobId,\n  };\n})\nclass ImageTab extends React.Component<Props, ImageTabState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      loading: false,\n    };\n\n    this.navigate = this.navigate.bind(this);\n    this.onFilesChange = this.onFilesChange.bind(this);\n    this.onFilesError = this.onFilesError.bind(this);\n    this.toggleShowInfo = this.toggleShowInfo.bind(this);\n    this.openInviteModal = this.openInviteModal.bind(this);\n    this.refreshListImages = this.refreshListImages.bind(this);\n  }\n\n  public componentDidMount(): void {\n    const { listElevations, listFolders, jobId, queryFolderParentId } = this.props;\n    listElevations();\n    listFolders(queryFolderParentId, jobId);\n  }\n\n  public componentDidUpdate(prevProps: Props): void {\n    const { listImages, folderParentId } = this.props;\n\n    if (!isNullOrUndefined(folderParentId) && prevProps.folderParentId !== folderParentId) {\n      listImages(folderParentId);\n    }\n  }\n\n  public navigate(folderId: number): void {\n    const { jobId, push, listFolders } = this.props;\n    if (isNullOrUndefined(folderId)) {\n      push(`/jobs/${jobId}/images`);\n    } else {\n      push(`/jobs/${jobId}/images?folder_parent_id=${folderId}`);\n    }\n    listFolders(folderId, jobId);\n  }\n\n  @track((props) => ({\n    action: \"toggle show photo title\",\n    showInfo: !props.showInfo,\n  }))\n  public toggleShowInfo(): void {\n    const { showInfo, setShowInfo } = this.props;\n    setShowInfo(!showInfo);\n  }\n\n  public async onFilesChange(files: any[]): Promise<void> {\n    const { jobId, createImages, tracking, folderParentId } = this.props;\n    if (files.length > 0) {\n      this.setState({ loading: true });\n      await createImages(files, { imageableType: \"job\", imageableId: jobId, folder_id: folderParentId });\n      files.forEach((file) => {\n        tracking.trackEvent({ action: \"photo uploaded\", image: file.id, file: file.name });\n      });\n\n      this.setState({ loading: false });\n    }\n  }\n\n  public onFilesError(error: any, file: any): void {\n    const { flashAddAlert, tracking } = this.props;\n    flashAddAlert(FlashLevels.danger, error.message);\n    tracking.trackEvent({ action: \"invalid file\", file: file.name });\n  }\n\n  public openInviteModal(): void {\n    const { openSendInviteModal, folderParentId } = this.props;\n    openSendInviteModal(folderParentId);\n  }\n\n  public refreshListImages(): void {\n    const { listImages, folderParentId, currentQueryParams } = this.props;\n    listImages(folderParentId, true, currentQueryParams);\n  }\n\n  public render() {\n    const { selectedCheck, showInfo, navDisplay, sendInviteSent, elevationsLoading, folderParentId } = this.props;\n    const { loading } = this.state;\n\n    return (\n      <Row data-testid=\"imageTab\">\n        <Col>\n          <SpinnerComponent localProperty={loading || elevationsLoading} />\n          <Row className=\"images title-row sticky-job-title\">\n            <Col sm={4}>\n              <h1 className=\"tab-title\" style={{ marginBottom: \"0\" }}>\n                Photos\n              </h1>\n            </Col>\n            <Col sm={8}>\n              <Can resource=\"job\" permission=\"update\">\n                <Files\n                  className=\"files-dropzone pull-right\"\n                  onChange={this.onFilesChange}\n                  onError={this.onFilesError}\n                  accepts={[\"image/*\"]}\n                  multiple\n                  maxFileSize={30000000}\n                  minFileSize={0}\n                  clickable>\n                  <Button id=\"job-add-photos\" variant=\"default\" className=\"ml-0\">\n                    <FontAwesome name=\"plus\" /> Add Photos\n                  </Button>\n                </Files>\n                {navDisplay ? (\n                  <>\n                    <Button\n                      id=\"job-upload-invite-send\"\n                      variant=\"default\"\n                      className=\"pull-right\"\n                      onClick={this.openInviteModal}>\n                      <FontAwesome name=\"paper-plane\" /> Send Upload Invite\n                    </Button>\n                    <RefreshButton className=\"pull-right\" refresh={this.refreshListImages} trigger={sendInviteSent} />\n                  </>\n                ) : (\n                  <Button\n                    title=\"Show image title and description\"\n                    className=\"pull-right\"\n                    variant={showInfo ? \"success\" : \"secondary\"}\n                    onClick={this.toggleShowInfo}>\n                    <FontAwesome name=\"info\" />\n                  </Button>\n                )}\n                {selectedCheck && <MoveFilesDropdown {...this.props} fileType=\"images\" />}\n              </Can>\n            </Col>\n          </Row>\n          <br />\n          <Folders\n            {...this.props}\n            fileType=\"images\"\n            documentableType=\"job\"\n            navigate={this.navigate}\n            miniView={!navDisplay}\n            readOnly={!navDisplay}\n          />\n          <br />\n          <Images folderParentId={folderParentId} />\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(ImageTab);\n","import * as React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport DateTime from \"app2/src/components/Common/DateTime\";\nimport { document, jobResourceDocument } from \"app2/src/selectors/document.selectors\";\nimport { DocumentRecord, isMeasurementFile, isPdfFile } from \"app2/src/records/Document\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { IncludeCheckBox } from \"app2/src/components/Common/IncludeCheckBox\";\nimport { List } from \"immutable\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { task } from \"app2/src/selectors/task.selectors\";\nimport { DocumentableType } from \"app2/src/api/document.service\";\nimport track from \"react-tracking\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { query } from \"app2/src/selectors/router.selectors\";\nimport { DownloadDocumentButton } from \"./DownloadDocumentButton\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState, ownProps: DocumentProps) => {\n  let documentRecord;\n  switch (ownProps.documentableType) {\n    case \"job\":\n      documentRecord = document(state, { documentId: ownProps.documentId });\n      break;\n    case \"org\":\n      documentRecord = jobResourceDocument(state, { documentId: ownProps.documentId });\n      break;\n  }\n\n  return {\n    document: documentRecord,\n    job: currentJob(state),\n    task: task(state, { taskId: documentRecord?.task_id }),\n    query: query(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: DocumentProps) => {\n  return {\n    destroyDocument: (document: DocumentRecord) => dispatch(documentActions.AsyncActions.destroyDocument(document)),\n    editBoolean: (name: string, value: boolean) =>\n      dispatch(documentActions.Actions.editBoolean(ownProps.documentId, name, value)),\n    editJobResourceDisplay: (name: string, value: boolean) =>\n      dispatch(jobActions.AsyncActions.editJobResourceDisplay(ownProps.documentId, name, value)),\n    updateDocument: () => dispatch(documentActions.AsyncActions.batchUpdateDocument(List([ownProps.documentId]))),\n    importMeasurementDocument: (document: DocumentRecord) =>\n      dispatch(documentActions.AsyncActions.importMeasurementDocument(document)),\n    push: (path: string) => dispatch(push(path)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface DocumentProps {\n  documentId: number;\n  documentableType: DocumentableType;\n  dragHandle?: any;\n  allowDestroy?: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & DocumentProps;\n@track(() => {\n  return {\n    component: \"Document\",\n  };\n})\nclass Document extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.checkBoxOnChange = this.checkBoxOnChange.bind(this);\n    this.importMeasurement = this.importMeasurement.bind(this);\n    this.destroyDocument = this.destroyDocument.bind(this);\n    this.navigate = this.navigate.bind(this);\n  }\n\n  @track((props, _state) => ({\n    action: \"import measurements\",\n    label: \"\",\n    import_type: props.document.import_type,\n    document: props.document.id,\n  }))\n  public importMeasurement() {\n    const { importMeasurementDocument, document } = this.props;\n    importMeasurementDocument(document);\n  }\n\n  @track((props, _state, [event]) => ({\n    action: \"checkBoxChanged\",\n    label: \"\",\n    type: event.target.name,\n    value: event.target.checked,\n    checkboxType: event.target.name,\n    document: props.document.id,\n  }))\n  public checkBoxOnChange(event: any): void {\n    const { documentableType, editBoolean, editJobResourceDisplay, updateDocument } = this.props;\n    switch (documentableType) {\n      case \"job\":\n        editBoolean(event.target.name, event.target.checked);\n        if (event.target.name !== \"selected\") {\n          updateDocument();\n        }\n        break;\n      case \"org\":\n        editJobResourceDisplay(event.target.name, event.target.checked);\n        break;\n    }\n  }\n\n  @track((props, _state) => ({\n    action: \"document deleted\",\n    label: \"\",\n    document: props.document.id,\n  }))\n  public async destroyDocument() {\n    const { document, destroyDocument } = this.props;\n    await destroyDocument(document);\n  }\n\n  public navigate() {\n    const { document, job, push, query } = this.props;\n    const queryParams = new URLSearchParams({\n      ...query.toJS(),\n      document_id: document.id,\n    });\n    push(`/jobs/${job.id}/documents?${queryParams.toString()}`);\n  }\n\n  public render() {\n    const { document, task, dragHandle, allowDestroy, documentableType } = this.props;\n\n    if (isNullOrUndefined(document)) {\n      return null;\n    }\n\n    const deletedDocument = _.isNull(document.name);\n    const isTaskLoading = task && task?.status !== \"finished\";\n    const showCheckBox = deletedDocument || (isPdfFile(document) && !document.loading && !isTaskLoading);\n\n    return (\n      <>\n        <Row className=\"table-row\">\n          <Col sm={1} title={document.name}>\n            {documentableType === \"job\" && (\n              <IncludeCheckBox name=\"selected\" checked={document.selected} onChange={this.checkBoxOnChange} />\n            )}\n            {dragHandle && <img {...dragHandle} src=\"/assets/images/icons/ic_sort.ea6f8933.png\" />}\n          </Col>\n          <Col className=\"break-word\">{deletedDocument ? `${document.id}: Deleted Document` : document.name}</Col>\n          <Col sm={2}>{deletedDocument ? null : <DateTime date={document.created_at} variant=\"vertical\" />}</Col>\n          <Col sm={2}>\n            <SpinnerComponent localProperty={isTaskLoading || document.loading} localInline />\n            {showCheckBox && (\n              <IncludeCheckBox\n                name=\"displayInProposal\"\n                checked={document.displayInProposal}\n                onChange={this.checkBoxOnChange}\n              />\n            )}\n          </Col>\n          <Col sm={2}>\n            <SpinnerComponent localProperty={isTaskLoading || document.loading} localInline />\n            {showCheckBox && (\n              <IncludeCheckBox\n                name=\"displayInAgreement\"\n                checked={document.displayInAgreement}\n                onChange={this.checkBoxOnChange}\n              />\n            )}\n          </Col>\n          <Col sm={2}>\n            {isTaskLoading ? (\n              <a className=\"action-button\" title=\"Processing\" data-testid=\"gear-spinner\">\n                <i className=\"rsf-cog-link fa-spin rsf-base-66\"></i>\n              </a>\n            ) : (\n              <>\n                {deletedDocument ? null : (\n                  <DownloadDocumentButton documentId={document.id}>\n                    <i\n                      className=\"action-button rsf-pdf-link rsf-base-66\"\n                      title=\"Download File\"\n                      data-testid=\"download-link\"></i>\n                  </DownloadDocumentButton>\n                )}\n                {isPdfFile(document) && (\n                  <i\n                    title=\"View PDF\"\n                    className=\"action-button rsf-magic-link rsf-base-66 document-view-pdf\"\n                    onClick={this.navigate}></i>\n                )}\n                {documentableType === \"job\" && (\n                  <>\n                    {allowDestroy && (\n                      <ConfirmDialog title={`Are you sure you want to delete document: ${document.name}?`}>\n                        {(confirm) => (\n                          <a\n                            className=\"action-button\"\n                            data-testid=\"destroy\"\n                            title=\"Delete Document\"\n                            onClick={confirm(this.destroyDocument)}>\n                            <i className=\"rsf-delete-link rsf-base-66\"></i>\n                          </a>\n                        )}\n                      </ConfirmDialog>\n                    )}\n                    {isMeasurementFile(document) && (\n                      <a\n                        className=\"action-button\"\n                        data-testid=\"measurement\"\n                        title={`Import ${document.import_type}`}\n                        onClick={this.importMeasurement}>\n                        <i className=\"rsf-import-link rsf-base-66\"></i>\n                      </a>\n                    )}\n                  </>\n                )}\n              </>\n            )}\n          </Col>\n        </Row>\n      </>\n    );\n  }\n}\n\nexport default connector(Document);\n","import * as React from \"react\";\nimport { IncludeCheckBox } from \"app2/src/components/Common/IncludeCheckBox\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { List } from \"immutable\";\nimport { booleanChecked } from \"app2/src/selectors/document.selectors\";\nimport { DocumentableType } from \"app2/src/api/document.service\";\nimport track from \"react-tracking\";\nimport { estimateTitle, contractTitle } from \"app2/src/selectors/org.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: TableHeaderProps) => {\n  const documentIds = ownProps.documentIds;\n  return {\n    proposalCheck: booleanChecked(state, { documentIds, booleanName: \"displayInProposal\", filtered: true }),\n    agreementCheck: booleanChecked(state, { documentIds, booleanName: \"displayInAgreement\", filtered: true }),\n    selectedCheck: booleanChecked(state, { documentIds, booleanName: \"selected\" }),\n    estimateTitle: estimateTitle(state),\n    contractTitle: contractTitle(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: TableHeaderProps) => {\n  return {\n    batchEditBoolean: (name: string, value: boolean) =>\n      dispatch(documentActions.Actions.batchEditBoolean(ownProps.documentIds, name, value)),\n    batchUpdateDocument: () => dispatch(documentActions.AsyncActions.batchUpdateDocument(ownProps.documentIds)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface TableHeaderProps {\n  documentableType: DocumentableType;\n  documentIds?: List<number>;\n}\n\ninterface TableHeaderState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & TableHeaderProps;\n\n@track(() => {\n  return {\n    component: \"TableHeader\",\n  };\n})\nclass TableHeader extends React.Component<Props, TableHeaderState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.checkBoxOnChange = this.checkBoxOnChange.bind(this);\n  }\n\n  @track((props, _state, [event]) => ({\n    action: \"checkAll\",\n    category: \"CheckBox\",\n    label: \"\",\n    type: event.target.name,\n    value: event.target.checked,\n    checkboxType: event.target.name,\n    documents: props.documentIds.toArray(),\n  }))\n  public checkBoxOnChange(event: any): void {\n    const { batchEditBoolean, batchUpdateDocument } = this.props;\n    batchEditBoolean(event.target.name, event.target.checked);\n    if (event.target.name !== \"selected\") {\n      batchUpdateDocument();\n    }\n  }\n\n  public render(): React.ReactNode {\n    const { documentableType, proposalCheck, agreementCheck, selectedCheck, estimateTitle, contractTitle } = this.props;\n\n    return (\n      <Row className=\"table-header\">\n        <Col sm={1} style={{ paddingLeft: \"15px\" }}>\n          {documentableType === \"job\" && (\n            <IncludeCheckBox name=\"selected\" checked={selectedCheck} onChange={this.checkBoxOnChange} />\n          )}\n        </Col>\n        <Col>Name</Col>\n        <Col sm={2}>Uploaded On</Col>\n        <Col sm={2}>\n          {documentableType === \"job\" ? (\n            <IncludeCheckBox\n              name=\"displayInProposal\"\n              label={estimateTitle}\n              checked={proposalCheck}\n              onChange={this.checkBoxOnChange}\n            />\n          ) : (\n            estimateTitle\n          )}\n        </Col>\n        <Col sm={2}>\n          {documentableType === \"job\" ? (\n            <IncludeCheckBox\n              name=\"displayInAgreement\"\n              label={contractTitle}\n              checked={agreementCheck}\n              onChange={this.checkBoxOnChange}\n            />\n          ) : (\n            contractTitle\n          )}\n        </Col>\n        <Col sm={2}>Actions</Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(TableHeader);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport * as folderActions from \"app2/src/reducers/folder.actions\";\nimport { ids, pageRecord, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { Row, Col } from \"react-bootstrap\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { Sortable } from \"app2/src/components/Common/Sortable\";\nimport Document from \"app2/src/components/Document\";\nimport { StandardPagination } from \"app2/src/components/Pagination/Standard\";\nimport TableHeader from \"app2/src/components/JobTabs/DocumentTab/Documents/TableHeader\";\nimport track from \"react-tracking\";\nimport { queryNumber } from \"app2/src/selectors/router.selectors\";\nimport Folders from \"app2/src/components/Folders\";\nimport { replace } from \"connected-react-router/immutable\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"document\",\n    docQueryParams = queryParams(state, { modelName });\n  const page = docQueryParams.get(\"page\");\n  const documentIds = ids(state, { modelName });\n  return {\n    queryFolderParentId: queryNumber(state, { queryKey: \"folder_parent_id\" }),\n    documentIds,\n    page: pageRecord(state, { modelName, page }),\n    pagination: pagination(state, { modelName, page }),\n    docQueryParams,\n    jobId: currentJobId(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: DocumentsProps) => {\n  return {\n    listFolders: (folderParentId: number, jobId: number) =>\n      dispatch(\n        folderActions.AsyncActions.listFolders(folderParentId, { folderable_type: \"Job\", name: \"Documents\" }, () =>\n          replace(`/jobs/${jobId}/documents`),\n        ),\n      ),\n    listDocuments: (queryParams: QueryParamsRecord) =>\n      dispatch(\n        documentActions.AsyncActions.listDocuments(\n          {\n            documentableType: \"job\",\n            signed: \"unsigned\",\n            folder_id: ownProps.folderParentId,\n          },\n          queryParams,\n        ),\n      ),\n    replace: (path: string) => dispatch(replace(path)),\n    onSortEnd: (oldIndex: number, newIndex: number) =>\n      dispatch(documentActions.AsyncActions.onSortEnd(oldIndex, newIndex)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface DocumentsProps {\n  folderParentId: number;\n  navigate: (folderId: number) => void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & DocumentsProps;\n\n@track(() => {\n  return {\n    component: \"Documents\",\n  };\n})\nexport class Documents extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.queryDocuments = this.queryDocuments.bind(this);\n    this.onDragEnd = this.onDragEnd.bind(this);\n    this.navigate = this.navigate.bind(this);\n  }\n\n  public componentDidMount(): void {\n    const { listFolders, jobId, queryFolderParentId } = this.props;\n    listFolders(queryFolderParentId, jobId);\n  }\n\n  public componentDidUpdate(prevProps: Props): void {\n    const { listDocuments, folderParentId } = this.props;\n    if (!isNullOrUndefined(folderParentId) && prevProps.folderParentId !== folderParentId) {\n      listDocuments(new QueryParamsRecord());\n    }\n  }\n\n  public navigate(folderId: number): void {\n    const { jobId, navigate, listFolders } = this.props;\n    navigate(folderId);\n    listFolders(folderId, jobId);\n  }\n\n  @track((_props, _state, [page]) => ({\n    action: \"queryDocuments\",\n    page: page,\n  }))\n  public queryDocuments(page: number): void {\n    const { listDocuments, docQueryParams } = this.props;\n    const newQueryParams = docQueryParams.setIn([\"page\"], page);\n\n    listDocuments(newQueryParams);\n  }\n\n  @track((props, _state, [oldIndex, newIndex]) => ({\n    action: \"onDragEnd\",\n    oldIndex: oldIndex,\n    newIndex: newIndex,\n    documents: props.documentIds.toArray(),\n  }))\n  public onDragEnd(oldIndex: number, newIndex: number): void {\n    const { onSortEnd } = this.props;\n\n    onSortEnd(oldIndex, newIndex);\n  }\n\n  public render(): React.ReactNode {\n    const { documentIds, page, pagination } = this.props;\n\n    if (page?.loading) {\n      return <SpinnerComponent localProperty={true} />;\n    }\n\n    return (\n      <>\n        <Folders {...this.props} documentableType=\"job\" fileType=\"documents\" navigate={this.navigate} />\n        <br />\n        {isNullOrUndefined(page) || documentIds.size === 0 ? (\n          <Row>\n            <Col>\n              <div className=\"form-section blank-state\">\n                <img src=\"/assets/images/icons-large/docs.33cddf3f.png\" />\n                <h2>No documents added. Let's add one.</h2>\n                <p>\n                  Click on the add document button in the top right and then select your file. You can upload the\n                  following file types: <br />\n                  .pdf, .xls, .xlsx, .csv, .xml, .json, .zip, .window, .dxf, .skp, .dwg, .gltf, .doc, .docx, .odt, and\n                  .ods.\n                </p>\n              </div>\n            </Col>\n          </Row>\n        ) : (\n          <Row>\n            <Col>\n              <div className=\"standard-rl-margin documents-table\">\n                <TableHeader documentableType=\"job\" documentIds={documentIds} />\n                <Sortable\n                  dragHandle\n                  items={documentIds}\n                  onDragEnd={this.onDragEnd}\n                  renderItem={({ item, dragHandle }) => {\n                    return <Document documentId={item} documentableType=\"job\" dragHandle={dragHandle} allowDestroy />;\n                  }}\n                />\n                <StandardPagination metadata={pagination} pageChanged={this.queryDocuments} />\n                <br />\n              </div>\n            </Col>\n          </Row>\n        )}\n      </>\n    );\n  }\n}\n\nexport default connector(Documents);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport { ids, pageRecord, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { Row, Col } from \"react-bootstrap\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport Document from \"app2/src/components/Document\";\nimport { StandardPagination } from \"app2/src/components/Pagination/Standard\";\nimport { List } from \"immutable\";\nimport TableHeader from \"app2/src/components/JobTabs/DocumentTab/Documents/TableHeader\";\nimport track from \"react-tracking\";\nimport { jobResourceIds } from \"app2/src/selectors/job.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"document\",\n    docQueryParams = queryParams(state, { modelName });\n  const page = docQueryParams.get(\"page\");\n  const documentIds = ids(state, { modelName }) || List();\n  return {\n    resourceIds: jobResourceIds(state),\n    documentIds,\n    page: pageRecord(state, { modelName, page }),\n    pagination: pagination(state, { modelName, page }),\n    docQueryParams,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: DocumentsTableProps) => {\n  return {\n    listDocuments: (queryParams: QueryParamsRecord) =>\n      dispatch(\n        documentActions.AsyncActions.listDocuments(\n          {\n            documentableType: \"org\",\n            display: \"resource\",\n            folder_id: ownProps.folderParentId,\n          },\n          queryParams,\n        ),\n      ),\n    loadDocumentsById: (resourceIds) =>\n      dispatch(\n        documentActions.AsyncActions.loadDocumentsById(resourceIds, {\n          documentableType: \"org\",\n        }),\n      ),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface DocumentsTableProps {\n  folderParentId: number;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & DocumentsTableProps;\n\n@track(() => {\n  return {\n    component: \"DocumentsTable\",\n  };\n})\nclass DocumentsTable extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.queryDocuments = this.queryDocuments.bind(this);\n  }\n\n  public async componentDidMount(): Promise<void> {\n    const { loadDocumentsById, resourceIds } = this.props;\n    loadDocumentsById(resourceIds);\n  }\n\n  @track((_props, _state, [page]) => ({\n    action: \"queryDocuments\",\n    page: page,\n  }))\n  public queryDocuments(page: number): void {\n    const { listDocuments, docQueryParams } = this.props;\n    const newQueryParams = docQueryParams.setIn([\"page\"], page);\n\n    listDocuments(newQueryParams);\n  }\n\n  public render(): React.ReactNode {\n    const { documentIds, page, pagination } = this.props;\n\n    if (page?.loading) {\n      return <SpinnerComponent localProperty={true} />;\n    }\n\n    if (isNullOrUndefined(page) || documentIds.size === 0) {\n      return (\n        <Row>\n          <Col>\n            <div className=\"form-section blank-state\">\n              <img src=\"/assets/images/icons-large/docs.33cddf3f.png\" />\n              <h2>No documents added.</h2>\n              <p>Contact your Organization Administrator to add resources.</p>\n            </div>\n          </Col>\n        </Row>\n      );\n    }\n\n    return (\n      <div className=\"standard-rl-margin\">\n        <TableHeader documentableType=\"org\" />\n        {documentIds.map((id) => {\n          return <Document key={id.toString()} documentId={id} documentableType=\"org\" />;\n        })}\n        <StandardPagination metadata={pagination} pageChanged={this.queryDocuments} />\n        <br />\n      </div>\n    );\n  }\n}\n\nexport default connector(DocumentsTable);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport * as folderActions from \"app2/src/reducers/folder.actions\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { Sortable } from \"app2/src/components/Common/Sortable\";\nimport Document from \"app2/src/components/Document\";\nimport TableHeader from \"app2/src/components/JobTabs/DocumentTab/Documents/TableHeader\";\nimport DocumentsTable from \"app2/src/components/JobTabs/DocumentTab/ResourceDocuments/DocumentsTable\";\nimport track from \"react-tracking\";\nimport Folders from \"app2/src/components/Folders\";\nimport { currentJobId, jobLoading, jobResourceIds } from \"app2/src/selectors/job.selectors\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { replace } from \"connected-react-router/immutable\";\nimport { queryNumber } from \"app2/src/selectors/router.selectors\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  return {\n    queryFolderParentId: queryNumber(state, { queryKey: \"folder_parent_id\" }),\n    resourceIds: jobResourceIds(state),\n    jobLoading: jobLoading(state),\n    orgId: currentOrgId(state),\n    jobId: currentJobId(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: ResourceDocumentsProps) => {\n  return {\n    listFolders: (folderParentId: number, replace: () => void) =>\n      dispatch(\n        folderActions.AsyncActions.listFolders(folderParentId, { folderable_type: \"Org\", name: \"Documents\" }, replace),\n      ),\n    listDocuments: () =>\n      dispatch(\n        documentActions.AsyncActions.listDocuments(\n          {\n            documentableType: \"org\",\n            display: \"resource\",\n            folder_id: ownProps.folderParentId,\n          },\n          new QueryParamsRecord(),\n        ),\n      ),\n    replace: (path: string) => dispatch(replace(path)),\n    onSortEnd: (oldIndex: number, newIndex: number) => dispatch(jobActions.AsyncActions.onSortEnd(oldIndex, newIndex)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ResourceDocumentsProps {\n  folderParentId: number;\n  navigate: (folderId: number) => void;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ResourceDocumentsProps;\n\n@track(() => {\n  return {\n    component: \"ResourceDocuments\",\n  };\n})\nclass ResourceDocuments extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.onDragEnd = this.onDragEnd.bind(this);\n    this.redirect = this.redirect.bind(this);\n    this.navigate = this.navigate.bind(this);\n  }\n\n  public componentDidMount(): void {\n    const { listFolders, queryFolderParentId } = this.props;\n    listFolders(queryFolderParentId, this.redirect());\n  }\n\n  public componentDidUpdate(prevProps: Props): void {\n    const { listFolders, listDocuments, queryFolderParentId, folderParentId } = this.props;\n\n    if (prevProps.queryFolderParentId !== queryFolderParentId) {\n      listFolders(queryFolderParentId, this.redirect());\n    }\n\n    if (!isNullOrUndefined(folderParentId) && prevProps.folderParentId !== folderParentId) {\n      listDocuments();\n    }\n  }\n\n  public navigate(folderId: number): void {\n    const { navigate, listFolders } = this.props;\n    navigate(folderId);\n    listFolders(folderId, this.redirect());\n  }\n\n  public redirect(): () => any {\n    const { jobId, replace } = this.props;\n    const queryParams = new URLSearchParams({\n      documentable_type: \"org\",\n    });\n    return () => replace(`/jobs/${jobId}/documents?${queryParams.toString()}`);\n  }\n\n  @track((props, _state, [oldIndex, newIndex]) => ({\n    action: \"onDragEnd\",\n    oldIndex: oldIndex,\n    newIndex: newIndex,\n    documents: props.resourceIds.toArray(),\n  }))\n  public onDragEnd(oldIndex: number, newIndex: number): void {\n    const { onSortEnd } = this.props;\n\n    onSortEnd(oldIndex, newIndex);\n  }\n\n  public render(): React.ReactNode {\n    const { resourceIds, jobLoading } = this.props;\n\n    if (jobLoading) {\n      return <SpinnerComponent localProperty={true} />;\n    }\n\n    return (\n      <Row>\n        <Col>\n          {resourceIds.size > 0 && (\n            <>\n              <h4>Included Resources</h4>\n              <TableHeader documentableType=\"org\" />\n              <div className=\"standard-rl-margin\">\n                <Sortable\n                  dragHandle\n                  items={resourceIds}\n                  onDragEnd={this.onDragEnd}\n                  renderItem={({ item, dragHandle }) => {\n                    return <Document documentId={item} documentableType=\"org\" dragHandle={dragHandle} />;\n                  }}\n                />\n              </div>\n            </>\n          )}\n          <br />\n          <h4>Available Resources</h4>\n          <Folders {...this.props} documentableType=\"org\" fileType=\"documents\" readOnly navigate={this.navigate} />\n          <br />\n          <DocumentsTable {...this.props} />\n          <br />\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(ResourceDocuments);\n","import * as React from \"react\";\nimport SaveablePdfDisplay from \"../../Pdf/SaveablePdfDisplay\";\nimport { RootState } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { document } from \"app2/src/selectors/document.selectors\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Row, Col, Button } from \"react-bootstrap\";\nimport { DocumentableType, IDocumentOptions } from \"app2/src/api/document.service\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { push } from \"connected-react-router/immutable\";\nimport { query } from \"app2/src/selectors/router.selectors\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { currentOrgPrefAcl } from \"app2/src/selectors/org.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState, ownProps: ViewPdfDocProps) => {\n  return {\n    document: document(state, { documentId: ownProps.documentId }),\n    job: currentJob(state),\n    query: query(state),\n    documentAcl: currentOrgPrefAcl(state, { path: [\"document\"] }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: ViewPdfDocProps) => {\n  return {\n    push: (path: string) => dispatch(push(path)),\n    checkAndLoadDocument: (options: IDocumentOptions) =>\n      dispatch(documentActions.AsyncActions.checkAndLoadDocument(ownProps.documentId, options)),\n    flashAddAlert: (msg: string) => dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, msg)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ViewPdfDocProps {\n  documentId: number;\n  documentableType: DocumentableType;\n}\n\ninterface ViewPdfDocState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ViewPdfDocProps;\n\nclass ViewPdfDoc extends React.Component<Props, ViewPdfDocState> {\n  constructor(props) {\n    super(props);\n\n    this.navigate = this.navigate.bind(this);\n    this.checkAndLoad = this.checkAndLoad.bind(this);\n    this.requiredFieldsMissing = this.requiredFieldsMissing.bind(this);\n  }\n\n  public componentDidMount() {\n    this.checkAndLoad();\n  }\n\n  public componentDidUpdate() {\n    this.checkAndLoad();\n  }\n\n  public checkAndLoad() {\n    const { checkAndLoadDocument, job, documentableType, document } = this.props;\n\n    if (document) {\n      return;\n    }\n\n    const options = { id: job.id, kind: documentableType };\n\n    if (documentableType === \"org\") {\n      if (job.org_id <= 0) {\n        return;\n      }\n      options.id = job.org_id;\n    }\n\n    checkAndLoadDocument(options);\n  }\n\n  public navigate() {\n    const { push, job, query } = this.props;\n    const params = query.toJS();\n    delete params.document_id;\n    const queryParams = new URLSearchParams(params);\n    push(`/jobs/${job.id}/documents?${queryParams.toString()}`);\n  }\n\n  public requiredFieldsMissing() {\n    const { flashAddAlert } = this.props;\n    flashAddAlert(\n      \"Some required fields are missing in the PDF. Please review and complete all required fields before proceeding.\",\n    );\n  }\n\n  public render() {\n    const { job, document, documentAcl } = this.props;\n\n    if (isNullOrUndefined(document) || document.loading || job.loading) {\n      return <Spinner localProperty={true} />;\n    }\n\n    return (\n      <React.Fragment>\n        <Row>\n          <Col sm={10}>\n            <h1 title=\"Document Name\">{document.name}</h1>\n          </Col>\n          <Col sm={2}>\n            <Button title=\"Close View\" className=\"pull-right\" variant=\"cancel\" onClick={this.navigate}>\n              Close\n            </Button>\n          </Col>\n        </Row>\n        <SaveablePdfDisplay\n          job={job}\n          pdfUrl={document?.file?.url}\n          documentName={document?.name}\n          requiredPdfFieldsFilled={documentAcl?.includes(\"enforce_required_magic_wand\") || false}\n          requiredFieldsMissing={this.requiredFieldsMissing}\n        />\n      </React.Fragment>\n    );\n  }\n}\n\nexport default connector(ViewPdfDoc);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Row, Col, Button, ButtonGroup } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport Documents from \"app2/src/components/JobTabs/DocumentTab/Documents\";\nimport Files from \"react-files\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { DocumentableType, IDocumentOptions } from \"app2/src/api/document.service\";\nimport ResourceDocuments from \"app2/src/components/JobTabs/DocumentTab/ResourceDocuments\";\nimport track, { TrackingProp } from \"react-tracking\";\nimport { RootState } from \"app2/src/reducers\";\nimport { documentsSelected } from \"app2/src/selectors/document.selectors\";\nimport MoveFilesDropdown from \"app2/src/components/Folders/MoveFilesDropdown\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport ViewPdfDoc from \"./ViewPdfDoc\";\nimport { queryNumber, queryString } from \"app2/src/selectors/router.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  return {\n    folderParentId: queryParams(state, { modelName: \"folder\" }).getIn([\"folder_id\"]),\n    documentableType: (queryString(state, { queryKey: \"documentable_type\" }) as DocumentableType) || \"job\",\n    documentId: queryNumber(state, { queryKey: \"document_id\" }) as number,\n    documentsSelected: documentsSelected(state, {}),\n    jobId: currentJobId(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    createDocuments: (files: any[], options: IDocumentOptions) =>\n      dispatch(documentActions.AsyncActions.batchCreateDocument(files, options)),\n    flashAddAlert: (level: FlashLevels, msg: string) => dispatch(commonActions.Actions.flashAddAlert(level, msg)),\n    push: (path: string) => dispatch(push(path)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface DocumentTabProps {\n  tracking?: TrackingProp;\n}\n\ninterface DocumentTabState {\n  loading: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & DocumentTabProps;\n\n@track((props) => {\n  return {\n    category: \"JobDocuments\",\n    component: \"JobDocumentsTab\",\n    action: \"show\",\n    job: props.jobId,\n  };\n})\nclass DocumentTab extends React.Component<Props, DocumentTabState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      loading: false,\n    };\n\n    this.onFilesChange = this.onFilesChange.bind(this);\n    this.onFilesError = this.onFilesError.bind(this);\n    this.navigate = this.navigate.bind(this);\n    this.navigateButton = this.navigateButton.bind(this);\n\n    props.tracking.trackEvent({ action: \"shown\" });\n  }\n\n  public async onFilesChange(files: any[]): Promise<void> {\n    const { jobId, createDocuments, tracking, folderParentId } = this.props;\n\n    if (files.length > 0) {\n      this.setState({ loading: true });\n      await createDocuments(files, { documentableType: \"job\", documentableId: jobId, folder_id: folderParentId });\n      files.forEach((file) => {\n        tracking.trackEvent({ action: \"document uploaded\", document: file.id, file: file.name });\n      });\n\n      this.setState({ loading: false });\n    }\n  }\n\n  public onFilesError(error: any, file: any): void {\n    const { flashAddAlert, tracking } = this.props;\n    flashAddAlert(FlashLevels.danger, error.message);\n    tracking.trackEvent({ action: \"invalid file\", file: file.name });\n  }\n\n  public navigate(folderId: number): void {\n    const { jobId, push, documentableType } = this.props;\n    if (isNullOrUndefined(folderId)) {\n      const queryParams = new URLSearchParams({\n        documentable_type: documentableType as string,\n      });\n      push(`/jobs/${jobId}/documents?${queryParams.toString()}`);\n    } else {\n      const queryParams = new URLSearchParams({\n        documentable_type: documentableType as string,\n        folder_parent_id: folderId.toString(),\n      });\n      push(`/jobs/${jobId}/documents?${queryParams.toString()}`);\n    }\n  }\n\n  public navigateButton(documentableType: DocumentableType): void {\n    const { jobId, push } = this.props;\n    const queryParams = new URLSearchParams({\n      documentable_type: documentableType as string,\n    });\n    push(`/jobs/${jobId}/documents?${queryParams.toString()}`);\n  }\n\n  public render() {\n    const { documentableType, folderParentId, documentsSelected, documentId } = this.props;\n    const { loading } = this.state;\n    if (documentId) {\n      return <ViewPdfDoc documentId={documentId} documentableType={documentableType} />;\n    }\n    return (\n      <Row data-testid=\"documentTab\">\n        <SpinnerComponent localProperty={loading} />\n        <Col>\n          <Row className=\"documents title-row sticky-job-title\">\n            <Col sm={4}>\n              <ButtonGroup>\n                <Button\n                  variant={documentableType === \"job\" ? \"primary\" : \"light\"}\n                  onClick={() => this.navigateButton(\"job\")}>\n                  Job Documents\n                </Button>\n                <Button\n                  variant={documentableType === \"org\" ? \"primary\" : \"light\"}\n                  onClick={() => this.navigateButton(\"org\")}>\n                  Resources\n                </Button>\n              </ButtonGroup>\n            </Col>\n            <Col sm={8}>\n              {documentableType !== \"org\" && (\n                <>\n                  <Can resource=\"job\" permission=\"update\">\n                    <Files\n                      className=\"files-dropzone pull-right\"\n                      onChange={this.onFilesChange}\n                      onError={this.onFilesError}\n                      accepts={[\n                        \".pdf\",\n                        \".xls\",\n                        \".xlsx\",\n                        \".csv\",\n                        \".xml\",\n                        \".json\",\n                        \".zip\",\n                        \".window\",\n                        \".dxf\",\n                        \".skp\",\n                        \".dwg\",\n                        \".gltf\",\n                        \".doc\",\n                        \".docx\",\n                        \".odt\",\n                        \".ods\",\n                      ]}\n                      multiple\n                      maxFileSize={30000000}\n                      minFileSize={0}\n                      clickable>\n                      <Button id=\"job-add-documents\" variant=\"default\">\n                        <FontAwesome name=\"plus\" /> Add Documents\n                      </Button>\n                    </Files>\n                    {documentsSelected && <MoveFilesDropdown {...this.props} fileType=\"documents\" />}\n                  </Can>\n                  <p className=\"text--small mb-0\">\n                    You can upload the following file type:\n                    <br />\n                    PDF, XLS, XLSX, CSV, XML, JSON, ZIP, WINDOW, DXF, SKP, DWG, GLTF, DOC, DOCX, ODT, ODS\n                  </p>\n                </>\n              )}\n            </Col>\n          </Row>\n          <br />\n          {documentableType === \"job\" ? (\n            <Documents folderParentId={folderParentId} navigate={this.navigate} />\n          ) : (\n            <ResourceDocuments folderParentId={folderParentId} navigate={this.navigate} />\n          )}\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(DocumentTab);\n","import * as React from \"react\";\nimport { Card } from \"react-bootstrap\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport track from \"react-tracking\";\nimport { presentation } from \"app2/src/selectors/presentation.selectors\";\nimport * as presentationActions from \"app2/src/reducers/presentation.actions\";\nimport * as config from \"react-global-configuration\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { currentAccessUid } from \"app2/src/reducers/auth.selectors\";\nimport { addAuthUser } from \"app2/src/components/Common/CustomLink\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState, ownProps: PresentationProps) => {\n  return {\n    presentation: presentation(state, { presentationId: ownProps.presentationId }),\n    jobId: currentJobId(state),\n    folderParentId: queryParams(state, { modelName: \"folder\" }).getIn([\"folder_id\"]),\n    accessUid: currentAccessUid(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: PresentationProps) => {\n  return {\n    setCurrentPresentationId: () =>\n      dispatch(presentationActions.Actions.setCurrentPresentationId(ownProps.presentationId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface PresentationState {}\n\ninterface PresentationProps {\n  presentationId: number;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & PresentationProps;\n\n@track((props) => {\n  return {\n    component: \"Presentation\",\n    presentation: props.presentationId,\n  };\n})\nclass Presentation extends React.Component<Props, PresentationState> {\n  public componentRef: any;\n  public confirm: any;\n  constructor(props: Props) {\n    super(props);\n\n    this.present = this.present.bind(this);\n  }\n\n  @track(() => ({\n    action: \"Show Presentation\",\n  }))\n  public present(): void {\n    const { presentation, setCurrentPresentationId, jobId, folderParentId, accessUid } = this.props;\n    if (presentation.target === \"blank\") {\n      let url = presentation.url;\n      if (url.startsWith(\"ingage://applet/\")) {\n        const route =\n          `/jobs/${jobId}/presentations` +\n          (isNullOrUndefined(folderParentId) ? \"\" : `?folder_parent_id=${folderParentId}`);\n        const callbackUrl = config.get(\"APP_URL\") + addAuthUser(route, accessUid);\n\n        url = url.concat(\"?callback-url=\" + encodeURIComponent(callbackUrl));\n      }\n      window.open(url, \"_blank\");\n    } else {\n      setCurrentPresentationId();\n    }\n  }\n\n  public render(): React.ReactNode {\n    const { presentation } = this.props;\n    let coverImageUrl = \"/assets/images/icons-large/presentation_placeholder.8046bc02.png\";\n    if (presentation?.cover_image?.medium?.url) {\n      coverImageUrl = presentation.cover_image.medium.url;\n    }\n\n    return (\n      <Card className=\"folder-card\" data-testid=\"presentation-card\" onClick={this.present}>\n        <div className=\"card-title-image\">\n          <img className=\"img-contain\" data-testid=\"cover_image\" src={coverImageUrl} />\n        </div>\n\n        <Card.Footer>\n          <p className=\"mb-0\">\n            {presentation?.name}\n            <FontAwesome name=\"arrow-right\" className=\"float-right fa-gray\" />\n          </p>\n        </Card.Footer>\n      </Card>\n    );\n  }\n}\n\nexport default connector(Presentation);\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport * as presentationActions from \"app2/src/reducers/presentation.actions\";\nimport { ids, pageRecord, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { Row, Col } from \"react-bootstrap\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { StandardPagination } from \"app2/src/components/Pagination/Standard\";\nimport track from \"react-tracking\";\nimport Presentation from \"app2/src/components/JobTabs/PresentationTab/Presentations/Presentation\";\nimport { List } from \"immutable\";\nimport { GridContainer } from \"app2/src/components/Common/GridContainer\";\nimport { push } from \"app2/src/reducers/router.actions\";\nimport { ILocationData } from \"app2/src/records/Location\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"presentation\",\n    presenationQueryParams = queryParams(state, { modelName });\n  const page = presenationQueryParams.get(\"page\");\n  const presentationIds = ids(state, { modelName }) || List();\n  return {\n    presentationIds,\n    page: pageRecord(state, { modelName, page }),\n    pagination: pagination(state, { modelName, page }),\n    presenationQueryParams,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: PresentationsProps) => {\n  return {\n    listPresentations: (queryParams: QueryParamsRecord) =>\n      dispatch(\n        presentationActions.AsyncActions.listPresentations(\n          {\n            kind: \"org\",\n            folderId: ownProps.folderParentId,\n          },\n          queryParams,\n        ),\n      ),\n    push: (location: Partial<ILocationData>) => dispatch(push(location)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface PresentationsProps {\n  folderParentId: number;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & PresentationsProps;\n\n@track(() => {\n  return {\n    component: \"Presentations\",\n  };\n})\nclass Presentations extends React.Component<Props> {\n  constructor(props: Props) {\n    super(props);\n\n    this.queryPresentations = this.queryPresentations.bind(this);\n  }\n\n  @track((_props, _state, [page]) => ({\n    action: \"queryPresentations\",\n    page: page,\n  }))\n  public queryPresentations(page: number): void {\n    const { listPresentations, presenationQueryParams } = this.props;\n    const newQueryParams = presenationQueryParams.setIn([\"page\"], page);\n\n    listPresentations(newQueryParams);\n  }\n\n  public render(): React.ReactNode {\n    const { presentationIds, page, pagination } = this.props;\n\n    if (page?.loading) {\n      return <SpinnerComponent localProperty={true} />;\n    }\n\n    if (isNullOrUndefined(page) || presentationIds.size === 0) {\n      return (\n        <Row>\n          <Col>\n            <div className=\"form-section blank-state\">\n              <img src=\"/assets/images/icons-large/presentations.6c04ec4d.png\" />\n              <h2>No presentations added.</h2>\n              <p>Contact your organization administrator to add them.</p>\n            </div>\n          </Col>\n        </Row>\n      );\n    }\n\n    return (\n      <Row>\n        <Col>\n          <GridContainer columnWidth={245}>\n            {presentationIds.map((id: number) => (\n              <Presentation key={id.toString()} presentationId={id} />\n            ))}\n          </GridContainer>\n          <StandardPagination metadata={pagination} pageChanged={this.queryPresentations} />\n          <br />\n        </Col>\n      </Row>\n    );\n  }\n}\n\nexport default connector(Presentations);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Button } from \"react-bootstrap\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport track, { TrackingProp } from \"react-tracking\";\nimport { RootState } from \"app2/src/reducers\";\nimport { presentation } from \"app2/src/selectors/presentation.selectors\";\nimport * as presentationActions from \"app2/src/reducers/presentation.actions\";\n\nconst mapStateToProps = (state: RootState, ownProps: ShowPresentationProps) => {\n  return {\n    presentation: presentation(state, { presentationId: ownProps.presentationId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    setCurrentPresentationId: () => dispatch(presentationActions.Actions.setCurrentPresentationId(null)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ShowPresentationProps {\n  presentationId: number;\n  tracking?: TrackingProp;\n}\n\ninterface ShowPresentationState {\n  fullscreen: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ShowPresentationProps;\n\n@track((props) => {\n  return {\n    category: \"Presentation\",\n    component: \"ShowPresentation\",\n    presentation: props.presentationId,\n  };\n})\nclass ShowPresentation extends React.Component<Props, ShowPresentationState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      fullscreen: false,\n    };\n\n    this.openFullScreen = this.openFullScreen.bind(this);\n    this.closeFullScreen = this.closeFullScreen.bind(this);\n    this.close = this.close.bind(this);\n    this.focusIframe = this.focusIframe.bind(this);\n    this.slideEventListener = this.slideEventListener.bind(this);\n  }\n\n  @track(() => ({\n    action: \"Fullscreen\",\n  }))\n  public openFullScreen(): void {\n    this.setState({ fullscreen: true });\n    this.focusIframe();\n  }\n\n  @track(() => ({\n    action: \"Exit Fullscreen\",\n  }))\n  public closeFullScreen(): void {\n    this.setState({ fullscreen: false });\n    this.focusIframe();\n  }\n\n  public focusIframe() {\n    const element = document.getElementsByName(\"iframe\")[0] as HTMLIFrameElement;\n    if (element) {\n      element.focus();\n    }\n  }\n\n  public componentDidMount() {\n    window.addEventListener(\"message\", this.slideEventListener);\n  }\n\n  public componentWillUnmount() {\n    this.props.setCurrentPresentationId();\n    window.removeEventListener(\"message\", this.slideEventListener);\n  }\n\n  @track(() => ({\n    action: \"Close\",\n  }))\n  public close() {\n    this.props.setCurrentPresentationId();\n  }\n\n  public slideEventListener(event: any): void {\n    let data: any;\n\n    if (_.isString(event.data)) {\n      try {\n        data = JSON.parse(event.data);\n      } catch (e) {\n        data = {};\n      }\n    } else {\n      data = event.data;\n    }\n    if (data.namespace === \"reveal\" && data.eventName === \"slidechanged\") {\n      this.props.tracking.trackEvent({\n        action: \"Slide Changed\",\n        page: data.state.indexh,\n        level: data.state.indexv,\n      });\n    }\n  }\n\n  public render() {\n    const { fullscreen } = this.state;\n    const { presentation } = this.props;\n\n    return (\n      <>\n        <div className=\"pull-right\">\n          {fullscreen ? (\n            <Button variant=\"link\" className=\"fullscreen\" onClick={this.closeFullScreen}>\n              <i className=\"fa fa-close link\"></i>&nbsp;Close\n            </Button>\n          ) : (\n            <>\n              <Button variant=\"link\" onClick={this.openFullScreen}>\n                <i className=\"fa fa-expand link\"></i>&nbsp;Fullscreen\n              </Button>\n              <Button variant=\"link\" onClick={this.close}>\n                <i className=\"fa fa-close link\"></i>&nbsp;Close\n              </Button>\n            </>\n          )}\n        </div>\n        <iframe\n          name=\"iframe\"\n          data-testid=\"iframe\"\n          onLoad={this.focusIframe}\n          className={fullscreen ? \"fullscreen\" : \"\"}\n          src={presentation?.url}></iframe>\n      </>\n    );\n  }\n}\n\nexport default connector(ShowPresentation);\n","import * as React from \"react\";\nimport { Col, ColProps, Row, RowProps } from \"react-bootstrap\";\n\ninterface JobTabTitleProps {\n  title: string;\n  rowProps?: RowProps;\n  titleColProps?: ColProps;\n  childColProps?: ColProps;\n}\n\nexport const JobTabTitle: React.FC<JobTabTitleProps> = ({\n  title,\n  children,\n  rowProps,\n  titleColProps,\n  childColProps,\n}) => {\n  return (\n    <Row {...rowProps}>\n      <Col {...titleColProps}>\n        <h1 className=\"tab-title\">{title}</h1>\n      </Col>\n      <Col {...childColProps}>{children}</Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport Folders from \"app2/src/components/Folders\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport track, { TrackingProp } from \"react-tracking\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport Presentations from \"app2/src/components/JobTabs/PresentationTab/Presentations\";\nimport ShowPresentation from \"app2/src/components/JobTabs/PresentationTab/Customer/ShowPresentation\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { currentPresentationId } from \"app2/src/selectors/presentation.selectors\";\nimport { queryNumber } from \"app2/src/selectors/router.selectors\";\nimport { push, replace } from \"connected-react-router/immutable\";\nimport * as presentationActions from \"app2/src/reducers/presentation.actions\";\nimport * as folderActions from \"app2/src/reducers/folder.actions\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { JobTabTitle } from \"app2/src/components/JobTabs/JobTabTitle\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState) => {\n  return {\n    jobId: currentJobId(state),\n    orgId: currentOrgId(state),\n    presentationId: currentPresentationId(state),\n    queryFolderParentId: queryNumber(state, { queryKey: \"folder_parent_id\" }),\n    folderParentId: queryParams(state, { modelName: \"folder\" }).getIn([\"folder_id\"]),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    listFolders: (folderParentId: number, jobId: number) =>\n      dispatch(\n        folderActions.AsyncActions.listFolders(folderParentId, { folderable_type: \"Org\", name: \"Presentations\" }, () =>\n          replace(`/jobs/${jobId}/presentations`),\n        ),\n      ),\n    listPresentations: (folderId: number) =>\n      dispatch(\n        presentationActions.AsyncActions.listPresentations(\n          {\n            kind: \"org\",\n            folderId,\n          },\n          new QueryParamsRecord(),\n        ),\n      ),\n    push: (path: string) => dispatch(push(path)),\n    replace: (path: string) => dispatch(replace(path)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface PresentationTabProps {\n  tracking?: TrackingProp;\n}\n\ninterface PresentationTabState {\n  loading: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & PresentationTabProps;\n\n@track((props) => {\n  return {\n    category: \"Presentations\",\n    component: \"JobPresentationsTab\",\n    action: \"show\",\n    job: props.jobId,\n    org: props.orgId,\n  };\n})\nclass PresentationTab extends React.Component<Props, PresentationTabState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      loading: false,\n    };\n\n    this.navigate = this.navigate.bind(this);\n\n    props.tracking.trackEvent({ action: \"shown\" });\n  }\n\n  public componentDidMount(): void {\n    const { listFolders, jobId, queryFolderParentId } = this.props;\n    listFolders(queryFolderParentId, jobId);\n  }\n\n  public componentDidUpdate(prevProps: Props): void {\n    const { listPresentations, folderParentId } = this.props;\n\n    if (!isNullOrUndefined(folderParentId) && prevProps.folderParentId !== folderParentId) {\n      listPresentations(folderParentId);\n    }\n  }\n\n  public navigate(folderId: number): void {\n    const { jobId, push, listFolders } = this.props;\n    if (isNullOrUndefined(folderId)) {\n      push(`/jobs/${jobId}/presentations/existing`);\n    } else {\n      push(`/jobs/${jobId}/presentations/existing?folder_parent_id=${folderId}`);\n    }\n    listFolders(folderId, jobId);\n  }\n\n  public render() {\n    const { loading } = this.state;\n    const { presentationId } = this.props;\n    let childRender = null;\n\n    if (isNullOrUndefined(presentationId)) {\n      childRender = this.renderPresentations();\n    } else {\n      childRender = <ShowPresentation presentationId={presentationId} />;\n    }\n\n    return (\n      <Row data-testid=\"presentationTab\">\n        <SpinnerComponent localProperty={loading} />\n        <Col>{childRender}</Col>\n      </Row>\n    );\n  }\n\n  public renderPresentations() {\n    const { orgId, folderParentId } = this.props;\n\n    if (isNullOrUndefined(orgId)) {\n      return null;\n    }\n\n    return (\n      <>\n        <JobTabTitle title=\"Presentations\" />\n        <Folders {...this.props} documentableType=\"org\" navigate={this.navigate} fileType=\"presentations\" readOnly />\n        <hr />\n        <Presentations folderParentId={folderParentId} />\n      </>\n    );\n  }\n}\n\nexport default connector(PresentationTab);\n","import * as React from \"react\";\nimport { Row, Col, Tab, Tabs } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Route, Switch, Redirect, useRouteMatch } from \"react-router-dom\";\nimport { push } from \"connected-react-router/immutable\";\nimport RsfPresentationTab from \"app2/src/components/JobTabs/PresentationTab/Existing/index\";\nimport { currentJobId, job } from \"app2/src/selectors/job.selectors\";\nimport PresentationBuilderContainer from \"app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/PresentationBuilderContainer\";\n\ninterface CustomerTabProps {\n  activeKey: \"customer\" | \"existing\";\n}\n\nexport const CustomerTab: React.FC<CustomerTabProps> = () => {\n  // Hooks\n  const match = useRouteMatch();\n  const dispatch = useDispatch();\n  const route = useRouteMatch<CustomerTabProps>(`${match.url}/:activeKey`);\n\n  // Local State\n  const activeKey = route?.params?.activeKey;\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n\n  // Methods\n  const tabNavigate = (data: string) => {\n    if (data === \"existing\") {\n      dispatch(push(`${match.url}/existing`));\n    } else {\n      dispatch(push(`${match.url}`));\n    }\n  };\n\n  return (\n    <Row>\n      <Col className=\"gaf-nav-tabs\">\n        <Tabs onSelect={tabNavigate} aria-label=\"presentation-tabs\" activeKey={activeKey}>\n          <Tab eventKey=\"dynamic\" title=\"Dynamic\" />\n          <Tab eventKey=\"existing\" title=\"Existing\" />\n        </Tabs>\n\n        {jobId && (\n          <Switch>\n            <Route path={`${match.url}/dynamic`} component={PresentationBuilderContainer} />\n            <Route path={`${match.url}/existing`} component={RsfPresentationTab} />\n            <Route path={`${match.url}`} render={() => <Redirect to={`${match.url}/dynamic`} />} />\n          </Switch>\n        )}\n      </Col>\n    </Row>\n  );\n};\n\nexport default CustomerTab;\n","import * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { currentOrgId, preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport CustomerTab from \"app2/src/components/JobTabs/PresentationTab/Customer\";\nimport PresentationsTab from \"app2/src/components/JobTabs/PresentationTab/Existing\";\nimport { RootState } from \"app2/src/reducers\";\n\nexport const PresentationRouting: React.FC = () => {\n  const orgId = useSelector(currentOrgId);\n  const dynamicEnabled: boolean = useSelector((state: RootState) =>\n    preferencesConfig(state, { orgId: orgId, path: [\"presentations\", \"dynamic_enabled\"] }),\n  );\n\n  return dynamicEnabled === true ? <CustomerTab activeKey={\"customer\"} /> : <PresentationsTab />;\n};\n\nexport default PresentationRouting;\n","import * as React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { NoteRecord } from \"app2/src/records/Note\";\nimport { Form as FinalForm } from \"react-final-form\";\nimport { RsfFormGroup } from \"app2/src/components/RsfForms/RsfFormGroup\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as noteActions from \"app2/src/reducers/note.actions\";\nimport { note, noteChanged } from \"app2/src/selectors/note.selectors\";\nimport DateTime from \"app2/src/components/Common/DateTime\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { currentJobOrgId } from \"app2/src/selectors/job.selectors\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nconst mapStateToProps = (state: RootState, ownProps: NoteProps) => {\n  const orgId = currentJobOrgId(state);\n  const noteEditing = preferencesConfig(state, { orgId: orgId, path: [\"notes\", \"enable_editing\"], notSet: true });\n\n  return {\n    note: note(state, { noteId: ownProps.noteId }),\n    noteChanged: noteChanged(state, { noteId: ownProps.noteId }),\n    noteEditingPermission: noteEditing,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: NoteProps) => {\n  return {\n    updateOrCreateNote: (note: NoteRecord) => dispatch(noteActions.AsyncActions.updateOrCreateNote(note)),\n    destroyNote: (note: NoteRecord) => dispatch(noteActions.AsyncActions.destroyNote(note)),\n    editNote: (note: string) => dispatch(noteActions.Actions.editNote(ownProps.noteId, note)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface NoteProps {\n  noteId: number;\n}\n\nexport interface NoteState {\n  edit: boolean;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & NoteProps;\n\nclass Note extends React.Component<Props, NoteState> {\n  public componentRef: any;\n  public confirm: any;\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      edit: false,\n    };\n\n    this.componentRef = React.createRef();\n    this.onSubmit = this.onSubmit.bind(this);\n    this.handleClickOutside = this.handleClickOutside.bind(this);\n    this.destroyNote = this.destroyNote.bind(this);\n  }\n\n  public onSubmit() {\n    const { note, updateOrCreateNote, noteChanged } = this.props;\n    if (noteChanged) {\n      updateOrCreateNote(note);\n    }\n    this.setState({ edit: false });\n  }\n\n  public addEventListener(): void {\n    document.addEventListener(\"mousedown\", this.handleClickOutside);\n  }\n\n  public removeEventListener(): void {\n    document.removeEventListener(\"mousedown\", this.handleClickOutside);\n  }\n\n  public handleClickOutside(event: any): void {\n    if (this.componentRef && !this.componentRef.current.contains(event.target)) {\n      const event = new Event(\"build\");\n\n      this.confirm(() => {\n        this.onSubmit();\n      })(event);\n    }\n  }\n\n  public destroyNote() {\n    const { note, destroyNote } = this.props;\n\n    destroyNote(note);\n  }\n\n  public validateNote(data) {\n    const badValues = [null, undefined, \"\"];\n    return badValues.includes(data?.trim());\n  }\n\n  public render() {\n    const { note, noteId, editNote, noteEditingPermission } = this.props;\n    const { edit } = this.state;\n\n    if (isNullOrUndefined(note)) {\n      return null;\n    }\n\n    return (\n      <div title=\"Table Note\" className=\"table-note\" ref={this.componentRef}>\n        <ConfirmDialog title=\"There are unsaved note changes that will be lost. Would you like to save changes?\">\n          {(confirm) => {\n            this.confirm = confirm;\n            return null;\n          }}\n        </ConfirmDialog>\n        <FinalForm onSubmit={this.onSubmit} initialValues={note.toJS()}>\n          {({ handleSubmit, form }) => (\n            <form onSubmit={handleSubmit}>\n              <Row>\n                <Col title=\"Note Data\" md={7}>\n                  {edit ? (\n                    <RsfFormGroup\n                      as=\"textarea\"\n                      label=\"\"\n                      name=\"note\"\n                      id={`note-textarea-${noteId}`}\n                      onChange={(e) => editNote(e.target.value)}\n                      validate={this.validateNote}\n                    />\n                  ) : (\n                    <p title=\"Note\" className=\"description\">\n                      {note.note}\n                    </p>\n                  )}\n                </Col>\n                <Col md={2}>\n                  <DateTime date={note.updated_at} variant=\"vertical\" />\n                </Col>\n                <Col md={2}>{note.user}</Col>\n                <Col md={1} className=\"btn nowrap\">\n                  <>\n                    {noteEditingPermission && (\n                      <Can resource=\"job\" permission=\"update\" exactMatch={false}>\n                        {edit ? (\n                          <i\n                            className=\"rsf-save-link rsf-base-66 note-icon job-save-note\"\n                            title=\"Save Note\"\n                            onClick={handleSubmit}></i>\n                        ) : (\n                          <i\n                            className=\"rsf-edit-link rsf-base-66 note-icon job-edit-note\"\n                            title=\"Edit Note\"\n                            onClick={() => this.setState({ edit: true })}></i>\n                        )}\n                      </Can>\n                    )}\n                    {noteEditingPermission && (\n                      <Can resource=\"job\" permission=\"delete\" exactMatch={false}>\n                        <ConfirmDialog title=\"Are you sure you want to delete this note?\">\n                          {(confirm) => (\n                            <i\n                              className=\"rsf-delete-link rsf-base-66 note-icon job-delete-note\"\n                              title=\"Delete Note\"\n                              onClick={confirm(this.destroyNote)}></i>\n                          )}\n                        </ConfirmDialog>\n                      </Can>\n                    )}\n                  </>\n                </Col>\n              </Row>\n            </form>\n          )}\n        </FinalForm>\n      </div>\n    );\n  }\n}\n\nexport default connector(Note);\n","import * as React from \"react\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { Row, Col, Button } from \"react-bootstrap\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as noteActions from \"app2/src/reducers/note.actions\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { NoteRecord } from \"app2/src/records/Note\";\nimport Note from \"./Note\";\nimport { Form as FinalForm } from \"react-final-form\";\nimport { RsfFormGroup } from \"app2/src/components/RsfForms/RsfFormGroup\";\nimport { currentUser } from \"app2/src/selectors/user.selectors\";\nimport { UserRecord } from \"app2/src/records/UserRecord\";\nimport { StandardPagination } from \"../../Pagination/Standard\";\nimport { ids, pageRecord, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport DirtyWatcher from \"app2/src/components/Common/DirtyWatcher\";\nimport { noteChanged as noteChangedSelector, note } from \"app2/src/selectors/note.selectors\";\nimport { List } from \"immutable\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\n\nconst mapStateToProps = (state: RootState) => {\n  const modelName = \"note\";\n  const noteQueryParams = queryParams(state, { modelName });\n  const page = noteQueryParams.get(\"page\");\n  const noteIds = ids(state, { modelName });\n  const jobId = currentJobId(state);\n  let noteChanged = false;\n  (noteIds || List()).push(0).forEach((noteId) => {\n    noteChanged = noteChanged || noteChangedSelector(state, { noteId });\n  });\n  const jobCreateOrAssignedAclPermission = Acl.can(\"create\", \"job\", false);\n\n  return {\n    jobId: jobId,\n    noteIds,\n    currentUser: currentUser(state),\n    page: pageRecord(state, { modelName, page }),\n    pagination: pagination(state, { modelName, page }),\n    noteQueryParams,\n    noteChanged,\n    note: note(state, { noteId: 0 }),\n    jobCreateOrAssignedAclPermission,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType) => {\n  return {\n    loadNotes: (jobId: number, queryParams: QueryParamsRecord) =>\n      dispatch(noteActions.AsyncActions.loadNotes(jobId, queryParams)),\n    updateOrCreateNote: (note: NoteRecord) => dispatch(noteActions.AsyncActions.updateOrCreateNote(note)),\n    clearNotes: () => dispatch(paginationActions.Actions.clearPage(\"note\")),\n    resetNote: (id: number) => dispatch(noteActions.Actions.resetNote(id)),\n    editNote: (note: string) => dispatch(noteActions.Actions.editNote(0, note)),\n    setUpNewNote: (jobId: number, currentUser: UserRecord) =>\n      dispatch(noteActions.Actions.setUpNewNote(jobId, currentUser)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface NotesProps {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & NotesProps;\n\ninterface INoteTabState {\n  loading: boolean;\n}\nclass NoteTab extends React.Component<Props, INoteTabState> {\n  constructor(props: Props) {\n    super(props);\n    this.state = {\n      loading: false,\n    };\n\n    this.onSubmit = this.onSubmit.bind(this);\n    this.queryNotes = this.queryNotes.bind(this);\n    this.validateNote = this.validateNote.bind(this);\n    this.check = this.check.bind(this);\n    this.reset = this.reset.bind(this);\n  }\n\n  public componentDidMount() {\n    const { loadNotes, jobId, setUpNewNote, currentUser } = this.props;\n    loadNotes(jobId, new QueryParamsRecord());\n    setUpNewNote(jobId, currentUser);\n  }\n\n  public componentWillUnmount() {\n    this.props.clearNotes();\n  }\n\n  public onSubmit() {\n    const { updateOrCreateNote, note, resetNote } = this.props;\n    this.setState({ loading: true });\n    const self = this;\n    updateOrCreateNote(note).then(() => {\n      self.setState({ loading: false });\n    });\n\n    resetNote(0);\n  }\n\n  public queryNotes(page: number) {\n    const { jobId, loadNotes, noteQueryParams } = this.props;\n    const newQueryParams = noteQueryParams.setIn([\"page\"], page);\n\n    loadNotes(jobId, newQueryParams);\n  }\n\n  public validateNote(data) {\n    const badValues = [null, undefined, \"\"];\n    return badValues.includes(data?.trim());\n  }\n\n  public check(): boolean {\n    const { noteChanged } = this.props;\n\n    return noteChanged;\n  }\n\n  public reset(): void {\n    const { noteIds, resetNote } = this.props;\n    (noteIds || List()).push(0).forEach((id) => {\n      resetNote(id);\n    });\n  }\n\n  public render() {\n    const { noteIds, pagination, editNote, jobCreateOrAssignedAclPermission } = this.props;\n    const { loading } = this.state;\n\n    return (\n      <React.Fragment>\n        <Spinner localProperty={loading} />\n        <DirtyWatcher check={this.check} reset={this.reset} reactRouter />\n        <Row>\n          <Col md={12}>\n            <h1 className=\"tab-title\">Notes</h1>\n          </Col>\n        </Row>\n        {noteIds?.size === 0 ? (\n          <Row className=\"text-center\" title=\"No Notes\">\n            <Col md={12}>\n              <div className=\"form-section blank-slate\">\n                <img src=\"/assets/images/icons-large/docs.33cddf3f.png\" />\n                <h2>No notes added. Let's add one.</h2>\n                <FinalForm onSubmit={this.onSubmit}>\n                  {({ handleSubmit, form }) => (\n                    <form onSubmit={handleSubmit}>\n                      <RsfFormGroup\n                        as=\"textarea\"\n                        name=\"note\"\n                        id=\"initial-note-textarea\"\n                        label=\"\"\n                        placeholder=\"Add in a new note about this customer.\"\n                        validate={this.validateNote}\n                        onChange={(e) => editNote(e.target.value)}\n                      />\n                      <Button\n                        id=\"job-save-note\"\n                        title=\"Add Note None Exist\"\n                        type=\"submit\"\n                        variant=\"default\"\n                        className=\"save-note\"\n                        disabled={jobCreateOrAssignedAclPermission === false}>\n                        Save New Note\n                      </Button>\n                    </form>\n                  )}\n                </FinalForm>\n              </div>\n            </Col>\n          </Row>\n        ) : (\n          <Row title=\"Note Table Header\">\n            <Col md={12}>\n              <Row>\n                <Col md={7} className=\"table-col-header\">\n                  Note\n                </Col>\n                <Col md={2} className=\"table-col-header\">\n                  Last Updated\n                </Col>\n                <Col md={2} className=\"table-col-header\">\n                  User\n                </Col>\n                <Col md={1} className=\"table-col-header\">\n                  Actions\n                </Col>\n              </Row>\n              <Can resource=\"job\" permission=\"create\" exactMatch={false}>\n                <div className=\"table-note\">\n                  <FinalForm onSubmit={this.onSubmit}>\n                    {({ handleSubmit, form, submitSucceeded }) => {\n                      if (submitSucceeded) {\n                        form.reset();\n                      }\n                      return (\n                        <form\n                          onSubmit={(...args) => {\n                            handleSubmit(...args);\n                            form.reset();\n                          }}>\n                          <Row>\n                            <Col md={7} title=\"Note Textarea\">\n                              <RsfFormGroup\n                                as=\"textarea\"\n                                name=\"note\"\n                                id=\"table-note-textarea\"\n                                label=\"\"\n                                validate={this.validateNote}\n                                onChange={(e) => editNote(e.target.value)}\n                              />\n                            </Col>\n                            <Col md={4}></Col>\n                            <Col md={1} className=\"btn\">\n                              <i\n                                className=\"rsf-save-link rsf-base-66\"\n                                id=\"job-save-note\"\n                                title=\"Save New Note\"\n                                onClick={handleSubmit}></i>\n                            </Col>\n                          </Row>\n                        </form>\n                      );\n                    }}\n                  </FinalForm>\n                </div>\n              </Can>\n              {noteIds?.map((noteId, idx) => (\n                <Note key={idx} noteId={noteId} />\n              ))}\n              <StandardPagination metadata={pagination} pageChanged={this.queryNotes} />\n              <br />\n            </Col>\n          </Row>\n        )}\n      </React.Fragment>\n    );\n  }\n}\n\nexport default connector(NoteTab);\n","import * as React from \"react\";\nimport { EstimateRecord, fromJSON as estimateFromJSON } from \"app2/src/records/Estimate\";\nimport { EstimateFinanceOptionRecord } from \"app2/src/records/EstimateFinanceOption\";\nimport { FinanceApplicationRecord, fromJSON as financeApplicationFromJSON } from \"app2/src/records/FinanceApplication\";\nimport { Record, Map, List } from \"immutable\";\nimport { noop } from \"underscore\";\n\ninterface ContextProps {\n  estimate: EstimateRecord;\n  financeApplication: FinanceApplicationRecord;\n  orgId: number;\n  filters: Map<FilterAction, List<number>>;\n  dispatch: FilterDispatch;\n  offers: List<EstimateFinanceOptionRecord>;\n}\n\nexport type FilterAction = \"payment\" | \"term\" | \"merchant\";\nexport type FilterDispatch = (\n  action: FilterAction | \"financeApplicationReload\" | \"pendingApproval\",\n  payload?: [number, number],\n) => void;\nexport const emptyFilter = Map<FilterAction, List<number>>([\n  [\"payment\", List([0, 0])],\n  [\"term\", List([0, 0])],\n  [\"merchant\", List([0, 0])],\n]);\n\nconst defaultContextProps: ContextProps = {\n  estimate: estimateFromJSON({ loading: true }),\n  financeApplication: financeApplicationFromJSON({ loading: true }),\n  orgId: 0,\n  filters: emptyFilter,\n  dispatch: noop,\n  offers: List(),\n};\n\nexport class ContextRecord extends Record(defaultContextProps) implements ContextProps {}\n\nexport const Context = React.createContext(new ContextRecord());\n","import * as React from \"react\";\nimport { Modal, Row, Col } from \"react-bootstrap\";\nimport { Switch, Route, useRouteMatch } from \"react-router-dom\";\nimport { useTracking } from \"react-tracking\";\nimport { push } from \"connected-react-router/immutable\";\nimport { currentJobId as currentJobIdSelector } from \"app2/src/selectors/job.selectors\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { Context } from \"app2/src/components/Homevest/Context\";\n\ninterface HomevestModalProps {\n  children: JSX.Element;\n}\n\nconst HomevestModal: React.FunctionComponent<HomevestModalProps> = ({ children }) => {\n  const { estimate } = React.useContext(Context);\n  const match = useRouteMatch();\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking({});\n\n  const currentJobId = useSelector(currentJobIdSelector);\n\n  const navigate = React.useCallback(() => {\n    trackEvent({ action: \"close Homevest modal\" });\n    dispatch(push(`/jobs/${currentJobId}/estimates/${estimate.id}`));\n  }, [currentJobId, estimate, dispatch]);\n\n  return (\n    <Modal show={true} size=\"xl\" backdrop=\"static\" onHide={navigate} className=\"homevest homevest-modal\">\n      <Modal.Header closeButton>\n        <Row>\n          <Col>\n            <Modal.Title>\n              <div>Finance Options</div>\n              <Switch>\n                <Route path={`${match.url}/create`} render={() => <p>Make comparisons, choose a finance option</p>} />\n              </Switch>\n              <Switch>\n                <Route path={`${match.url}/apply`} render={() => <p>Make comparisons, choose a finance option</p>} />\n              </Switch>\n            </Modal.Title>\n          </Col>\n        </Row>\n      </Modal.Header>\n      <Modal.Body className=\"p-0 overflow-y-auto overflow-x-hidden\">{children}</Modal.Body>\n    </Modal>\n  );\n};\n\nexport default HomevestModal;\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport track from \"react-tracking\";\nimport { push } from \"connected-react-router/immutable\";\nimport { get } from \"immutable\";\nimport { currentJobId, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { Button, Col, Container, Row } from \"react-bootstrap\";\nimport { RsfForm, Select, Check } from \"@tberrysoln/rsf-form\";\nimport { required, checkRequired } from \"app2/src/helpers/FinalFormValidator\";\nimport { AsyncActions, Actions } from \"app2/src/reducers/financeApplication.actions\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { sortedFilteredFinanceOptions } from \"app2/src/selectors/financeOption.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { Context } from \"app2/src/components/Homevest/Context\";\n\nconst mapStateToProps = (state: RootState, ownProps: CreateProps) => {\n  const orgId = currentOrgId(state);\n  return {\n    currentJobId: currentJobId(state),\n    financeOptions: sortedFilteredFinanceOptions(state, { orgId, providers: [\"fin_mkt\"] }),\n    estimateId: selectedEstimateId(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: CreateProps) => {\n  return {\n    push: (path: string) => dispatch(push(path)),\n    createFinanceApplication: (estimateId: number) => dispatch(AsyncActions.createFinanceApplication(estimateId)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface CreateState {}\n\ninterface CreateProps {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & CreateProps;\n\n@track((props) => {\n  return {\n    component: \"Create\",\n    estimate: props.estimateId,\n    dispatchOnMount: () => ({ action: \"Create Finance Application shown\" }),\n  };\n})\nclass Create extends React.Component<Props, CreateState> {\n  context!: React.ContextType<typeof Context>;\n  static contextType = Context;\n\n  constructor(props: Props) {\n    super(props);\n    this.submit = this.submit.bind(this);\n    this.openRedirectUrl = this.openRedirectUrl.bind(this);\n  }\n\n  public openRedirectUrl(): void {\n    const { financeApplication } = this.context;\n    const { push, currentJobId, estimateId } = this.props;\n\n    window.open(financeApplication.get(\"redirect_url\", \"\"), \"_blank\");\n    push(`/jobs/${currentJobId}/estimates/${estimateId}`);\n  }\n\n  @track(() => ({\n    action: \"submit create application form\",\n  }))\n  public async submit(): Promise<void> {\n    const { createFinanceApplication } = this.props;\n    await createFinanceApplication(this.context.estimate.id);\n\n    this.openRedirectUrl();\n  }\n\n  public render(): React.ReactNode {\n    const { financeOptions } = this.props;\n    const { financeApplication, estimate } = this.context;\n    const financeApplicationLoading = get(financeApplication, \"loading\", true);\n    const estimateLoading = get(estimate, \"loading\", true);\n\n    return (\n      <Container className=\"p-3\">\n        <SpinnerComponent localProperty={financeApplicationLoading || estimateLoading} />\n        <Row className=\"text-center\">\n          <Col>\n            <RsfForm\n              rootPath={[\"financeApplications\", \"byEstimateId\", estimate.get(\"id\", 0)]}\n              updateFormReducer={Actions.update}\n              onSubmit={this.submit}>\n              <Row>\n                <Col>\n                  <h3>Additional information required to view Finance Programs</h3>\n                </Col>\n              </Row>\n              <Row>\n                <Col>\n                  <p>\n                    Please fill out the form with your personal and financial information. The system will review your\n                    data and previous applicable finance options.\n                  </p>\n                </Col>\n              </Row>\n              <Row>\n                <Col>\n                  <Select label=\"\" name=\"offer_code\" validate={required}>\n                    <option value=\"\">None</option>\n                    {financeOptions.map((fo, idx) => (\n                      <option key={idx} value={fo.get(\"integrations_identifier\")}>\n                        {fo.get(\"name\")}\n                      </option>\n                    ))}\n                  </Select>\n                  <Check\n                    label=\"By checking this box, I verify the following\"\n                    name=\"verify_check\"\n                    validate={checkRequired}\n                  />\n\n                  <p>\n                    <small>I have reviewed and agree to FinMkt's Privacy Policy and Terms of Use.</small>\n                  </p>\n\n                  <p>\n                    <small>\n                      I have been authorized by the applicant to process their credit application using the information\n                      provided. The applicant has provided a signed agreement consenting to the sharing of this\n                      infomration ( and whether this application is approved or declined) with interested third parties,\n                      including dealers that accept this application. I have been authorized to make inquries considered\n                      necessary (including requesting reports from consumer reporting agencies and other sources and\n                      collecting information to verify the applicant's identity) in evaluating the application and,\n                      subsequently, for purposes for reviewing, maintaining or collecting on the applicant's account.\n                      Upon request, I will advice the applicant of the name and address of each consumer reporting\n                      agency from which I obtained a credit report.\n                    </small>\n                  </p>\n                </Col>\n              </Row>\n              <br />\n              <br />\n              <Row>\n                <Col>\n                  <Button type=\"submit\" block>\n                    Fill Information\n                  </Button>\n                </Col>\n              </Row>\n            </RsfForm>\n          </Col>\n        </Row>\n      </Container>\n    );\n  }\n}\n\nexport default connector(Create);\n","import * as React from \"react\";\nimport { Row, Col, Button } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useTracking } from \"react-tracking\";\n\nexport interface MessageViewProps {\n  analyticsAction: string;\n  message: string;\n  imgSrc: string;\n  detailsUrl?: string;\n  closeHandler?: () => void;\n}\n\nexport const MessageView: React.FC<MessageViewProps> = (props) => {\n  const { message, imgSrc, analyticsAction, closeHandler, detailsUrl, children } = props;\n\n  useTracking(\n    {\n      action: analyticsAction,\n    },\n    {\n      dispatchOnMount: true,\n    },\n  );\n\n  return (\n    <Row>\n      <Col>\n        <div className=\"form-section blank-state\">\n          {closeHandler && (\n            <div className=\"form-section-heading\">\n              <Button onClick={closeHandler} variant=\"link\" title=\"Close\" className=\"pull-right\">\n                <FontAwesome name=\"times\" />\n              </Button>\n            </div>\n          )}\n          <img src={imgSrc} />\n          <h2>{message}</h2>\n          {children}\n          {detailsUrl && (\n            <Button href={detailsUrl} target=\"_blank\">\n              Get Details\n            </Button>\n          )}\n        </div>\n      </Col>\n    </Row>\n  );\n};\n","import { StoreRegistry } from \"app2/src/storeRegistry\";\nimport * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { MessageView } from \"./MessageView\";\nimport * as config from \"react-global-configuration\";\nimport { useTracking } from \"react-tracking\";\n\nexport interface EmbeddedViewProps {\n  url: string;\n  offersRedirect: () => void;\n  initialUrl?: string;\n  closeHandler?: () => void;\n  iframeProps?: React.DetailedHTMLProps<React.IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement>;\n}\n\nexport const EmbeddedView: React.FunctionComponent<EmbeddedViewProps> = (props: EmbeddedViewProps) => {\n  const { url, offersRedirect, initialUrl, closeHandler, iframeProps } = props;\n  const [eventMsg, setEventMsg] = useState(initialUrl || \"\");\n  const tracking = useTracking();\n\n  const handleUrl = useCallback(\n    (url: string) => {\n      switch (url) {\n        case config.get(\"HOMEVEST_FAILURE\"):\n          tracking.trackEvent({ action: \"Homevest apply failure\" });\n          setEventMsg(url);\n          break;\n        case config.get(\"HOMEVEST_SUCCESS\"):\n          tracking.trackEvent({ action: \"Homevest apply success\" });\n          setEventMsg(url);\n          break;\n        case config.get(\"HOMEVEST_PREQUALFAILURE\"):\n          tracking.trackEvent({ action: \"Homevest prequalification failure\" });\n          setEventMsg(url);\n          break;\n        case config.get(\"HOMEVEST_PREQUALSUCCESS\"):\n          tracking.trackEvent({ action: \"Homevest prequalification success\" });\n          offersRedirect();\n          break;\n      }\n    },\n    [offersRedirect],\n  );\n\n  useEffect(() => {\n    const globalWindow: Window = StoreRegistry.get(\"window\");\n\n    const listener = (e) => {\n      if (e.data?.url) {\n        handleUrl(e.data.url);\n      }\n    };\n    globalWindow.addEventListener(\"message\", listener);\n\n    return () => {\n      globalWindow.removeEventListener(\"message\", listener);\n    };\n  }, []);\n\n  switch (eventMsg) {\n    case config.get(\"HOMEVEST_FAILURE\"):\n      return (\n        <MessageView\n          message=\"Sorry, there are no offers at this time.\"\n          imgSrc=\"/assets/images/icons-large/estimates.022a621b.png\"\n          analyticsAction=\"failure\"\n        />\n      );\n    case config.get(\"HOMEVEST_PREQUALFAILURE\"):\n      return (\n        <MessageView\n          message=\"Sorry, there are no offers at this time.\"\n          imgSrc=\"/assets/images/icons-large/estimates.022a621b.png\"\n          analyticsAction=\"prequalfailure\"\n        />\n      );\n    case config.get(\"HOMEVEST_SUCCESS\"):\n      return (\n        <MessageView\n          message=\"You're all done for now!\"\n          imgSrc=\"/assets/images/icons-large/estimates.022a621b.png\"\n          analyticsAction=\"success\"\n        />\n      );\n    default:\n      return <iframe src={url} {...(iframeProps || {})} />;\n  }\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { EmbeddedView } from \"app2/src/components/Homevest/EmbeddedView\";\nimport { push } from \"connected-react-router/immutable\";\nimport { useDispatch } from \"react-redux\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { Context } from \"app2/src/components/Homevest/Context\";\nimport { useTracking } from \"react-tracking\";\n\nexport interface IApplyProps {}\n\nexport const Apply: React.FunctionComponent<IApplyProps> = (props: IApplyProps) => {\n  const { financeApplication, dispatch: contextDispatch } = React.useContext(Context);\n  const dispatch = useDispatch();\n  const tracking = useTracking(\n    {\n      action: \"Homevest Apply Shown\",\n    },\n    {\n      dispatchOnMount: true,\n    },\n  );\n\n  const closeCallback = useCallback(() => {\n    tracking.trackEvent({ action: \"Apply closed\" });\n    dispatch(push(\"../..\"));\n  }, [dispatch]);\n\n  const offersCallback = useCallback(() => {\n    tracking.trackEvent({ action: \"Application Offers received\" });\n    contextDispatch(\"pendingApproval\");\n    dispatch(push(\"../homevest/offers\"));\n  }, [dispatch]);\n\n  if (!financeApplication || financeApplication.get(\"loading\")) {\n    return <Spinner localProperty={true} />;\n  }\n\n  return (\n    <EmbeddedView url={financeApplication.redirect_url} closeHandler={closeCallback} offersRedirect={offersCallback} />\n  );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { EmbeddedView } from \"app2/src/components/Homevest/EmbeddedView\";\nimport { push } from \"connected-react-router/immutable\";\nimport { useDispatch } from \"react-redux\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { Context } from \"app2/src/components/Homevest/Context\";\nimport { useTracking } from \"react-tracking\";\nimport { noop } from \"underscore\";\n\nexport interface ILoanApplyProps {}\n\nexport const LoanApply: React.FunctionComponent<ILoanApplyProps> = (props: ILoanApplyProps) => {\n  const { financeApplication } = React.useContext(Context);\n  const dispatch = useDispatch();\n  const tracking = useTracking(\n    {\n      action: \"Homevest Loan Apply Shown\",\n    },\n    {\n      dispatchOnMount: true,\n    },\n  );\n\n  const closeCallback = useCallback(() => {\n    tracking.trackEvent({ action: \"Loan Apply closed\" });\n    dispatch(push(\"../..\"));\n  }, [dispatch]);\n\n  if (!financeApplication || financeApplication.get(\"loading\")) {\n    return <Spinner localProperty={true} />;\n  }\n\n  return <EmbeddedView url={financeApplication.apply_url} closeHandler={closeCallback} offersRedirect={noop} />;\n};\n","import * as React from \"react\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { Context } from \"app2/src/components/Homevest/Context\";\nimport { MessageView } from \"../EmbeddedView/MessageView\";\nimport { useTracking } from \"react-tracking\";\n\nexport interface IOffersProps {}\n\n/**\n * Container for the Offers Listing for Homevest.  Contains the Filters & Listing sections.\n *\n * Also responsible for displaying messages according to the loan_status, if no FinanceOptions\n * are present, the Finance Application is out of date, or if the Estimate is dirty and the user\n * needs to either Apply changes or cancel.\n *\n */\nexport const Offers: React.FunctionComponent<IOffersProps> = (props: IOffersProps) => {\n  const { financeApplication } = React.useContext(Context);\n  useTracking({ action: \"Homevest Offers shown\" }, { dispatchOnMount: true });\n\n  const loan_status = React.useMemo(() => financeApplication.get(\"loan_status\"), [financeApplication]);\n  const isLoading = React.useMemo(() => !financeApplication || financeApplication.get(\"loading\"), [financeApplication]);\n\n  if (loan_status === \"DECLINED\") {\n    return (\n      <>\n        <Spinner localProperty={isLoading} />\n        <MessageView\n          detailsUrl={financeApplication.details_url}\n          message=\"Sorry, the status of the loan is DECLINED.\"\n          imgSrc=\"/assets/images/homevest_finance.ada98c4a.png\"\n          analyticsAction=\"declined\"\n        />\n      </>\n    );\n  }\n\n  if (loan_status === \"APPROVED\") {\n    return (\n      <>\n        <Spinner localProperty={isLoading} />\n        <MessageView\n          detailsUrl={financeApplication.details_url}\n          message=\"Congratulations, the loan was APPROVED.\"\n          imgSrc=\"/assets/images/homevest_finance.ada98c4a.png\"\n          analyticsAction=\"approved\"\n        />\n      </>\n    );\n  }\n\n  if (loan_status === \"PREQUALAPPROVE\")\n    return (\n      <>\n        <Spinner localProperty={isLoading} />\n        <MessageView\n          detailsUrl={financeApplication.details_url}\n          message=\"Application status is PREQUALAPPROVE.\"\n          imgSrc=\"/assets/images/homevest_finance.ada98c4a.png\"\n          analyticsAction=\"prequalapprove\"\n        />\n      </>\n    );\n\n  if (loan_status === \"PREQUALDECLINE\")\n    return (\n      <>\n        <Spinner localProperty={isLoading} />\n        <MessageView\n          detailsUrl={financeApplication.details_url}\n          message=\"Application status is PREQUALDECLINE.\"\n          imgSrc=\"/assets/images/homevest_finance.ada98c4a.png\"\n          analyticsAction=\"no offers\"\n        />\n      </>\n    );\n\n  return (\n    <>\n      <Spinner localProperty={isLoading} />\n      <MessageView\n        detailsUrl={financeApplication.details_url}\n        message={`Finance application status exception. Current status is ${loan_status}.`}\n        imgSrc=\"/assets/images/homevest_finance.ada98c4a.png\"\n        analyticsAction=\"status exception\">\n        <p>\n          Please contact <a href=\"mailto:support@homevestfinance.com\">support@homevestfinance.com</a>\n        </p>\n      </MessageView>\n    </>\n  );\n};\n","import { List } from \"immutable\";\nimport { EstimateFinanceOptionRecord } from \"app2/src/records/EstimateFinanceOption\";\nimport { createSelector } from \"reselect\";\nimport { estimate } from \"app2/src/selectors/estimate.selectors\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { estimateFinanceOptions as base } from \"app2/src/selectors/estimateFinanceOption.selectors\";\n\n/**\n * Selector for EstimateFinanceOptions on an estimate with a default to 0 if the estimate isn't loaded yet\n *\n * @param {RootState} The redux state\n * @param {estimateId: number} The estimate id to load the estimate finance options from\n */\nexport const estimateFinanceOptions = createSelector(\n  [estimate, (state) => ({ state })],\n  (estimate: EstimateRecord, stateProps): List<EstimateFinanceOptionRecord> => {\n    const { state } = stateProps;\n\n    if (!estimate) {\n      return List();\n    }\n\n    return base(state, {\n      estimateFinanceOptionIds: estimate.get(\"finance_option_ids\", List()),\n      fullEstimate: estimate,\n    });\n  },\n);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport track from \"react-tracking\";\nimport { push, replace } from \"connected-react-router/immutable\";\nimport { List, Map } from \"immutable\";\nimport { currentJobId, currentJobOrgId } from \"app2/src/selectors/job.selectors\";\nimport { Switch, Route } from \"react-router-dom\";\nimport { RouteComponentProps, withRouter } from \"react-router\";\nimport { AsyncActions } from \"app2/src/reducers/financeApplication.actions\";\nimport { AsyncActions as EstimateAsyncActions } from \"app2/src/reducers/estimate.actions\";\nimport { financeApplication } from \"app2/src/selectors/financeApplication.selectors\";\nimport HomevestModal from \"app2/src/components/Homevest/HomevestModal\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport Create from \"app2/src/components/Homevest/Create\";\nimport { Apply } from \"app2/src/components/Homevest/Apply\";\nimport { LoanApply } from \"app2/src/components/Homevest/LoanApply\";\nimport { Offers } from \"app2/src/components/Homevest/Offers/\";\nimport { estimate } from \"app2/src/selectors/estimate.selectors\";\nimport { estimateFinanceOptions } from \"./Homevest.selectors\";\nimport { Context, ContextRecord, FilterAction, emptyFilter } from \"app2/src/components/Homevest/Context\";\n\nconst mapStateToProps = (state: RootState, ownProps: HomevestProps) => {\n  const estimateId = parseInt(ownProps.match.params.estimateId);\n  return {\n    currentJobId: currentJobId(state),\n    financeApplication: financeApplication(state, { estimateId }),\n    estimate: estimate(state, { estimateId }),\n    orgId: currentJobOrgId(state),\n    offers: estimateFinanceOptions(state, { estimateId }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: HomevestProps) => {\n  const estimateId = parseInt(ownProps.match.params.estimateId);\n  return {\n    loadEstimate: () => dispatch(EstimateAsyncActions.getEstimate(estimateId)),\n    loadFinanceApplication: () => dispatch(AsyncActions.loadFinanceApplication(estimateId)),\n    push: (path: string) => dispatch(push(path)),\n    replace: (path: string) => dispatch(replace(path)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface HomevestState {\n  payment: [number, number];\n  term: [number, number];\n  merchant: [number, number];\n  reloadFinanceAppRef: \"inactive\" | \"processing\" | \"reload\" | \"pending\";\n}\n\ninterface HomevestProps extends RouteComponentProps<{ estimateId: string }> {\n  tracking?: any;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & HomevestProps;\n\n@track(\n  (props) => {\n    return {\n      component: \"Homevest\",\n      estimate: props.match.params.estimateId,\n    };\n  },\n  {\n    dispatchOnMount: true,\n  },\n)\nclass Homevest extends React.Component<Props, HomevestState> {\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      payment: [0, 0],\n      term: [0, 0],\n      merchant: [0, 0],\n      reloadFinanceAppRef: \"inactive\",\n    };\n\n    this.filterReducer = this.filterReducer.bind(this);\n  }\n\n  public componentDidMount(): void {\n    const { loadFinanceApplication, loadEstimate } = this.props;\n\n    loadFinanceApplication();\n    loadEstimate();\n  }\n\n  public componentDidUpdate(prevProps: Readonly<Props>): void {\n    const { match, financeApplication, currentJobId, replace, loadFinanceApplication, loadEstimate } = this.props;\n    const { reloadFinanceAppRef } = this.state;\n    const estimateId = parseInt(match.params.estimateId);\n\n    if (!financeApplication) {\n      return;\n    }\n\n    if (\n      !financeApplication?.get(\"loading\") &&\n      !financeApplication?.equals(prevProps.financeApplication) &&\n      reloadFinanceAppRef !== \"pending\"\n    ) {\n      if (financeApplication.get(\"id\") === 0 && financeApplication.get(\"loan_status\") === \"none\") {\n        replace(`/jobs/${currentJobId}/estimates/${estimateId}/homevest/create`);\n      } else if (financeApplication.get(\"id\") > 0 && financeApplication.get(\"loan_status\") === \"created\") {\n        window.open(financeApplication.get(\"redirect_url\", \"\"), \"_blank\");\n        replace(`/jobs/${currentJobId}/estimates/${estimateId}`);\n      } else if (financeApplication.get(\"id\") > 0) {\n        replace(`/jobs/${currentJobId}/estimates/${estimateId}/homevest/offers`);\n      } else {\n        replace(`/jobs/${currentJobId}/estimates/${estimateId}`);\n      }\n    }\n  }\n\n  public filterReducer(\n    action: FilterAction | \"financeApplicationReload\" | \"pendingApproval\",\n    payload?: [number, number],\n  ): void {\n    const { financeApplication, estimate, loadEstimate, loadFinanceApplication } = this.props;\n    switch (action) {\n      case \"financeApplicationReload\":\n        if (!financeApplication.get(\"loading\", true)) {\n          loadFinanceApplication();\n        }\n\n        if (!estimate.get(\"loading\", true)) {\n          loadEstimate();\n        }\n        return;\n      case \"pendingApproval\":\n        if (!financeApplication.get(\"loading\", true)) {\n          loadFinanceApplication();\n        }\n        this.setState({ reloadFinanceAppRef: \"pending\" });\n        return;\n      case \"merchant\":\n      case \"payment\":\n      case \"term\":\n        const nextState = {};\n        nextState[action] = payload;\n\n        this.setState(nextState);\n        return;\n    }\n  }\n\n  public render(): React.ReactNode {\n    const { match, financeApplication, estimate, orgId, offers } = this.props;\n\n    return (\n      <Context.Provider\n        value={\n          new ContextRecord({\n            dispatch: this.filterReducer,\n            filters: Map<FilterAction, List<number>>([\n              [\"payment\", List(this.state.payment)],\n              [\"term\", List(this.state.term)],\n              [\"merchant\", List(this.state.merchant)],\n            ]),\n            financeApplication,\n            estimate,\n            orgId,\n            offers,\n          })\n        }>\n        <HomevestModal>\n          <>\n            {financeApplication?.get(\"loading\") ? <SpinnerComponent localProperty={true} /> : null}\n            <Switch>\n              <Route path={`${match.url}/create`} component={Create} />\n            </Switch>\n            <Switch>\n              <Route path={`${match.url}/apply`} component={Apply} />\n            </Switch>\n            <Switch>\n              <Route path={`${match.url}/offers`} component={Offers} />\n            </Switch>\n            <Switch>\n              <Route path={`${match.url}/loan_apply`} component={LoanApply} />\n            </Switch>\n          </>\n        </HomevestModal>\n      </Context.Provider>\n    );\n  }\n}\n\nexport default connector(withRouter(Homevest));\n","import { FormControl, RsfForm } from \"@tberrysoln/rsf-form\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { commaSeparatedEmail, composeValidators, phoneNumber, required } from \"app2/src/helpers/FinalFormValidator\";\nimport { Actions, AsyncActions } from \"app2/src/reducers/paymentRequest.actions\";\nimport * as React from \"react\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { paymentAuthRequestKind } from \"app2/src/selectors/payment.selectors\";\nimport { useState, useEffect } from \"react\";\nimport { Button, Col, Modal, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { RootState } from \"../../reducers\";\nimport { paymentRequest } from \"app2/src/reducers/paymentRequest.selectors\";\n\nexport interface PaymentRequestProps {\n  closeModal: () => void;\n}\n\nexport const PaymentRequest: React.FC<PaymentRequestProps> = ({ closeModal }) => {\n  // Selector\n  const paymentRequestRecord = useSelector((state: RootState) => paymentRequest(state, { paymentRequestId: -1 }));\n\n  // state\n  const orgId = useSelector(currentOrgId);\n  const authorizedPaymentRequestKind = useSelector((state: RootState) => paymentAuthRequestKind(state, { orgId }));\n  const [loading, setLoading] = useState(false);\n  const [mounted, setMounted] = useState(false);\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (!authorizedPaymentRequestKind) return;\n    if (mounted) return;\n\n    dispatch(Actions.initializePaymentRequest());\n    setMounted(true);\n  }, [authorizedPaymentRequestKind]);\n\n  // hooks\n\n  // callbacks\n  const sendEmail = async () => {\n    setLoading(true);\n    await dispatch(AsyncActions.createPaymentRequest(-1, \"email\"));\n    setLoading(false);\n    closeModal();\n  };\n\n  const sendText = async () => {\n    dispatch(\n      Actions.update({\n        rootPath: [\"paymentRequests\", \"byId\", -2],\n        name: \"amount\",\n        value: paymentRequestRecord?.amount?.toString() || \"\",\n      }),\n    );\n    dispatch(\n      Actions.update({\n        rootPath: [\"paymentRequests\", \"byId\", -2],\n        name: \"description\",\n        value: paymentRequestRecord?.description || \"\",\n      }),\n    );\n    setLoading(true);\n    await dispatch(AsyncActions.createPaymentRequest(-2, \"text\"));\n    setLoading(false);\n    closeModal();\n  };\n\n  return (\n    <>\n      <SpinnerComponent localProperty={loading} />\n      <Modal.Header closeButton>\n        <Modal.Title>Payment Request</Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        <Row>\n          {mounted && (\n            <Col>\n              <RsfForm\n                rootPath={[\"paymentRequests\", \"byId\", -1]}\n                updateFormReducer={Actions.update}\n                onSubmit={sendEmail}>\n                {(authorizedPaymentRequestKind === \"cardconnect\" || authorizedPaymentRequestKind === \"occ_pay\") && (\n                  <FormControl formControlProps={{ type: \"number\" }} label=\"Amount\" name=\"amount\" />\n                )}\n                <FormControl as=\"textarea\" label=\"Description\" name=\"description\" />\n                <Row>\n                  <Col sm={9}>\n                    <FormControl\n                      label=\"Emails\"\n                      name=\"emails\"\n                      validate={composeValidators(required, commaSeparatedEmail)}\n                    />\n                  </Col>\n                  <Col sm={3}>\n                    <Button name=\"email\" type=\"submit\" className=\"dummy-label\">\n                      Send Email\n                    </Button>\n                  </Col>\n                </Row>\n              </RsfForm>\n              <RsfForm\n                rootPath={[\"paymentRequests\", \"byId\", -2]}\n                updateFormReducer={Actions.update}\n                onSubmit={sendText}>\n                <Row>\n                  <Col sm={9}>\n                    <FormControl label=\"Phone Number\" name=\"sms\" validate={composeValidators(required, phoneNumber)} />\n                  </Col>\n                  <Col sm={3}>\n                    <Button name=\"sms\" type=\"submit\" className=\"dummy-label\">\n                      Send Text\n                    </Button>\n                  </Col>\n                </Row>\n              </RsfForm>\n            </Col>\n          )}\n        </Row>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button variant=\"cancel\" onClick={closeModal}>\n          Cancel\n        </Button>\n      </Modal.Footer>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Button, Col, Modal, Row } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { PaymentView } from \"./index\";\nimport { Acl } from \"app2/src/helpers/Acl\";\n\nexport interface RootProps {\n  closeModal: () => void;\n  navigateToView: (view: PaymentView) => void;\n}\n\nexport const Root: React.FC<RootProps> = ({ closeModal, navigateToView }) => {\n  // selectors\n  const occPayToken = useSelector((state: RootState) => token(state, { kind: \"occ_pay\" }));\n  const paymentOptions = occPayToken?.getIn([\"data\", \"payment_options\"]) || List();\n\n  // Check which payment options are available based on permissions and token settings\n  const canOnscreen = Acl.can(\"onscreen\", \"payment\") && (!occPayToken || paymentOptions.includes(\"onscreen\"));\n  const canEmailText =\n    Acl.can(\"email_text\", \"payment\") && (!occPayToken || paymentOptions.includes(\"email_text_to_pay\"));\n  const canSaveMethod =\n    occPayToken && Acl.can(\"create\", \"payment_method\") && paymentOptions.includes(\"store_payment_method_only\");\n\n  // Auto-navigate if user only has one option\n  React.useEffect(() => {\n    const availableOptions: PaymentView[] = [];\n    if (canOnscreen) availableOptions.push(\"onscreen\");\n    if (canEmailText) availableOptions.push(\"request\");\n    if (canSaveMethod) availableOptions.push(\"save_method\");\n\n    // If only one option is available, automatically navigate to it\n    if (availableOptions.length === 1) {\n      navigateToView(availableOptions[0]);\n    }\n  }, [canOnscreen, canEmailText, canSaveMethod, navigateToView]);\n\n  // callbacks\n  const navigate = (event: React.MouseEvent<HTMLButtonElement>) => {\n    const { name } = event.currentTarget;\n    const view = name as PaymentView;\n    navigateToView(view);\n  };\n  const showButton = (name: string) => !occPayToken || paymentOptions.includes(name);\n\n  return (\n    <>\n      <Modal.Header closeButton>\n        <Modal.Title>Make Payment</Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        {showButton(\"onscreen\") && (\n          <Can permission=\"onscreen\" resource=\"payment\">\n            <Row className=\"pt-3 pb-3\">\n              <Col className=\"text-center\" md={3}>\n                <Button name=\"onscreen\" onClick={navigate}>\n                  Onscreen\n                </Button>\n              </Col>\n              <Col md={9}>Enter payment details and make a payment immediately.</Col>\n            </Row>\n          </Can>\n        )}\n        {showButton(\"email_text_to_pay\") && (\n          <Can permission=\"email_text\" resource=\"payment\">\n            <Row className=\"pt-3 pb-3\">\n              <Col className=\"text-center\" md={3}>\n                <Button name=\"request\" onClick={navigate}>\n                  Email/Text\n                </Button>\n              </Col>\n              <Col md={9}>\n                Send the customer an email or text message payment request. Once received, they can make the payment on\n                their own device.\n              </Col>\n            </Row>\n          </Can>\n        )}\n        {/* Save Method Button only applies to OCC Pay */}\n        {occPayToken && showButton(\"store_payment_method_only\") && (\n          <Can permission=\"create\" resource=\"payment_method\">\n            <Row className=\"pt-3 pb-3\">\n              <Col className=\"text-center\" md={3}>\n                <Button name=\"save_method\" onClick={navigate}>\n                  Save Method\n                </Button>\n              </Col>\n              <Col md={9}>Save a payment method without processing a payment.</Col>\n            </Row>\n          </Can>\n        )}\n      </Modal.Body>\n      <Modal.Footer>\n        <Button variant=\"cancel\" onClick={closeModal}>\n          Cancel\n        </Button>\n      </Modal.Footer>\n    </>\n  );\n};\n","import { loadPaySimple } from \"./loadPaySimple\";\nimport { Deferred } from \"app2/src/services/deferred\";\nimport { PaySimpleCheckoutToken } from \"app2/src/reducers/integrations/paysimple.actions\";\n\nexport class PaySimple {\n  public errorHandler: (error: PaySimpleError) => void;\n  public customerCallback: (error: PaySimpleAccountInfo) => void;\n  public formCallback: (data: PaySimpleFormValidity) => void;\n\n  protected paysimpleJs: any;\n  protected initPromise: Promise<void>;\n\n  public constructor(\n    public container: string,\n    public checkoutToken: PaySimpleCheckoutToken,\n  ) {\n    this.initPromise = waitForElement(container).then(() => {\n      return this.initialize();\n    });\n  }\n\n  public askForPaymentOptions(mode: string): void {\n    this.initPromise.then(() => {\n      this.paysimpleJs.send.setMode(`${mode}-key-enter`);\n    });\n  }\n\n  public sendCustomer(customer: PaySimpleCustomerData): void {\n    this.paysimpleJs.send.retrieveAccount(customer);\n  }\n\n  public static loadJs(): Promise<void> {\n    return loadPaySimple();\n  }\n\n  private initialize() {\n    const deferred = Deferred.defer<void>();\n\n    setTimeout(() => {\n      this.paysimpleJs = (window as any).paysimpleJs({\n        // the element that will contain the iframe\n        container: document.querySelector(this.container),\n        // checkout_token is in auth\n        auth: {\n          token: this.checkoutToken.JwtToken,\n        },\n        // allows entry of international postal codes if true\n        bypassPostalCodeValidation: false,\n        // Attempts to prevent browsers from using autocompletion to pre-populate\n        // or suggest input previously stored by the user. Turn on for point of\n        // sale or kiosk type applications where many different customers\n        // will be using the same browser to enter payment information.\n        preventAutocomplete: false,\n        // customized styles are optional\n        styles: {\n          body: {\n            // set the background color of the payment page\n            backgroundColor: \"#f9f9f9\",\n          },\n        },\n      });\n\n      this.paysimpleJs.on(\"formValidityChanged\", (body: any) => {\n        if (this.formCallback) {\n          this.formCallback(body);\n        }\n      });\n\n      this.paysimpleJs.on(\"httpError\", (error: PaySimpleError) => {\n        console.error(error);\n        if (this.errorHandler) {\n          this.errorHandler(error);\n        }\n      });\n\n      this.paysimpleJs.on(\"accountRetrieved\", (accountInfo: PaySimpleAccountInfo) => {\n        if (this.customerCallback) {\n          this.customerCallback(accountInfo);\n        }\n      });\n\n      deferred.resolve(null);\n    }, 500);\n\n    return deferred.promise;\n  }\n}\n\nexport interface PaySimpleError {\n  errorKey: \"timeout\" | \"bad_request\" | \"server_error\" | \"unauthorized\" | \"unknown\";\n  errors: Array<{ field: string; message: string }>;\n  status: number;\n}\n\nexport interface PaySimpleCustomerData {\n  firstName: string;\n  lastName: string;\n  email: string;\n}\n\n/****\n * Example accountInfo:\n *\n * {\n *    \"account\": {\n *        \"id\": 7313702\n *    },\n *    \"customer\": {\n *        \"id\": 8041997,\n *        \"firstName\": \"John\",\n *        \"lastName\": \"Snow\",\n *        \"email\": \"john@snow.com\"\n *    },\n *    \"paymentToken\": \"e1f1bb19-9fe4-4c96-a35e-cd921298d8e6\"\n * }\n ****/\nexport interface PaySimpleAccountInfo {\n  account: { id: number };\n  customer: {\n    id: number;\n    firstName: string;\n    lastName: string;\n    email: string;\n  };\n  paymentToken: string;\n}\n\nexport type PaySimplePaymentKeys =\n  | \"CustomerId\"\n  | \"CustomerFirstName\"\n  | \"CustomerLastName\"\n  | \"CustomerCompany\"\n  | \"ReferenceId\"\n  | \"Status\"\n  | \"RecurringScheduleId\"\n  | \"PaymentType\"\n  | \"PaymentSubType\"\n  | \"ProviderAuthCode\"\n  | \"TraceNumber\"\n  | \"PaymentDate\"\n  | \"ReturnDate\"\n  | \"EstimatedSettleDate\"\n  | \"EstimatedDepositDate\"\n  | \"ActualSettledDate\"\n  | \"CanVoidUntil\"\n  | \"FailureData\"\n  | \"RequiresReceipt\"\n  | \"CVV\"\n  | \"AccountId\"\n  | \"InvoiceId\"\n  | \"Amount\"\n  | \"IsDebit\"\n  | \"InvoiceNumber\"\n  | \"PurchaseOrderNumber\"\n  | \"OrderId\"\n  | \"Description\"\n  | \"Latitude\"\n  | \"Longitude\"\n  | \"SuccessReceiptOptions\"\n  | \"Id\"\n  | \"LastModified\"\n  | \"CreatedOn\";\n\nexport type PaySimpleFailureKeys = \"Code\" | \"Description\" | \"MerchantActionText\" | \"IsDecline\";\n\nexport interface PaySimpleToken {\n  username: string;\n  api_key: string;\n  hpp_url?: string;\n  loading?: boolean;\n}\n\nexport interface PaySimpleFormValidity {\n  validity: boolean;\n}\n\nexport const waitForElement = (selector) => {\n  return new Promise((resolve, reject) => {\n    const waitForEl = (selector, count = 0) => {\n      const element = jQuery(selector);\n\n      if (element) {\n        resolve(element);\n      } else {\n        setTimeout(() => {\n          count++;\n\n          if (count < 10) {\n            waitForEl(selector, count);\n          } else {\n            reject();\n          }\n        }, 100);\n      }\n    };\n\n    waitForEl(selector);\n  });\n};\n","import * as config from \"react-global-configuration\";\n\nexport const loadPaySimple = (): Promise<void> => {\n  const existingScript = document.getElementById(\"paySimple\");\n\n  return new Promise((resolve, reject) => {\n    if (!existingScript) {\n      const script = document.createElement(\"script\");\n      script.src = config.get(\"PAYSIMPLE_SCRIPT\");\n      script.id = \"paySimple\";\n      document.body.appendChild(script);\n\n      script.onload = () => {\n        resolve();\n      };\n    } else {\n      resolve();\n    }\n  });\n};\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { PaySimple, PaySimpleError, PaySimpleAccountInfo, PaySimpleFormValidity } from \"./PaySimple.service\";\nimport * as paysimpleActions from \"app2/src/reducers/integrations/paysimple.actions\";\nimport * as paymentActions from \"app2/src/reducers/payment.actions\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { AccountInfoRecord } from \"../AccountInfo.model\";\nimport { IUser } from \"app/src/Models/User\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { TrackingData } from \"app2/src/helpers/Analytics\";\nimport { IMakePaymentData } from \"app2/src/records/PaymentRecord\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\nimport { Form } from \"react-bootstrap\";\n\nconst mapStateToProps = (state: RootState, ownProps: IPaySimpleFormProps) => {\n  const token = state.getIn([\"integrations\", \"paysimple\", \"token\"], null);\n\n  return {\n    currentUser: denormalizedReduxUser(state) as any as IUser,\n    fetchingToken: state.getIn([\"integrations\", \"paysimple\", \"fetchingToken\"]),\n    checkoutToken: token ? token.toJS() : token,\n    checkoutTokenError: state.getIn([\"integrations\", \"paysimple\", \"token_error\"], \"\"),\n    payment: state.getIn([\"integrations\", \"paysimple\", \"payment\"], null),\n    providerSubmitting: state.getIn([\"payments\", \"providerSubmitting\"]),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: IPaySimpleFormProps) => {\n  const { resolve } = ownProps;\n  return {\n    loadCheckoutToken: () => {\n      dispatch(paysimpleActions.AsyncActions.getCheckoutToken(resolve.org.id));\n    },\n    setPaySimpleError: (error: string) => {\n      dispatch(paysimpleActions.Actions.receiveGeneralError(error));\n    },\n    makePayment: (orgId: number, accountInfo: PaySimpleAccountInfo, payment: IMakePaymentData) => {\n      return dispatch(paysimpleActions.AsyncActions.makePayment(orgId, accountInfo, payment));\n    },\n    setPaymentError: (error: string) => {\n      return dispatch(paymentActions.Actions.paymentError(error));\n    },\n    setProviderValid: (valid: boolean) => {\n      return dispatch(paymentActions.Actions.providerValid(valid));\n    },\n    setProviderLoading: (loading: boolean) => {\n      return dispatch(paymentActions.Actions.providerLoading(loading));\n    },\n    setProviderSubmitting: (submitting: boolean) => {\n      return dispatch(paymentActions.Actions.providerSubmitting(submitting));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps, null, {\n  forwardRef: true,\n});\n\ninterface IPaySimpleFormProps {\n  resolve: { org: IOrg; job: IJob; estimate: IEstimate };\n  accountInfo: AccountInfoRecord;\n  tracking?: TrackingProp;\n}\n\nconst track: Track<TrackingData, IPaySimpleFormProps> = _track;\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IPaySimpleFormProps;\n\ninterface IFormMutabaleState {\n  paymentType: string;\n}\nexport interface IPaySimpleFormState extends IFormMutabaleState {\n  paySimpleLoaded: boolean;\n  paySimpleInitialized: boolean;\n  paySimpleFormValid: boolean;\n}\n\n@track()\nclass PaySimpleForm extends React.Component<Props, IPaySimpleFormState> {\n  protected paySimple: PaySimple;\n  private _isMounted = false;\n\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      paySimpleLoaded: false,\n      paySimpleInitialized: false,\n      paySimpleFormValid: false,\n      paymentType: \"cc\",\n    };\n\n    this.handleAccountRecieved = this.handleAccountRecieved.bind(this);\n    this.handleError = this.handleError.bind(this);\n    this.paySimpleFormValidationChanged = this.paySimpleFormValidationChanged.bind(this);\n  }\n\n  public componentDidMount() {\n    const { loadCheckoutToken } = this.props;\n\n    loadCheckoutToken();\n\n    this._isMounted = true;\n    PaySimple.loadJs().then(() => {\n      if (this._isMounted) {\n        this.setState({\n          paySimpleLoaded: true,\n        });\n      }\n    });\n  }\n\n  public componentWillUnmount() {\n    this._isMounted = false;\n  }\n\n  public componentDidUpdate(prevProps) {\n    const { checkoutToken } = this.props;\n    const { paySimpleLoaded, paySimpleInitialized, paymentType } = this.state;\n\n    if (checkoutToken !== null && paySimpleLoaded && !paySimpleInitialized) {\n      this.paySimple = new PaySimple(\"#psjs\", checkoutToken);\n      this.paySimple.askForPaymentOptions(paymentType);\n      this.paySimple.errorHandler = this.handleError;\n      this.paySimple.customerCallback = this.handleAccountRecieved;\n      this.paySimple.formCallback = this.paySimpleFormValidationChanged;\n      this.setState({\n        paySimpleInitialized: true,\n      });\n    }\n\n    if (!prevProps.providerSubmitting && this.props.providerSubmitting) {\n      this.submit();\n    }\n  }\n\n  handleInput = (event) => {\n    const name = event.target.name as keyof IFormMutabaleState;\n    const value = event.target.value;\n    this.setState((): IFormMutabaleState => {\n      return { [name]: value };\n    });\n  };\n\n  handlePaymentTypeChange = (event) => {\n    this.handleInput(event);\n    this.paySimple.askForPaymentOptions(event.target.value);\n  };\n\n  public render() {\n    const { paymentType } = this.state;\n    return (\n      <div className=\"psjs\">\n        <Form.Group>\n          <Form.Label>Payment Method</Form.Label>\n          <Form.Check\n            name=\"paymentType\"\n            type=\"radio\"\n            id=\"paymentType-cc\"\n            checked={paymentType === \"cc\"}\n            value=\"cc\"\n            label=\"Credit Card\"\n            onChange={this.handlePaymentTypeChange}\n            required></Form.Check>\n          <Form.Check\n            name=\"paymentType\"\n            type=\"radio\"\n            id=\"paymentType-ach\"\n            checked={paymentType === \"ach\"}\n            value=\"ach\"\n            label=\"ACH\"\n            onChange={this.handlePaymentTypeChange}\n            required></Form.Check>\n        </Form.Group>\n        <div id=\"psjs\">{/* a PaySimpleJS Payment Form will be inserted here */}</div>\n      </div>\n    );\n  }\n\n  public submit() {\n    const { setProviderValid, accountInfo } = this.props;\n    const { paySimpleFormValid } = this.state;\n    const customer = {\n      firstName: accountInfo.firstName,\n      lastName: accountInfo.lastName,\n      email: accountInfo.email,\n    };\n\n    if (!paySimpleFormValid) {\n      setProviderValid(false);\n      return;\n    } else {\n      setProviderValid(true);\n    }\n\n    this.paySimple.sendCustomer(customer);\n  }\n\n  private handleError(error: PaySimpleError) {\n    const { tracking, setPaySimpleError, accountInfo } = this.props;\n    const errorMsg = _.chain(error.errors)\n      .map((e) => `${e.field}: ${e.message}`)\n      .join(\", \")\n      .value();\n\n    tracking.trackEvent({\n      action: \"Submitted with Errors\",\n      error: errorMsg,\n      amount: accountInfo.amount,\n      description: accountInfo.description,\n      firstName: accountInfo.firstName,\n      lastName: accountInfo.lastName,\n      email: accountInfo.email,\n    });\n    setPaySimpleError(errorMsg);\n  }\n\n  private handleAccountRecieved(psAccountInfo: PaySimpleAccountInfo) {\n    const { makePayment, accountInfo, resolve, currentUser, tracking } = this.props;\n\n    const eventData = {\n      amount: accountInfo.amount,\n      description: accountInfo.description,\n      firstName: accountInfo.firstName,\n      lastName: accountInfo.lastName,\n      email: accountInfo.email,\n    };\n\n    const payment: IMakePaymentData = {\n      first_name: accountInfo.firstName,\n      last_name: accountInfo.lastName,\n      email: accountInfo.email,\n      description: accountInfo.description,\n      amount: accountInfo.amount,\n      job_id: resolve.job.id,\n      user_id: currentUser.id,\n      estimate_id: resolve.estimate ? resolve.estimate.id : null,\n    };\n\n    tracking.trackEvent({\n      action: \"Submitted\",\n      ...eventData,\n    });\n    makePayment(resolve.org.id, psAccountInfo, payment).then(\n      () => {\n        tracking.trackEvent({\n          action: \"Authorized\",\n          ...eventData,\n        });\n      },\n      (error) => {\n        tracking.trackEvent({\n          action: \"Error\",\n          message: error,\n          ...eventData,\n        });\n      },\n    );\n  }\n\n  private paySimpleFormValidationChanged(data: PaySimpleFormValidity) {\n    const { setProviderValid } = this.props;\n    this.setState({\n      paySimpleFormValid: data.validity,\n    });\n\n    setProviderValid(data.validity);\n  }\n}\n\nexport default connector(PaySimpleForm);\n","import * as React from \"react\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Row, Col, Form } from \"react-bootstrap\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport { IJob } from \"app/src/Models/Job\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { TrackingData } from \"app2/src/helpers/Analytics\";\nimport * as paymentActions from \"app2/src/reducers/payment.actions\";\nimport * as cardconnectActions from \"app2/src/reducers/integrations/cardconnect.actions\";\nimport { AccountInfoRecord } from \"../AccountInfo.model\";\nimport * as config from \"react-global-configuration\";\nimport { IUser } from \"app/src/Models/User\";\nimport { IMakePaymentData, PaymentRecord, PaymentChargeType } from \"app2/src/records/PaymentRecord\";\nimport { denormalizedReduxUser } from \"app2/src/selectors/user.selectors\";\n\nconst mapStateToProps = (state: RootState, ownProps: ICardConnectFormProps) => {\n  return {\n    currentUser: denormalizedReduxUser(state) as any as IUser,\n    payment: state.getIn([\"integrations\", \"paysimple\", \"payment\"], null),\n    providerSubmitting: state.getIn([\"payments\", \"providerSubmitting\"]),\n    providerValid: state.getIn([\"payments\", \"providerValid\"]),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: ICardConnectFormProps) => {\n  return {\n    makePayment: (\n      orgId: number,\n      token: string,\n      accountInfo: { email: string; name: string },\n      payment: IMakePaymentData,\n    ) => {\n      return dispatch(cardconnectActions.AsyncActions.makePayment(orgId, token, accountInfo, payment));\n    },\n    setPaymentError: (error: string) => {\n      return dispatch(paymentActions.Actions.paymentError(error));\n    },\n    setProviderValid: (valid: boolean) => {\n      return dispatch(paymentActions.Actions.providerValid(valid));\n    },\n    setProviderLoading: (loading: boolean) => {\n      return dispatch(paymentActions.Actions.providerLoading(loading));\n    },\n    setProviderSubmitting: (submitting: boolean) => {\n      return dispatch(paymentActions.Actions.providerSubmitting(submitting));\n    },\n    sendReceipt: (payment: PaymentRecord) => {\n      return dispatch(paymentActions.AsyncActions.sendReceipt(payment));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface ICardConnectFormProps {\n  accountInfo: AccountInfoRecord;\n  resolve: { org: IOrg; job: IJob; estimate: IEstimate };\n  tracking?: TrackingProp;\n}\n\nconst track: Track<TrackingData, ICardConnectFormProps> = _track;\n\nexport interface ICardConnectFormState {\n  token: string;\n  chargeType: PaymentChargeType;\n}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & ICardConnectFormProps;\n\n@track()\nclass CardConnectForm extends React.Component<Props, ICardConnectFormState> {\n  protected _listener;\n  protected _mounted = false;\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      token: \"\",\n      chargeType: \"credit_card\",\n    };\n\n    this._listener = (event) => {\n      const { setProviderValid } = props;\n\n      if (!event.origin.match(/cardconnect/)) {\n        return;\n      }\n\n      if (event.data === undefined || typeof event.data !== \"string\") {\n        return;\n      }\n\n      try {\n        const json = JSON.parse(event.data);\n\n        if (json.message && json.message !== \"\") {\n          this.setState({ token: json.message });\n          setProviderValid(true);\n        }\n\n        if (json.validationError && json.validationError !== \"\") {\n          setProviderValid(false);\n        }\n      } catch (e) {\n        console.error(\"Error parsing CC response: \", e);\n      }\n    };\n\n    this.handleInput = this.handleInput.bind(this);\n  }\n\n  public componentDidMount() {\n    this._mounted = true;\n    window.addEventListener(\"message\", this._listener, false);\n  }\n\n  public componentWillUnmount() {\n    this._mounted = false;\n    window.removeEventListener(\"message\", this._listener, false);\n  }\n\n  public componentDidUpdate(prevProps) {\n    if (!this._mounted) {\n      return;\n    }\n\n    if (!prevProps.providerSubmitting && this.props.providerSubmitting) {\n      this.submit();\n    }\n  }\n\n  public handleInput(e: React.FormEvent<any>): void {\n    //@ts-ignore\n    const value = e.target.value;\n    //@ts-ignore\n    const name = e.target.name;\n    const newState = {};\n\n    newState[name] = value;\n\n    this.setState(newState);\n  }\n\n  public render() {\n    const { chargeType } = this.state;\n    const url = config.get(\"CARD_CONNECT_IFRAME_URL\");\n    let urlOptions = \"maskfirsttwo=true&useexpiry=true&usecvv=true&invalidinputevent=true&highlightinvalidinput=true\";\n    if (chargeType === \"ach\") {\n      urlOptions = \"maskfirsttwo=true&invalidinputevent=true&highlightinvalidinput=true\";\n    }\n    const css = `\n      .error {\n        color: red;\n      }\n      input, select {\n        margin-bottom: 20px;\n        font-family: Roboto, Helvetica, sans-serif;\n        font-size: 14px;\n        font-weight: 400;\n        line-height: 1.5;\n        border: 1px solid rgb(206, 212, 218);\n        border-style: solid;\n        border-radius: 0.25rem;\n        padding: 0.375rem 0.75rem;\n      }\n      label {\n        font-family: Roboto, Helvetica, sans-serif;\n        color: rgb(191, 191, 191);\n        text-transform: uppercase;\n        font-size: 0.875rem;\n        font-weight: 700;\n      }\n    `;\n    const cssOptions = `css=${encodeURI(css.replace(/\\s+/gm, \" \").replace(/#/g, \"%23\"))}`;\n\n    return (\n      <>\n        <Row>\n          <Col md={6}>\n            <Form.Group>\n              <Form.Label>Payment Method</Form.Label>\n              <Form.Check\n                name=\"chargeType\"\n                type=\"radio\"\n                id=\"chargeType-cc\"\n                checked={chargeType === \"credit_card\"}\n                value=\"credit_card\"\n                label=\"Credit Card\"\n                onChange={this.handleInput}\n                required></Form.Check>\n              <Form.Check\n                name=\"chargeType\"\n                type=\"radio\"\n                id=\"chargeType-ach\"\n                checked={chargeType === \"ach\"}\n                value=\"ach\"\n                label=\"ACH\"\n                onChange={this.handleInput}\n                required></Form.Check>\n            </Form.Group>\n          </Col>\n        </Row>\n        {chargeType === \"ach\" && (\n          <Row>\n            <Col md={12}>\n              To complete the homeowner's payment please use this format \"ROUTING/ACCOUNT\": <br />\n              <br />\n              <i className=\"information\">Example: 074000010/111222333</i>\n            </Col>\n          </Row>\n        )}\n        <div>\n          <br />\n          <h3>{chargeType === \"credit_card\" ? \"Credit Card Information\" : \"Account Information\"}</h3>\n          <iframe\n            id=\"tokenFrame\"\n            name=\"tokenFrame\"\n            style={{ height: chargeType === \"credit_card\" ? \"210px\" : \"70px\" }}\n            src={`${url}?${cssOptions}&${urlOptions}`}\n            scrolling=\"no\"\n          />\n        </div>\n      </>\n    );\n  }\n\n  public submit() {\n    const { providerValid, accountInfo, makePayment, sendReceipt, resolve, currentUser, tracking } = this.props;\n    const { token, chargeType } = this.state;\n    const customer = {\n      name: `${accountInfo.firstName} ${accountInfo.lastName}`,\n      email: accountInfo.email,\n    };\n\n    const payment: IMakePaymentData = {\n      first_name: accountInfo.firstName,\n      last_name: accountInfo.lastName,\n      email: accountInfo.email,\n      description: accountInfo.description,\n      amount: accountInfo.amount,\n      postal: accountInfo.postalCode,\n      charge_type: \"credit_card\",\n      job_id: resolve.job.id,\n      user_id: currentUser.id,\n      estimate_id: resolve.estimate ? resolve.estimate.id : null,\n    };\n\n    if (chargeType === \"ach\") {\n      payment.charge_type = \"ach\";\n    }\n\n    if (providerValid) {\n      makePayment(resolve.org.id, token, customer, payment).then(\n        (payment) => {\n          if (payment.status === \"Authorized\") {\n            tracking.trackEvent({\n              action: \"Authorized\",\n              payment_id: payment.id,\n              ...customer,\n              ...accountInfo.toJSON(),\n            });\n            return sendReceipt(payment).then(() => payment);\n          } else {\n            tracking.trackEvent({\n              action: \"Failed\",\n              payment_id: payment.id,\n              ...customer,\n              ...accountInfo.toJSON(),\n            });\n          }\n        },\n        (error) => {\n          tracking.trackEvent({\n            action: \"Error\",\n            message: error,\n            ...customer,\n            ...accountInfo.toJSON(),\n          });\n        },\n      );\n    }\n  }\n}\n\nexport default connector(CardConnectForm);\n","import { Record, List } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IAccountInfoData>): AccountInfoRecord => {\n  return new AccountInfoRecord(json);\n};\n\nexport interface IAccountInfoData {\n  firstName: string;\n  lastName: string;\n  email: string;\n  description: string;\n  amount: number;\n  postalCode: string;\n  estimateId?: number;\n}\n\nexport type IAccountInfoRecord = IAccountInfoData;\n\nconst defaultAccountInfoProps: IAccountInfoRecord = {\n  firstName: \"\",\n  lastName: \"\",\n  email: \"\",\n  description: \"\",\n  amount: 0,\n  postalCode: \"\",\n  estimateId: undefined,\n};\n\nexport class AccountInfoRecord extends Record(defaultAccountInfoProps) implements IAccountInfoRecord {\n  public firstName!: string;\n  public lastName!: string;\n  public email!: string;\n  public description!: string;\n  public amount!: number;\n  public postalCode!: string;\n  public estimateId?: number;\n\n  public constructor(values?: Partial<IAccountInfoRecord>) {\n    if (values) {\n      if (values.amount) {\n        values.amount = parseFloat(values.amount as any);\n      }\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import * as React from \"react\";\nimport { Map } from \"immutable\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { PaymentRecord } from \"app2/src/records/PaymentRecord\";\nimport { PaySimpleFailureKeys } from \"./PaySimple.service\";\n\ninterface PaySimplePaymentViewProps {\n  payment: PaymentRecord;\n}\n\nexport const PaySimplePaymentView: React.SFC<PaySimplePaymentViewProps> = (props) => {\n  const { payment } = props;\n  return (\n    <Row>\n      <Col md={12}>\n        <Row>\n          <Col md={4}>Customer#: </Col>\n          <Col md={8}>{payment.payload.get(\"CustomerId\")}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Customer: </Col>\n          <Col md={8}>{`${payment.payload.get(\"CustomerFirstName\")} ${payment.payload.get(\"CustomerLastName\")}`}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Status: </Col>\n          <Col md={8}>{payment.status}</Col>\n        </Row>\n        <PaySimplePaymentFailureView failure={payment.payload.get(\"FailureData\")} />\n      </Col>\n    </Row>\n  );\n};\n\ninterface PaySimplePaymentFailureViewProps {\n  failure: Map<PaySimpleFailureKeys, string>;\n}\n\nexport const PaySimplePaymentFailureView: React.SFC<PaySimplePaymentFailureViewProps> = (props) => {\n  const { failure } = props;\n\n  if (!failure || !failure.get(\"Code\")) {\n    return null;\n  }\n  return (\n    <Row className=\"bg-danger\">\n      <Col md={12}>\n        <Row>\n          <Col md={12}>&nbsp;</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Code#: </Col>\n          <Col md={8}>{failure.get(\"Code\")}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Description: </Col>\n          <Col md={8}>{failure.get(\"Description\")}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Merchant Action: </Col>\n          <Col md={8}>{failure.get(\"MerchantActionText\")}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Declined: </Col>\n          <Col md={8}>{failure.get(\"IsDecline\")}</Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { Map } from \"immutable\";\nimport { Row, Col } from \"react-bootstrap\";\nimport { PaymentRecord } from \"app2/src/records/PaymentRecord\";\n\ninterface CardConnectPaymentViewProps {\n  payment: PaymentRecord;\n}\n\nexport const CardConnectPaymentView: React.SFC<CardConnectPaymentViewProps> = (props) => {\n  const { payment } = props;\n  return (\n    <Row>\n      <Col md={12}>\n        <Row>\n          <Col md={4}>Customer#: </Col>\n          <Col md={8}>{payment.payload.get(\"account\")}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Customer: </Col>\n          <Col md={8}>{payment.getIn([\"payload\", \"receipt\", \"nameOnCard\"]) || \"N/A\"}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Status: </Col>\n          <Col md={8}>{payment.status}</Col>\n        </Row>\n        <CardConnectPaymentFailureView failure={payment} />\n      </Col>\n    </Row>\n  );\n};\n\ninterface CardConnectPaymentFailureViewProps {\n  failure: PaymentRecord;\n}\n\nexport const CardConnectPaymentFailureView: React.SFC<CardConnectPaymentFailureViewProps> = (props) => {\n  const { failure } = props;\n\n  if (!failure || !failure.getIn([\"payload\", \"FailureData\", \"Code\"])) {\n    return null;\n  }\n  return (\n    <Row className=\"bg-danger\">\n      <Col md={12}>\n        <Row>\n          <Col md={12}>&nbsp;</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Status: </Col>\n          <Col md={8}>{failure.get(\"status\")}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Code#: </Col>\n          <Col md={8}>{failure.getIn([\"payload\", \"FailureData\", \"Code\"])}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Description: </Col>\n          <Col md={8}>{failure.getIn([\"payload\", \"FailureData\", \"Description\"])}</Col>\n        </Row>\n        <Row>\n          <Col md={4}>Declined: </Col>\n          <Col md={8}>{failure.getIn([\"payload\", \"FailureData\", \"IsDecline\"]).toString()}</Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import { AccountInfoRecord } from \"app2/src/components/Payments/AccountInfo.model\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { accessUid, authToken } from \"app2/src/selectors/auth.selectors\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport * as React from \"react\";\nimport * as config from \"react-global-configuration\";\nimport { useSelector } from \"react-redux\";\n\nexport interface OccPayPaymentViewProps {\n  closeModal: () => void;\n  accountInfo: AccountInfoRecord;\n}\n\nexport const OccPayPaymentView: React.FC<OccPayPaymentViewProps> = ({ closeModal, accountInfo }) => {\n  // Selectors\n  const orgId = useSelector(currentOrgId);\n  const token = useSelector(authToken);\n  const authId = useSelector(accessUid);\n  const job: JobRecord = useSelector(currentJob);\n\n  // Constants\n  const iframeURL = (() => {\n    if (orgId && token && authId && job) {\n      const url = new URL(config.get(\"RSF_ANALYTICS_URL\") + `/orgs/${orgId}/payments/create`);\n      url.searchParams.append(\"token\", token);\n      url.searchParams.append(\"auth_id\", authId);\n      url.searchParams.append(\"job_id\", job.id.toString());\n      url.searchParams.append(\"first_name\", accountInfo.get(\"firstName\"));\n      url.searchParams.append(\"last_name\", accountInfo.get(\"lastName\"));\n      url.searchParams.append(\"email\", accountInfo.get(\"email\"));\n      url.searchParams.append(\"phone\", job.phone_numbers.first()?.get(\"number\") || \"\");\n      url.searchParams.append(\"line_1\", job.address.get(\"line_1\"));\n      url.searchParams.append(\"line_2\", job.address.get(\"line_2\"));\n      url.searchParams.append(\"city\", job.address.get(\"city\"));\n      url.searchParams.append(\"state\", job.address.get(\"state\"));\n      url.searchParams.append(\"postal_code\", job.address.get(\"postal_code\"));\n      url.searchParams.append(\"amount\", accountInfo.get(\"amount\").toString());\n      url.searchParams.append(\"description\", accountInfo.get(\"description\"));\n      if (accountInfo.get(\"estimateId\")) {\n        url.searchParams.append(\"estimate_id\", accountInfo.get(\"estimateId\").toString());\n      }\n\n      return url.toString();\n    } else {\n      return \"\";\n    }\n  })();\n\n  // Lifecycle\n  React.useEffect(() => {\n    const handleEvent = (event: MessageEvent) => {\n      try {\n        const data = JSON.parse(event.data);\n        if (data.event === \"occpay.cancel\") {\n          closeModal();\n        }\n        if (data.event === \"occpay.complete\") {\n          closeModal();\n        }\n      } catch (e) {\n        // Not an occpay event\n      }\n    };\n    window.addEventListener(\"message\", handleEvent);\n\n    return () => {\n      window.removeEventListener(\"message\", handleEvent);\n    };\n  }, []);\n\n  return (\n    <div>\n      <iframe src={iframeURL} />\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { PaymentRecord } from \"app2/src/records/PaymentRecord\";\nimport { PaySimplePaymentView } from \"./PaySimple/PaySimplePaymentView\";\nimport { CardConnectPaymentView } from \"./CardConnect/CardConnectPaymentView\";\nimport { OccPayPaymentView } from \"app2/src/components/Payments/OccPay/OccPayPaymentView\";\n\nexport interface IPaymentViewProps {\n  payment: PaymentRecord;\n}\n\nexport default class PaymentView extends React.PureComponent<IPaymentViewProps> {\n  public render() {\n    const { payment } = this.props;\n    switch (payment.kind) {\n      case \"occ_pay\":\n        return <OccPayPaymentView />;\n      case \"paysimple\":\n        return <PaySimplePaymentView payment={payment} />;\n      case \"cardconnect\":\n        return <CardConnectPaymentView payment={payment} />;\n      default:\n        return <div>Payment</div>;\n    }\n  }\n}\n","import * as React from \"react\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport _track, { Track, TrackingProp } from \"react-tracking\";\nimport { Dispatch, TrackingData } from \"app2/src/helpers/Analytics\";\nimport { IOrg } from \"app/src/Models/Org\";\nimport Spinner from \"app2/src/components/SpinnerComponent\";\nimport { Modal, Col, Row, FormGroup, FormControl, FormLabel, Button } from \"react-bootstrap\";\nimport { IJob } from \"app/src/Models/Job\";\nimport PaySimpleForm from \"./PaySimple/PaySimpleForm\";\nimport CardConnectForm from \"./CardConnect/CardConnectForm\";\nimport { AccountInfoRecord, fromJSON as accountInfoFromJSON } from \"./AccountInfo.model\";\nimport * as paymentActions from \"app2/src/reducers/payment.actions\";\nimport PaymentView from \"./PaymentView\";\nimport { DecimalInputComponent } from \"../Common/DecimalInputComponent\";\nimport { currentOrg } from \"app2/src/selectors/org.selectors\";\nimport { currentJob, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { paymentAuth } from \"app2/src/selectors/payment.selectors\";\nimport { estimate } from \"app2/src/selectors/estimate.selectors\";\nimport { paymentProviders } from \"app2/src/records/PaymentAuthorizationRecord\";\nimport { firstName, lastName } from \"app2/src/services/string.service\";\nimport { OccPayPaymentView } from \"app2/src/components/Payments/OccPay/OccPayPaymentView\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\n\nconst mapStateToProps = (state: RootState, ownProps: IMakePaymentProps) => {\n  const org = currentOrg(state);\n  const estimateId = selectedEstimateId(state);\n  const auth = paymentAuth(state, { orgId: org?.id });\n  return {\n    payment: state.getIn([\"payments\", \"lastPayment\"], null),\n    makingPayment: state.getIn([\"payments\", \"makingPayment\"], false),\n    paymentError: state.getIn([\"payments\", \"error\"], null),\n    providerLoading: state.getIn([\"payments\", \"providerLoading\"]),\n    providerValid: state.getIn([\"payments\", \"providerValid\"]),\n    resolve: {\n      org: org?.toJS() as any as IOrg,\n      job: currentJob(state)?.toJS() as IJob,\n      estimate: estimate(state, { estimateId })?.toJS() as IEstimate,\n      payment_provider: paymentProviders.find((v) => auth?.get(v as any)),\n      estimateId,\n    },\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: IMakePaymentProps) => {\n  return {\n    setProviderSubmitting: (submitting: boolean) => {\n      return dispatch(paymentActions.Actions.providerSubmitting(submitting));\n    },\n    clearLastPayment: () => {\n      return dispatch(paymentActions.Actions.clearLastPayment());\n    },\n    clearPaymentError: () => {\n      return dispatch(paymentActions.Actions.paymentError(\"\"));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface IMakePaymentProps {\n  closeModal: () => void;\n  tracking?: TrackingProp;\n  id?: string;\n}\n\nconst track: Track<TrackingData, IMakePaymentProps> = _track;\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & IMakePaymentProps;\n\nexport interface IMakePaymentState {\n  accountInfo: AccountInfoRecord;\n  submitAttempted: boolean;\n}\n\n@track(\n  (props: Props) => {\n    return {\n      category: \"Billing Payment\",\n      action: \"Show\",\n      job: props.resolve.job?.id,\n      org: props.resolve.org?.id,\n      estimate: props.resolve?.estimate?.id,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n    dispatchOnMount: true,\n  },\n)\nclass MakePayment extends React.Component<Props, IMakePaymentState> {\n  public formRef: React.RefObject<HTMLFormElement>;\n\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      accountInfo: accountInfoFromJSON({}),\n      submitAttempted: false,\n    };\n\n    this.formRef = React.createRef();\n\n    this.renderForm = this.renderForm.bind(this);\n    this.handleInput = this.handleInput.bind(this);\n    this.submitForm = this.submitForm.bind(this);\n    this.handleNumberChange = this.handleNumberChange.bind(this);\n    this.formValid = this.formValid.bind(this);\n  }\n\n  public componentDidMount() {\n    const { resolve } = this.props;\n\n    const newState: Partial<IMakePaymentState> = {};\n    let amount = 0;\n\n    if (resolve.estimate) {\n      amount =\n        (resolve.estimate.payment_terms.payment_term_items[0]?.calculated ?? resolve.estimate.total) ||\n        resolve.estimate.total;\n    }\n\n    if (resolve.job) {\n      const name = resolve.job.customer_name;\n\n      newState.accountInfo = accountInfoFromJSON({\n        firstName: firstName(name),\n        lastName: lastName(name),\n        email: resolve.job.email || \"\",\n        description: `${resolve.job.customer_name} - ${resolve.job.name}` || \"\",\n        postalCode: resolve.job.address.postal_code || \"\",\n        amount,\n        estimateId: resolve.estimateId,\n      });\n    } else {\n      newState.accountInfo = accountInfoFromJSON({ amount });\n    }\n\n    this.setState(newState as IMakePaymentState);\n  }\n\n  public componentWillUnmount() {\n    const { clearLastPayment, clearPaymentError, setProviderSubmitting } = this.props;\n\n    clearLastPayment();\n    clearPaymentError();\n    setProviderSubmitting(false);\n  }\n\n  public handleInput(e: any): void {\n    //@ts-ignore\n    const value = e.target.value;\n    //@ts-ignore\n    const name = e.target.id;\n\n    let { accountInfo } = this.state;\n    switch (name) {\n      case \"amount\":\n        accountInfo = accountInfo.set(name, parseFloat(value || \"0\"));\n        break;\n      default:\n        accountInfo = accountInfo.set(name, value);\n        break;\n    }\n\n    this.setState({ accountInfo });\n  }\n\n  public handleNumberChange(value: number, name: string) {\n    let { accountInfo } = this.state;\n\n    accountInfo = accountInfo.set(name as any, value);\n\n    this.setState({ accountInfo });\n  }\n\n  public render() {\n    const { payment, makingPayment, paymentError, providerLoading } = this.props;\n\n    let caseValue = \"form\";\n    if (paymentError) {\n      caseValue = \"error\";\n    }\n\n    if (payment) {\n      caseValue = \"payment\";\n    }\n\n    return (\n      <Spinner localProperty={providerLoading || makingPayment}>\n        {(() => {\n          switch (caseValue) {\n            case \"form\":\n              return this.renderForm();\n            case \"error\":\n              return this.renderError(paymentError);\n            case \"payment\":\n              return this.renderPayment(payment);\n          }\n        })()}\n      </Spinner>\n    );\n  }\n\n  public renderPayment(payment) {\n    const { closeModal } = this.props;\n    return (\n      <React.Fragment>\n        <Modal.Header key={4} closeButton>\n          <Modal.Title>\n            <div className=\"row-eq-height\">\n              <Col md={12}>\n                <h3>Payment Result</h3>\n              </Col>\n            </div>\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <PaymentView payment={payment} />\n        </Modal.Body>\n        <Modal.Footer>\n          <Button variant=\"cancel\" type=\"button\" className=\"pull-right\" onClick={closeModal}>\n            Close\n          </Button>\n        </Modal.Footer>\n      </React.Fragment>\n    );\n  }\n\n  public renderError(error) {\n    const { closeModal } = this.props;\n    return (\n      <React.Fragment>\n        <Modal.Header key={0} closeButton>\n          <Modal.Title>\n            <div className=\"row-eq-height\">\n              <Col md={12}>\n                <h3>Payment Error</h3>\n              </Col>\n            </div>\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <span>{error}</span>\n        </Modal.Body>\n        <Modal.Footer>\n          <Button variant=\"cancel\" type=\"button\" onClick={closeModal}>\n            Close\n          </Button>\n        </Modal.Footer>\n      </React.Fragment>\n    );\n  }\n\n  public renderForm() {\n    const { providerValid, resolve, closeModal } = this.props;\n    const { accountInfo, submitAttempted } = this.state;\n\n    if (resolve.payment_provider === \"occ_pay\")\n      return <OccPayPaymentView accountInfo={accountInfo} closeModal={closeModal} />;\n\n    return (\n      <form ref={this.formRef} id=\"paysimple-form\" className=\"form\" onSubmit={this.submitForm}>\n        <Modal.Header key=\"header\" closeButton>\n          <Modal.Title>\n            <div className=\"row-eq-height\">\n              <Col md={12}>\n                <h3>Make a Payment</h3>\n              </Col>\n            </div>\n          </Modal.Title>\n        </Modal.Header>\n\n        <Modal.Body key=\"body\">\n          <Row>\n            <Col md={6}>\n              <FormGroup>\n                <FormLabel>First Name</FormLabel>\n                <FormControl\n                  type=\"text\"\n                  id=\"firstName\"\n                  value={accountInfo.firstName}\n                  onChange={this.handleInput}\n                  required></FormControl>\n              </FormGroup>\n            </Col>\n            <Col md={6}>\n              <FormGroup>\n                <FormLabel>Last Name</FormLabel>\n                <FormControl\n                  type=\"text\"\n                  id=\"lastName\"\n                  value={accountInfo.lastName}\n                  onChange={this.handleInput}\n                  required></FormControl>\n              </FormGroup>\n            </Col>\n            <Col md={6}>\n              <FormGroup>\n                <FormLabel>Email</FormLabel>\n                <FormControl\n                  type=\"email\"\n                  id=\"email\"\n                  value={accountInfo.email}\n                  onChange={this.handleInput}\n                  required></FormControl>\n              </FormGroup>\n            </Col>\n            {resolve.payment_provider === \"card_connect\" && (\n              <Col md={6}>\n                <FormGroup>\n                  <FormLabel>Postal Code</FormLabel>\n                  <FormControl\n                    type=\"text\"\n                    id=\"postalCode\"\n                    value={accountInfo.postalCode}\n                    onChange={this.handleInput}\n                    required></FormControl>\n                </FormGroup>\n              </Col>\n            )}\n          </Row>\n\n          <Row>\n            <Col md={6}>\n              <FormGroup>\n                <FormLabel>Description</FormLabel>\n                <FormControl\n                  type=\"description\"\n                  id=\"description\"\n                  value={accountInfo.description}\n                  onChange={this.handleInput}\n                  required></FormControl>\n              </FormGroup>\n            </Col>\n            <Col md={6}>\n              <FormGroup>\n                <FormLabel>Amount</FormLabel>\n                <DecimalInputComponent\n                  type=\"number\"\n                  min=\"1\"\n                  step=\"0.01\"\n                  id=\"amount\"\n                  max=\"9999999\"\n                  required\n                  name=\"amount\"\n                  title=\"Amount\"\n                  value={accountInfo.amount}\n                  onNumberChange={this.handleNumberChange}\n                />\n              </FormGroup>\n            </Col>\n          </Row>\n\n          <Row>\n            <Col md={12}>{this.ccForm()}</Col>\n            {submitAttempted && !providerValid ? (\n              <Col md={12}>\n                <span className=\"alert alert-danger\">Credit Card Information is incomplete or invalid.</span>\n              </Col>\n            ) : null}\n          </Row>\n        </Modal.Body>\n        <Modal.Footer key=\"footer\">\n          <Button variant=\"cancel\" type=\"button\" onClick={closeModal} className=\"pull-right\">\n            Cancel\n          </Button>\n          <Button\n            variant=\"default\"\n            type=\"submit\"\n            id=\"submit\"\n            disabled={!providerValid || !this.formValid()}\n            className=\"pull-right\">\n            Complete Payment\n          </Button>\n        </Modal.Footer>\n      </form>\n    );\n  }\n\n  public submitForm(event: React.FormEvent<HTMLFormElement>) {\n    event.preventDefault();\n\n    const { providerValid, setProviderSubmitting } = this.props;\n    this.setState({ submitAttempted: true });\n\n    if (providerValid) {\n      setProviderSubmitting(true);\n    }\n  }\n\n  protected formValid() {\n    if (!this.formRef || !this.formRef.current || !this.formRef.current.reportValidity) {\n      return false;\n    }\n\n    return this.formRef.current.reportValidity();\n  }\n\n  protected ccForm() {\n    const { accountInfo } = this.state;\n    const { resolve } = this.props;\n\n    switch (resolve.payment_provider) {\n      case \"pay_simple\":\n        return <PaySimpleForm accountInfo={accountInfo} resolve={resolve} />;\n      case \"card_connect\":\n        return <CardConnectForm accountInfo={accountInfo} resolve={resolve} />;\n    }\n  }\n}\n\nexport default connector(MakePayment);\n","import { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { accessUid, authToken } from \"app2/src/selectors/auth.selectors\";\nimport * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport * as config from \"react-global-configuration\";\n\nexport interface OccPaySaveMethodViewProps {\n  closeModal: () => void;\n}\n\nexport const OccPaySaveMethodView: React.FC<OccPaySaveMethodViewProps> = ({ closeModal }) => {\n  // Selectors\n  const jobId = useSelector(currentJobId);\n  const token = useSelector(authToken);\n  const authId = useSelector(accessUid);\n\n  // Constants\n  const iframeURL = (() => {\n    if (token && authId && jobId) {\n      const url = new URL(config.get(\"RSF_ANALYTICS_URL\") + `/jobs/${jobId}/payment_methods/create`);\n      url.searchParams.append(\"token\", token);\n      url.searchParams.append(\"auth_id\", authId);\n\n      return url.toString();\n    } else {\n      return \"\";\n    }\n  })();\n\n  // Lifecycle\n  React.useEffect(() => {\n    const handleEvent = (event: MessageEvent) => {\n      try {\n        const data = JSON.parse(event.data);\n        if (data.event === \"occpay.cancel\") {\n          closeModal();\n        }\n        if (data.event === \"occpay.complete\") {\n          closeModal();\n        }\n      } catch (e) {\n        // Not an occpay event\n      }\n    };\n    window.addEventListener(\"message\", handleEvent);\n\n    return () => {\n      window.removeEventListener(\"message\", handleEvent);\n    };\n  }, []);\n\n  return (\n    <div>\n      <iframe src={iframeURL} />\n    </div>\n  );\n};\n","import { PaymentRequest } from \"app2/src/components/PaymentsModal/PaymentRequest\";\nimport * as React from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport { Root } from \"app2/src/components/PaymentsModal/Root\";\nimport MakePayment from \"app2/src/components/Payments/MakePayment\";\nimport { OccPaySaveMethodView } from \"app2/src/components/Payments/OccPay/OccPaySaveMethodView\";\nimport { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\n\nexport interface PaymentsModalProps {}\n\nexport type PaymentView = \"root\" | \"onscreen\" | \"request\" | \"save_method\";\n\nexport const PaymentsModal: React.FC<PaymentsModalProps> = () => {\n  // hooks\n  const { goBack } = usePreviousPath();\n\n  // Always start at root view - user chooses their action\n  const [view, setView] = React.useState<PaymentView>(\"root\");\n\n  // callbacks\n  const closeModal = React.useCallback(() => {\n    goBack(\"/payments\");\n  }, [goBack]);\n\n  const navigateToView = React.useCallback((newView: PaymentView) => {\n    // Just update state - don't touch the router at all\n    // This prevents Safari from creating any additional history entries\n    setView(newView);\n  }, []);\n\n  // Render the appropriate view based on state (no nested routing)\n  const renderView = () => {\n    switch (view) {\n      case \"onscreen\":\n        return <MakePayment closeModal={closeModal} />;\n      case \"request\":\n        return <PaymentRequest closeModal={closeModal} />;\n      case \"save_method\":\n        return <OccPaySaveMethodView closeModal={closeModal} />;\n      case \"root\":\n      default:\n        return <Root closeModal={closeModal} navigateToView={navigateToView} />;\n    }\n  };\n\n  return (\n    <Modal show={true} onHide={closeModal} size=\"lg\" backdrop=\"static\">\n      {renderView()}\n    </Modal>\n  );\n};\n","import { DateFormat } from \"app2/src/helpers/Format\";\nimport { RootState } from \"app2/src/reducers\";\nimport { AsyncActions } from \"app2/src/reducers/event.actions\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport * as React from \"react\";\nimport { Button, FormControl, FormGroup, FormLabel, Modal, Row, Col, Form } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { event as eventSelector } from \"app2/src/selectors/event.selectors\";\nimport { useRouteMatch } from \"react-router\";\nimport { useTracking } from \"react-tracking\";\nimport { email as validateEmail } from \"app2/src/helpers/FinalFormValidator\";\n\nexport const SendInviteModal: React.FC = () => {\n  const dispatch = useDispatch();\n  const jobEmail = useSelector((state: RootState) => currentJob(state)?.email);\n  const match = useRouteMatch<{ eventId: string }>();\n  const { trackEvent } = useTracking<any>({ component: \"SendInviteModal\" });\n  const eventId = parseInt(match.params.eventId);\n  const event = useSelector((state: RootState) => eventSelector(state, { eventId }));\n\n  const [summary, setSummary] = React.useState(event?.summary);\n  const [email, setEmail] = React.useState(jobEmail);\n  const [error, setError] = React.useState(\"\");\n\n  React.useEffect(() => {\n    if (event) setSummary(event.summary);\n  }, [event]);\n\n  const validate = (email: string) => {\n    let error;\n\n    error = validateEmail(email);\n    if (!email) {\n      error = \"Email is required\";\n    }\n    setError(error);\n\n    return error;\n  };\n\n  const onEmailChange = (email: string) => {\n    setEmail(email);\n    validate(email);\n  };\n\n  const send = () => {\n    if (validate(email)) return;\n\n    trackEvent({ action: \"Send Appointment Invite\", event: event.id, email });\n    dispatch(AsyncActions.sendInvite(event.job_id, { emails: email, summary, event_id: event.id }));\n    close();\n  };\n\n  const close = () => {\n    const prevPath = match.path.split(\"/invite\")[0];\n    dispatch(push(prevPath));\n  };\n\n  const cancel = () => {\n    trackEvent({ action: \"Close SendInviteModal\", event: event.id });\n    close();\n  };\n\n  return (\n    <Modal show={true} onHide={cancel} size=\"sm\" backdrop=\"static\">\n      <Modal.Header closeButton>\n        <Modal.Title>Send Invite</Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        <FormGroup>\n          <FormLabel htmlFor=\"summary\">Summary</FormLabel>\n          <FormControl type=\"text\" value={summary} onChange={(e) => setSummary(e.target.value)} id=\"summary\" />\n        </FormGroup>\n        <FormGroup>\n          <FormLabel htmlFor=\"email\">Email</FormLabel>\n          <FormControl type=\"text\" value={email} onChange={(e) => onEmailChange(e.target.value)} id=\"email\" />\n          <Form.Control.Feedback type=\"invalid\" className=\"block\">\n            {error}\n          </Form.Control.Feedback>\n        </FormGroup>\n        <Row>\n          <Col xs={3}>From:</Col>\n          <Col xs={9}>{DateFormat(event?.start_time, \"shortNameTime\")}</Col>\n        </Row>\n        <Row>\n          <Col xs={3}>To:</Col>\n          <Col xs={9}>{DateFormat(event?.end_time, \"shortNameTime\")}</Col>\n        </Row>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button onClick={send}>Send</Button>\n        <Button variant=\"secondary\" onClick={cancel}>\n          Cancel\n        </Button>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { List, getIn } from \"immutable\";\nimport { EventResultRecord } from \"../records/EventResult\";\n\nconst model = \"eventResults\";\nexport const eventResultsById = (state: RootState) => state.getIn([model, \"byId\"]);\n\nexport const orgEventResultIds = (state: RootState, props: { orgId: number }) =>\n  getIn(state, [model, \"byOrgId\", props.orgId], List());\n\nexport const getOrgEventResults = createSelector(\n  [eventResultsById, orgEventResultIds, (state: RootState, props: any) => ({ state, props })],\n  (eventResultsById: Map<number, EventResultRecord>, orgEventResultIds: List<number>, stateProps) => {\n    const { props } = stateProps;\n    let { kind } = props;\n\n    if (!kind) kind = \"default\";\n\n    return orgEventResultIds.map((id) => eventResultsById.get(id)).filter((result) => result.kind === kind);\n  },\n);\n\nexport const eventResult = (state: RootState, props: { eventsResultId: number }): EventResultRecord =>\n  state.getIn([model, \"byId\", props.eventsResultId]);\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { List, getIn } from \"immutable\";\nimport { EventResultReasonRecord } from \"../records/EventResultReason\";\n\nconst model = \"eventResultReasons\";\n\nexport const eventResultReasonsById = (state: RootState) => state.getIn([model, \"byId\"]);\n\nexport const eventResultReason = (state: RootState, props: { reasonId: number }): EventResultReasonRecord =>\n  state.getIn([model, \"byId\", props.reasonId]);\n\nexport const orgEventResultReasonIds = (state: RootState, props: { orgId: number }) =>\n  getIn(state, [model, \"byOrgId\", props.orgId], List());\n\nexport const getOrgEventResultReasons = createSelector(\n  [eventResultReasonsById, orgEventResultReasonIds, (state: RootState, props: any) => ({ state, props })],\n  (eventResultReasonsById: Map<number, EventResultRecord>, orgEventResultReasonIds: List<number>, stateProps) => {\n    const { props } = stateProps;\n    const { eventsResultId } = props;\n    let { kind } = props;\n\n    if (!kind) kind = \"default\";\n    if (eventsResultId) {\n      return orgEventResultReasonIds\n        .map((id) => eventResultReasonsById.get(id))\n        .filter((result) => result.kind === kind && result.events_result_id === eventsResultId);\n    }\n\n    return orgEventResultReasonIds.map((id) => eventResultReasonsById.get(id)).filter((result) => result.kind === kind);\n  },\n);\n","import * as React from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { event as eventSelector } from \"app2/src/selectors/event.selectors\";\nimport { getOrgEventResults } from \"app2/src/selectors/eventResult.selectors\";\nimport { getOrgEventResultReasons } from \"app2/src/selectors/eventResultReason.selectors\";\nimport { EventResultRecord } from \"app2/src/records/EventResult\";\nimport { EventResultReasonRecord } from \"app2/src/records/EventResultReason\";\nimport { List } from \"immutable\";\nimport { useRouteMatch } from \"react-router\";\nimport { AsyncActions } from \"app2/src/reducers/event.actions\";\nimport { FormControl, RsfForm, Select } from \"@tberrysoln/rsf-form\";\nimport { Actions } from \"app2/src/reducers/event.actions\";\nimport { required } from \"app2/src/helpers/FinalFormValidator\";\nimport ButtonFooter from \"app2/src/components/Common/ButtonFooter\";\nimport { useTracking } from \"react-tracking\";\nimport { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\n\nexport const ResultAppointmentModal: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"ResultAppointmentModal\" });\n  const { goBack } = usePreviousPath();\n\n  // Selectors\n  const { params } = useRouteMatch<{ eventId: string }>();\n  const eventId = parseInt(params.eventId);\n  const orgId = useSelector(currentOrgId);\n  const results: List<EventResultRecord> = useSelector((state: RootState) => getOrgEventResults(state, { orgId }));\n  const reasons: List<EventResultReasonRecord> = useSelector((state: RootState) =>\n    getOrgEventResultReasons(state, { orgId }),\n  );\n  const event = useSelector((state: RootState) => eventSelector(state, { eventId }));\n\n  // Methods\n  const close = () => {\n    goBack(\"/result\");\n  };\n\n  const cancel = () => {\n    trackEvent({ action: \"cancel result\", event: eventId });\n    dispatch(Actions.resetEvent(eventId));\n    close();\n  };\n\n  const save = () => {\n    trackEvent({ action: \"result appt\", event: eventId });\n    dispatch(AsyncActions.resultEvent(event));\n    close();\n  };\n\n  return (\n    <Modal show={true} backdrop=\"static\" onHide={cancel}>\n      <Modal.Header closeButton>\n        <Modal.Title>Result Appointment</Modal.Title>\n      </Modal.Header>\n      <RsfForm\n        rootPath={[\"events\", \"byId\", eventId]}\n        updateFormReducer={(e) => Actions.updateForm({ ...e, value: parseInt(e.value) || e.value })}\n        onSubmit={save}>\n        <Modal.Body>\n          <Select name=\"events_result_id\" label=\"Result\" validate={required}>\n            <option value={null} key={null}></option>\n            {results.map((result) => (\n              <option value={result.id} key={result.id}>\n                {result.description}\n              </option>\n            ))}\n          </Select>\n          {(event?.metadata?.get(\"marketsharp_id\") || event?.metadata?.get(\"improveit360_appointment_id\")) && (\n            <Select name=\"events_result_reason_id\" label=\"Reason\">\n              <option value={null} key={null}></option>\n              {reasons.map((result) => (\n                <option value={result.id} key={result.id}>\n                  {result.description}\n                </option>\n              ))}\n            </Select>\n          )}\n          {(event?.metadata?.get(\"marketsharp_id\") ||\n            event?.metadata?.get(\"improveit360_appointment_id\") ||\n            event?.metadata?.get(\"salesforce_event_id\")) && <FormControl name=\"notes\" label=\"Notes\" as=\"textarea\" />}\n        </Modal.Body>\n        <Modal.Footer>\n          <ButtonFooter cancel={cancel} />\n        </Modal.Footer>\n      </RsfForm>\n    </Modal>\n  );\n};\n","import * as React from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport { EventsCalendar } from \"../../Common/EventsCalendar\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport * as eventActions from \"app2/src/reducers/event.actions\";\nimport { queryParamsFromJSON } from \"app2/src/records/Page\";\nimport { Context, ContextRecord, DateRange } from \"app2/src/components/Common/EventsCalendar/Context\";\nimport { getAllPaginationByModel, pageRecord } from \"app2/src/selectors/pagination.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentUserId as currentUserIdSelector } from \"app2/src/selectors/user.selectors\";\nimport { List } from \"immutable\";\nimport { jobTabColor } from \"app2/src/selectors/event.selectors\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { useTracking } from \"react-tracking\";\n\nexport const EventCalendarModal = () => {\n  const modelName = \"events\";\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"EventRow\" });\n\n  // Selectors\n  const path = useSelector(pathname);\n  const userEvents = useSelector((state: RootState) =>\n    getAllPaginationByModel(state, { path: [modelName, \"byId\"], modelName: \"userEvents\" }),\n  );\n  const currentUserId: number = useSelector(currentUserIdSelector);\n  const loading = useSelector((state: RootState) => {\n    return Boolean(pageRecord(state, { modelName: \"userEvents\", page: 1 })?.get(\"loading\"));\n  });\n\n  // Local State\n  const [dateRange, setDateRange] = React.useState<DateRange>({ start: null, end: null });\n  const [userIds, setUserIds] = React.useState(List([currentUserId]));\n\n  // Methods\n  const close = () => {\n    trackEvent({ action: \"close\" });\n    const prevPath = path.split(\"/calendar\")[0];\n    dispatch(push(prevPath));\n  };\n  const loadUserEvents = (dateRange: DateRange) => {\n    dispatch(\n      eventActions.AsyncActions.loadEvents(\n        queryParamsFromJSON({\n          page: 1,\n          parameters: {\n            start_time: dateRange.start,\n            end_time: dateRange.end,\n          },\n        }),\n        \"userEvents\",\n        true,\n      ),\n    );\n  };\n  const handleDateChange = (newDateRange) => {\n    loadUserEvents(newDateRange);\n  };\n\n  return (\n    <Context.Provider\n      value={\n        new ContextRecord({\n          dateRange,\n          setDateRange,\n          userIds,\n          setUserIds,\n          events: userEvents,\n          loading,\n          setEventColor: jobTabColor,\n        })\n      }>\n      <SpinnerComponent localProperty={loading} />\n      <Modal show={true} onHide={close} size=\"xl\" backdrop=\"static\">\n        <Modal.Header className=\"d-flex justify-content-between align-items-center\" closeButton>\n          <Modal.Title>Set Appointment</Modal.Title>\n        </Modal.Header>\n        <Modal.Body style={{ minHeight: \"400px\" }}>\n          <EventsCalendar onDateChange={handleDateChange} />\n        </Modal.Body>\n        <Modal.Footer>\n          <Button variant=\"secondary\" onClick={close}>\n            Cancel\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    </Context.Provider>\n  );\n};\n","import * as React from \"react\";\nimport { DateFormat } from \"app2/src/helpers/Format\";\nimport { EventRecord } from \"app2/src/records/Event\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { ConfirmDialog } from \"../../Common/ConfirmDialog\";\nimport { AsyncActions } from \"app2/src/reducers/event.actions\";\nimport { eventResult } from \"app2/src/selectors/eventResult.selectors\";\nimport { eventResultReason } from \"app2/src/selectors/eventResultReason.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { eventHasCRM } from \"app2/src/selectors/event.selectors\";\nimport { useTracking } from \"react-tracking\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { hasIntegration } from \"app2/src/records/Job\";\n\nexport interface EventRowProps {\n  event: EventRecord;\n  jobHasCRM?: boolean;\n}\n\nexport const EventRow: React.FC<EventRowProps> = ({ event, jobHasCRM }) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const path = useSelector(pathname);\n  const { trackEvent } = useTracking<any>({ component: \"EventRow\" });\n\n  // Selectors\n  const result = useSelector((state: RootState) => eventResult(state, { eventsResultId: event.events_result_id }));\n  const reason = useSelector((state: RootState) =>\n    eventResultReason(state, { reasonId: event.events_result_reason_id }),\n  );\n  const hasCRM: boolean = useSelector((state: RootState) => eventHasCRM(state, { eventId: event.id }));\n  const isI360Lightning = useSelector((state: RootState) => {\n    const orgId = currentOrgId(state);\n    const job = currentJob(state);\n    const currentOrgToken = token(state, { orgId, kind: \"improveit360\" });\n    return (\n      event.metadata?.improveit360_appointment_id &&\n      hasIntegration(job, \"i360_lightning_account\") &&\n      currentOrgToken?.getIn([\"data\", \"platform\"]) === \"lightning\"\n    );\n  });\n\n  // Methods\n  const openResultModal = (eventId: number) => {\n    if (isI360Lightning) {\n      trackEvent({ action: \"Open I360 Result Modal\", event: event.id });\n      dispatch(push(`${path}/result/i360/${eventId}`));\n    } else {\n      trackEvent({ action: \"Open Result Modal\", event: event.id });\n      dispatch(push(`${path}/result/${eventId}`));\n    }\n  };\n\n  const deleteEvent = (event: EventRecord) => {\n    trackEvent({ action: \"appt removed\", event: event.id });\n    dispatch(AsyncActions.delete(event.id));\n  };\n\n  const editEvent = () => {\n    trackEvent({ action: \"Edit Appointment\", event: event.id });\n    dispatch(push(`${path}/calendar/edit/${event.id}`));\n  };\n\n  const openInviteModal = () => {\n    trackEvent({ action: \"Show Invite\", event: event.id });\n    dispatch(push(`${path}/invite/${event.id}`));\n  };\n\n  return (\n    <>\n      <tr>\n        <td>{DateFormat(event.start_time, \"shortName\")}</td>\n        <td>\n          {DateFormat(event.start_time, \"shortTime\")} - {DateFormat(event.end_time, \"shortTime\")}\n        </td>\n        <td>{event.summary}</td>\n        {jobHasCRM && (\n          <td>\n            {hasCRM && (\n              <Row>\n                <Col md={2}>\n                  <i\n                    onClick={() => openResultModal(event.id)}\n                    className=\"rsf-cogs-link rsf-base-66\"\n                    title=\"Result Appointment\"></i>\n                </Col>\n                {result && (\n                  <Col md={8}>\n                    <div>\n                      <small>{result.description}</small>\n                    </div>\n                    {reason && (\n                      <div>\n                        <small>{reason.description}</small>\n                      </div>\n                    )}\n                  </Col>\n                )}\n              </Row>\n            )}\n          </td>\n        )}\n        <td>\n          <Button onClick={openInviteModal}>Send Invite</Button>\n          {!hasCRM && (\n            <>\n              <i onClick={editEvent} className=\"rsf-edit-link rsf-base-66 mx-3\" title=\"Edit Appointment\" />\n              <ConfirmDialog title=\"Are you sure you wish to delete this appointment?\">\n                {(confirm) => (\n                  <i\n                    onClick={confirm(() => deleteEvent(event))}\n                    className=\"rsf-delete-link rsf-base-66\"\n                    title=\"Delete Appointment\"\n                  />\n                )}\n              </ConfirmDialog>\n            </>\n          )}\n        </td>\n      </tr>\n      {event.notes && (\n        <tr>\n          <td className=\"pull-right\">Notes:</td>\n          <td colSpan={4}>{event.notes}</td>\n        </tr>\n      )}\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Card, Col } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getOrgEventResults } from \"app2/src/selectors/eventResult.selectors\";\nimport { getOrgEventResultReasons } from \"app2/src/selectors/eventResultReason.selectors\";\nimport { EventResultRecord } from \"app2/src/records/EventResult\";\nimport { EventResultReasonRecord } from \"app2/src/records/EventResultReason\";\nimport { List } from \"immutable\";\nimport { Select } from \"@tberrysoln/rsf-form\";\nimport { required } from \"app2/src/helpers/FinalFormValidator\";\nimport { SalesOpportunityRecord } from \"app2/src/records/EventMetadata\";\n\ninterface I360SalesOpportunityProps {\n  opportunity: SalesOpportunityRecord;\n  idx: number;\n}\n\nexport const I360SalesOpportunity: React.FC<I360SalesOpportunityProps> = ({ opportunity, idx }) => {\n  // Selectors\n  const orgId = useSelector(currentOrgId);\n  const eventsResultId = opportunity?.get(\"result_id\") || -1;\n  const results: List<EventResultRecord> = useSelector((state: RootState) =>\n    getOrgEventResults(state, { orgId, kind: \"sales_opportunity\" }),\n  );\n  const reasons: List<EventResultReasonRecord> = useSelector((state: RootState) =>\n    getOrgEventResultReasons(state, {\n      orgId,\n      kind: \"sales_opportunity\",\n      eventsResultId,\n    }),\n  );\n\n  return (\n    <Col key={opportunity.get(\"id\")} sm={4}>\n      <Card className=\"mb-4\">\n        <Card.Header>{opportunity.get(\"name\")}</Card.Header>\n        <Card.Body>\n          <Select name={`metadata.sales_opportunities.${idx}.result_id`} label=\"Result\" validate={required}>\n            <option value={null} key={null}></option>\n            {results.map((result) => (\n              <option value={result.id} key={result.id}>\n                {result.description}\n              </option>\n            ))}\n          </Select>\n          <Select\n            name={`metadata.sales_opportunities.${idx}.result_reason_id`}\n            label=\"Reason\"\n            disabled={reasons.size === 0}>\n            <option value={null} key={null}></option>\n            {reasons.map((reason) => (\n              <option value={reason.id} key={reason.id}>\n                {reason.description}\n              </option>\n            ))}\n          </Select>\n        </Card.Body>\n      </Card>\n    </Col>\n  );\n};\n","import * as React from \"react\";\nimport { Col, Modal, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { event as eventSelector } from \"app2/src/selectors/event.selectors\";\nimport { getOrgEventResults } from \"app2/src/selectors/eventResult.selectors\";\nimport { getOrgEventResultReasons } from \"app2/src/selectors/eventResultReason.selectors\";\nimport { EventResultRecord } from \"app2/src/records/EventResult\";\nimport { EventResultReasonRecord } from \"app2/src/records/EventResultReason\";\nimport { List } from \"immutable\";\nimport { useRouteMatch } from \"react-router\";\nimport { AsyncActions } from \"app2/src/reducers/event.actions\";\nimport { RsfForm, Select } from \"@tberrysoln/rsf-form\";\nimport { Actions } from \"app2/src/reducers/event.actions\";\nimport { required } from \"app2/src/helpers/FinalFormValidator\";\nimport ButtonFooter from \"app2/src/components/Common/ButtonFooter\";\nimport { useTracking } from \"react-tracking\";\nimport { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\nimport { I360SalesOpportunity } from \"app2/src/components/JobTabs/AppointmentsTab/I360SalesOpportunity\";\n\nexport const I360ResultAppointmentModal: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"I360ResultAppointmentModal\" });\n  const { goBack } = usePreviousPath();\n\n  // Selectors\n  const { params } = useRouteMatch<{ eventId: string }>();\n  const eventId = parseInt(params.eventId);\n  const orgId = useSelector(currentOrgId);\n  const event = useSelector((state: RootState) => eventSelector(state, { eventId }));\n  const eventsResultId = event?.get(\"events_result_id\") || -1;\n  const results: List<EventResultRecord> = useSelector((state: RootState) => getOrgEventResults(state, { orgId }));\n  const reasons: List<EventResultReasonRecord> = useSelector((state: RootState) =>\n    getOrgEventResultReasons(state, { orgId, eventsResultId, kind: \"default\" }),\n  );\n\n  // Methods\n  const close = () => {\n    goBack(\"/result\");\n  };\n\n  const cancel = () => {\n    trackEvent({ action: \"cancel result\", event: eventId });\n    dispatch(Actions.resetEvent(eventId));\n    close();\n  };\n\n  const save = () => {\n    trackEvent({ action: \"result appt\", event: eventId });\n    dispatch(AsyncActions.resultEvent(event));\n    close();\n  };\n\n  return (\n    <Modal show={true} backdrop=\"static\" onHide={cancel} size=\"lg\">\n      <Modal.Header closeButton>\n        <Modal.Title>Result Appointment</Modal.Title>\n      </Modal.Header>\n      <RsfForm\n        rootPath={[\"events\", \"byId\", eventId]}\n        updateFormReducer={(e) => Actions.updateForm({ ...e, value: parseInt(e.value) || e.value })}\n        onSubmit={save}>\n        <Modal.Body>\n          <h4>Sales Appointment Details</h4>\n          <Row>\n            <Col>\n              <Select name=\"events_result_id\" label=\"Result\" validate={required}>\n                <option value={null} key={null}></option>\n                {results.map((result) => (\n                  <option value={result.id} key={result.id}>\n                    {result.description}\n                  </option>\n                ))}\n              </Select>\n            </Col>\n            <Col>\n              <Select name=\"events_result_reason_id\" label=\"Reason\" disabled={reasons.size === 0}>\n                <option value={null} key={null}></option>\n                {reasons.map((reason) => (\n                  <option value={reason.id} key={reason.id}>\n                    {reason.description}\n                  </option>\n                ))}\n              </Select>\n            </Col>\n          </Row>\n          <h4 className=\"pt-3 border-top\">Sales Opportunities</h4>\n          <Row className=\"overflow-y-auto\" style={{ maxHeight: \"450px\" }}>\n            {event?.metadata?.sales_opportunities?.map((opportunity, idx) => (\n              <I360SalesOpportunity key={idx} opportunity={opportunity} idx={idx} />\n            ))}\n          </Row>\n        </Modal.Body>\n        <Modal.Footer>\n          <ButtonFooter cancel={cancel} />\n        </Modal.Footer>\n      </RsfForm>\n    </Modal>\n  );\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { AsyncActions } from \"app2/src/reducers/event.actions\";\nimport * as eventResultActions from \"app2/src/reducers/eventResult.actions\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as eventResultReasonActions from \"app2/src/reducers/eventResultReason.actions\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport * as React from \"react\";\nimport { Row, Col, Button, Table } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { hasIntegrations } from \"app2/src/selectors/event.selectors\";\nimport { SendInviteModal } from \"./SendInviteModal\";\nimport { ResultAppointmentModal } from \"./ResultAppointmentModal\";\nimport { Route, Switch, useRouteMatch } from \"react-router\";\nimport { push } from \"connected-react-router/immutable\";\nimport { EventCalendarModal } from \"./EventCalendarModal\";\nimport { EventRow } from \"./EventRow\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { queryParamsFromJSON } from \"app2/src/records/Page\";\nimport { currentPage, getPaginationByModel, pageRecord } from \"app2/src/selectors/pagination.selectors\";\nimport SpinnerComponent from \"../../SpinnerComponent\";\nimport { PaginationControl } from \"../../Common/PaginationControl\";\nimport { useTracking } from \"react-tracking\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { I360ResultAppointmentModal } from \"app2/src/components/JobTabs/AppointmentsTab/I360ResultAppointmentModal\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\n\nexport const AppointmentsTab: React.FC = () => {\n  const modelName = \"events\";\n  // Hooks\n  const dispatch = useDispatch();\n  const match = useRouteMatch();\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n  const orgId = useSelector(currentOrgId);\n  const jobEvents = useSelector((state: RootState) =>\n    getPaginationByModel(state, { path: [modelName, \"byId\"], modelName }),\n  );\n  const { hasMarketSharp, hasI360, hasSR, hasSalesForce, hasLeadPerfection } = React.useMemo(\n    () => hasIntegrations(jobEvents),\n    [jobEvents],\n  );\n  const loading = useSelector((state: RootState) => {\n    return Boolean(pageRecord(state, { modelName, page: currentPage(state, { modelName }) })?.get(\"loading\"));\n  });\n  const { Track, trackEvent } = useTracking<any>({ component: \"AppointmentsTab\", category: \"Appointment\", job: jobId });\n\n  // Lifecycle\n  React.useEffect(() => {\n    loadEvents(1);\n\n    return () => {\n      dispatch(paginationActions.Actions.clearPage(\"events\"));\n      dispatch(paginationActions.Actions.clearPage(\"userEvents\"));\n    };\n  }, []);\n\n  React.useEffect(() => {\n    if (orgId) {\n      dispatch(eventResultActions.AsyncActions.getEventResults(orgId));\n      dispatch(eventResultReasonActions.AsyncActions.getEventResultReasons(orgId));\n    }\n  }, [dispatch, orgId]);\n\n  React.useEffect(() => {\n    if (orgId && hasI360) dispatch(tokenActions.AsyncActions.getToken(orgId, \"improveit360\"));\n  }, [dispatch, hasI360, orgId]);\n\n  // Methods\n  const openEventCalendarModal = () => {\n    trackEvent({ action: \"add appointment button\" });\n    dispatch(push(`${match.url}/calendar`));\n  };\n\n  const loadEvents = (page: number) => {\n    dispatch(\n      AsyncActions.loadEvents(\n        queryParamsFromJSON({\n          page: page,\n          per_page: 10,\n          parameters: { jobId: jobId?.toString() },\n        }),\n      ),\n    );\n  };\n\n  return (\n    <>\n      <SpinnerComponent localProperty={loading} />\n      <Track>\n        <Row>\n          <Col>\n            <Row>\n              <Col>\n                <h1 className=\"tab-title\">Appointments</h1>\n              </Col>\n              <Col>\n                <Button className=\"pull-right add-appt\" onClick={openEventCalendarModal}>\n                  <FontAwesome name=\"plus\" />\n                  &nbsp; Add Appointment\n                </Button>\n              </Col>\n            </Row>\n            {jobEvents?.size === 0 && (\n              <div className=\"form-section blank-state\">\n                <img src=\"/assets/images/icons-large/calendar.052935c6.png\" />\n                <h2>No appointments added. Let's add one.</h2>\n                <p>Click on the add appointment button in the top right to add one.</p>\n              </div>\n            )}\n            {jobEvents?.size > 0 && (\n              <Row>\n                <Table>\n                  <thead>\n                    <tr>\n                      <th>Date</th>\n                      <th>Time</th>\n                      <th>Description</th>\n                      {hasMarketSharp && <td>MarketSharp</td>}\n                      {hasI360 && <td>Improveit360</td>}\n                      {hasSR && <td>SalesRabbit</td>}\n                      {hasSalesForce && <td>Salesforce</td>}\n                      {hasLeadPerfection && <td>LeadPerfection</td>}\n                      <th>Actions</th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {jobEvents?.map((event) => (\n                      <EventRow\n                        event={event}\n                        key={event.id}\n                        jobHasCRM={hasMarketSharp || hasI360 || hasSR || hasSalesForce || hasLeadPerfection}\n                      />\n                    ))}\n                  </tbody>\n                </Table>\n              </Row>\n            )}\n\n            <PaginationControl modelName={modelName} pageChanged={loadEvents} />\n\n            <Switch>\n              <Route path={`${match.url}/result/i360/:eventId`} component={I360ResultAppointmentModal} />\n              <Route path={`${match.url}/result/:eventId`} component={ResultAppointmentModal} />\n              <Route path={`${match.url}/calendar`} component={EventCalendarModal} />\n              <Route path={`${match.url}/invite/:eventId`} component={SendInviteModal} />\n            </Switch>\n          </Col>\n        </Row>\n      </Track>\n    </>\n  );\n};\n\nexport default AppointmentsTab;\n","import { JobTabTitle } from \"app2/src/components/JobTabs/JobTabTitle\";\nimport { RootState } from \"app2/src/reducers\";\nimport { document } from \"app2/src/selectors/document.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport * as React from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useRouteMatch } from \"react-router\";\nimport PdfDisplay from \"../../Pdf/PdfDisplay\";\n\nexport const ShowPdf: React.FC = () => {\n  const dispatch = useDispatch();\n  const match = useRouteMatch<{ documentId: string }>();\n\n  const pdfUrl = useSelector(\n    (state: RootState) => document(state, { documentId: parseInt(match?.params.documentId) })?.url,\n  );\n\n  const navigateBack = () => {\n    const prevPath = match.path.split(\"/view_pdf\")[0];\n    dispatch(push(prevPath));\n  };\n\n  React.useEffect(() => {\n    if (_.isUndefined(pdfUrl)) navigateBack();\n  }, [pdfUrl]);\n\n  return (\n    <Row className=\"signatures-show-pdf\">\n      <Col>\n        <JobTabTitle title=\"Signatures\">\n          <Button className=\"pull-right\" onClick={navigateBack}>\n            Back to All\n          </Button>\n        </JobTabTitle>\n        <PdfDisplay pdfUrl={pdfUrl} disabledFeatures={[\"Annotations\"]} />\n      </Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { Record, List } from \"immutable\";\nimport { noop } from \"underscore\";\nimport { JobRecord } from \"../../records/Job\";\n\ninterface ContextProps {\n  requestName: string; //\n  documentIds: List<number>; //\n  job: JobRecord; //\n  orgId: number; //\n  dispatch: SignatureDispatch; //\n}\n\nexport type SignatureAction =\n  | \"onDragEnd\"\n  | \"addDocumentId\"\n  | \"removeDocumentId\"\n  | \"setRequestName\"\n  | \"combineDocuments\"\n  | \"close\"\n  | \"validate\"\n  | \"back\"\n  | \"modifyDoc\"\n  | \"handleSubmit\"\n  | \"spinner\"\n  | \"flashAddAlert\";\nexport type SignatureDispatch = (action: SignatureAction, payload?: any) => void;\n\nconst defaultContextProps: ContextProps = {\n  requestName: \"\",\n  documentIds: List<number>(),\n  orgId: 0,\n  job: null,\n  dispatch: noop,\n};\n\nexport class ContextRecord extends Record(defaultContextProps) implements ContextProps {}\n\nexport const Context = React.createContext(new ContextRecord());\n","import { RootState } from \"app2/src/reducers\";\nimport * as React from \"react\";\nimport { useContext } from \"react\";\nimport { Col, Image, Row, Tooltip, OverlayTrigger } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { document } from \"app2/src/selectors/document.selectors\";\nimport DateTime from \"app2/src/components/Common/DateTime\";\nimport { IncludeCheckBox } from \"app2/src/components/Common/IncludeCheckBox\";\nimport { Context } from \"app2/src/components/SignatureRequest/Context\";\nimport DownloadDocumentButton from \"../../Document/DownloadDocumentButton\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { documentName } from \"app2/src/records/Document\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport interface IDocumentProps {\n  documentId: number;\n  dragHandle?: any;\n  mode: \"adding\" | \"removing\";\n}\n\nexport const Document: React.FunctionComponent<IDocumentProps> = ({ documentId, dragHandle, mode }) => {\n  // hooks\n  const { requestName, documentIds, dispatch: contextDispatch } = useContext(Context);\n\n  // selectors\n  const documentRecord = useSelector((state: RootState) => document(state, { documentId }));\n  const firstSelectedDocumentName = useSelector((state: RootState) => {\n    const firstSelectedDocumentId = documentIds.get(0) === documentId ? documentIds.get(1) : documentIds.get(0);\n    return documentName(document(state, { documentId: firstSelectedDocumentId }));\n  });\n\n  // methods\n  const checkBoxOnChange = (event) => {\n    if (event.target.checked) {\n      if (requestName === \"\") {\n        contextDispatch(\"setRequestName\", { requestName: documentName(documentRecord) });\n      }\n      contextDispatch(\"addDocumentId\", { id: documentRecord.id });\n    } else {\n      if (requestName === documentName(documentRecord)) {\n        if (firstSelectedDocumentName) {\n          contextDispatch(\"setRequestName\", { requestName: firstSelectedDocumentName });\n        } else {\n          contextDispatch(\"setRequestName\", { requestName: \"\" });\n        }\n      }\n      removeDocument();\n    }\n  };\n\n  const removeDocument = () => {\n    contextDispatch(\"removeDocumentId\", { id: documentRecord.id });\n  };\n\n  if (isNullOrUndefined(documentRecord)) {\n    return (\n      <div className=\"standard-rl-margin\">\n        <Row className=\"table-row\">\n          <Col>{documentId} - not loaded</Col>\n        </Row>\n      </div>\n    );\n  }\n\n  return (\n    <>\n      {mode === \"removing\" ? (\n        <Row className=\"table-row\">\n          <Col sm={2}>\n            <Image {...dragHandle} src=\"/assets/images/icons/ic_sort.ea6f8933.png\" title=\"Sort Document\" className=\"mr-3\" />\n          </Col>\n          <Col sm={8}>\n            <OverlayTrigger\n              overlay={\n                <Tooltip id={`selected_document_${documentRecord.id.toString()}`}>{documentRecord.name}</Tooltip>\n              }>\n              <span className=\"ellipsis\">{documentRecord.name}</span>\n            </OverlayTrigger>\n          </Col>\n          <Col sm={2}>\n            <FontAwesome\n              name=\"trash\"\n              className=\"rsf-base-66 rsf-base-link\"\n              title=\"Remove Document\"\n              onClick={removeDocument}\n            />\n          </Col>\n        </Row>\n      ) : (\n        <Row className=\"table-row\">\n          <Col sm={1}>\n            <IncludeCheckBox\n              name=\"selected\"\n              checked={documentIds.includes(documentRecord.id)}\n              onChange={checkBoxOnChange}\n            />\n          </Col>\n          <Col lg={8} md={7}>\n            <OverlayTrigger\n              overlay={\n                <Tooltip id={`selected_document_${documentRecord.id.toString()}`}>{documentRecord.name}</Tooltip>\n              }>\n              <span className=\"ellipsis\">{documentRecord.name}</span>\n            </OverlayTrigger>\n          </Col>\n          <Col lg={2} md={3}>\n            <DateTime date={documentRecord.created_at} variant=\"vertical\" />\n          </Col>\n          <Col sm={1}>\n            <DownloadDocumentButton documentId={documentRecord.id} />\n          </Col>\n        </Row>\n      )}\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { useContext } from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { Context } from \"app2/src/components/SignatureRequest/Context\";\nimport { Document } from \"app2/src/components/SignatureRequest/DocumentsChooser/Document\";\nimport { Sortable } from \"app2/src/components/Common/Sortable\";\n\nexport const SelectedDocuments: React.FunctionComponent = () => {\n  // hooks\n  const { documentIds, dispatch: contextDispatch } = useContext(Context);\n\n  // methods\n  const onDragEnd = (oldIndex, newIndex) => {\n    contextDispatch(\"onDragEnd\", { oldIndex, newIndex });\n  };\n\n  return (\n    <Row id=\"selected_documents_table\">\n      <Col>\n        <Sortable\n          dragHandle\n          items={documentIds}\n          onDragEnd={onDragEnd}\n          renderItem={({ item, dragHandle, ...props }) => {\n            return <Document dragHandle={dragHandle} key={item} documentId={item} mode=\"removing\" />;\n          }}\n        />\n      </Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { useContext } from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { Context } from \"app2/src/components/SignatureRequest/Context\";\n\nexport const RequestName: React.FunctionComponent = () => {\n  // hooks\n  const { requestName, dispatch: contextDispatch } = useContext(Context);\n\n  // methods\n  const onChange = (event) => {\n    contextDispatch(\"setRequestName\", { requestName: event.target.value });\n  };\n\n  return (\n    <Form.Group id=\"selected_documents_name\">\n      <Form.Label htmlFor=\"signatureRequestName\">Name</Form.Label>\n      <Form.Control\n        autoFocus\n        name=\"signatureRequestName\"\n        id=\"signatureRequestName\"\n        onChange={onChange}\n        value={requestName}\n      />\n    </Form.Group>\n  );\n};\n","import { DocumentableType, IDocumentOptions } from \"app2/src/api/document.service\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { ids, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { pathname, queryNumber, queryString } from \"app2/src/selectors/router.selectors\";\nimport * as React from \"react\";\nimport { Button, ButtonGroup, Col, Row, Modal } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { push } from \"connected-react-router/immutable\";\nimport Folders from \"app2/src/components/Folders\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport * as folderActions from \"app2/src/reducers/folder.actions\";\nimport { Document } from \"app2/src/components/SignatureRequest/DocumentsChooser/Document\";\nimport { PaginationControl } from \"app2/src/components/Common/PaginationControl\";\nimport { capitalize } from \"humanize-plus\";\nimport { SelectedDocuments } from \"app2/src/components/SignatureRequest/DocumentsChooser/SelectedDocuments\";\nimport { RequestName } from \"app2/src/components/SignatureRequest/DocumentsChooser/RequestName\";\nimport { Context } from \"app2/src/components/SignatureRequest/Context\";\nimport { IncludeCheckBox } from \"../../Common/IncludeCheckBox\";\nimport { document } from \"app2/src/selectors/document.selectors\";\nimport { documentName } from \"app2/src/records/Document\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const DocumentsChooser: React.FunctionComponent = () => {\n  // hooks\n  const dispatch = useDispatch();\n\n  // selectors\n  const modelName = \"documentsChooser\";\n\n  const [requestDocId, setRequestDocId] = React.useState(null);\n\n  const documentableType = useSelector(\n    (state: RootState) => (queryString(state, { queryKey: \"documentable_type\" }) as DocumentableType) || \"job\",\n  );\n  const folderParentId = useSelector((state: RootState) =>\n    queryParams(state, { modelName: \"folder\" }).getIn([\"folder_id\"]),\n  );\n  const queryFolderParentId = useSelector((state: RootState) => queryNumber(state, { queryKey: \"folder_parent_id\" }));\n  const reduxDocumentIds = useSelector((state: RootState) => ids(state, { modelName }));\n  const jobId = useSelector(currentJobId);\n  const orgId = useSelector(currentOrgId);\n  const path = useSelector(pathname);\n  const currentQueryParams = useSelector((state: RootState) => queryParams(state, { modelName }));\n  const requestDoc = useSelector((state: RootState) => document(state, { documentId: requestDocId }));\n\n  const { requestName, documentIds, dispatch: contextDispatch } = React.useContext(Context);\n\n  React.useEffect(() => {\n    if (requestName !== \"\") return;\n    contextDispatch(\"setRequestName\", { requestName: documentName(requestDoc) || \"\" });\n  }, [requestDocId]);\n\n  // methods\n  const checkBoxOnChange = (event) => {\n    if (event.target.checked) {\n      if (!requestName) {\n        setRequestDocId(reduxDocumentIds.get(\"0\"));\n      }\n      reduxDocumentIds.forEach((id) => {\n        contextDispatch(\"addDocumentId\", { id });\n      });\n    } else {\n      reduxDocumentIds.forEach((id) => {\n        contextDispatch(\"removeDocumentId\", { id });\n      });\n    }\n  };\n\n  const navigateButton = React.useCallback(\n    (documentableType: DocumentableType) => {\n      const queryParams = new URLSearchParams({\n        documentable_type: documentableType as string,\n      });\n      dispatch(push(`${path}?${queryParams.toString()}`));\n    },\n    [path, dispatch],\n  );\n\n  const navigate = React.useCallback(\n    (folderId: number) => {\n      if (isNullOrUndefined(folderId)) {\n        const queryParams = new URLSearchParams({\n          documentable_type: documentableType as string,\n        });\n        dispatch(push(`${path}?${queryParams.toString()}`));\n      } else {\n        const queryParams = new URLSearchParams({\n          documentable_type: documentableType as string,\n          folder_parent_id: folderId.toString(),\n        });\n        dispatch(push(`${path}?${queryParams.toString()}`));\n      }\n    },\n    [dispatch, documentableType],\n  );\n\n  const pageChanged = (page: number) => {\n    const params = {\n      content_type: \"application/pdf\",\n      documentableType: documentableType,\n      folder_id: folderParentId,\n    } as Partial<IDocumentOptions>;\n    if (documentableType === \"org\") {\n      params.display = \"resource\";\n    } else {\n      params.signed = \"unsigned\";\n    }\n\n    const queryParamsRecord = currentQueryParams.set(\"page\", page);\n    dispatch(documentActions.AsyncActions.listDocuments(params, queryParamsRecord, modelName));\n  };\n\n  // lifecycle\n  React.useEffect(() => {\n    if (!isNullOrUndefined(folderParentId)) {\n      pageChanged(1);\n    }\n  }, [dispatch, folderParentId]);\n\n  React.useEffect(() => {\n    dispatch(\n      folderActions.AsyncActions.listFolders(queryFolderParentId, {\n        folderable_type: capitalize(documentableType),\n        name: \"Documents\",\n      }),\n    );\n  }, [dispatch, queryFolderParentId, documentableType]);\n\n  const allDocumentsSelected = React.useMemo(() => {\n    if (reduxDocumentIds?.size) {\n      const result = reduxDocumentIds.filter((docId) => !documentIds.some((selectedDocId) => selectedDocId === docId));\n      return result.size === 0;\n    }\n    return false;\n  }, [documentIds, reduxDocumentIds]);\n\n  const DocumentsTableHeader = () => {\n    return (\n      <Row className=\"table-header pb-0\">\n        <Col sm={1} style={{ paddingLeft: \"15px\" }}>\n          <IncludeCheckBox name=\"select-all\" checked={allDocumentsSelected} onChange={checkBoxOnChange} />\n        </Col>\n        <Col lg={8} md={7}>\n          Name\n        </Col>\n        <Col lg={2} md={3}>\n          Upload Date\n        </Col>\n        <Col sm={1}>Actions</Col>\n      </Row>\n    );\n  };\n\n  return (\n    <div>\n      <Modal.Header closeButton>\n        <h3>Create a Signature Request</h3>\n      </Modal.Header>\n      <Modal.Body>\n        <Row className=\"pb-0\">\n          <Col>\n            <Row className=\"pb-0\">\n              <Col>\n                <ButtonGroup>\n                  <Button\n                    variant={documentableType === \"job\" ? \"primary\" : \"light\"}\n                    onClick={() => navigateButton(\"job\")}>\n                    Job Documents\n                  </Button>\n                  <Button\n                    variant={documentableType === \"org\" ? \"primary\" : \"light\"}\n                    onClick={() => navigateButton(\"org\")}>\n                    Resources\n                  </Button>\n                </ButtonGroup>\n              </Col>\n            </Row>\n            <Row className=\"pb-0\">\n              <Col xs={7} sm={7} md={8} lg={9} className=\"overflow-auto\" id=\"documents_container\">\n                <Folders\n                  readOnly={true}\n                  jobId={jobId}\n                  orgId={documentableType === \"org\" ? orgId : undefined}\n                  folderParentId={folderParentId}\n                  documentableType={documentableType}\n                  fileType=\"documents\"\n                  navigate={navigate}\n                />\n                <br />\n                {isNullOrUndefined(reduxDocumentIds) || reduxDocumentIds?.size === 0 ? (\n                  <div className=\"form-section blank-state\">\n                    <img src=\"/assets/images/icons-large/docs.33cddf3f.png\" />\n                    <h2>No documents added. Let's add one.</h2>\n                    <p>Navigate to the Job Documents tab to add documents for a signature request.</p>\n                  </div>\n                ) : null}\n                <div className=\"standard-rl-margin\">\n                  {reduxDocumentIds?.size > 0 && <DocumentsTableHeader />}\n                  {reduxDocumentIds &&\n                    reduxDocumentIds.map((documentId) => (\n                      <div key={documentId}>\n                        <Document documentId={documentId} mode=\"adding\" />\n                      </div>\n                    ))}\n                  <PaginationControl modelName={modelName} pageChanged={pageChanged} />\n                </div>\n              </Col>\n              <Col xs={5} sm={5} md={4} lg={3} id=\"selected_documents_container\">\n                <RequestName />\n                <SelectedDocuments />\n              </Col>\n            </Row>\n            <br />\n          </Col>\n        </Row>\n      </Modal.Body>\n      <Modal.Footer>\n        <div className=\"button-footer\">\n          <Button\n            variant=\"save\"\n            type=\"submit\"\n            onClick={() => contextDispatch(\"combineDocuments\")}\n            disabled={requestName === \"\" || !documentIds?.size}>\n            Create\n          </Button>\n          <Button variant=\"cancel\" onClick={() => contextDispatch(\"close\", { modalType: \"select\", destroy: false })}>\n            Cancel\n          </Button>\n        </div>\n      </Modal.Footer>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport { Context } from \"app2/src/components/SignatureRequest/Context\";\n\nexport interface SignatureRequestModalProps {\n  children?: React.ReactNode;\n}\n\nexport const SignatureRequestModal: React.FC<SignatureRequestModalProps> = ({ children }) => {\n  const { dispatch: contextDispatch } = React.useContext(Context);\n  return (\n    <Modal\n      show={true}\n      onHide={() => contextDispatch(\"close\", { modalType: \"select\" })}\n      size=\"xl\"\n      backdrop=\"static\"\n      animation={false}>\n      {children}\n    </Modal>\n  );\n};\n","import * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport SaveablePdfDisplay from \"app2/src/components/Pdf/SaveablePdfDisplay\";\nimport { Context } from \"app2/src/components/SignatureRequest/Context\";\nimport { document as combinedDoc } from \"app2/src/selectors/document.selectors\";\nimport { currentSignedDocument as currentSignedDocSelector } from \"app2/src/selectors/signedDocument.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\nimport { currentOrgPrefAcl } from \"app2/src/selectors/org.selectors\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport const ReviewSignatureRequest: React.FunctionComponent = () => {\n  // Selectors\n  const documentAcl = useSelector((s: RootState) => currentOrgPrefAcl(s, { path: [\"document\"] }));\n\n  // Constants\n  const enforceRequiredSignableDoc = documentAcl?.includes(\"enforce_required_signable_doc\") || false;\n\n  // State\n  const [requiredInitialized, setRequiredInitialized] = React.useState(false);\n  const [requiredFieldsFilled, setRequiredFieldsFilled] = React.useState(!enforceRequiredSignableDoc);\n\n  const { dispatch: contextDispatch, job } = React.useContext(Context);\n\n  const currentSignedDocument = useSelector(currentSignedDocSelector);\n  const document = useSelector((s: RootState) =>\n    combinedDoc(s, { documentId: currentSignedDocument?.document_id || -1 }),\n  );\n\n  // Methods\n  const modifyDoc = (isModified: boolean, getFile: () => Promise<DocumentRecord>, requiredPdfFieldsFilled: boolean) => {\n    if (enforceRequiredSignableDoc) {\n      setRequiredFieldsFilled(requiredPdfFieldsFilled);\n      if (!requiredInitialized) {\n        setRequiredInitialized(true);\n      }\n    }\n    contextDispatch(\"modifyDoc\", { isModified: isModified, getModifiedFile: getFile });\n  };\n\n  const handleNext = () => {\n    if (requiredFieldsFilled) {\n      contextDispatch(\"validate\");\n    } else {\n      let message = \"\";\n      if (requiredInitialized) {\n        message =\n          \"Some required fields are missing in the PDF. Please review and complete all required fields before proceeding.\";\n      } else {\n        message = \"Please review the document below before sending for signature.\";\n      }\n      contextDispatch(\"flashAddAlert\", {\n        message,\n        type: FlashLevels.danger,\n      });\n    }\n  };\n\n  if (!document || !document?.file?.url) return null;\n\n  return (\n    <div>\n      <Modal.Header closeButton>\n        <h3>Review Signature Request</h3>\n      </Modal.Header>\n\n      <Modal.Body className=\"overflow-hidden document-pdf\">\n        <p>Please review the document below before sending for signature.</p>\n        <div className=\"d-flex align-items-center justify-content-center\">\n          <SaveablePdfDisplay\n            pdfUrl={document.file.url}\n            job={job}\n            documentName={document.file.filename}\n            modifyDoc={modifyDoc}\n          />\n        </div>\n      </Modal.Body>\n\n      <Modal.Footer>\n        <div className=\"button-footer d-flex justify-content-between w-100 flex-md-row-reverse\">\n          <div className=\"right-footer-buttons\">\n            <Button variant=\"cancel\" onClick={() => contextDispatch(\"close\", { modalType: \"view\", destroy: true })}>\n              Back\n            </Button>\n            <Button variant=\"save\" type=\"submit\" onClick={handleNext}>\n              Next\n            </Button>\n          </div>\n          <div className=\"left-footer-buttons\">\n            <Button variant=\"cancel\" onClick={() => contextDispatch(\"close\", { modalType: \"\", destroy: true })}>\n              Cancel\n            </Button>\n          </div>\n        </div>\n      </Modal.Footer>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { RsfForm, Select, FormControl, Check } from \"@tberrysoln/rsf-form\";\nimport { Button, Col, Modal, Row, Card, FormGroup } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { Actions } from \"app2/src/reducers/signedDocument.actions\";\nimport { composeValidators, email, required } from \"app2/src/helpers/FinalFormValidator\";\nimport { currentSignedDocument as currentSignedDocSelector } from \"app2/src/selectors/signedDocument.selectors\";\nimport { Map } from \"immutable\";\n\nexport interface SignedDocumentFormProps {\n  onSubmit: (event: React.FormEvent<HTMLFormElement>) => void;\n  close: () => void;\n  back?: () => void;\n  message?: boolean;\n}\n\nexport const SignedDocumentForm: React.FunctionComponent<SignedDocumentFormProps> = ({\n  onSubmit,\n  back,\n  close,\n  message,\n}) => {\n  const [includedError, setIncludedError] = React.useState(false);\n\n  const currentSignedDocument = useSelector(currentSignedDocSelector);\n\n  const validate = (): { name: string; error?: string }[] => {\n    const errors = [];\n    let includedRecipients = 0;\n    let duplicateNames = Map<string, number[]>();\n\n    currentSignedDocument.recipients.forEach((recipient, idx) => {\n      if (recipient.included) {\n        includedRecipients += 1;\n        errors.push({ name: `recipients.${idx}.email`, error: composeValidators(required, email)(recipient.email) });\n\n        duplicateNames = duplicateNames.set(recipient.name, [...(duplicateNames.get(recipient.name) || []), idx]);\n      } else {\n        errors.push({ name: `recipients.${idx}.name` });\n        errors.push({ name: `recipients.${idx}.email` });\n      }\n    });\n\n    duplicateNames.forEach((indexes, name) => {\n      if (indexes.length > 1) {\n        indexes.forEach((idx) => {\n          errors.push({ name: `recipients.${idx}.name`, error: \"Name must be unique\" });\n        });\n      } else {\n        errors.push({ name: `recipients.${indexes[0]}.name`, error: required(name) });\n      }\n    });\n\n    if (includedRecipients === 0) {\n      errors.push({ name: \"included_failed\", error: \" \" });\n      setIncludedError(true);\n    } else {\n      errors.push({ name: \"included_failed\" });\n      setIncludedError(false);\n    }\n    return errors;\n  };\n\n  return (\n    <RsfForm\n      rootPath={[\"signedDocuments\", \"byId\", -1]}\n      validate={validate}\n      updateFormReducer={Actions.updateForm}\n      onSubmit={onSubmit}>\n      <Modal.Body className=\"d-flex flex-column\">\n        <div className=\"d-flex\">\n          <p>\n            In the event there is a signer(s) missing, please ensure all necessary job documents are included for the\n            contract and confirm complete contact/address information of the signing recipients below. If you have\n            questions or need further assistance, please contact support.\n          </p>\n          {includedError && <p className=\"text-center red-text ml-4\">At least 1 recipient must be included</p>}\n        </div>\n        <Row className=\"pb-0 overflow-hidden\">\n          <Col id=\"recipients_container\" className=\"overflow-y-auto pr-4\">\n            <Row>\n              {currentSignedDocument.recipients.map((recipient, index) => (\n                <Col md={6} key={index}>\n                  <Card className=\"mb-4\">\n                    <Card.Header className=\"py-2 px-3\">\n                      <Card.Title className=\"mb-0\">\n                        <Select\n                          label=\"title\"\n                          name={`recipients.${index}.signer`}\n                          disabled={!recipient.included}\n                          className=\"mb-1\">\n                          <option value={\"\"}>Manual</option>\n                          <option value={\"salesrep\"}>Sales Representative</option>\n                          <option value={\"job\"}>Homeowner</option>\n                        </Select>\n                      </Card.Title>\n                    </Card.Header>\n\n                    <Card.Body className=\"p-3\">\n                      <FormGroup>\n                        <Row className=\"signature-row\">\n                          <div className=\"col-md-12\">\n                            <FormControl\n                              label=\"name\"\n                              name={`recipients.${index}.name`}\n                              disabled={!recipient.included}\n                            />\n                          </div>\n                        </Row>\n                      </FormGroup>\n                      <FormGroup>\n                        <Row className=\"signature-row\">\n                          <div className=\"col-md-12\">\n                            <FormControl\n                              label=\"email\"\n                              name={`recipients.${index}.email`}\n                              disabled={!recipient.included}\n                            />\n                          </div>\n                        </Row>\n                      </FormGroup>\n                      {(!recipient.required || !currentSignedDocument.estimate_id) && (\n                        <FormGroup>\n                          <Row className=\"signature-row\">\n                            <div className=\"col-md-12\">\n                              <Check label=\"Include?\" name={`recipients.${index}.included`} />\n                            </div>\n                          </Row>\n                        </FormGroup>\n                      )}\n                      <FormGroup className=\"mb-0\">\n                        <Row className=\"signature-row\">\n                          <div className=\"col-md-12\">\n                            <FormControl label=\"role\" name={`recipients.${index}.role_id`} disabled />\n                          </div>\n                        </Row>\n                      </FormGroup>\n                    </Card.Body>\n                  </Card>\n                </Col>\n              ))}\n            </Row>\n          </Col>\n          {message && (\n            <Col md={4} className=\"border-left pl-4 pt-2\">\n              <h4>Message</h4>\n              <Col>\n                <FormControl name=\"message\" label=\"Message\" as=\"textarea\" formControlProps={{ rows: 7 } as any} />\n              </Col>\n            </Col>\n          )}\n        </Row>\n      </Modal.Body>\n\n      <Modal.Footer>\n        <div className=\"button-footer d-flex justify-content-between w-100 flex-md-row-reverse\">\n          <div className=\"right-footer-buttons\">\n            {back && (\n              <Button variant=\"cancel\" onClick={back}>\n                Back\n              </Button>\n            )}\n            <Button variant=\"save\" type=\"submit\" name=\"onscreen\" disabled={includedError}>\n              Onscreen\n            </Button>\n            <Button variant=\"save\" type=\"submit\" name=\"email\" disabled={includedError}>\n              Email\n            </Button>\n          </div>\n          <div className=\"left-footer-buttons\">\n            <Button variant=\"cancel\" onClick={close}>\n              Cancel\n            </Button>\n          </div>\n        </div>\n      </Modal.Footer>\n    </RsfForm>\n  );\n};\n","import * as React from \"react\";\nimport { useContext } from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { Context } from \"app2/src/components/SignatureRequest/Context\";\nimport { currentSignedDocument as currentSignedDocSelector } from \"app2/src/selectors/signedDocument.selectors\";\nimport { SignedDocumentForm } from \"app2/src/components/Common/SignedDocumentForm\";\n\nexport const SignatureConfiguration: React.FunctionComponent = () => {\n  const { dispatch: contextDispatch } = useContext(Context);\n  const currentSignedDocument = useSelector(currentSignedDocSelector);\n\n  if (!currentSignedDocument) {\n    return null;\n  }\n\n  return (\n    <div>\n      <Modal.Header closeButton>\n        <h3>Create Signature Request</h3>\n      </Modal.Header>\n\n      <SignedDocumentForm\n        close={() => contextDispatch(\"close\", { modalType: \"\", destroy: true })}\n        onSubmit={(event) => contextDispatch(\"handleSubmit\", { event })}\n        back={() => contextDispatch(\"back\", { screen: \"viewDocument\" })}\n        message\n      />\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { useCallback, useState, useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { RootState } from \"../../reducers\";\nimport { DocumentsChooser } from \"app2/src/components/SignatureRequest/DocumentsChooser\";\nimport { push } from \"connected-react-router/immutable\";\nimport { Context, ContextRecord, SignatureAction } from \"app2/src/components/SignatureRequest/Context\";\nimport { List } from \"immutable\";\nimport { onSortEnd } from \"app2/src/helpers/Record\";\nimport * as documentActions from \"../../reducers/document.actions\";\nimport { SignatureRequestModal } from \"app2/src/components/SignatureRequest/SignatureRequestModal\";\nimport { ReviewSignatureRequest } from \"app2/src/components/SignatureRequest/ReviewSignatureRequest\";\nimport { SignatureConfiguration } from \"./SignatureConfiguration\";\nimport { DocumentRecord } from \"../../records/Document\";\nimport * as signedDocumentActions from \"app2/src/reducers/signedDocument.actions\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { currentJob as currentJobSelector } from \"app2/src/selectors/job.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { document as combinedDoc } from \"app2/src/selectors/document.selectors\";\nimport { currentSignedDocument as currentSignedDocSelector } from \"app2/src/selectors/signedDocument.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { Nullable } from \"app2/src/records\";\nimport { useTracking } from \"react-tracking\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\n\nexport type ViewStates = \"chooser\" | \"review\" | \"configuration\" | \"signing\";\n\nexport const SignatureRequest: React.FunctionComponent = () => {\n  // hooks\n  const dispatch: RootDispatchType = useDispatch();\n  const { trackEvent } = useTracking();\n\n  // states\n  const [documentIds, setDocumentIds] = useState(List<number>());\n  const [requestName, setRequestName] = useState(\"\");\n  const [downloading, setDownloading] = useState(false);\n  const [modified, setModified] = useState(false);\n  const [viewState, setViewState] = useState<ViewStates>(\"chooser\");\n  const downloadRef = React.useRef<Nullable<() => Promise<DocumentRecord>>>(null);\n  // For analytics only\n  const [documentNameChanged, setDocumentNameChanged] = useState(false);\n\n  // selectors\n  const currentSignedDocument = useSelector(currentSignedDocSelector);\n  const sdDocument = useSelector((s: RootState) =>\n    combinedDoc(s, { documentId: currentSignedDocument?.document_id || -1 }),\n  );\n\n  const path = useSelector(pathname);\n  const job = useSelector(currentJobSelector);\n  const orgId = useSelector((s: RootState) => currentOrgId(s));\n\n  // useEffect\n  useEffect(() => {\n    resetSignedDocument();\n  }, []);\n\n  useEffect(() => {\n    if (!currentSignedDocument) return;\n    if (currentSignedDocument.validation_status === null) return;\n\n    if (currentSignedDocument.validation_status === 422) {\n      close(\"view\", false);\n    }\n  }, [currentSignedDocument]);\n\n  useEffect(() => {\n    if (viewState === \"signing\" && currentSignedDocument.id > 0) {\n      const prevPath = path.split(\"/signatures\")[0];\n      dispatch(push(`${prevPath}/signatures/signable_documents/signing/${currentSignedDocument.id}`));\n    }\n  }, [currentSignedDocument, viewState]);\n\n  const resetSignedDocument = () => {\n    dispatch(signedDocumentActions.Actions.setCurrentSignedDocumentId(-1));\n    dispatch(signedDocumentActions.Actions.receiveDocument({ id: -1 }));\n  };\n\n  const back = (screen) => {\n    setDownloading(true);\n    switch (screen) {\n      case \"chooseDocuments\":\n        setViewState(\"chooser\");\n        break;\n      case \"viewDocument\":\n        setModified(false);\n        downloadRef.current = null;\n        setViewState(\"review\");\n        break;\n      case \"configureSigners\":\n        setViewState(\"configuration\");\n        break;\n    }\n    setDownloading(false);\n  };\n\n  const close = async (modalType: string, destroy = false) => {\n    setDownloading(true);\n    if (destroy === true) {\n      dispatch(documentActions.AsyncActions.deleteDocument(sdDocument));\n    }\n\n    resetSignedDocument();\n    setViewState(\"chooser\");\n    setModified(false);\n    setDownloading(false);\n\n    if (modalType !== \"view\") {\n      const prevPath = path.split(\"/signature_request\")[0];\n      dispatch(push(prevPath));\n    }\n  };\n\n  const validate = async () => {\n    let modifiedDoc: DocumentRecord;\n    if (modified) {\n      modifiedDoc = await downloadRef.current();\n      dispatch(documentActions.AsyncActions.deleteDocument(sdDocument));\n    }\n    setDownloading(true);\n\n    await dispatch(\n      signedDocumentActions.AsyncActions.validateSignedDocument(!modifiedDoc ? sdDocument : modifiedDoc, modified),\n    );\n    setViewState(\"configuration\");\n    setDownloading(false);\n  };\n\n  const combineDocuments = async () => {\n    setDownloading(true);\n\n    try {\n      await dispatch(signedDocumentActions.AsyncActions.combineDocument(documentIds, requestName, job.id));\n      setViewState(\"review\");\n    } finally {\n      setDownloading(false);\n    }\n  };\n\n  const modifyDoc = useCallback((isModified: boolean, getModifiedFile: () => Promise<DocumentRecord>) => {\n    setModified(isModified);\n    downloadRef.current = getModifiedFile;\n  }, []);\n\n  const handleSubmit = async (event) => {\n    let notify = false;\n    let message = \"\";\n\n    setDownloading(true);\n    if (event?.nativeEvent?.submitter?.name === \"email\") {\n      notify = true;\n      message = (document.getElementById(\"message\") as HTMLInputElement).value;\n    }\n\n    await dispatch(signedDocumentActions.AsyncActions.create(sdDocument, { notify, message }));\n\n    if (notify) {\n      close(\"\", false);\n    } else {\n      setViewState(\"signing\");\n    }\n\n    const recipientsCount = currentSignedDocument.recipients.size;\n    trackEvent({ action: \"Request Submitted\", recipientsCount });\n  };\n\n  // methods\n  const signatureReducer = (action: SignatureAction, payload: any) => {\n    switch (action) {\n      case \"addDocumentId\":\n        const { id: addId } = payload;\n        setDocumentIds((docIds) => docIds.push(addId).toSet().toList());\n        trackEvent({ action: \"Document Added\", documentId: addId });\n        return;\n      case \"removeDocumentId\":\n        const { id: removeId } = payload;\n        setDocumentIds((docIds) =>\n          docIds\n            .filter((documentId) => documentId !== removeId)\n            .toSet()\n            .toList(),\n        );\n        trackEvent({ action: \"Document Removed\", documentId: removeId });\n        return;\n      case \"onDragEnd\":\n        const { oldIndex, newIndex } = payload;\n        setDocumentIds((docIds) => onSortEnd(docIds, oldIndex, newIndex, []).list);\n        trackEvent({ action: \"Document Dragged\", oldIndex, newIndex });\n        return;\n      case \"setRequestName\":\n        if (requestName !== \"\") setDocumentNameChanged(true);\n        setRequestName(payload.requestName);\n        return;\n      case \"combineDocuments\":\n        if (documentNameChanged) trackEvent({ action: \"Document Name updated\" });\n        trackEvent({ action: \"Document(s) submitted for combination\", documentCount: documentIds.size });\n        combineDocuments();\n        return;\n      case \"validate\":\n        validate();\n        trackEvent({ action: \"Document Validated\" });\n        return;\n      case \"close\":\n        close(payload.modalType, payload.destroy || false);\n        trackEvent({ action: \"Modal Closed\", modalType: payload.modalType });\n        return;\n      case \"back\":\n        const { screen } = payload;\n        back(screen);\n        trackEvent({ action: \"Back button clicked\", screen });\n        return;\n      case \"modifyDoc\":\n        const { getModifiedFile, isModified } = payload;\n        modifyDoc(isModified, getModifiedFile);\n        trackEvent({ action: \"Document Modified\" });\n        return;\n      case \"handleSubmit\":\n        const { event } = payload;\n        handleSubmit(event);\n        return;\n      case \"spinner\":\n        setDownloading(true);\n        return;\n      case \"flashAddAlert\":\n        const { message, type } = payload;\n        dispatch(commonActions.Actions.flashAddAlert(type, message));\n        return;\n    }\n  };\n\n  return (\n    <Context.Provider\n      value={\n        new ContextRecord({\n          requestName,\n          documentIds,\n          job,\n          orgId,\n          dispatch: signatureReducer,\n        })\n      }>\n      <SignatureRequestModal>\n        {downloading && (\n          <div className=\"h-100 d-flex align-items-center justify-content-center\">\n            <img className=\"spinner-graphic\" />\n          </div>\n        )}\n        {(() => {\n          switch (downloading ? \"\" : viewState) {\n            case \"chooser\":\n              return <DocumentsChooser />;\n            case \"review\":\n              return <ReviewSignatureRequest />;\n            case \"configuration\":\n              return <SignatureConfiguration />;\n            case \"signing\":\n              return (\n                <div className=\"h-100 d-flex align-items-center justify-content-center\">\n                  <img className=\"spinner-graphic\" />\n                </div>\n              );\n            default:\n              return null;\n          }\n        })()}\n      </SignatureRequestModal>\n    </Context.Provider>\n  );\n};\n","import * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { useTracking } from \"react-tracking\";\n\nexport const SignatureRequestButton: React.FunctionComponent = () => {\n  // hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"SignaturesTab\" });\n\n  // selectors\n  const path = useSelector(pathname);\n\n  // methods\n  const navigate = () => {\n    trackEvent({ action: \"Open Signature Request Modal\" });\n    dispatch(push(`${path}/signature_request`));\n  };\n\n  return (\n    <Button className=\"pull-right\" onClick={navigate}>\n      Create Signable Document\n    </Button>\n  );\n};\n","import { AsyncActions } from \"app2/src/reducers/signedDocument.actions\";\nimport * as React from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport { useDispatch } from \"react-redux\";\nimport { FormControl, RsfForm } from \"@tberrysoln/rsf-form\";\nimport { required } from \"app2/src/helpers/FinalFormValidator\";\nimport { Actions as RsfFormActions } from \"app2/src/reducers/rsfForm.actions\";\n\nexport interface VoidDocumentButtonProps {\n  signedDocumentId: number;\n  documentId: number;\n  documentName: string;\n}\n\nexport const VoidDocumentButton: React.FC<VoidDocumentButtonProps> = ({\n  signedDocumentId,\n  documentId,\n  documentName,\n}) => {\n  const dispatch = useDispatch();\n  const [showModal, setShowModal] = React.useState(false);\n\n  const resetForm = () =>\n    dispatch(RsfFormActions.update({ rootPath: [\"rsfForms\", \"byForm\", \"voidDocument\"], value: \"\", name: \"reason\" }));\n  const closeModal = () => {\n    setShowModal(false);\n    resetForm();\n  };\n  const voidDocument = () => {\n    dispatch(AsyncActions.voidDocument(documentId, signedDocumentId));\n    closeModal();\n  };\n\n  return (\n    <>\n      <Modal show={showModal} onHide={resetForm}>\n        <RsfForm\n          onSubmit={voidDocument}\n          rootPath={[\"rsfForms\", \"byForm\", \"voidDocument\"]}\n          updateFormReducer={RsfFormActions.update}>\n          <Modal.Header>\n            <Modal.Title>\n              <h3>Void Document - {documentName}</h3>\n            </Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <FormControl name=\"reason\" label=\"Reason for Voiding\" validate={required} />\n          </Modal.Body>\n          <Modal.Footer>\n            <div className=\"button-footer\">\n              <Button variant=\"danger\" type=\"submit\" onClick={() => null}>\n                Confirm\n              </Button>\n              <Button variant=\"cancel\" onClick={closeModal}>\n                Cancel\n              </Button>\n            </div>\n          </Modal.Footer>\n        </RsfForm>\n      </Modal>\n      <a className=\"btn btn-secondary\" title=\"Void Document\" onClick={() => setShowModal(true)}>\n        <i className=\"fa fa-ban\"></i>\n      </a>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Button, Col, Modal, Row } from \"react-bootstrap\";\nimport { getHistoryReport } from \"app2/src/api/signedDocument.service\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\n\nexport interface SigningHistoryButtonProps {\n  signedDocumentId: number;\n  documentName: string;\n}\n\nexport const SigningHistoryButton: React.FC<SigningHistoryButtonProps> = ({ signedDocumentId, documentName }) => {\n  const [showModal, setShowModal] = React.useState(false);\n  const [loading, setLoading] = React.useState(false);\n\n  const closeModal = () => {\n    setShowModal(false);\n  };\n  const downloadReport = async (kind: \"standard\" | \"detailed\") => {\n    setLoading(true);\n    await getHistoryReport(signedDocumentId, kind);\n    setLoading(false);\n\n    closeModal();\n  };\n\n  return (\n    <>\n      <Modal show={showModal} onHide={closeModal}>\n        <Modal.Header>\n          <Modal.Title>\n            <h3>Signing Request History Report for Document: {documentName}</h3>\n          </Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <SpinnerComponent localProperty={loading} />\n          <Row>\n            <Col className=\"d-flex justify-content-center text-center\">\n              <div>\n                <Button variant=\"success\" onClick={() => downloadReport(\"standard\")}>\n                  Standard\n                </Button>\n                <p className=\"mt-3\">\n                  History report capturing the date, time, IP address, signer, field, and event details for the\n                  document.\n                </p>\n              </div>\n            </Col>\n            <Col className=\"d-flex justify-content-center text-center\">\n              <div>\n                <Button variant=\"primary\" onClick={() => downloadReport(\"detailed\")}>\n                  Detailed\n                </Button>\n                <p className=\"mt-3\">\n                  Enhanced version of the standard report with more information (browser agent and debug info).\n                </p>\n              </div>\n            </Col>\n          </Row>\n        </Modal.Body>\n        <Modal.Footer>\n          <div className=\"button-footer\">\n            <Button variant=\"cancel\" onClick={closeModal}>\n              Cancel\n            </Button>\n          </div>\n        </Modal.Footer>\n      </Modal>\n      <a className=\"btn btn-primary ml-2\" title=\"View Signing History\" onClick={() => setShowModal(true)}>\n        <i className=\"fa fa-info text-white\"></i>\n      </a>\n    </>\n  );\n};\n","import { DateFormat } from \"app2/src/helpers/Format\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\nimport { capitalizeString } from \"app2/src/services/string.service\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { OverlayTrigger, Table, Tooltip } from \"react-bootstrap\";\nimport DownloadDocumentButton from \"../Document/DownloadDocumentButton\";\nimport { VoidDocumentButton } from \"app2/src/components/Document/VoidDocumentButton\";\nimport { useSelector } from \"react-redux\";\nimport { currentOrgSettingsConfig } from \"app2/src/selectors/org.selectors\";\nimport { SigningHistoryButton } from \"app2/src/components/Document/SigningHistoryButton\";\n\nexport interface SignedDocumentsTableProps {\n  documents: List<DocumentRecord>;\n  showPDF: (document: DocumentRecord) => void;\n  emailOrSign: (document: DocumentRecord) => void;\n  onDocumentClick?: (document: DocumentRecord) => void;\n}\n\nexport const SignedDocumentsTable: React.FC<SignedDocumentsTableProps> = ({\n  documents,\n  showPDF,\n  emailOrSign,\n  onDocumentClick,\n}) => {\n  const handleClick = (document: DocumentRecord) => {\n    if (onDocumentClick) onDocumentClick(document);\n  };\n  const signaturePlatform = useSelector((state) =>\n    currentOrgSettingsConfig(state, { path: [\"signature_settings\", \"signature_platform\"] }),\n  );\n\n  return (\n    <Table>\n      <thead>\n        <tr>\n          <th style={{ width: \"25%\" }}>Name</th>\n          <th>Created</th>\n          <th>Actions</th>\n          <th style={{ width: \"25%\" }}>Recipients</th>\n          <th>Status</th>\n        </tr>\n      </thead>\n      <tbody>\n        {documents.map((document) => (\n          <tr key={document.id}>\n            <td className={onDocumentClick ? \"link\" : \"\"} onClick={() => handleClick(document)}>\n              {document.name}\n            </td>\n            <td className={onDocumentClick ? \"link\" : \"\"} onClick={() => handleClick(document)}>\n              {DateFormat(document.created_at)}\n            </td>\n            <td>\n              <a className=\"btn btn-secondary\" title=\"View File\" onClick={() => showPDF(document)}>\n                <i className=\"fa fa-file-pdf-o\"></i>\n              </a>\n              {document.signed_document?.status !== \"voided\" && (\n                <a className=\"btn btn-secondary\" title=\"Email/Sign\" onClick={() => emailOrSign(document)}>\n                  <i className=\"fa fa-paper-plane-o\"></i>\n                </a>\n              )}\n              <DownloadDocumentButton documentId={document.id} />\n              {document.signed_document?.status !== \"voided\" && signaturePlatform === \"scribble\" && (\n                <VoidDocumentButton\n                  documentId={document.id}\n                  signedDocumentId={document.signed_document.id}\n                  documentName={document.name}\n                />\n              )}\n            </td>\n            <td>\n              {document.signed_document?.recipients?.map((r) => (\n                <div key={r.id}>\n                  {r.name}: {capitalizeString(r.status)}\n                </div>\n              ))}\n            </td>\n            <td>\n              {document.signed_document?.status === \"signed\" ? (\n                <OverlayTrigger\n                  overlay={\n                    <Tooltip id={`created-at-tooltip-${document?.signed_document?.id}`}>\n                      Completed at: {DateFormat(document?.signed_document?.completed_at)}\n                    </Tooltip>\n                  }>\n                  <span>{capitalizeString(document.signed_document.status)}</span>\n                </OverlayTrigger>\n              ) : (\n                <span>{capitalizeString(document.signed_document.status)}</span>\n              )}\n\n              {document.signed_document?.url && <DownloadDocumentButton documentId={document.id} signed />}\n              <SigningHistoryButton signedDocumentId={document.signed_document.id} documentName={document.name} />\n            </td>\n          </tr>\n        ))}\n      </tbody>\n    </Table>\n  );\n};\n\nexport default SignedDocumentsTable;\n","import { DocumentRecord } from \"app2/src/records/Document\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useRouteMatch } from \"react-router\";\nimport SignedDocumentsTable from \"app2/src/components/SignedDocument/SignedDocumentsTable\";\n\nexport interface SignaturesDocumentsTableProps {\n  documents: List<DocumentRecord>;\n}\n\nexport const SignaturesDocumentsTable: React.FC<SignaturesDocumentsTableProps> = ({ documents }) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const match = useRouteMatch<{\n    documentKind: string;\n  }>();\n\n  // Selectors\n  const path = useSelector(pathname);\n\n  // Methods\n  const emailOrSign = (document: DocumentRecord) => {\n    dispatch(push(`${path}/signing/${document.signed_document.id}`));\n  };\n\n  const showPDF = (document: DocumentRecord) => {\n    const prevPath = path.split(\"/\" + match.params.documentKind)[0];\n    dispatch(push(`${prevPath}/view_pdf/${document.id}`));\n  };\n\n  return <SignedDocumentsTable documents={documents} emailOrSign={emailOrSign} showPDF={showPDF} />;\n};\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { document } from \"app2/src/selectors/document.selectors\";\nimport { estimateOverview } from \"app2/src/selectors/estimate.selectors\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { getTitle } from \"app2/src/selectors/org.selectors\";\nimport { List } from \"immutable\";\nimport { Card } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { SignaturesDocumentsTable } from \"../SignaturesDocumentsTable\";\n\nexport interface EstimateDocumentsRowProps {\n  estimateId: number;\n  signedDocumentIds: List<number>;\n}\n\nexport const EstimateDocumentsRow: React.FC<EstimateDocumentsRowProps> = ({ estimateId, signedDocumentIds }) => {\n  const jobId = useSelector(currentJobId);\n  const estimate = useSelector((state: RootState) => estimateOverview(state, { estimateId, jobId }));\n  const documents = useSelector((state: RootState) =>\n    signedDocumentIds.map((documentId) => document(state, { documentId })),\n  );\n  const estimateTitle = useSelector((state: RootState) => getTitle(state, { documentType: \"estimator\" }));\n\n  return (\n    <Card className=\"mb-4\">\n      <Card.Header>\n        <h4 className=\"mb-0\">\n          {estimateTitle}: {estimate?.name}\n        </h4>\n      </Card.Header>\n      <Card.Body>\n        <SignaturesDocumentsTable documents={documents} />\n      </Card.Body>\n    </Card>\n  );\n};\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { jobEstimateSignedDocuments } from \"app2/src/selectors/estimate.selectors\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { EstimateDocumentsRow } from \"./EstimateDocumentsRow\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport * as signedDocumentActions from \"app2/src/reducers/signedDocument.actions\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { currentPageRecord } from \"app2/src/selectors/pagination.selectors\";\n\nexport const EstimateDocuments: React.FC = () => {\n  const dispatch = useDispatch();\n\n  const jobId = useSelector(currentJobId);\n  const estimates = useSelector((state: RootState) => jobEstimateSignedDocuments(state, { jobId }));\n  const loading = useSelector(\n    (state: RootState) => currentPageRecord(state, { modelName: \"estimateDocuments\" })?.loading,\n  );\n\n  React.useEffect(() => {\n    dispatch(signedDocumentActions.AsyncActions.listEstimateSignedDocuments(jobId));\n  }, []);\n\n  if (loading) return <SpinnerComponent localProperty={true} inline />;\n\n  if (estimates?.size > 0)\n    return (\n      <>\n        {estimates?.map((estimate) => (\n          <EstimateDocumentsRow\n            key={estimate.estimateId}\n            estimateId={estimate.estimateId}\n            signedDocumentIds={estimate.signedDocumentIds}\n          />\n        ))}\n      </>\n    );\n\n  return (\n    <Row>\n      <Col md={12}>\n        <div className=\"form-section blank-state\">\n          <img src=\"/assets/images/icons-large/contracts.c69d9978.png\" />\n          <h2>No signed documents.</h2>\n        </div>\n      </Col>\n    </Row>\n  );\n};\n\nexport default EstimateDocuments;\n","import { queryParamsFromJSON } from \"app2/src/records/Page\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { List } from \"immutable\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentPageRecord, getPaginationByModel } from \"app2/src/selectors/pagination.selectors\";\nimport SpinnerComponent from \"../../SpinnerComponent\";\nimport { PaginationControl } from \"../../Common/PaginationControl\";\nimport { SignaturesDocumentsTable } from \"./SignaturesDocumentsTable\";\n\nexport const SignableDocuments: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n  const signableDocuments: List<DocumentRecord> = useSelector((state: RootState) =>\n    getPaginationByModel(state, {\n      modelName: \"signableDocuments\",\n      path: [\"documents\", \"byId\"],\n    }),\n  );\n  const loading = useSelector(\n    (state: RootState) => currentPageRecord(state, { modelName: \"signableDocuments\" })?.loading,\n  );\n\n  const load = (page: number) => {\n    dispatch(\n      documentActions.AsyncActions.listDocuments(\n        {\n          documentableId: jobId,\n          documentableType: \"job\",\n          signed: \"signed\",\n          signed_kind: \"document\",\n          sort_by: \"documents.created_at\",\n          sort_order: \"asc\",\n        },\n        queryParamsFromJSON({ page }),\n        \"signableDocuments\",\n      ),\n    );\n  };\n\n  React.useEffect(() => {\n    load(1);\n  }, []);\n\n  if (loading) return <SpinnerComponent localProperty={true} inline />;\n\n  if (signableDocuments?.size > 0)\n    return (\n      <>\n        <SignaturesDocumentsTable documents={signableDocuments} />\n        <PaginationControl modelName=\"signableDocuments\" pageChanged={load} />\n      </>\n    );\n\n  return (\n    <Row>\n      <Col md={12}>\n        <div className=\"form-section blank-state\">\n          <img src=\"/assets/images/icons-large/contracts.c69d9978.png\" />\n          <h2>No signable documents.</h2>\n        </div>\n      </Col>\n    </Row>\n  );\n};\n\nexport default SignableDocuments;\n","import * as React from \"react\";\nimport { capitalizeString } from \"app2/src/services/string.service\";\nimport { Button, Col, Modal, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { allSigned } from \"app2/src/records/SignedDocument\";\nimport { RecipientRecord } from \"app2/src/records/Recipient\";\nimport { AsyncActions } from \"app2/src/reducers/signedDocument.actions\";\nimport * as documentActions from \"app2/src/reducers/signedDocument.actions\";\nimport { signedDocument as signedDocumentSelector } from \"app2/src/selectors/signedDocument.selectors\";\nimport { useRouteMatch } from \"react-router\";\nimport { push } from \"connected-react-router/immutable\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { getTitle } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\n\nexport const SigningRecipientsModal: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const path = useSelector(pathname);\n  const match = useRouteMatch<{ signedDocumentId: string }>();\n\n  // Selectors\n  const signedDocumentId = parseInt(match.params.signedDocumentId);\n  const signedDocument = useSelector((state: RootState) => signedDocumentSelector(state, signedDocumentId));\n  const contractTitle = useSelector((state) => getTitle(state, { documentType: \"contract\" }));\n\n  // Lifecycle\n  React.useEffect(() => {\n    dispatch(documentActions.AsyncActions.loadSignedDocument(signedDocumentId));\n  }, [signedDocumentId]);\n\n  // Methods\n  const email = (recipientId: number) => {\n    dispatch(documentActions.AsyncActions.notify(signedDocument.id, recipientId));\n  };\n\n  const emailAll = () => {\n    dispatch(documentActions.AsyncActions.notify(signedDocument.id));\n  };\n\n  const close = () => {\n    const prevPath = path.split(\"/signing\")[0];\n    dispatch(push(prevPath));\n  };\n\n  const isDocumentCompleted: boolean = React.useMemo(\n    () => (signedDocument ? allSigned(signedDocument) : false),\n    [signedDocument],\n  );\n\n  return (\n    <Modal show={true} size=\"lg\" onHide={close} backdrop=\"static\">\n      <Modal.Header closeButton>\n        <h3 className=\"mb-0\">Signing Recipients</h3>\n      </Modal.Header>\n      <Modal.Body>\n        <div className=\"standard-rl-margin\">\n          <Row className=\"table-header\">\n            <Col md={5}>Signer</Col>\n            <Col md={2}>Status</Col>\n            <Col md={5}>Actions</Col>\n          </Row>\n          {signedDocument?.recipients?.map((recipient, index) => (\n            <Row key={recipient.id} className=\"table-row\">\n              <Col md={5}>\n                {recipient.name} ({recipient?.email})\n              </Col>\n              <Col md={2}>{capitalizeString(recipient.status).replace(\"_\", \" \")}</Col>\n              <Col md={5} style={{ whiteSpace: \"nowrap\" }}>\n                <Row>\n                  {isDocumentCompleted ? (\n                    <Col sm={12}>\n                      <Button className=\"btn-block\" onClick={() => email(recipient.id)}>\n                        Resend Completed {contractTitle} Email\n                      </Button>\n                    </Col>\n                  ) : (\n                    <>\n                      <Col sm={6}>\n                        {recipient.status === \"recipient_signed\" ? (\n                          <a className=\"btn btn-primary-disabled\" id={`onscreen_link_disabled_${index}`}>\n                            Onscreen\n                          </a>\n                        ) : (\n                          <a\n                            href={recipient.rs_url}\n                            target=\"_blank\"\n                            className=\"btn btn-primary\"\n                            id={`onscreen_link_${index}`}>\n                            Onscreen\n                          </a>\n                        )}\n                      </Col>\n                      <Col sm={6}>\n                        <Button\n                          disabled={recipient.status === \"recipient_signed\"}\n                          variant=\"success\"\n                          onClick={() => email(recipient.id)}\n                          className=\"btn-block ml-2\">\n                          Email\n                        </Button>\n                      </Col>\n                    </>\n                  )}\n                </Row>\n              </Col>\n            </Row>\n          ))}\n        </div>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button variant=\"secondary\" onClick={close}>\n          Cancel\n        </Button>\n        {isDocumentCompleted ? (\n          <Button onClick={() => emailAll()}>Resend All</Button>\n        ) : (\n          <Button onClick={() => emailAll()}>Email Unsigned</Button>\n        )}\n      </Modal.Footer>\n    </Modal>\n  );\n};\n","import { JobTabTitle } from \"app2/src/components/JobTabs/JobTabTitle\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { getTitle } from \"app2/src/selectors/org.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport * as React from \"react\";\nimport { Button, Col, Row, Tab, Tabs } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Route, Switch, useRouteMatch } from \"react-router\";\nimport { SignatureRequest } from \"../../SignatureRequest\";\nimport { SignatureRequestButton } from \"../../SignatureRequest/SignatureRequestButton\";\nimport EstimateDocuments from \"./EstimateDocuments\";\nimport SignableDocuments from \"./SignableDocuments\";\nimport { SigningRecipientsModal } from \"./SigningRecipientsModal\";\n\nexport interface DocumentTabsProps {}\n\nexport const DocumentTabs: React.FC<DocumentTabsProps> = () => {\n  const dispatch = useDispatch();\n  const match = useRouteMatch<{ documentKind: string }>();\n  const contractTitle = useSelector((state: RootState) => getTitle(state, { documentType: \"contract\" }));\n  const jobId = useSelector(currentJobId);\n\n  const navigateToTab = (data) => {\n    dispatch(push(data));\n  };\n\n  const navigateToContracts = () => {\n    dispatch(push(`/jobs/${jobId}/contracts`));\n  };\n\n  return (\n    <Row>\n      <Col>\n        <JobTabTitle title=\"Signatures\">\n          <SignatureRequestButton />\n          <Button className=\"pull-right\" onClick={navigateToContracts}>\n            Create {contractTitle} for Signature\n          </Button>\n        </JobTabTitle>\n        <Tabs\n          id=\"signatures-page-tabs\"\n          activeKey={match?.params?.documentKind}\n          className=\"signatures-tabs mb-3\"\n          onSelect={navigateToTab}>\n          <Tab eventKey=\"estimate_documents\" title={`${contractTitle}s`}>\n            <EstimateDocuments />\n          </Tab>\n          <Tab eventKey=\"signable_documents\" title=\"Signable Documents\">\n            <SignableDocuments />\n          </Tab>\n        </Tabs>\n\n        <Switch>\n          <Route path={`${match.url}/signing/:signedDocumentId`} component={SigningRecipientsModal} />\n          <Route path={`${match.url}/signature_request`} component={SignatureRequest} />\n        </Switch>\n      </Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { Redirect, Route, Switch, useRouteMatch } from \"react-router-dom\";\nimport { ShowPdf } from \"./ShowPdf\";\nimport { DocumentTabs } from \"./DocumentTabs\";\nimport { useSelector } from \"react-redux\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { useTracking } from \"react-tracking\";\n\nexport const SignaturesTab: React.FC = () => {\n  const match = useRouteMatch();\n  const jobId = useSelector(currentJobId);\n  const { Track } = useTracking<any>({ component: \"SignaturesTab\", job: jobId, category: \"Signatures\" });\n\n  return (\n    <Track>\n      <Switch>\n        <Route path={`${match.url}/view_pdf/:documentId`} component={ShowPdf} />\n        <Route path={`${match.url}/:documentKind`} component={DocumentTabs} />\n        <Route path={`${match.url}`} render={() => <Redirect to={`${match.url}/estimate_documents`} />} />\n      </Switch>\n    </Track>\n  );\n};\n","import * as L from \"leaflet\";\nimport \"leaflet-draw\";\nimport { Feature, FeatureCollection, Geometry } from \"geojson\";\nimport { SimpleMapScreenshoter } from \"leaflet-simple-map-screenshoter\";\n\nlet polygonIdx = 1;\nlet markerIdx = 1;\nlet drawnItems: L.FeatureGroup<any>;\n\nexport interface GeoJSONProperties {\n  id: number;\n  markers: Array<string>;\n  area?: number;\n  length;\n  number;\n}\n\nlet map: L.Map;\n\nlet doUpdate: (geoJSON: FeatureCollection) => void;\nlet layers = [];\n\nexport const setup = (\n  containerId: string,\n  updated?: (geoJSON: FeatureCollection) => void,\n  onChangeStart?: () => void,\n  onChangeEnd?: () => void,\n): void => {\n  if (containerId.length > 0) map = new L.Map(containerId, <L.MapOptions>{ zoomSnap: 0.1 });\n  layers.forEach((layer) => {\n    map.removeLayer(layer);\n  });\n  layers = [];\n  layers = [\n    L.gridLayer\n      .googleMutant({\n        type: \"satellite\",\n      })\n      .addTo(map),\n    L.gridLayer\n      .googleMutant({\n        type: \"roadmap\",\n        styles: [\n          { featureType: \"geometry\", stylers: [{ visibility: \"off\" }] },\n          { featureType: \"road\", stylers: [{ visibility: \"off\" }] },\n          {\n            featureType: \"administrative.land_parcel\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ visibility: \"on\" }],\n          },\n        ],\n      })\n      .addTo(map),\n  ];\n\n  if (onChangeStart) {\n    map.on(\"draw:editstart\", () => {\n      onChangeStart();\n    });\n\n    map.on(\"draw:drawstart\", () => {\n      onChangeStart();\n    });\n\n    map.on(\"draw:deletestart\", () => {\n      onChangeStart();\n    });\n  }\n\n  if (onChangeEnd) {\n    map.on(\"draw:drawstop\", () => {\n      onChangeEnd();\n    });\n    map.on(\"draw:editstop\", () => {\n      onChangeEnd();\n    });\n\n    map.on(\"draw:deletestop\", () => {\n      onChangeEnd();\n    });\n  }\n\n  doUpdate = (geoJSON: FeatureCollection) => {\n    if (updated) {\n      updated(geoJSON);\n    }\n  };\n};\n\nexport const setupAndExport = (cb?: (image) => void): void => {\n  layers.forEach((layer) => {\n    map.removeLayer(layer);\n  });\n  layers = [];\n  map.createPane(\"snapshot-pane\");\n  map.createPane(\"dont-include\");\n  centerViewOnFeatures();\n  const baselayer = L.tileLayer(\"https://{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}\", {\n    maxZoom: 20,\n    subdomains: [\"mt0\", \"mt1\", \"mt2\", \"mt3\"],\n    pane: \"snapshot-pane\",\n  }).addTo(map);\n\n  layers.push(baselayer);\n  baselayer.on(\"load\", function () {\n    exportMapAsImage().then(cb);\n  });\n};\n\nexport const exportMapAsImage = (): Promise<any> => {\n  const snapshotOptions = {\n    hideElementsWithSelectors: [\".leaflet-control-container\", \".leaflet-dont-include-pane\", \"#snapshot-button\"],\n    hidden: true,\n    waitInterval: 1000,\n  };\n  const screenshotter: SimpleMapScreenshoter = new SimpleMapScreenshoter(snapshotOptions);\n  screenshotter.addTo(map);\n  return screenshotter.takeScreen(\"image\");\n};\n\n/**\n * Used to setup the Drawing tool in Leaflet.  Can be used to reset the Draw Tool after an Export\n *\n * @param options options to enab/edisable in the Drawing Tool\n * @param reset if true, only the drawing tool enabling will run, another Control will not be added to the Map\n * @returns void\n */\nexport const setupDrawing = (options: Partial<L.Control.DrawOptions>, reset = false): void => {\n  markerIdx = 1;\n  const drawOptions: L.Control.DrawOptions = Object.assign(\n    {\n      rectangle: false,\n      marker: false,\n      circle: false,\n      circlemarker: false,\n      polyline: false,\n      polygon: false,\n    },\n    options,\n  );\n\n  drawnItems = L.featureGroup().addTo(map);\n\n  if (reset) {\n    return;\n  }\n\n  map.addControl(\n    new L.Control.Draw({\n      edit: {\n        featureGroup: drawnItems,\n      },\n      draw: drawOptions,\n    }),\n  );\n\n  map.on(L.Draw.Event.CREATED, function (event: L.DrawEvents.Created) {\n    const layer = event.layer;\n    layer.feature = layer.feature || layer.toGeoJSON();\n\n    drawnItems.addLayer(layer);\n\n    layer.feature.properties.id = polygonIdx++;\n\n    bindMarkers(layer);\n\n    doUpdate(drawnItems.toGeoJSON() as FeatureCollection);\n  });\n\n  map.on(L.Draw.Event.EDITSTART, function () {\n    map.eachLayer((l) => {\n      l.unbindTooltip();\n      if (l instanceof L.CircleMarker) {\n        l.removeFrom(map);\n      }\n    });\n  });\n\n  map.on(L.Draw.Event.DELETESTART, function () {\n    map.eachLayer((l) => {\n      l.unbindTooltip();\n      if (l instanceof L.CircleMarker) {\n        l.removeFrom(map);\n      }\n    });\n  });\n\n  map.on(L.Draw.Event.DELETESTOP, function () {\n    markerIdx = 1;\n    map.eachLayer((l) => {\n      bindMarkers(l);\n    });\n  });\n\n  map.on(L.Draw.Event.DELETED, function () {\n    markerIdx = 1;\n    map.eachLayer((l) => {\n      bindMarkers(l);\n    });\n\n    doUpdate(drawnItems.toGeoJSON() as FeatureCollection);\n  });\n\n  map.on(L.Draw.Event.EDITED, function () {\n    markerIdx = 1;\n    map.eachLayer((l) => {\n      bindMarkers(l);\n    });\n\n    doUpdate(drawnItems.toGeoJSON() as FeatureCollection);\n  });\n};\n\nexport const lettersToNumber = (input: string): number => {\n  return input.split(\"\").reduce((sum, character) => sum * 26 + parseInt(character, 36) - 9, 0);\n};\n\nexport const numberToLetters = (input: number): string => {\n  let output = \"\";\n\n  do {\n    input -= 1;\n    output = String.fromCharCode(65 + (input % 26)) + output;\n    input = Math.floor(input / 26);\n  } while (input > 0);\n\n  return output;\n};\n\nexport const centerView = (lat: number, lon: number): void => {\n  map.setView(new L.LatLng(lat, lon), 20);\n};\n\nexport const centerViewOnFeatures = (): void => {\n  const points = allPoints();\n\n  if (points.length <= 0) return;\n\n  map.fitBounds(L.latLngBounds(points).pad(0.1));\n};\n\nconst bindMarkers = (layer: L.Layer): void => {\n  if (!(layer instanceof L.Polygon || layer instanceof L.Polyline)) {\n    return;\n  }\n  let markers: Array<Array<number>> = [...layer.toGeoJSON().geometry.coordinates] as Array<Array<number>>;\n  let mLength = markers.length;\n\n  if (layer.feature.geometry.type === \"Polygon\") {\n    markers = markers[0] as any;\n    mLength = markers.length - 1;\n  }\n\n  if (!layer.feature.properties.id) {\n    layer.feature.properties.id = polygonIdx++;\n  } else {\n    polygonIdx = Math.max(polygonIdx, layer.feature.properties.id + 1);\n  }\n  if (!layer.feature.properties.markers) {\n    layer.feature.properties.markers = [];\n  }\n\n  for (let i = 0; i < mLength; i++) {\n    layer.feature.properties.markers[i] = numberToLetters(markerIdx++);\n    L.circleMarker([markers[i][1], markers[i][0]], { color: \"green\" })\n      .bindTooltip(layer.feature.properties.markers[i], {\n        permanent: true,\n        className: \"marker-tooltip\",\n        direction: \"left\",\n      })\n      .addTo(map);\n  }\n};\n\nconst allPoints = () => {\n  const points = [];\n  map.eachLayer((l) => {\n    if (!(l instanceof L.Polygon || l instanceof L.Polyline)) {\n      return;\n    }\n    if (l instanceof L.Polygon) {\n      points.push(...(l.feature.geometry.coordinates[0] as any).map((a) => a.slice().reverse()));\n      return;\n    }\n\n    if (l instanceof L.Polyline) {\n      points.push(...l.feature.geometry.coordinates.map((a) => a.slice().reverse()));\n      return;\n    }\n  });\n\n  return points;\n};\n\nexport const load = (geoJson: FeatureCollection): void => {\n  markerIdx = 1;\n\n  L.geoJSON(geoJson, {\n    onEachFeature: (f: Feature<Geometry, GeoJSONProperties>, l) => {\n      drawnItems.addLayer(l);\n      bindMarkers(l);\n    },\n  }).addTo(map);\n};\n\nexport const save = (): FeatureCollection => {\n  const geoJSON: FeatureCollection<Geometry, any> = drawnItems.toGeoJSON() as FeatureCollection<Geometry, any>;\n\n  return geoJSON;\n};\n\nexport const downloadExport = (): void => {\n  centerViewOnFeatures();\n\n  setTimeout(() => {\n    (map as any).downloadExport({\n      fileName: \"test.png\",\n      container: map.getContainer(),\n      exclude: [\".leaflet-control-zoom\", \".leaflet-control-attribution\", \".leaflet-tile-pane\", \".leaflet-draw\"],\n    });\n  }, 1000);\n};\n","import { distance } from \"@turf/turf\";\nimport { List } from \"immutable\";\nimport { FeatureCollection } from \"geojson\";\nimport * as L from \"leaflet\";\nimport \"leaflet-draw\";\nimport {\n  FencingRecord,\n  FenceSegmentRecord,\n  emptyFenceRecord,\n  emptyFenceSegmentRecord,\n} from \"../records/measurements/Fencing\";\nimport { setup as setupMap, setupDrawing } from \"./MappingTool\";\n\n/**\n * setup function for Leaflet & Drawing tool.  Can be used as both a 'setup' and a 'reset' after exporting\n *\n * @param containerId map container id.  If empty, will not be setup\n * @param updated updat callback\n * @param onChangeStart callback for change start.  if both start/end are null, will be only reset Drawing tool\n * @param onChangeEnd callback for change end.  if both start/end are null, will be only reset Drawing tool\n\n */\nexport const setup = (\n  containerId: string,\n  updated?: (geoJSON: FeatureCollection) => void,\n  onChangeStart?: () => void,\n  onChangeEnd?: () => void,\n): void => {\n  const drawOptions: Partial<L.Control.DrawOptions> = {\n    polyline: {\n      allowIntersection: false,\n      showLength: true,\n      metric: false,\n    },\n    polygon: {\n      metric: false,\n    },\n  };\n\n  L.drawLocal.draw.toolbar.buttons.polyline = \"Draw a Terminal Post Fence\";\n  L.drawLocal.draw.toolbar.buttons.polygon = \"Draw a Closed-Loop Fence\";\n  L.drawLocal.draw.handlers.polyline.error = \"<string>Error:</strong> fence edges cannot cross!\";\n  L.drawLocal.draw.handlers.polyline.tooltip.start = \"Click to start drawing a fence\";\n  L.drawLocal.draw.handlers.polyline.tooltip.cont = \"Click to continue drawing the fence\";\n  L.drawLocal.draw.handlers.polyline.tooltip.end = \"Click the last point to finish fence\";\n  L.drawLocal.draw.handlers.polygon.tooltip.start = \"Click to start drawing a fence\";\n  L.drawLocal.draw.handlers.polygon.tooltip.cont = \"Click to continue drawing the fence\";\n  L.drawLocal.draw.handlers.polygon.tooltip.end = \"Click on the first point to finish fence\";\n  L.drawLocal.edit.toolbar.buttons.edit = \"Edit fences\";\n  L.drawLocal.edit.toolbar.buttons.editDisabled = \"No fences to edit\";\n  L.drawLocal.edit.toolbar.buttons.remove = \"Delete fences\";\n  L.drawLocal.edit.toolbar.buttons.removeDisabled = \"No fences to delete\";\n  L.drawLocal.edit.handlers.edit.tooltip.text = \"Drag handles to edit fences.\";\n  L.drawLocal.edit.handlers.remove.tooltip.text = \"Click on a fence to delete it\";\n\n  setupMap(containerId, updated, onChangeStart, onChangeEnd);\n  setupDrawing(drawOptions, !onChangeStart || !onChangeEnd);\n};\n\nconst pointsToLines = (points: Array<Array<number>>): Array<Array<Array<number>>> => {\n  const lines: Array<Array<Array<number>>> = [];\n  for (let idx = 0; idx < points.length - 1; idx++) {\n    lines.push([points[idx], points[idx + 1]]);\n  }\n\n  return lines;\n};\n\nexport const geoJSONToFenceMeasurement = (geoJSON: FeatureCollection, fencing: FencingRecord): FencingRecord => {\n  const validFeatureTypes: string[] = [\"LineString\", \"Polygon\"];\n\n  if (!geoJSON) {\n    return fencing;\n  }\n\n  let totalLength = 0,\n    terminalPosts = 0,\n    cornerPosts = 0,\n    linePosts4 = 0,\n    linePosts6 = 0,\n    linePosts8 = 0,\n    gateLength = 0,\n    gateCount = 0;\n\n  geoJSON.features\n    .filter((f) => validFeatureTypes.includes(f.geometry.type))\n    .forEach((f, fIdx) => {\n      let fenceMeasurement = fencing.fences.get(fIdx, emptyFenceRecord),\n        featureLength = 0,\n        featureLinePosts4 = 0,\n        featureLinePosts6 = 0,\n        featureLinePosts8 = 0,\n        featureCornerPosts = 0,\n        featureTerminalPosts = 0,\n        featureGateCount = 0,\n        featureGateLength = 0;\n\n      let markers: Array<Array<number>> = [...(f.geometry as any).coordinates];\n\n      if (f.geometry.type === \"Polygon\") {\n        markers = [...markers[0]] as any;\n        markers.pop();\n      }\n\n      const lines = pointsToLines(markers);\n\n      if (f.geometry.type === \"Polygon\") {\n        lines.push([markers[markers.length - 1], markers[0]]);\n        featureCornerPosts = markers.length;\n        featureTerminalPosts = 0;\n      } else if (f.geometry.type === \"LineString\") {\n        featureTerminalPosts = 2;\n        featureCornerPosts = markers.length - 2;\n      }\n\n      terminalPosts += featureTerminalPosts;\n      cornerPosts += featureCornerPosts;\n\n      let idx = 0;\n      lines.forEach((line, lineIdx) => {\n        let to = idx + 1;\n        if (to > markers.length - 1) {\n          to = 0;\n        }\n        let row = fenceMeasurement.segments.get(lineIdx, emptyFenceSegmentRecord);\n\n        const dist = Math.ceil(distance(line[0], line[1], { units: \"miles\" }) * 5280 * 10) / 10;\n        const netDist = dist - row.gateLength;\n\n        featureGateCount += row.gateCount;\n        featureGateLength += row.gateLength;\n\n        row = row.merge({\n          sectionId: f.properties.id.toString(),\n          name: `${f.properties.markers[idx]} to ${f.properties.markers[to]}`,\n          length: dist,\n          netLength: netDist,\n          linePosts4: Math.ceil(netDist / 4) - 1,\n          linePosts6: Math.ceil(netDist / 6) - 1,\n          linePosts8: Math.ceil(netDist / 8) - 1,\n        });\n\n        linePosts4 += row.linePosts4;\n        linePosts6 += row.linePosts6;\n        linePosts8 += row.linePosts8;\n        featureLinePosts4 += row.linePosts4;\n        featureLinePosts6 += row.linePosts6;\n        featureLinePosts8 += row.linePosts8;\n\n        featureLength += dist;\n\n        fenceMeasurement = fenceMeasurement.updateIn([\"segments\"], (segments) => segments.set(lineIdx, row));\n        idx++;\n      });\n\n      fenceMeasurement = fenceMeasurement.updateIn([\"segments\"], (segments: List<FenceSegmentRecord>) =>\n        segments.map((seg, idx) => seg.set(\"_destroy\", idx >= lines.length)),\n      );\n\n      fenceMeasurement = fenceMeasurement.merge({\n        totalLength: featureLength,\n        netLength: featureLength,\n        terminalPosts: featureTerminalPosts,\n        cornerPosts: featureCornerPosts,\n        linePosts4: featureLinePosts4,\n        linePosts6: featureLinePosts6,\n        linePosts8: featureLinePosts8,\n        gateLength: featureGateLength,\n        gateCount: featureGateCount,\n      });\n      totalLength += featureLength;\n      gateCount += featureGateCount;\n      gateLength += featureGateLength;\n\n      fencing = fencing.updateIn([\"fences\"], (fences) => fences.set(fIdx, fenceMeasurement));\n    });\n\n  fencing = fencing.update(\"fences\", (fences) =>\n    fences.map((f, idx) => f.set(\"_destroy\", idx >= geoJSON.features.length)),\n  );\n\n  return fencing.merge({\n    totalLength,\n    terminalPosts,\n    cornerPosts,\n    linePosts4,\n    linePosts6,\n    linePosts8,\n    gateCount,\n    gateLength,\n    netLength: totalLength,\n    geoJSON: geoJSON,\n  });\n};\n\nexport { centerView, centerViewOnFeatures, load, save } from \"./MappingTool\";\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as segmentActions from \"app2/src/reducers/measurements/segment.actions\";\nimport { segment } from \"app2/src/selectors/measurements/segment.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\n\ninterface SegmentDisplayProps {\n  segmentId: number;\n  readOnly: boolean;\n}\n\nconst mapStateToProps = (state: RootState, ownProps: SegmentDisplayProps) => {\n  return {\n    segment: segment(state, ownProps),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: SegmentDisplayProps) => {\n  return {\n    setGateCount: (segmentId: number, gateCount: number) =>\n      dispatch(segmentActions.AsyncActions.setGateCount(segmentId, gateCount)),\n    setGateLength: (segmentId: number, gateLength: number) =>\n      dispatch(segmentActions.AsyncActions.setGateLength(segmentId, gateLength)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & SegmentDisplayProps;\n\nclass SegmentMeasurements extends React.Component<Props> {\n  public constructor(props: Props) {\n    super(props);\n\n    this.inputChanged = this.inputChanged.bind(this);\n  }\n\n  public render() {\n    const { segment, readOnly } = this.props;\n\n    if (!segment) return null;\n\n    if (segment._destroy) return null;\n\n    return (\n      <tr data-testid={`segment-measurements-${segment.id}`}>\n        <td data-testid=\"segment-name\" className=\"align-self-center\">\n          {segment.name}\n        </td>\n        <td data-testid=\"segment-length\" className=\"align-self-center\">\n          {segment.length.toFixed(1)}\n        </td>\n        <td>\n          {readOnly ? (\n            segment.gateCount\n          ) : (\n            <input\n              data-testid={`gateCount+${segment.id}`}\n              name={`gateCount+${segment.id}`}\n              value={segment.gateCount}\n              className=\"form-control\"\n              type=\"number\"\n              step=\"1\"\n              min=\"0\"\n              onChange={this.inputChanged}\n            />\n          )}\n        </td>\n        <td>\n          {readOnly ? (\n            segment.gateLength\n          ) : (\n            <input\n              data-testid={`gateLength+${segment.id}`}\n              name={`gateLength+${segment.id}`}\n              value={segment.gateLength}\n              className=\"form-control\"\n              type=\"number\"\n              step=\"1\"\n              min=\"0\"\n              onChange={this.inputChanged}\n            />\n          )}\n        </td>\n        <td data-testid=\"segment-net-length\" className=\"align-self-center\">\n          {segment.netLength.toFixed(1)}\n        </td>\n      </tr>\n    );\n  }\n\n  protected inputChanged(e: React.ChangeEvent<HTMLInputElement>) {\n    const { setGateCount, setGateLength } = this.props;\n\n    const [kind, segmentIdStr] = e.target.name.split(\"+\");\n\n    const value = parseInt(e.target.value) || 0;\n    const segmentId = parseInt(segmentIdStr);\n\n    if (kind === \"gateCount\") {\n      setGateCount(segmentId, value);\n    } else if (kind === \"gateLength\") {\n      setGateLength(segmentId, value);\n    }\n  }\n}\n\nexport default connector(SegmentMeasurements);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { segment } from \"app2/src/selectors/measurements/segment.selectors\";\n\ninterface SegmentDisplayProps {\n  segmentId: number;\n}\n\nconst mapStateToProps = (state: RootState, ownProps: SegmentDisplayProps) => {\n  return {\n    segment: segment(state, ownProps),\n  };\n};\n\nconst connector = connect(mapStateToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & SegmentDisplayProps;\n\nclass SegmentPosts extends React.Component<Props> {\n  public render() {\n    const { segment } = this.props;\n\n    if (!segment) return null;\n\n    if (segment._destroy) return null;\n\n    return (\n      <tr data-testid={`segment-posts-${segment.id}`}>\n        <td data-testid=\"segment-name\">{segment.name}</td>\n        <td data-testid=\"segment-line-posts-4\">{segment.linePosts4}</td>\n        <td data-testid=\"segment-line-posts-6\">{segment.linePosts6}</td>\n        <td data-testid=\"segment-line-posts-8\">{segment.linePosts8}</td>\n        <td></td>\n        <td></td>\n      </tr>\n    );\n  }\n}\n\nexport default connector(SegmentPosts);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { Accordion, Card, Modal, Row, Col, Table } from \"react-bootstrap\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { fence } from \"app2/src/selectors/measurements/fence.selectors\";\nimport SegmentMeasurements from \"./SegmentMeasurements\";\nimport SegmentPost from \"./SegmentPosts\";\n\ninterface FenceSummaryProps {\n  fenceId: number;\n  fenceNumber: number;\n  expanded: boolean;\n  readOnly: boolean;\n}\n\nconst mapStateToProps = (state: RootState, ownProps: FenceSummaryProps) => {\n  return {\n    fence: fence(state, ownProps),\n  };\n};\n\nconst connector = connect(mapStateToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & FenceSummaryProps;\n\nclass FenceSummary extends React.Component<Props> {\n  public constructor(props: Props) {\n    super(props);\n  }\n\n  public render() {\n    const { fence, fenceNumber, expanded, readOnly } = this.props;\n\n    if (!fence) {\n      return null;\n    }\n\n    if (fence._destroy) return null;\n\n    let defaultKey = \"\";\n    if (expanded === true) {\n      defaultKey = `fence${fence.id}`;\n    }\n\n    return (\n      <Accordion data-testid=\"main-accordion\" defaultActiveKey={defaultKey}>\n        <Card className=\"mb-2 border-bottom\">\n          <Accordion.Toggle eventKey={`fence${fence.id}`} as={Card.Header}>\n            Fence {fenceNumber}\n          </Accordion.Toggle>\n          <Accordion.Collapse data-testid=\"collapse\" as={Card.Body} eventKey={`fence${fence.id}`}>\n            <>\n              <Card className=\"mb-1 border-left-0\">\n                <Card.Header>Segments</Card.Header>\n                <Card.Body className=\"p-0\">\n                  <Table striped bordered hover>\n                    <thead>\n                      <tr>\n                        <th style={{ width: \"25%\" }}></th>\n                        <th style={{ width: \"13%\" }}>Length (ft)</th>\n                        <th style={{ width: \"25%\" }}>Gate Count</th>\n                        <th style={{ width: \"25%\" }}>Gate Length(ft)</th>\n                        <th style={{ width: \"12%\" }}>Net (ft)</th>\n                      </tr>\n                    </thead>\n                    <tbody>\n                      {fence.segmentIds.map((segmentId, idx) => (\n                        <SegmentMeasurements key={idx} segmentId={segmentId} readOnly={readOnly} />\n                      ))}\n                      <tr>\n                        <td></td>\n                        <td data-testid=\"total-length\">{fence.totalLength.toFixed(1)}</td>\n                        <td data-testid=\"gate-count\">{fence.gateCount}</td>\n                        <td data-testid=\"gate-length\">{fence.gateLength}</td>\n                        <td data-testid=\"net-length\">{fence.netLength.toFixed(1)}</td>\n                      </tr>\n                    </tbody>\n                  </Table>\n                </Card.Body>\n              </Card>\n              <Card className=\"mb-1 border-left-0\">\n                <Card.Header>Posts</Card.Header>\n                <Card.Body className=\"p-0\">\n                  <Table striped bordered hover>\n                    <thead>\n                      <tr>\n                        <th style={{ width: \"25%\" }}></th>\n                        <th style={{ width: \"16.66%\" }}>4'</th>\n                        <th style={{ width: \"16.66%\" }}>6'</th>\n                        <th style={{ width: \"16.66%\" }}>8'</th>\n                        <th style={{ width: \"12%\" }}>Corner</th>\n                        <th style={{ width: \"13%\" }}>Terminal</th>\n                      </tr>\n                    </thead>\n                    <tbody>\n                      {fence.segmentIds.map((segmentId, idx) => (\n                        <SegmentPost key={idx} segmentId={segmentId} />\n                      ))}\n                      <tr>\n                        <td></td>\n                        <td data-testid=\"line-posts-4\">{fence.linePosts4}</td>\n                        <td data-testid=\"line-posts-6\">{fence.linePosts6}</td>\n                        <td data-testid=\"line-posts-8\">{fence.linePosts8}</td>\n                        <td data-testid=\"corner-posts\">{fence.cornerPosts}</td>\n                        <td data-testid=\"terminal-posts\">{fence.terminalPosts + fence.gateCount * 2}</td>\n                      </tr>\n                    </tbody>\n                  </Table>\n                </Card.Body>\n              </Card>\n            </>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n    );\n  }\n}\n\nexport default connector(FenceSummary);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { fencing } from \"app2/src/selectors/measurements/fencing.selectors\";\nimport { Card, Table } from \"react-bootstrap\";\nimport Fence from \"./FenceSummary\";\n\ninterface FencingDisplayProps {\n  fencingId: number;\n  expanded: boolean;\n  readOnly?: boolean;\n}\n\nconst mapStateToProps = (state: RootState, ownProps: FencingDisplayProps) => {\n  return {\n    fencing: fencing(state, ownProps),\n  };\n};\n\nconst connector = connect(mapStateToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & FencingDisplayProps;\n\nclass FencingDisplay extends React.Component<Props> {\n  public render() {\n    const { fencing, expanded, readOnly } = this.props;\n    if (!fencing) {\n      return null;\n    }\n\n    return (\n      <>\n        {fencing.fenceIds.map((fId: number, fIdx) => (\n          <Fence fenceId={fId} fenceNumber={fIdx + 1} key={fIdx} expanded={expanded} readOnly={readOnly} />\n        ))}\n        <Card data-testid=\"summary-card\">\n          <Card.Header>Summary</Card.Header>\n          <Card.Body className=\"p-0\">\n            <Table striped bordered hover>\n              <thead>\n                <tr>\n                  <th>Fence Ct</th>\n                  <th>4'</th>\n                  <th>6'</th>\n                  <th>8'</th>\n                  <th>Corner</th>\n                  <th>Terminal</th>\n                  <th>Net (ft)</th>\n                </tr>\n              </thead>\n              <tbody>\n                <tr>\n                  <td data-testid=\"size\">{fencing.fenceIds.size}</td>\n                  <td data-testid=\"line-posts-4\">{fencing.linePosts4}</td>\n                  <td data-testid=\"line-posts-6\">{fencing.linePosts6}</td>\n                  <td data-testid=\"line-posts-8\">{fencing.linePosts8}</td>\n                  <td data-testid=\"corner-posts\">{fencing.cornerPosts}</td>\n                  <td data-testid=\"terminal-posts\">{fencing.terminalPosts + fencing.gateCount * 2}</td>\n                  <td data-testid=\"net-length\">{fencing.netLength.toFixed(1)}</td>\n                </tr>\n              </tbody>\n            </Table>\n          </Card.Body>\n        </Card>\n      </>\n    );\n  }\n}\n\nexport default connector(FencingDisplay);\n","import * as React from \"react\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { centerView, centerViewOnFeatures, geoJSONToFenceMeasurement, load, setup } from \"app2/src/lib/FencingTool\";\nimport { setupAndExport } from \"app2/src/lib/MappingTool\";\nimport { FencingRecord } from \"app2/src/records/measurements/Fencing\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as fencingActions from \"app2/src/reducers/measurements/fencing.actions\";\nimport {\n  measurementIdFullFencing as selectFencing,\n  dirty as fencingIsDirty,\n} from \"app2/src/selectors/measurements/fencing.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { FeatureCollection } from \"geojson\";\nimport { Button, Col, Modal, Row } from \"react-bootstrap\";\nimport Fencing from \"./FencingSummary\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { toLatLng } from \"app2/src/records/Address\";\nimport * as imageActions from \"app2/src/reducers/image.actions\";\nimport { IImageOptions } from \"app2/src/api/image.service\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport track from \"react-tracking\";\nimport { dataURLToFile } from \"app2/src/helpers/File\";\n\ninterface FencingContainerProps {\n  openIdx: number;\n}\n\nconst mapStateToProps = (state: RootState, ownProps: FencingContainerProps) => {\n  const job = currentJob(state);\n  const measurementId = job.get(\"measurement_id\");\n  const fencingRecord = selectFencing(state, { measurementId });\n  return {\n    address: job.get(\"address\"),\n    fullFencing: fencingRecord,\n    measurementId,\n    isDirty: fencingRecord?.id ? fencingIsDirty(state, { fencingId: fencingRecord.id }) : false,\n    jobId: job.get(\"id\"),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: RootDispatchType, ownProps: FencingContainerProps) => {\n  return {\n    load: (measurementId: number) => dispatch(fencingActions.AsyncActions.fetchByMeasurementId(measurementId)),\n    save: (measurementId: number) => dispatch(fencingActions.AsyncActions.save(measurementId)),\n    update: (fencing: FencingRecord) => dispatch(fencingActions.Actions.setFencing(fencing)),\n    reset: (fencingId: number) => dispatch(fencingActions.Actions.resetFencing(fencingId)),\n    createImages: (files: any[], options: IImageOptions) =>\n      dispatch(imageActions.AsyncActions.batchCreateImage(files, options)),\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & FencingContainerProps;\n\ninterface FencingContainerState {\n  open: boolean;\n  currentIdx: number;\n  exporting: boolean;\n  disabled: boolean;\n}\n\n@track(() => ({\n  component: \"FencingContainer\",\n}))\nclass FencingContainer extends React.Component<Props, FencingContainerState> {\n  public constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      open: false,\n      currentIdx: 0,\n      exporting: false,\n      disabled: false,\n    };\n\n    this.saveFencing = this.saveFencing.bind(this);\n    this.shouldOpen = this.shouldOpen.bind(this);\n    this.mergeFeatures = this.mergeFeatures.bind(this);\n    this.cancel = this.cancel.bind(this);\n    this.takeScreenShot = this.takeScreenShot.bind(this);\n  }\n\n  public componentDidUpdate() {\n    this.shouldOpen();\n  }\n\n  public setDisabled = () => {\n    this.setState({ disabled: true });\n  };\n  public setAvailable = () => {\n    this.setState({ disabled: false });\n  };\n\n  public render() {\n    const { open, exporting, disabled } = this.state;\n    const { fullFencing, address, isDirty } = this.props;\n\n    return (\n      <Modal show={open} size=\"xl\" backdrop=\"static\">\n        <SpinnerComponent localProperty={exporting} />\n        <Modal.Header closeButton={true}>Fencing Tool</Modal.Header>\n        <Modal.Body>\n          {_.isNull(toLatLng(address)) ? (\n            <Row>\n              <Col>\n                <div className=\"form-section blank-state\">\n                  <img src=\"/assets/images/icons-large/location.86981dce.png\" />\n                  <h2>No valid address</h2>\n                  <p>Enter in a valid address on the Information tab to generate a map.</p>\n                </div>\n              </Col>\n            </Row>\n          ) : (\n            <Row className=\"h-100\">\n              <Col lg={6} xl={7}>\n                <div id=\"map\" style={{ width: \"100%\", height: \"100%\" }}></div>\n              </Col>\n              <Col lg={6} xl={5} className=\"overflow-scroll mh-100\">\n                <Fencing fencingId={fullFencing?.id} expanded={true} />\n              </Col>\n            </Row>\n          )}\n        </Modal.Body>\n        <Modal.Footer className=\"justify-content-between\">\n          <Button\n            id=\"fence-export-button\"\n            className=\"pull-left\"\n            onClick={this.takeScreenShot}\n            disabled={(fullFencing?.id || 0) <= 0 || !fullFencing?.get(\"totalLength\") || disabled || isDirty}>\n            Export Fence Drawing\n          </Button>\n          <div>\n            <Button data-testid=\"save\" className=\"pull-right\" onClick={this.saveFencing} disabled={!isDirty}>\n              Save\n            </Button>\n            <Button data-testid=\"cancel\" className=\"pull-right\" onClick={this.cancel}>\n              Cancel\n            </Button>\n          </div>\n        </Modal.Footer>\n      </Modal>\n    );\n  }\n\n  @track(() => ({\n    action: \"cancel fencing tool\",\n  }))\n  protected cancel() {\n    const { reset, fullFencing } = this.props;\n\n    reset(fullFencing.id);\n    this.setState({ open: false });\n  }\n\n  @track(() => ({\n    action: \"save fencing tool\",\n  }))\n  protected saveFencing() {\n    const { measurementId, save } = this.props;\n    save(measurementId);\n    centerViewOnFeatures();\n  }\n\n  protected mergeFeatures(geoJSON: FeatureCollection) {\n    const { fullFencing, update } = this.props;\n\n    this.setAvailable();\n    update(geoJSONToFenceMeasurement(geoJSON, fullFencing));\n  }\n\n  @track(() => ({\n    action: \"take screen shot\",\n  }))\n  protected takeScreenShot() {\n    this.setState({ exporting: true });\n    const { jobId, createImages } = this.props;\n    const self = this;\n    const callBack = (image) => {\n      const file: any = dataURLToFile(image, `Fence Drawing ${new Date().toDateString()}.jpg`);\n      createImages([file], { imageableType: \"job\", imageableId: jobId }).then(() => {\n        self.setState({ exporting: false });\n        setup(\"\", this.mergeFeatures);\n        centerViewOnFeatures();\n      });\n    };\n    setupAndExport(callBack);\n    centerViewOnFeatures();\n  }\n\n  protected shouldOpen() {\n    const { openIdx, address, load: loadFencing, measurementId, fullFencing } = this.props;\n    const { currentIdx } = this.state;\n\n    if (openIdx > currentIdx) {\n      if (!fullFencing && measurementId) {\n        loadFencing(measurementId).then(() => {\n          if (this.props.fullFencing && this.props.fullFencing.geoJSON) load(this.props.fullFencing.geoJSON);\n          centerViewOnFeatures();\n        });\n      }\n\n      this.setState(\n        {\n          open: true,\n          currentIdx: openIdx,\n        },\n        () => {\n          if (_.isNull(toLatLng(address))) {\n            return;\n          }\n\n          setup(\"map\", this.mergeFeatures, this.setDisabled, this.setAvailable);\n          centerView(address.lat, address.lon);\n\n          if (fullFencing && fullFencing.geoJSON) {\n            load(fullFencing.geoJSON);\n            centerViewOnFeatures();\n          }\n        },\n      );\n    }\n  }\n}\n\nexport default connector(FencingContainer);\n","import * as React from \"react\";\nimport { Button, Modal, Row, Col, ButtonGroup, FormGroup } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport ButtonFooter from \"app2/src/components/Common/ButtonFooter\";\nimport { FormControl, RsfForm, Select } from \"@tberrysoln/rsf-form\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { pathname, query } from \"app2/src/selectors/router.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { capitalize } from \"humanize-plus\";\nimport { AsyncActions, Actions } from \"app2/src/reducers/measurement.actions\";\nimport { addMeasurementForm, rootKey } from \"app2/src/selectors/measurement.selectors\";\nimport {\n  composeValidators,\n  lessThanOrEqualToValue,\n  greaterThanValue,\n  required,\n} from \"app2/src/helpers/FinalFormValidator\";\nimport { getUoM } from \"app2/src/records/Measurement\";\nimport { useTracking } from \"react-tracking\";\nimport { currentOrgId, preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { List } from \"immutable\";\n\nexport const addMeasurementObjects = List([\"windows\", \"doors\", \"rooms\"]);\nexport const addMeasurementFilter = (permissions: List<string>): List<string> =>\n  addMeasurementObjects.filter((p) => permissions.includes(p));\n\nexport const AddMeasurementModal: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"AddMeasurementModal\" });\n\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const queryParams = useSelector(query);\n  const rootPathname = useSelector(pathname);\n  const object = useSelector(addMeasurementForm);\n  const addType = queryParams.get(\"add\");\n  const uom = getUoM(measurement);\n  const permissions = useSelector((state: RootState) =>\n    preferencesConfig(state, { orgId: currentOrgId(state), path: [\"measurement\", \"job_tab\"], notSet: List() }),\n  );\n  const enabledMeasurements = React.useMemo(() => addMeasurementFilter(permissions), [permissions]);\n\n  // Local State\n  let initState = enabledMeasurements.first();\n  if (enabledMeasurements.includes(addType)) {\n    initState = addType;\n  }\n  const rootPath = [rootKey, \"addMeasurementForm\"];\n  const [measurementType, setMeasurementType] = React.useState(initState);\n\n  // Methods\n  const close = () => {\n    trackEvent({ action: \"close\" });\n    const newQueryParams = new URLSearchParams({\n      ...queryParams.toJS(),\n    });\n    newQueryParams.delete(\"add\");\n    dispatch(push(`${rootPathname}?${newQueryParams.toString()}`));\n  };\n\n  const save = async () => {\n    trackEvent({ action: `save new ${initState}` });\n    dispatch(Actions.saveAddMeasurement());\n    await dispatch(AsyncActions.updateMeasurement());\n    close();\n  };\n\n  const changeType = (data) => {\n    trackEvent({ action: \"change type\", label: data.currentTarget.name });\n    const { name } = data.currentTarget;\n    setMeasurementType(name);\n    dispatch(Actions.updateForm({ rootPath, name: \"kind\", value: name }));\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    setMeasurementType(initState);\n    dispatch(Actions.initAddMeasurement());\n    dispatch(Actions.updateForm({ rootPath, name: \"kind\", value: initState }));\n  }, [addType]);\n\n  if (!measurement) {\n    return null;\n  }\n\n  return (\n    <Modal show={!!addType} onHide={close} backdrop=\"static\" size=\"lg\">\n      <Modal.Header closeButton>\n        <Modal.Title>\n          Add New {addType === \"global\" ? \"Measurement\" : capitalize(addType || \"\").slice(0, -1)}\n        </Modal.Title>\n      </Modal.Header>\n      <RsfForm rootPath={rootPath} updateFormReducer={Actions.updateAddMeasurement} onSubmit={save}>\n        <Modal.Body>\n          <Row>\n            <Col>\n              <label className=\"form-label w-100\">Type</label>\n              {addType === \"global\" ? (\n                <ButtonGroup aria-label=\"type\" className=\"mb-3\">\n                  {enabledMeasurements.includes(\"rooms\") && (\n                    <Button\n                      variant={measurementType === \"rooms\" ? \"primary\" : \"outline-primary\"}\n                      name=\"rooms\"\n                      onClick={changeType}\n                      tabIndex={1}>\n                      Room\n                    </Button>\n                  )}\n                  {enabledMeasurements.includes(\"doors\") && (\n                    <Button\n                      variant={measurementType === \"doors\" ? \"primary\" : \"outline-primary\"}\n                      name=\"doors\"\n                      onClick={changeType}\n                      tabIndex={2}>\n                      Door\n                    </Button>\n                  )}\n                  {enabledMeasurements.includes(\"windows\") && (\n                    <Button\n                      variant={measurementType === \"windows\" ? \"primary\" : \"outline-primary\"}\n                      name=\"windows\"\n                      onClick={changeType}\n                      tabIndex={3}>\n                      Window\n                    </Button>\n                  )}\n                </ButtonGroup>\n              ) : (\n                <Button variant=\"primary\" name={addType} onClick={changeType} className=\"mb-3\" tabIndex={1}>\n                  {capitalize(addType || \"\").slice(0, -1)}\n                </Button>\n              )}\n            </Col>\n            <Col>\n              <FormControl label=\"name\" name=\"name\" validate={required} formControlProps={{ tabIndex: 4 } as any} />\n            </Col>\n          </Row>\n\n          <Row>\n            <Col>\n              {measurementType === \"rooms\" ? null : (\n                <Select label=\"location\" name=\"location\" formControlProps={{ tabIndex: 5 } as any}>\n                  <option key={-1} value={\"\"}></option>\n                  {measurement.get(\"locations\").map((level, idx) => (\n                    <option key={idx} value={level}>\n                      {level}\n                    </option>\n                  ))}\n                </Select>\n              )}\n              <FormControl\n                label=\"quantity\"\n                name=\"quantity\"\n                formControlProps={{ type: \"number\" }}\n                numberInputProps={{ tabIndex: measurementType === \"rooms\" ? 5 : 7 } as any}\n                validate={composeValidators(greaterThanValue(0), lessThanOrEqualToValue(50))}\n              />\n            </Col>\n            <Col>\n              <Select label=\"level\" name=\"level\" formControlProps={{ tabIndex: 6 } as any}>\n                <option key={-1} value={\"\"}></option>\n                {measurement.get(\"levels\").map((level, idx) => (\n                  <option key={idx} value={level}>\n                    {level}\n                  </option>\n                ))}\n              </Select>\n            </Col>\n          </Row>\n\n          {measurementType === \"rooms\" ? null : (\n            <>\n              <h3>Measurements</h3>\n              <Row>\n                <Col>\n                  <FormControl\n                    label=\"width\"\n                    name=\"width\"\n                    validate={required}\n                    formControlProps={{ type: \"number\" }}\n                    numberInputProps={{ tabIndex: 8 } as any}\n                  />\n                </Col>\n                <Col>\n                  <FormControl\n                    label=\"height\"\n                    name=\"height\"\n                    validate={required}\n                    formControlProps={{ type: \"number\" }}\n                    numberInputProps={{ tabIndex: 9 } as any}\n                  />\n                </Col>\n              </Row>\n\n              <Row>\n                <Col>\n                  UI: {object?.get(\"ui\")} {uom[\"window_ui\"]}\n                </Col>\n              </Row>\n              <Row>\n                <Col>\n                  Area: {object?.get(\"area\")} {uom[\"window_area\"]}\n                </Col>\n              </Row>\n            </>\n          )}\n        </Modal.Body>\n        <Modal.Footer>\n          <ButtonFooter cancel={close} saveButtonProps={{ tabIndex: 10 }} cancelButtonProps={{ tabIndex: 11 }} />\n        </Modal.Footer>\n      </RsfForm>\n    </Modal>\n  );\n};\n","import { StoreRegistry } from \"app2/src/storeRegistry\";\nimport * as React from \"react\";\nimport { Button, Dropdown, DropdownButton } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport * as config from \"react-global-configuration\";\nimport FencingContainer from \"app2/src/components/Drawing/Fencing\";\nimport * as measurementActions from \"app2/src/reducers/measurement.actions\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentOrgId, currentOrgSettingsAcl, preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { List } from \"immutable\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { useTracking } from \"react-tracking\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { push } from \"connected-react-router/immutable\";\nimport { pathname, query } from \"app2/src/selectors/router.selectors\";\nimport { ISession } from \"app/src/Common/SessionService\";\nimport { RootState } from \"app2/src/reducers\";\nimport { addMeasurementFilter } from \"app2/src/components/JobTabs/MeasurementTab/AddMeasurementModal\";\n\ninterface ButtonBarProps {\n  changed: boolean;\n  reset: () => void;\n}\n\nexport const ButtonBar: React.FC<ButtonBarProps> = ({ changed, reset }) => {\n  const session: ISession = StoreRegistry.get(\"Session\");\n  const GAF_ENV = config.get(\"ENVIRONMENT\") === \"gaf\";\n\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"ButtonBar\" });\n\n  // Local State\n  const [openFencing, setOpenFencing] = React.useState(0);\n  const [showQMButton, setShowQMButton] = React.useState(GAF_ENV);\n\n  if (GAF_ENV) {\n    session?.canReport(\"quick_measure\", [\"order\"]).then((result: boolean) => {\n      setShowQMButton(GAF_ENV && result);\n    });\n  }\n\n  const permissions = useSelector((state) => currentOrgSettingsAcl(state, { path: [\"measurements\"] })) || List();\n  const jobTabPermissions = useSelector((state: RootState) =>\n    preferencesConfig(state, { orgId: currentOrgId(state), path: [\"measurement\", \"job_tab\"], notSet: List() }),\n  );\n  const editing = useSelector(measurementEditing);\n  const measurementTools = List([\n    \"rapid_area\",\n    \"satellite_measure\",\n    \"deck_wizard\",\n    \"fencing_tool\",\n    \"pool_tool\",\n    \"annotator\",\n  ]);\n  const enabledMeasureemntTools = permissions.filter((permission) => measurementTools.includes(permission));\n  const queryParams = useSelector(query);\n  const rootPathname = useSelector(pathname);\n  const enabledMeasurements = React.useMemo(() => addMeasurementFilter(jobTabPermissions), [jobTabPermissions]);\n\n  // Methods\n  const save = () => {\n    trackEvent({ action: \"Save Changes\" });\n    dispatch(measurementActions.AsyncActions.updateMeasurement([\"elevations\"]));\n  };\n\n  const enableEditing = () => {\n    trackEvent({ action: \"enable measurement editing\" });\n    dispatch(measurementActions.Actions.setEditing(true));\n  };\n\n  const disableEditing = () => {\n    trackEvent({ action: \"disable measurement editing\" });\n    reset();\n    dispatch(measurementActions.Actions.setEditing(false));\n  };\n\n  const openQuickMeasureOrder = () => {\n    trackEvent({ action: \"import\" });\n    StoreRegistry.get<any>(\"$rootScope\").$emit(\"order_quick_measure:open\", {});\n  };\n\n  const openImporter = () => {\n    trackEvent({ action: \"import\" });\n    StoreRegistry.get<any>(\"$rootScope\").$emit(\"measurement_import:open\", {});\n  };\n\n  const openAnnotator = () => {\n    trackEvent({ action: \"show\", category: \"Annotations\" });\n    StoreRegistry.get<any>(\"$rootScope\").$emit(\"annotator:open\", {});\n  };\n\n  const openRapidArea = () => {\n    trackEvent({ action: \"open rapid area\" });\n    StoreRegistry.get<any>(\"$rootScope\").$emit(\"rapid_area:open\", {});\n  };\n\n  const openSatelliteMeasure = () => {\n    trackEvent({ action: \"open satellite measure\" });\n    StoreRegistry.get<any>(\"$rootScope\").$emit(\"satellite_measure:open\", {});\n  };\n\n  const openDeckWizard = () => {\n    trackEvent({ action: \"open deck tool\" });\n    StoreRegistry.get<any>(\"$rootScope\").$emit(\"deck_tool:open\", {});\n  };\n\n  const openPoolTool = () => {\n    trackEvent({ action: \"open pool tool\" });\n    StoreRegistry.get<any>(\"$rootScope\").$emit(\"pool_tool:open\", {});\n  };\n\n  const openFencingTool = () => {\n    trackEvent({ action: \"open fencing tool\" });\n    setOpenFencing((value) => value + 1);\n  };\n\n  const openAddMeasurement = () => {\n    trackEvent({ action: \"open add measurement\" });\n    const newQueryParams = new URLSearchParams({\n      ...queryParams.toJS(),\n      add: \"global\",\n    });\n    dispatch(push(`${rootPathname}?${newQueryParams.toString()}`));\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    return disableEditing;\n  }, []);\n\n  if (!Acl.can(\"update\", \"job\")) {\n    return null;\n  }\n\n  if (editing) {\n    return (\n      <>\n        <Button variant=\"light\" onClick={save} className=\"float-right ml-2\" disabled={!changed}>\n          Save Changes\n        </Button>\n        {changed ? (\n          <ConfirmDialog title={\"There are unsaved changes that will be lost. Are you sure you want to continue?\"}>\n            {(confirm) => (\n              <Button variant=\"primary\" onClick={confirm(() => disableEditing())} className=\"float-right ml-2\">\n                Cancel\n              </Button>\n            )}\n          </ConfirmDialog>\n        ) : (\n          <Button variant=\"primary\" onClick={disableEditing} className=\"float-right ml-2\">\n            Cancel\n          </Button>\n        )}\n      </>\n    );\n  }\n\n  return (\n    <div className=\"float-right\">\n      {showQMButton && (\n        <Button variant=\"outline-primary\" onClick={openQuickMeasureOrder} className=\"mr-2\">\n          <FontAwesome name=\"file-text-o\" />\n          &nbsp; Order QuickMeasure Report\n        </Button>\n      )}\n      <Button variant=\"outline-primary\" onClick={openImporter}>\n        <FontAwesome name=\"download\" />\n        &nbsp; Import\n      </Button>\n      {enabledMeasurements.size > 0 && (\n        <Button variant=\"outline-primary\" onClick={openAddMeasurement} className=\"ml-2\">\n          <FontAwesome name=\"plus\" />\n          &nbsp; Measurement\n        </Button>\n      )}\n      <Button variant=\"outline-primary\" onClick={enableEditing} className=\"ml-2\">\n        <FontAwesome name=\"pencil\" />\n        &nbsp; Edit\n      </Button>\n      {enabledMeasureemntTools.size > 0 ? (\n        <DropdownButton variant=\"primary\" title=\"Tools\" className=\"float-right ml-2\">\n          {permissions.includes(\"annotator\") ? (\n            <Dropdown.Item href=\"#\" onClick={openAnnotator}>\n              Window-inator\n            </Dropdown.Item>\n          ) : null}\n          {permissions.includes(\"rapid_area\") ? (\n            <Dropdown.Item href=\"#\" onClick={openRapidArea}>\n              Rapid Area\n            </Dropdown.Item>\n          ) : null}\n          {permissions.includes(\"satellite_measure\") ? (\n            <Dropdown.Item href=\"#\" onClick={openSatelliteMeasure}>\n              Satellite Measure\n            </Dropdown.Item>\n          ) : null}\n          {permissions.includes(\"deck_wizard\") ? (\n            <Dropdown.Item href=\"#\" onClick={openDeckWizard}>\n              Deck Tool\n            </Dropdown.Item>\n          ) : null}\n          {permissions.includes(\"fencing_tool\") ? (\n            <Dropdown.Item href=\"#\" onClick={openFencingTool}>\n              Fencing Tool\n            </Dropdown.Item>\n          ) : null}\n          {permissions.includes(\"pool_tool\") ? (\n            <Dropdown.Item href=\"#\" onClick={openPoolTool}>\n              Pool Tool\n            </Dropdown.Item>\n          ) : null}\n        </DropdownButton>\n      ) : null}\n      <FencingContainer openIdx={openFencing} />\n    </div>\n  );\n};\n","import { push } from \"connected-react-router/immutable\";\nimport * as React from \"react\";\nimport { Col, Row, ButtonGroup, Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { useTracking } from \"react-tracking\";\nimport { currentOrgId, preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { exteriorMeasurements } from \"app2/src/records/Measurement\";\n\ninterface IInteriorExteriorButton {\n  kind: \"interior\" | \"exterior\";\n}\n\nexport const InteriorExteriorButton: React.FC<IInteriorExteriorButton> = ({ kind }) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"InteriorExteriorButton\" });\n\n  // Selectors\n  const path = useSelector(pathname);\n  const permissions = useSelector((state: RootState) =>\n    preferencesConfig(state, { orgId: currentOrgId(state), path: [\"measurement\", \"job_tab\"], notSet: List() }),\n  );\n  const validExteriorTabs = exteriorMeasurements.filter((tab) => {\n    return permissions.includes(tab);\n  });\n  const showButton = permissions.includes(\"rooms\") && validExteriorTabs.size > 0;\n\n  // Methods\n  const navigate = (data) => {\n    trackEvent({ action: `click ${data.currentTarget.name} navigate` });\n    const root = path.split(\"/measurements\")[0];\n    dispatch(push(`${root}/measurements/${data.currentTarget.name}`));\n  };\n\n  return (\n    <>\n      {showButton ? (\n        <Row className=\"mb-3\">\n          <Col>\n            <ButtonGroup className=\"w-100\">\n              <Button name=\"exterior\" variant={kind === \"exterior\" ? \"primary\" : \"light\"} onClick={navigate}>\n                Exterior\n              </Button>\n              <Button name=\"interior\" variant={kind === \"interior\" ? \"primary\" : \"light\"} onClick={navigate}>\n                Interior\n              </Button>\n            </ButtonGroup>\n          </Col>\n        </Row>\n      ) : null}\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Table } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { FormControl } from \"@tberrysoln/rsf-form\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { getUoM } from \"app2/src/records/Measurement\";\n\ninterface IMeasurementTable {\n  values: string[];\n}\n\nexport const MeasurementTable: React.FC<IMeasurementTable> = ({ values }) => {\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const editing = useSelector(measurementEditing);\n  const pretty: IPretty = StoreRegistry.get(\"Pretty\");\n  const uom = getUoM(measurement);\n\n  return (\n    <Table className={editing ? \"reduce-padding\" : \"\"}>\n      <thead>\n        <tr>\n          <th>Measurement</th>\n          <th>Value</th>\n        </tr>\n      </thead>\n      <tbody>\n        {values.map((value, idx) => {\n          return (\n            <tr key={idx}>\n              <td>{pretty.name[value]}</td>\n              <td>\n                {editing ? (\n                  <>\n                    <FormControl\n                      formGroupProps={{ className: \"small floater-right\" }}\n                      formControlProps={{ type: \"number\" }}\n                      label=\"\"\n                      name={value}\n                    />\n                    <div className=\"floater\">{uom[value]}</div>\n                  </>\n                ) : (\n                  `${measurement?.get(value) ?? 0} ${uom[value]}`\n                )}\n              </td>\n            </tr>\n          );\n        })}\n      </tbody>\n    </Table>\n  );\n};\n","import { getUoM } from \"app2/src/records/Measurement\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { roofFaces } from \"app2/src/selectors/roofFace.selectors\";\nimport { List, Map } from \"immutable\";\nimport * as React from \"react\";\nimport { Accordion, Card, Col, Row, Table } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useSelector } from \"react-redux\";\n\nexport const RoofFaces: React.FC = () => {\n  // Local State\n  const [accordionControl, setAccordionControl] = React.useState(Map({ roofFaces: \"\" }));\n\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const roofFaceIds = measurement?.get(\"roof_face_ids\") || List();\n  const roofFaceRecords = useSelector((state: RootState) => roofFaces(state, { roofFaceIds }));\n  const uom = getUoM(measurement);\n\n  // Methods\n  const toggleAccordion = (key: string) => {\n    if (accordionControl.get(key) === \"\") {\n      setAccordionControl(accordionControl.set(key, key));\n    } else {\n      setAccordionControl(accordionControl.set(key, \"\"));\n    }\n  };\n\n  if (roofFaceIds.size === 0) {\n    return null;\n  }\n\n  return (\n    <Accordion activeKey={accordionControl.get(\"roofFaces\")}>\n      <Card>\n        <Accordion.Toggle\n          className=\"link\"\n          as={Card.Header}\n          eventKey=\"roofFaces\"\n          onClick={() => toggleAccordion(\"roofFaces\")}>\n          Roof Faces\n          <span className=\"pull-right\">\n            <FontAwesome\n              name={`${accordionControl.get(\"roofFaces\") !== \"\" ? \"angle-down\" : \"angle-up\"}`}\n              title=\"Expand\"\n              size=\"lg\"\n              className=\"pull-right\"\n            />\n          </span>\n        </Accordion.Toggle>\n        <Accordion.Collapse eventKey=\"roofFaces\">\n          <Card.Body>\n            <Row>\n              <Col>\n                <Table>\n                  <thead>\n                    <tr>\n                      <th>Designator</th>\n                      <th>Pitch</th>\n                      <th>Area</th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {roofFaceRecords?.map((rf, idx) => {\n                      return (\n                        <tr key={idx}>\n                          <td>{rf.designator}</td>\n                          <td>{rf.pitch}/12</td>\n                          <td>\n                            {rf.area} {uom[\"roof_face_area\"]}\n                          </td>\n                        </tr>\n                      );\n                    })}\n                  </tbody>\n                </Table>\n              </Col>\n              <Col></Col>\n            </Row>\n          </Card.Body>\n        </Accordion.Collapse>\n      </Card>\n    </Accordion>\n  );\n};\n","import * as React from \"react\";\nimport { Accordion, Card, Col, Row } from \"react-bootstrap\";\nimport { MeasurementTable } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/MeasurementTable\";\nimport { RsfForm } from \"@tberrysoln/rsf-form\";\nimport { currentMeasurementId, rootKey } from \"app2/src/selectors/measurement.selectors\";\nimport { Actions } from \"app2/src/reducers/measurement.actions\";\nimport { useSelector } from \"react-redux\";\nimport { RootState } from \"app2/src/reducers\";\nimport { RoofFaces } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/RoofFaces\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { Map } from \"immutable\";\nimport { useTracking } from \"react-tracking\";\n\nexport const roofingTotal1 = [\n  \"roof_total_area\",\n  \"roof_5pw_total_area\",\n  \"roof_10pw_total_area\",\n  \"roof_12pw_total_area\",\n  \"roof_15pw_total_area\",\n  \"roof_20pw_total_area\",\n  \"roof_flat_area\",\n  \"roof_high_roof_area\",\n  \"roof_flat_shallow_area\",\n  \"roof_low_slope_area\",\n  \"roof_average_slope_area\",\n  \"roof_steep_slope_area\",\n  \"roof_ultra_steep_slope_area\",\n  \"roof_sloped_area\",\n  \"roof_10pw_sloped_area\",\n  \"roof_79_area\",\n  \"roof_1012_area\",\n  \"roof_13p_area\",\n];\n\nexport const roofingTotal2 = [\n  \"roof_ridge\",\n  \"roof_hip\",\n  \"roof_ridge_hip\",\n  \"roof_valley\",\n  \"roof_downspout_elbows\",\n  \"roof_downspouts\",\n  \"roof_gutter_miters\",\n  \"roof_eave\",\n  \"roof_rake\",\n  \"roof_perimeter\",\n  \"roof_step_flashing\",\n  \"roof_headwall_flashing\",\n  \"roof_total_flashing\",\n  \"roof_valley_eave\",\n  \"roof_valley_eave_rake\",\n];\n\nexport const roofAreas1 = [\n  \"roof_0_area\",\n  \"roof_1_area\",\n  \"roof_2_area\",\n  \"roof_3_area\",\n  \"roof_4_area\",\n  \"roof_5_area\",\n  \"roof_6_area\",\n  \"roof_7_area\",\n  \"roof_8_area\",\n  \"roof_9_area\",\n  \"roof_10_area\",\n  \"roof_11_area\",\n  \"roof_12_area\",\n];\n\nexport const roofAreas2 = [\n  \"roof_13_area\",\n  \"roof_14_area\",\n  \"roof_15_area\",\n  \"roof_16_area\",\n  \"roof_17_area\",\n  \"roof_18_area\",\n  \"roof_19_area\",\n  \"roof_20_area\",\n  \"roof_21_area\",\n  \"roof_22_area\",\n  \"roof_23_area\",\n  \"roof_24_area\",\n  \"roof_25_area\",\n  \"roof_26p_area\",\n];\n\nexport const Roofing: React.FC = () => {\n  // Hooks\n  const { trackEvent } = useTracking<any>({ component: \"Roofing\" });\n\n  // Local State\n  const [accordionControl, setAccordionControl] = React.useState(\n    Map({ roofingTotal: \"roofingTotal\", roofAreasByPitch: \"\" }),\n  );\n\n  // Selectors\n  const measurementId = useSelector((state: RootState) => currentMeasurementId(state, {}));\n\n  // Methods\n  const toggleAccordion = (key: string) => {\n    if (accordionControl.get(key) === \"\") {\n      trackEvent({ action: \"open accordion\", accordionName: key });\n      setAccordionControl(accordionControl.set(key, key));\n    } else {\n      trackEvent({ action: \"close accordion\", accordionName: key });\n      setAccordionControl(accordionControl.set(key, \"\"));\n    }\n  };\n\n  return (\n    <RsfForm rootPath={[rootKey, \"byId\", measurementId]} updateFormReducer={Actions.updateForm} onSubmit={() => {}}>\n      <Row>\n        <Col>\n          <h2>Roofing</h2>\n        </Col>\n      </Row>\n\n      <Accordion activeKey={accordionControl.get(\"roofingTotal\")}>\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"roofingTotal\"\n            onClick={() => toggleAccordion(\"roofingTotal\")}>\n            Roofing Total\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${accordionControl.get(\"roofingTotal\") !== \"\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"roofingTotal\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <MeasurementTable values={roofingTotal1} />\n                </Col>\n                <Col lg={6}>\n                  <MeasurementTable values={roofingTotal2} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n      <br />\n      <Accordion activeKey={accordionControl.get(\"roofAreasByPitch\")}>\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"roofAreasByPitch\"\n            onClick={() => toggleAccordion(\"roofAreasByPitch\")}>\n            Roof Areas by Pitch\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${accordionControl.get(\"roofAreasByPitch\") !== \"\" ? \"angle-up\" : \"angle-down\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"roofAreasByPitch\">\n            <Card.Body>\n              <Row>\n                <Col>\n                  <MeasurementTable values={roofAreas1} />\n                </Col>\n                <Col>\n                  <MeasurementTable values={roofAreas2} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n      <br />\n      <RoofFaces />\n    </RsfForm>\n  );\n};\n","import { RsfForm } from \"@tberrysoln/rsf-form\";\nimport { MeasurementTable } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/MeasurementTable\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Actions } from \"app2/src/reducers/measurement.actions\";\nimport { rootKey } from \"app2/src/selectors/measurement.selectors\";\nimport { currentMeasurementId } from \"app2/src/selectors/measurementCommon.selectors\";\nimport * as React from \"react\";\nimport { Card, Col, Row } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\n\nexport const sidingTotal1 = [\n  \"siding_total_area\",\n  \"siding_5pw_total_area\",\n  \"siding_10pw_total_area\",\n  \"siding_15pw_total_area\",\n  \"siding_18pw_total_area\",\n  \"siding_inside_corner_qty\",\n  \"siding_inside_corner_length\",\n  \"siding_outside_corner_qty\",\n  \"siding_outside_corner_length\",\n  \"siding_soffit_level_frieze\",\n  \"siding_soffit_eaves\",\n  \"siding_soffit_rakes\",\n  \"siding_soffit_sloped_frieze\",\n  \"siding_soffit_total\",\n];\nexport const sidingTotal2 = [\n  \"siding_opening_qty\",\n  \"siding_opening_tops_length\",\n  \"siding_opening_sills_length\",\n  \"siding_opening_sides_length\",\n  \"siding_level_starter\",\n  \"siding_sloped_trim\",\n  \"siding_vertical_trim\",\n  \"siding_level_frieze_board\",\n  \"siding_sloped_frieze_board\",\n  \"siding_frieze_board\",\n  \"siding_windows_qty\",\n  \"siding_doors_qty\",\n  \"siding_garage_doors_qty\",\n  \"siding_shutter_qty\",\n  \"siding_shutter_area\",\n  \"siding_vents_qty\",\n  \"siding_vents_area\",\n];\n\nexport const Siding: React.FC = () => {\n  // Selectors\n  const measurementId = useSelector((state: RootState) => currentMeasurementId(state, {}));\n\n  return (\n    <RsfForm rootPath={[rootKey, \"byId\", measurementId]} updateFormReducer={Actions.updateForm} onSubmit={() => {}}>\n      <Row>\n        <Col>\n          <h2>Siding</h2>\n        </Col>\n      </Row>\n      <Card>\n        <Card.Body>\n          <Row>\n            <Col lg={6}>\n              <MeasurementTable values={sidingTotal1} />\n            </Col>\n            <Col lg={6}>\n              <MeasurementTable values={sidingTotal2} />\n            </Col>\n          </Row>\n        </Card.Body>\n      </Card>\n    </RsfForm>\n  );\n};\n","import { RsfForm } from \"@tberrysoln/rsf-form\";\nimport { MeasurementTable } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/MeasurementTable\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Actions } from \"app2/src/reducers/measurement.actions\";\nimport { rootKey } from \"app2/src/selectors/measurement.selectors\";\nimport { currentMeasurementId } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { Map } from \"immutable\";\nimport * as React from \"react\";\nimport { Accordion, Card, Col, Image, Row } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useTracking } from \"react-tracking\";\n\nexport const sunroomGeneral1 = [\n  \"sunroom_a_wall_length\",\n  \"sunroom_a_wall_height\",\n  \"sunroom_a_wall_area\",\n  \"sunroom_b_wall_length\",\n  \"sunroom_b_wall_height\",\n  \"sunroom_b_wall_area\",\n];\n\nexport const sunroomGeneral2 = [\n  \"sunroom_c_wall_length\",\n  \"sunroom_c_wall_height\",\n  \"sunroom_c_wall_area\",\n  \"sunroom_wall_perimeter\",\n  \"sunroom_wall_total_area\",\n];\n\nexport const deckAndRoof = [\n  \"sunroom_deck_total_area\",\n  \"sunroom_ceiling_area\",\n  \"sunroom_studio_roof_area\",\n  \"sunroom_cathedral_roof_area\",\n];\n\nexport const kneeWall1 = [\n  \"sunroom_kw_a_length\",\n  \"sunroom_kw_a_height\",\n  \"sunroom_kw_a_area\",\n  \"sunroom_kw_b_length\",\n  \"sunroom_kw_b_height\",\n  \"sunroom_kw_b_area\",\n];\n\nexport const kneeWall2 = [\n  \"sunroom_kw_c_length\",\n  \"sunroom_kw_c_height\",\n  \"sunroom_kw_c_area\",\n  \"sunroom_kw_total_length\",\n  \"sunroom_kw_total_area\",\n];\n\nexport const Sunroom: React.FC = () => {\n  // Hooks\n  const { trackEvent } = useTracking<any>({ component: \"Sunroom\" });\n\n  // Local State\n  const [accordionControl, setAccordionControl] = React.useState(\n    Map({ sunroomGeneral: \"sunroomGeneral\", deckRoofAreas: \"\", kneeWall: \"\" }),\n  );\n\n  // Selectors\n  const measurementId = useSelector((state: RootState) => currentMeasurementId(state, {}));\n\n  // Methods\n  const toggleAccordion = (key: string) => {\n    if (accordionControl.get(key) === \"\") {\n      trackEvent({ action: \"open accordion\", accordionName: key });\n      setAccordionControl(accordionControl.set(key, key));\n    } else {\n      trackEvent({ action: \"close accordion\", accordionName: key });\n      setAccordionControl(accordionControl.set(key, \"\"));\n    }\n  };\n\n  return (\n    <RsfForm rootPath={[rootKey, \"byId\", measurementId]} updateFormReducer={Actions.updateForm} onSubmit={() => {}}>\n      <Row>\n        <Col>\n          <h2>Sunroom</h2>\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          <div className=\"text-center\">\n            <Image src=\"/assets/images/measurements/sunroom-measurements-diagram.12e5ba2d.jpg\" />\n          </div>\n        </Col>\n      </Row>\n      <Accordion activeKey={accordionControl.get(\"sunroomGeneral\")}>\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"sunroomGeneral\"\n            onClick={() => toggleAccordion(\"sunroomGeneral\")}>\n            Sunroom General\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${accordionControl.get(\"sunroomGeneral\") !== \"\" ? \"angle-down\" : \"angle-up\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"sunroomGeneral\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <MeasurementTable values={sunroomGeneral1} />\n                </Col>\n                <Col lg={6}>\n                  <MeasurementTable values={sunroomGeneral2} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n      <br />\n      <Accordion activeKey={accordionControl.get(\"deckRoofAreas\")}>\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"deckRoofAreas\"\n            onClick={() => toggleAccordion(\"deckRoofAreas\")}>\n            Deck and Roof Areas\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${accordionControl.get(\"deckRoofAreas\") !== \"\" ? \"angle-down\" : \"angle-up\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"deckRoofAreas\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <MeasurementTable values={deckAndRoof} />\n                </Col>\n                <Col lg={6}></Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n      <br />\n      <Accordion activeKey={accordionControl.get(\"kneeWall\")}>\n        <Card>\n          <Accordion.Toggle\n            className=\"link\"\n            as={Card.Header}\n            eventKey=\"kneeWall\"\n            onClick={() => toggleAccordion(\"kneeWall\")}>\n            Knee Wall Measurements\n            <span className=\"pull-right\">\n              <FontAwesome\n                name={`${accordionControl.get(\"kneeWall\") !== \"\" ? \"angle-down\" : \"angle-up\"}`}\n                title=\"Expand\"\n                size=\"lg\"\n                className=\"pull-right\"\n              />\n            </span>\n          </Accordion.Toggle>\n          <Accordion.Collapse eventKey=\"kneeWall\">\n            <Card.Body>\n              <Row>\n                <Col lg={6}>\n                  <MeasurementTable values={kneeWall1} />\n                </Col>\n                <Col lg={6}>\n                  <MeasurementTable values={kneeWall2} />\n                </Col>\n              </Row>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Card>\n      </Accordion>\n    </RsfForm>\n  );\n};\n","import * as React from \"react\";\nimport { Col, Row, Table } from \"react-bootstrap\";\nimport { wallFacades } from \"app2/src/selectors/wallFacade.selectors\";\nimport { useSelector } from \"react-redux\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { List } from \"immutable\";\nimport { getUoM } from \"app2/src/records/Measurement\";\n\nexport const Walls: React.FC = () => {\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const wallFacadeIds = measurement?.get(\"wall_facade_ids\") || List();\n  const wallFacadeRecords = useSelector((state: RootState) => wallFacades(state, { wallFacadeIds }));\n  const uom = getUoM(measurement);\n\n  return (\n    <>\n      <Row>\n        <Col>\n          <h2>Walls</h2>\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          <Table>\n            <thead>\n              <tr>\n                <th>Designator</th>\n                <th>Area</th>\n              </tr>\n            </thead>\n            <tbody>\n              {wallFacadeRecords?.map((rf, idx) => {\n                return (\n                  <tr key={idx}>\n                    <td>{rf.designator}</td>\n                    <td>\n                      {rf.area} {uom[\"wall_facade_area\"]}\n                    </td>\n                  </tr>\n                );\n              })}\n            </tbody>\n          </Table>\n        </Col>\n        <Col />\n      </Row>\n    </>\n  );\n};\n","import { FormControl, Select } from \"@tberrysoln/rsf-form\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { getUoM } from \"app2/src/records/Measurement\";\nimport { OpeningRecord } from \"app2/src/records/Opening\";\nimport { RootState } from \"app2/src/reducers\";\nimport { annotation } from \"app2/src/selectors/elevation.selectors\";\nimport { currentMeasurement, measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport * as FontAwesome from \"react-fontawesome\";\n\ninterface IOpeningRowProps {\n  opening: OpeningRecord;\n  destroyCallback: (id: number) => void;\n}\n\nexport const OpeningRow: React.FC<IOpeningRowProps> = ({ opening, destroyCallback }) => {\n  // Selectors\n  const editing = useSelector(measurementEditing);\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const uom = getUoM(measurement);\n  const associatedAnnotation = useSelector((state: RootState) =>\n    annotation(state, { openingId: opening.id, openingType: opening.kind }),\n  );\n\n  // Methods\n  const destroy = () => {\n    destroyCallback(opening.id);\n  };\n\n  if (opening._destroy) {\n    return null;\n  }\n\n  const annotationTitle = `This ${opening.kind.toLowerCase()} is associated with an elevation. It can be edited/deleted in the Window-inator.`;\n  const oeTitle = `This ${opening.kind.toLowerCase()} is associated with an estimate. Deletion is disabled.`;\n\n  if (editing && !associatedAnnotation) {\n    return (\n      <tr>\n        <td>{opening.designator}</td>\n        <td className=\"mwpx-150\">\n          <FormControl formGroupProps={{ className: \"small\" }} label=\"\" name={`${opening.get(\"id\")}.name`} />\n        </td>\n        <td className=\"mwpx-150\">\n          <Select className=\"small\" label=\"\" name={`${opening.get(\"id\")}.location`}>\n            <option key={-1} value={\"\"}></option>\n            {measurement.get(\"locations\").map((location, idx) => (\n              <option key={idx} value={location}>\n                {location}\n              </option>\n            ))}\n          </Select>\n        </td>\n        <td className=\"mwpx-100\">\n          <Select className=\"small\" label=\"\" name={`${opening.get(\"id\")}.level`}>\n            <option key={-1} value={\"\"}></option>\n            {measurement.get(\"levels\").map((level, idx) => (\n              <option key={idx} value={level}>\n                {level}\n              </option>\n            ))}\n          </Select>\n        </td>\n        <td className=\"mwpx-125\">\n          <FormControl\n            formGroupProps={{ className: \"small floater-right\" }}\n            formControlProps={{ type: \"number\" }}\n            label=\"\"\n            name={`${opening.get(\"id\")}.width`}\n          />\n          <div className=\"floater\">{uom[\"window_width\"]}</div>\n        </td>\n        <td className=\"mwpx-125\">\n          <FormControl\n            formGroupProps={{ className: \"small floater-right\" }}\n            formControlProps={{ type: \"number\" }}\n            label=\"\"\n            name={`${opening.get(\"id\")}.height`}\n          />\n          <div className=\"floater\">{uom[\"window_height\"]}</div>\n        </td>\n        <td className=\"mwpx-125\">\n          <FormControl\n            formGroupProps={{ className: \"small floater-right\" }}\n            formControlProps={{ type: \"number\" }}\n            disabled\n            label=\"\"\n            name={`${opening.get(\"id\")}.ui`}\n          />\n          <div className=\"floater\">{uom[\"window_ui\"]}</div>\n        </td>\n        <td className=\"mwpx-125\">\n          <FormControl\n            formGroupProps={{ className: \"small floater-right\" }}\n            formControlProps={{ type: \"number\" }}\n            disabled\n            label=\"\"\n            name={`${opening.get(\"id\")}.area`}\n          />\n          <div className=\"floater\">{uom[\"window_area\"]}</div>\n        </td>\n        <td>\n          {opening.opening_estimations.size > 0 ? (\n            <ConfirmDialog title={oeTitle} hideCancel>\n              {(confirm) => (\n                <FontAwesome name=\"info-circle rsf-base-link\" size=\"lg\" title={oeTitle} onClick={confirm(() => {})} />\n              )}\n            </ConfirmDialog>\n          ) : (\n            <ConfirmDialog title={`Are you sure you want to delete: ${opening.name}?`}>\n              {(confirm) => (\n                <a className=\"action-button\" data-testid=\"destroy\" title=\"Delete\" onClick={confirm(destroy)}>\n                  <i className=\"rsf-delete-link rsf-base-66\"></i>\n                </a>\n              )}\n            </ConfirmDialog>\n          )}\n        </td>\n      </tr>\n    );\n  }\n\n  return (\n    <tr>\n      <td>{opening.designator}</td>\n      <td>{opening.name}</td>\n      <td>{opening.location}</td>\n      <td>{opening.level}</td>\n      <td>{`${opening.width} ${uom[\"window_width\"]}`}</td>\n      <td>{`${opening.height} ${uom[\"window_height\"]}`}</td>\n      <td>{`${opening.ui} ${uom[\"window_ui\"]}`}</td>\n      <td>{`${opening.area} ${uom[\"window_area\"]}`}</td>\n      {associatedAnnotation && editing && (\n        <td>\n          <ConfirmDialog title={annotationTitle} hideCancel>\n            {(confirm) => (\n              <FontAwesome\n                name=\"info-circle rsf-base-link\"\n                size=\"lg\"\n                title={annotationTitle}\n                onClick={confirm(() => {})}\n              />\n            )}\n          </ConfirmDialog>\n        </td>\n      )}\n    </tr>\n  );\n};\n","import { OpeningRow } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/OpeningRow\";\nimport { OpeningRecord } from \"app2/src/records/Opening\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Table } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\n\ninterface IOpeningsProps {\n  openingRecords: List<OpeningRecord>;\n  destroyCallback: (id: number) => void;\n}\nexport const Openings: React.FC<IOpeningsProps> = ({ openingRecords, destroyCallback }) => {\n  // Selectors\n  const editing = useSelector(measurementEditing);\n\n  return (\n    <div className=\"table-responsive\">\n      <Table className={editing ? \"reduce-padding\" : \"\"}>\n        <thead>\n          <tr>\n            <th>Designator</th>\n            <th>Name</th>\n            <th>Location</th>\n            <th>Level</th>\n            <th>Width</th>\n            <th>Height</th>\n            <th>UI</th>\n            <th>Area</th>\n          </tr>\n        </thead>\n        <tbody>\n          {openingRecords?.map((opening, idx) => {\n            return <OpeningRow key={idx} opening={opening} destroyCallback={destroyCallback} />;\n          })}\n        </tbody>\n      </Table>\n    </div>\n  );\n};\n","import { RsfForm } from \"@tberrysoln/rsf-form\";\nimport { Openings } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Openings\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Actions } from \"app2/src/reducers/window.actions\";\nimport { rootKey } from \"app2/src/selectors/window.selectors\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { windows } from \"app2/src/selectors/window.selectors\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { push } from \"connected-react-router/immutable\";\nimport { pathname, query } from \"app2/src/selectors/router.selectors\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { useTracking } from \"react-tracking\";\n\nexport const Windows: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"Windows\" });\n\n  // Selectors\n  const windowIds = useSelector((state: RootState) => currentMeasurement(state, {}))?.get(\"window_ids\") || List();\n  const windowRecords = useSelector((state: RootState) =>\n    windows(state, { windowIds }).filter((window) => !window._destroy),\n  );\n  const queryParams = useSelector(query);\n  const rootPathname = useSelector(pathname);\n  const editing = useSelector(measurementEditing);\n\n  // Methods\n  const openAddMeasurement = () => {\n    trackEvent({ action: \"open add measurement\" });\n    const newQueryParams = new URLSearchParams({\n      ...queryParams.toJS(),\n      add: \"windows\",\n    });\n    dispatch(push(`${rootPathname}?${newQueryParams.toString()}`));\n  };\n  const destroyWindow = (id: number) => {\n    trackEvent({ action: \"destroy window\", window: id });\n    dispatch(Actions.updateForm({ rootPath: [\"windows\", \"byId\", id.toString()], name: \"_destroy\", value: true }));\n  };\n\n  return (\n    <RsfForm rootPath={[rootKey, \"byId\"]} updateFormReducer={Actions.updateForm} onSubmit={() => {}}>\n      <Row>\n        <Col>\n          <h2>Windows</h2>\n        </Col>\n        <Col>\n          <Button\n            variant=\"primary\"\n            className=\"float-right\"\n            onClick={openAddMeasurement}\n            disabled={editing}\n            title={editing ? \"Disabled for editing\" : \"\"}>\n            <FontAwesome name=\"plus\" />\n            &nbsp;Add\n          </Button>\n        </Col>\n      </Row>\n      {windowRecords.size > 0 ? (\n        <Openings openingRecords={windowRecords} destroyCallback={destroyWindow} />\n      ) : (\n        <div className=\"text-center\">\n          <h2>No windows added. Let's add one.</h2>\n          <Button\n            variant=\"primary\"\n            onClick={openAddMeasurement}\n            disabled={editing}\n            title={editing ? \"Disabled for editing\" : \"\"}>\n            <FontAwesome name=\"plus\" />\n            &nbsp;Add\n          </Button>\n        </div>\n      )}\n    </RsfForm>\n  );\n};\n","import { RsfForm } from \"@tberrysoln/rsf-form\";\nimport { Openings } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Openings\";\nimport { RootState } from \"app2/src/reducers\";\nimport { doors } from \"app2/src/selectors/door.selectors\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { rootKey } from \"app2/src/selectors/door.selectors\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Actions } from \"app2/src/reducers/door.actions\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { push } from \"connected-react-router/immutable\";\nimport { pathname, query } from \"app2/src/selectors/router.selectors\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { useTracking } from \"react-tracking\";\n\nexport const Doors: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"Doors\" });\n\n  // Selectors\n  const doorIds = useSelector((state: RootState) => currentMeasurement(state, {}))?.get(\"door_ids\") || List();\n  const doorRecords = useSelector((state: RootState) => doors(state, { doorIds }).filter((door) => !door._destroy));\n  const queryParams = useSelector(query);\n  const rootPathname = useSelector(pathname);\n  const editing = useSelector(measurementEditing);\n\n  // Methods\n  const openAddMeasurement = () => {\n    trackEvent({ action: \"open add measurement\" });\n    const newQueryParams = new URLSearchParams({\n      ...queryParams.toJS(),\n      add: \"doors\",\n    });\n    dispatch(push(`${rootPathname}?${newQueryParams.toString()}`));\n  };\n  const destroyDoor = (id: number) => {\n    trackEvent({ action: \"destroy door\", door: id });\n    dispatch(Actions.updateForm({ rootPath: [\"doors\", \"byId\", id.toString()], name: \"_destroy\", value: true }));\n  };\n\n  return (\n    <RsfForm rootPath={[rootKey, \"byId\"]} updateFormReducer={Actions.updateForm} onSubmit={() => {}}>\n      <Row>\n        <Col>\n          <h2>Doors</h2>\n        </Col>\n        <Col>\n          <Button\n            variant=\"primary\"\n            className=\"float-right\"\n            onClick={openAddMeasurement}\n            disabled={editing}\n            title={editing ? \"Disabled for editing\" : \"\"}>\n            <FontAwesome name=\"plus\" />\n            &nbsp;Add\n          </Button>\n        </Col>\n      </Row>\n      {doorRecords.size > 0 ? (\n        <Openings openingRecords={doorRecords} destroyCallback={destroyDoor} />\n      ) : (\n        <div className=\"text-center\">\n          <h2>No doors added. Let's add one.</h2>\n          <Button\n            variant=\"primary\"\n            onClick={openAddMeasurement}\n            disabled={editing}\n            title={editing ? \"Disabled for editing\" : \"\"}>\n            <FontAwesome name=\"plus\" />\n            &nbsp;Add\n          </Button>\n        </div>\n      )}\n    </RsfForm>\n  );\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { decks } from \"app2/src/selectors/deck.selectors\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Button, Col, Row, Table } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"react-tracking\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { getUoM } from \"app2/src/records/Measurement\";\n\nexport const Decks: React.FC = () => {\n  // Hooks\n  const { trackEvent } = useTracking<any>({ component: \"Decks\" });\n\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const deckIds = measurement?.get(\"deck_ids\") || List();\n  const deckRecords = useSelector((state: RootState) => decks(state, { deckIds }));\n  const editing = useSelector(measurementEditing);\n  const uom = getUoM(measurement);\n\n  const openDeckWizard = () => {\n    trackEvent({ action: \"open deck tool\" });\n    StoreRegistry.get<any>(\"$rootScope\").$emit(\"deck_tool:open\", {});\n  };\n\n  return (\n    <>\n      <Row>\n        <Col>\n          <h2>Decks</h2>\n        </Col>\n        <Col>\n          <Button\n            variant=\"primary\"\n            onClick={openDeckWizard}\n            className=\"float-right\"\n            disabled={editing}\n            title={editing ? \"Disabled for editing\" : \"\"}>\n            Deck Tool\n          </Button>\n        </Col>\n      </Row>\n      {deckRecords.size > 0 ? (\n        <Table>\n          <thead>\n            <tr>\n              <th>Name</th>\n              <th>Area</th>\n              <th>Perimeter</th>\n              <th>Railing</th>\n              <th>Wall</th>\n              <th>Railing Area</th>\n            </tr>\n          </thead>\n          <tbody>\n            {deckRecords?.map((deck, idx) => {\n              return (\n                <tr key={idx}>\n                  <td>{deck.name}</td>\n                  <td>\n                    {deck.area} {uom[\"deck_area\"]}\n                  </td>\n                  <td>\n                    {deck.perimeter} {uom[\"deck_perimeter\"]}\n                  </td>\n                  <td>\n                    {deck.railing_length} {uom[\"deck_railing_length\"]}\n                  </td>\n                  <td>\n                    {deck.wall_length} {uom[\"deck_wall_length\"]}\n                  </td>\n                  <td>\n                    {deck.railing_area} {uom[\"deck_railing_area\"]}\n                  </td>\n                </tr>\n              );\n            })}\n          </tbody>\n        </Table>\n      ) : (\n        <div className=\"text-center\">\n          <h2>No decks added. Let's add one.</h2>\n          <Button\n            variant=\"primary\"\n            onClick={openDeckWizard}\n            disabled={editing}\n            title={editing ? \"Disabled for editing\" : \"\"}>\n            Deck Tool\n          </Button>\n        </div>\n      )}\n    </>\n  );\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { pools } from \"app2/src/selectors/pool.selectors\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Col, Row, Table, Button } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"react-tracking\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { getUoM } from \"app2/src/records/Measurement\";\n\nexport const Pools: React.FC = () => {\n  // Hooks\n  const { trackEvent } = useTracking<any>({ component: \"Pools\" });\n\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const poolIds = measurement?.get(\"pool_ids\") || List();\n  const poolRecords = useSelector((state: RootState) => pools(state, { poolIds }));\n  const editing = useSelector(measurementEditing);\n  const uom = getUoM(measurement);\n\n  //  Methods\n  const openPoolTool = () => {\n    trackEvent({ action: \"open pool tool\" });\n    StoreRegistry.get<any>(\"$rootScope\").$emit(\"pool_tool:open\", {});\n  };\n\n  return (\n    <>\n      <Row>\n        <Col>\n          <h2>Pools</h2>\n        </Col>\n        <Col>\n          <Button\n            variant=\"primary\"\n            onClick={openPoolTool}\n            className=\"float-right\"\n            disabled={editing}\n            title={editing ? \"Disabled for editing\" : \"\"}>\n            Pool Tool\n          </Button>\n        </Col>\n      </Row>\n      {poolRecords.size > 0 ? (\n        <Table>\n          <thead>\n            <tr>\n              <th>Name</th>\n              <th>Area</th>\n              <th>Perimeter</th>\n              <th>Average Depth</th>\n              <th>Gallons</th>\n            </tr>\n          </thead>\n          <tbody>\n            {poolRecords?.map((pool, idx) => {\n              return (\n                <tr key={idx}>\n                  <td>{pool.name}</td>\n                  <td>\n                    {pool.area} {uom[\"pool_area\"]}\n                  </td>\n                  <td>\n                    {pool.perimeter} {uom[\"pool_perimeter\"]}\n                  </td>\n                  <td>\n                    {pool.average_depth} {uom[\"pool_average_depth\"]}\n                  </td>\n                  <td>\n                    {pool.volume} {uom[\"pool_volume\"]}\n                  </td>\n                </tr>\n              );\n            })}\n          </tbody>\n        </Table>\n      ) : (\n        <div className=\"text-center\">\n          <h2>No pools added. Let's add one.</h2>\n          <Button\n            variant=\"primary\"\n            onClick={openPoolTool}\n            disabled={editing}\n            title={editing ? \"Disabled for editing\" : \"\"}>\n            Pool Tool\n          </Button>\n        </div>\n      )}\n    </>\n  );\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { currentMeasurementId } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { measurementIdFencingId } from \"app2/src/selectors/measurements/fencing.selectors\";\nimport * as React from \"react\";\nimport { Col, Row, Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport FencingSummary from \"app2/src/components/Drawing/Fencing/FencingSummary\";\nimport { AsyncActions } from \"app2/src/reducers/measurements/fencing.actions\";\nimport { useTracking } from \"react-tracking\";\nimport FencingContainer from \"app2/src/components/Drawing/Fencing\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\n\nexport const Fencing: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"Fencing\" });\n\n  // Local State\n  const [openFencing, setOpenFencing] = React.useState(0);\n\n  // Selectors\n  const measurementId = useSelector((state: RootState) => currentMeasurementId(state, {}));\n  const fencingId = useSelector((state: RootState) => measurementIdFencingId(state, { measurementId }));\n  const editing = useSelector(measurementEditing);\n\n  // Methods\n  const openFencingTool = () => {\n    trackEvent({ action: \"open fencing tool\" });\n    setOpenFencing((value) => value + 1);\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    dispatch(AsyncActions.fetchByMeasurementId(measurementId));\n  }, []);\n\n  return (\n    <>\n      <Row>\n        <Col>\n          <h2>Fencing</h2>\n        </Col>\n        <Col>\n          <Button\n            variant=\"primary\"\n            onClick={openFencingTool}\n            className=\"float-right\"\n            disabled={editing}\n            title={editing ? \"Disabled for editing\" : \"\"}>\n            Fencing Tool\n          </Button>\n        </Col>\n      </Row>\n      <FencingSummary fencingId={fencingId} expanded={true} readOnly />\n      <FencingContainer openIdx={openFencing} />\n    </>\n  );\n};\n","import { InteriorExteriorButton } from \"app2/src/components/JobTabs/MeasurementTab/InteriorExteriorButton\";\nimport { exteriorMeasurements } from \"app2/src/records/Measurement\";\nimport { capitalize } from \"humanize-plus\";\nimport * as React from \"react\";\nimport { Col, Row, Tabs, Tab, Card } from \"react-bootstrap\";\nimport { currentOrgId, preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { Redirect, Route, Switch, useRouteMatch } from \"react-router\";\nimport { Roofing } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Roofing\";\nimport { Siding } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Siding\";\nimport { Sunroom } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Sunroom\";\nimport { Walls } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Walls\";\nimport { Windows } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Windows\";\nimport { Doors } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Doors\";\nimport { Decks } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Decks\";\nimport { Pools } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Pools\";\nimport { Fencing } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors/Fencing\";\nimport { push } from \"connected-react-router/immutable\";\nimport { useTracking } from \"react-tracking\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\n\nexport const Exteriors: React.FC = () => {\n  // Hooks\n  const match = useRouteMatch();\n  const route = useRouteMatch<{ activeKey: string }>(`${match.url}/:activeKey`);\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"Exteriors\" });\n\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const wallFacadeIds = measurement?.get(\"wall_facade_ids\") || List();\n  const permissions = useSelector((state: RootState) =>\n    preferencesConfig(state, { orgId: currentOrgId(state), path: [\"measurement\", \"job_tab\"], notSet: List() }),\n  );\n  const validExteriorTabs = exteriorMeasurements.filter((tab) => {\n    if (tab === \"walls\" && wallFacadeIds.size === 0) {\n      return false;\n    }\n    return permissions.includes(tab);\n  });\n\n  // Methods\n  const tabNavigate = (data) => {\n    trackEvent({ action: \"exterior tab navigate\", tab: data });\n    dispatch(push(data));\n  };\n  const renderRedirect = () => {\n    if (validExteriorTabs.first()) {\n      return <Redirect to={`${match.url}/${validExteriorTabs.first()}`} />;\n    }\n  };\n  const tabComponent = (tab: string) => {\n    switch (tab) {\n      case \"roofing\":\n        return Roofing;\n      case \"siding\":\n        return Siding;\n      case \"sunroom\":\n        return Sunroom;\n      case \"walls\":\n        return Walls;\n      case \"windows\":\n        return Windows;\n      case \"doors\":\n        return Doors;\n      case \"decks\":\n        return Decks;\n      case \"pools\":\n        return Pools;\n      case \"fencing\":\n        return Fencing;\n      default:\n        return null;\n    }\n  };\n\n  return (\n    <Row>\n      <Col>\n        <InteriorExteriorButton kind=\"exterior\" />\n        <Tabs onSelect={tabNavigate} aria-label=\"exterior-tabs\" activeKey={route?.params?.activeKey}>\n          {validExteriorTabs.map((tab) => (\n            <Tab key={tab} eventKey={tab} title={capitalize(tab)} />\n          ))}\n        </Tabs>\n        <Card className=\"border-top-0\">\n          <Card.Body>\n            <Switch>\n              {validExteriorTabs.map((tab) => (\n                <Route key={tab} path={`${match.url}/${tab}`} component={tabComponent(tab)} />\n              ))}\n              <Route path={`${match.url}`} render={renderRedirect} />\n            </Switch>\n          </Card.Body>\n        </Card>\n      </Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { useIsOversized } from \"app2/src/hooks/useIsOversized/useIsOversized\";\nimport { RoomRecord } from \"app2/src/records/Room\";\nimport { push } from \"connected-react-router/immutable\";\nimport { List } from \"immutable\";\nimport { Dropdown, Tab, Tabs } from \"react-bootstrap\";\nimport { useDispatch } from \"react-redux\";\nimport { useRouteMatch } from \"react-router\";\nimport { useTracking } from \"react-tracking\";\nimport { usePrevious } from \"app2/src/hooks/usePrevious\";\n\nexport interface InteriorTabsProps {\n  rooms: List<RoomRecord>;\n}\n\nexport const InteriorTabs: React.FC<InteriorTabsProps> = ({ rooms }) => {\n  // Hooks\n  const match = useRouteMatch();\n  const route: any = useRouteMatch(`${match.url}/:roomId`);\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"Interiors\" });\n\n  // Local State\n  const [nonOverflowRoomsCount, setNonOverflowRoomsCount] = React.useState(rooms.size);\n  const ref = React.useRef();\n  const prevRooms = usePrevious(rooms);\n  const firstRun = React.useRef(true);\n\n  useIsOversized(\n    ref,\n    (isOversized: boolean, resizedUp: boolean, scrollHeight: number) => {\n      if (isOversized) {\n        // scrollHeight is > 70 when there are 3 rows of rooms, remove more to rely on less rerenders\n        const removeCount = scrollHeight > 70 ? 3 : 1;\n        setNonOverflowRoomsCount(nonOverflowRoomsCount - removeCount);\n      }\n      if (resizedUp) setNonOverflowRoomsCount(rooms.size);\n    },\n    1,\n  );\n\n  const roomsOverflow = React.useMemo(() => rooms.slice(nonOverflowRoomsCount), [rooms, nonOverflowRoomsCount]);\n  const overflowActiveRoom = React.useMemo(\n    () => roomsOverflow.find((r) => r.id.toString() === route?.params?.roomId)?.id,\n    [roomsOverflow, route],\n  );\n\n  // Methods\n  const tabNavigate = (data) => {\n    trackEvent({\n      action: \"interior tab navigate\",\n      room: data,\n    });\n    dispatch(push(data));\n  };\n\n  const debouncedResetCount = React.useMemo(\n    () =>\n      _.debounce((prevRooms: List<RoomRecord>, currentRooms: List<RoomRecord>) => {\n        if (!prevRooms?.equals(currentRooms)) setNonOverflowRoomsCount(currentRooms.size);\n      }, 500),\n    [],\n  );\n\n  // Lifecycle\n  React.useEffect(() => {\n    if (firstRun.current) {\n      firstRun.current = false;\n      return;\n    }\n    debouncedResetCount(prevRooms, rooms);\n  }, [rooms]);\n\n  return (\n    <div className=\"d-flex nav-tabs\">\n      <div ref={ref} style={{ height: 33 }} className=\"overflow-y-hidden\">\n        <Tabs\n          onSelect={tabNavigate}\n          aria-label=\"interior-tabs\"\n          activeKey={route?.params?.roomId}\n          className=\"border-bottom-0\">\n          {rooms.map((room, idx) => {\n            if (idx < nonOverflowRoomsCount)\n              return <Tab key={room.id} eventKey={room.id.toString()} title={room.name || \"(no name)\"} />;\n          })}\n        </Tabs>\n      </div>\n      {roomsOverflow.size > 0 && (\n        <Dropdown className=\"nav-tabs interior-tabs border-bottom-0\">\n          <Dropdown.Toggle as=\"a\" className={\"nav-item nav-link link\" + (overflowActiveRoom ? \" active\" : \"\")}>\n            More Rooms ({roomsOverflow.size})\n          </Dropdown.Toggle>\n          <Dropdown.Menu>\n            {roomsOverflow.map((r) => (\n              <Dropdown.Item\n                key={r.id}\n                onClick={() => tabNavigate(r.id.toString())}\n                className={overflowActiveRoom === r.id ? \"active\" : \"\"}>\n                {r.name || \"(no name)\"}\n              </Dropdown.Item>\n            ))}\n          </Dropdown.Menu>\n        </Dropdown>\n      )}\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { usePrevious } from \"../usePrevious\";\n\n/**\n * Checks if the ref scrollHeight is greater than its width\n */\nexport const useIsOversized = (\n  ref: React.MutableRefObject<HTMLDivElement>,\n  callback?: (isOversized: boolean, resizedUp: boolean, scrollHeight: number) => void,\n  offset = 0,\n): boolean => {\n  const [isOversized, setIsOversized] = React.useState(false);\n  const [windowWidth, setWindowWidth] = React.useState(0);\n  const prevWindowWidth = usePrevious(windowWidth);\n\n  const trigger = () => {\n    const { clientHeight, scrollHeight } = ref.current;\n    const isOversized = clientHeight + offset < scrollHeight;\n    const resizedUp = prevWindowWidth < windowWidth;\n\n    setIsOversized(isOversized);\n    if (callback) callback(isOversized, resizedUp, scrollHeight);\n  };\n\n  React.useEffect(() => {\n    const onResize = () => {\n      setWindowWidth(window.innerWidth);\n    };\n\n    window.addEventListener(\"resize\", _.debounce(onResize, 100));\n\n    return () => {\n      window.removeEventListener(\"resize\", _.debounce(onResize, 100));\n    };\n  }, []);\n\n  React.useEffect(() => {\n    const { current } = ref;\n\n    if (current) {\n      trigger();\n    }\n  }, [callback, ref, windowWidth]);\n\n  return isOversized;\n};\n","import { InteriorExteriorButton } from \"app2/src/components/JobTabs/MeasurementTab/InteriorExteriorButton\";\nimport { Room } from \"app2/src/components/JobTabs/MeasurementTab/Interiors/Room\";\nimport { RoomRecord } from \"app2/src/records/Room\";\nimport { RootState } from \"app2/src/reducers\";\nimport { measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { rooms as roomsSelector } from \"app2/src/selectors/room.selectors\";\nimport { pathname, query } from \"app2/src/selectors/router.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Col, Row, Card, Button } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Redirect, Route, Switch, useRouteMatch } from \"react-router\";\nimport { InteriorTabs } from \"./InteriorTabs\";\n\nexport const Interiors: React.FC = () => {\n  // Hooks\n  const match = useRouteMatch();\n  const dispatch = useDispatch();\n\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const rooms = useSelector((state: RootState) =>\n    roomsSelector(state, { roomIds: measurement?.get(\"room_ids\") || List() }).filter((room) => !room._destroy),\n  );\n  const queryParams = useSelector(query);\n  const rootPathname = useSelector(pathname);\n  const editing = useSelector(measurementEditing);\n\n  // Methods\n  const renderRedirect = () => {\n    const firstRoom: RoomRecord = rooms.first();\n    if (firstRoom) {\n      return <Redirect to={`${match.url}/${firstRoom.id}`} />;\n    }\n  };\n  const openAddMeasurement = () => {\n    const newQueryParams = new URLSearchParams({\n      ...queryParams.toJS(),\n      add: \"rooms\",\n    });\n    dispatch(push(`${rootPathname}?${newQueryParams.toString()}`));\n  };\n\n  return (\n    <Row>\n      <Col>\n        <InteriorExteriorButton kind=\"interior\" />\n        {rooms.size > 0 && <InteriorTabs rooms={rooms} />}\n        <Card className={rooms.size > 0 ? \"border-top-0\" : \"\"}>\n          <Card.Body>\n            {rooms.size === 0 && (\n              <div className=\"text-center\">\n                <h2>No rooms added. Let's add one.</h2>\n                <Button\n                  variant=\"primary\"\n                  onClick={openAddMeasurement}\n                  disabled={editing}\n                  title={editing ? \"Disabled for editing\" : \"\"}>\n                  <FontAwesome name=\"plus\" />\n                  &nbsp; Add\n                </Button>\n              </div>\n            )}\n            <Switch>\n              <Route path={`${match.url}/:roomId`} component={Room} />\n              <Route path={`${match.url}`} render={renderRedirect} />\n            </Switch>\n          </Card.Body>\n        </Card>\n      </Col>\n    </Row>\n  );\n};\n","import * as React from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { ButtonBar } from \"app2/src/components/JobTabs/MeasurementTab/ButtonBar\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as measurementActions from \"app2/src/reducers/measurement.actions\";\nimport { currentMeasurement, measurementEditing } from \"app2/src/selectors/measurement.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { Redirect, Route, Switch, useRouteMatch } from \"react-router\";\nimport { Exteriors } from \"app2/src/components/JobTabs/MeasurementTab/Exteriors\";\nimport { Interiors } from \"app2/src/components/JobTabs/MeasurementTab/Interiors\";\nimport { useTracking } from \"react-tracking\";\nimport { Actions } from \"app2/src/reducers/measurement.actions\";\nimport { Actions as RoomActions } from \"app2/src/reducers/room.actions\";\nimport { Actions as DoorActions } from \"app2/src/reducers/door.actions\";\nimport { Actions as WindowActions } from \"app2/src/reducers/window.actions\";\nimport { measurementChanged } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { doorsChanged } from \"app2/src/selectors/door.selectors\";\nimport { windowsChanged } from \"app2/src/selectors/window.selectors\";\nimport { ReactRouterDirtyWatcher } from \"app2/src/components/Common/ReactRouterDirtyWatcher\";\nimport {\n  addMeasurementFilter,\n  AddMeasurementModal,\n} from \"app2/src/components/JobTabs/MeasurementTab/AddMeasurementModal\";\nimport { roomsChanged } from \"app2/src/selectors/room.selectors\";\nimport { List } from \"immutable\";\nimport { currentOrgId, preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { exteriorMeasurements } from \"app2/src/records/Measurement\";\n\nexport const MeasurementTab: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const match = useRouteMatch();\n  const { Track } = useTracking({ category: \"Measurements\" });\n\n  // Selectors\n  const measurement = useSelector((state: RootState) => currentMeasurement(state, {}));\n  const changed = useSelector((state: RootState) => measurementChanged(state, {}));\n  const windowChanged = useSelector((state: RootState) => windowsChanged(state, {}));\n  const doorChanged = useSelector((state: RootState) => doorsChanged(state, {}));\n  const roomChanged = useSelector((state: RootState) => roomsChanged(state, {}));\n  const permissions = useSelector((state: RootState) =>\n    preferencesConfig(state, { orgId: currentOrgId(state), path: [\"measurement\", \"job_tab\"], notSet: List() }),\n  );\n  const validExteriorTabs = exteriorMeasurements.filter((tab) => {\n    return permissions.includes(tab);\n  });\n  let redirectTab = \"exterior\";\n  if (validExteriorTabs.size === 0 && permissions.includes(\"rooms\")) {\n    redirectTab = \"interior\";\n  }\n  const enabledMeasurements = React.useMemo(() => addMeasurementFilter(permissions), [permissions]);\n\n  const editing = useSelector(measurementEditing);\n\n  // Methods\n  const reset = () => {\n    dispatch(Actions.resetMeasurement());\n    dispatch(RoomActions.resetRooms(measurement?.get(\"room_ids\") || List()));\n    dispatch(DoorActions.resetDoors(measurement?.get(\"door_ids\") || List()));\n    dispatch(WindowActions.resetWindows(measurement?.get(\"window_ids\") || List()));\n  };\n  const check = () => {\n    return changed || windowChanged || doorChanged || roomChanged;\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    dispatch(measurementActions.AsyncActions.loadMeasurement([\"elevations\"]));\n  }, []);\n\n  return (\n    <div className=\"measurements-tab\">\n      <Track>\n        <SpinnerComponent localProperty={measurement?.loading} />\n        {editing ? (\n          <ReactRouterDirtyWatcher check={check} reset={reset} validPathTest={/measurements\\/exterior|interior/} />\n        ) : null}\n        <div className={editing ? \"edit-mode bg-primary card mb-1\" : \"mb-3\"}>\n          <div className={editing ? \"card-body\" : \"\"}>\n            <Row className=\"title-row\">\n              <Col md={editing ? 8 : 5}>\n                <h1 className=\"tab-title mb-0\">Measurements{editing ? \" - Editing Mode\" : \"\"}</h1>\n                <p className=\"tab-subtitle mb-0\">You can {editing ? \"edit\" : \"add or import\"} measurements here.</p>\n              </Col>\n              <Col md={editing ? 4 : 7}>\n                <ButtonBar changed={check()} reset={reset} />\n              </Col>\n            </Row>\n          </div>\n        </div>\n\n        <Switch>\n          {validExteriorTabs.size > 0 && <Route path={`${match.url}/exterior`} component={Exteriors} />}\n          {permissions.includes(\"rooms\") && <Route path={`${match.url}/interior`} component={Interiors} />}\n          <Route path={`${match.url}`} render={() => <Redirect to={`${match.url}/${redirectTab}`} />} />\n        </Switch>\n        {enabledMeasurements.size > 0 && <AddMeasurementModal />}\n      </Track>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { List } from \"immutable\";\nimport { Button, Table } from \"react-bootstrap\";\nimport { EstimateOverviewRecord } from \"app2/src/records/EstimateOverview\";\nimport { CurrencyFormat, DateFormat } from \"app2/src/helpers/Format\";\nimport { useTracking } from \"react-tracking\";\n\nexport interface EstimateOverviewTableProps {\n  estimates: List<EstimateOverviewRecord>;\n  onClickHandler: (estimateId: number) => void;\n}\n\nexport const EstimateOverviewTable: React.FC<EstimateOverviewTableProps> = ({ estimates, onClickHandler }) => {\n  const { trackEvent } = useTracking<any>({\n    category: \"Estimate\",\n  });\n\n  const select = (estimateId: number) => {\n    trackEvent({ action: \"selected\" });\n    onClickHandler(estimateId);\n  };\n  return (\n    <Table>\n      <thead>\n        <tr>\n          <th>Name</th>\n          <th>Last Updated</th>\n          <th>Products</th>\n          <th>Amount</th>\n          <th>Actions</th>\n        </tr>\n      </thead>\n      <tbody>\n        {estimates?.map((e) => (\n          <tr key={e.id} className=\"link\" onClick={() => select(e.id)}>\n            <td>{e.name}</td>\n            <td>{DateFormat(e.updated_at)}</td>\n            <td>{e.line_items_count}</td>\n            <td>{CurrencyFormat(e.total)}</td>\n            <td>\n              <Button>Show</Button>\n            </td>\n          </tr>\n        ))}\n      </tbody>\n    </Table>\n  );\n};\n","import * as React from \"react\";\nimport { jobOverviewEstimates } from \"app2/src/selectors/estimate.selectors\";\nimport { currentJobId, selectedEstimateId as selectedEstimateIdSelector } from \"app2/src/selectors/job.selectors\";\nimport { estimateTitle, getTitle } from \"app2/src/selectors/org.selectors\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { RootState } from \"app2/src/reducers\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { push } from \"connected-react-router/immutable\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { useTracking } from \"react-tracking\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport MakePaymentButton from \"app2/src/components/PaymentsModal/MakePaymentButton\";\nimport { JobTabTitle } from \"../JobTabTitle\";\nimport { EstimateOverviewTable } from \"app2/src/components/Estimate/EstimateOverviewTable\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\n\nexport const SelectProposal: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking();\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n  const title = useSelector(estimateTitle);\n  const estimatorTitle = useSelector((state: RootState) => getTitle(state, { documentType: \"estimator\" }));\n  const estimates = useSelector((state: RootState) => jobOverviewEstimates(state, { jobId }));\n  const selectedEstimateId = useSelector(selectedEstimateIdSelector);\n\n  // Local State\n  const [loading, setLoading] = React.useState(false);\n\n  // Methods\n  const load = async () => {\n    setLoading(true);\n    await dispatch(estimateActions.AsyncActions.getJobEstimates(jobId));\n    setLoading(false);\n  };\n\n  const show = (estimateId: number) => {\n    trackEvent({ action: \"load proposal\", estimate: estimateId });\n    dispatch(push(`/jobs/${jobId}/proposals/${estimateId}`));\n    dispatch(jobActions.Actions.setSelectedEstimateId(estimateId));\n  };\n\n  const goToEstimates = () => {\n    trackEvent({ action: \"create estimate\" });\n\n    const $rootScope: RsfRootScope = StoreRegistry.get(\"$rootScope\");\n    dispatch(push(\"/jobs/\" + jobId + \"/estimates\"));\n    $rootScope.$digest();\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    if (!selectedEstimateId) load();\n  }, []);\n\n  if (estimates?.size === 0 && !loading)\n    return (\n      <>\n        <JobTabTitle title={title}>\n          <div className=\"float-right\">\n            <MakePaymentButton />\n          </div>\n        </JobTabTitle>\n        <Row>\n          <Col>\n            <h2>Select a {title}</h2>\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <div className=\"form-section blank-state text-center\">\n              <img src=\"/assets/images/icons-large/estimates.022a621b.png\" alt=\"Estimates\" />\n              <h2>No estimates added. Let's add one.</h2>\n              <Button onClick={goToEstimates}>Go to {estimatorTitle}</Button>\n            </div>\n          </Col>\n        </Row>\n      </>\n    );\n  return (\n    <>\n      <SpinnerComponent localProperty={loading} />\n      <JobTabTitle title={title}>\n        <div className=\"float-right\">\n          <MakePaymentButton />\n        </div>\n      </JobTabTitle>\n      <Row>\n        <Col>\n          <h2>Select a {title}</h2>\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          <EstimateOverviewTable estimates={estimates} onClickHandler={show} />\n        </Col>\n      </Row>\n    </>\n  );\n};\n","import { TokenKind } from \"app2/src/records/Token\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentOrgId, preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { Spinner } from \"../SpinnerComponent\";\n\nexport interface IntegrationButtonProps {\n  onClick: () => void;\n  integration: TokenKind;\n  show: boolean;\n  label: string;\n  documentType: \"estimate\" | \"contract\" | \"signable\";\n}\n\nexport const IntegrationButton: React.FC<IntegrationButtonProps> = ({\n  onClick,\n  integration,\n  show,\n  label,\n  documentType,\n}) => {\n  const currentToken = useSelector((state: RootState) => token(state, { kind: integration }));\n  const estimatePref = useSelector((state: RootState) =>\n    preferencesConfig(state, { path: [\"marketsharp\", \"estimate\"], orgId: currentOrgId(state), notSet: List() }),\n  );\n  let tokenPref = currentToken?.getIn([\"data\", \"attachment_preferences\", documentType]);\n  const tokenLoading = currentToken?.get(\"loading\");\n\n  if (!show || !currentToken) {\n    return null;\n  }\n\n  // If it's null, not a list, and not set, we still will fallback to the old central\n  // If the list is there, even empty, it's treated as desired to empty and no falling back\n  if (!List.isList(tokenPref)) {\n    tokenPref = estimatePref;\n  }\n\n  if (!tokenPref.includes(\"button\")) {\n    return null;\n  }\n\n  return (\n    <Button className=\"ml-2\" onClick={onClick}>\n      {label}\n      {tokenLoading && <Spinner localProperty={true} localInline={true} />}\n    </Button>\n  );\n};\n","import { hasIntegration } from \"app2/src/records/Job\";\nimport { AsyncActions } from \"app2/src/reducers/estimate.actions\";\nimport { AsyncActions as tokenAsyncActions } from \"app2/src/reducers/token.actions\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { getAuthorizedTokens } from \"app2/src/selectors/token.selectors\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useTracking } from \"react-tracking\";\nimport { IntegrationButton } from \"./IntegrationButton\";\n\nexport interface IntegrationButtonGroupProps {\n  estimateId: number;\n  documentType: \"estimate\" | \"contract\";\n}\n\nexport const IntegrationButtonGroup: React.FC<IntegrationButtonGroupProps> = ({ estimateId, documentType }) => {\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking();\n\n  const jobRecord = useSelector(currentJob);\n  const authorized = useSelector(getAuthorizedTokens);\n\n  // Determine which integrations should be shown based on job metadata\n  const showMarketsharp = jobRecord?.getIn([\"metadata\", \"marketsharp_contact_id\"]);\n  const showSalesforce = React.useMemo(() => {\n    return hasIntegration(jobRecord, \"salesforce_opportunity_id\");\n  }, [jobRecord]);\n  const showJobNimbus = jobRecord?.getIn([\"metadata\", \"job_nimbus_contact_id\"]);\n  const showJobProgress = jobRecord?.getIn([\"metadata\", \"jobprogress_job_id\"]);\n  const showLeadPerfection = jobRecord?.getIn([\"metadata\", \"lead_perfection_id\"]);\n\n  // Fetch authorized tokens for the job's org if not already loaded\n  // This handles the case where the page is reloaded and currentOrgId isn't set yet\n  React.useEffect(() => {\n    if (jobRecord?.org_id && authorized.size <= 0) {\n      dispatch(tokenAsyncActions.getAuthorizedTokens(jobRecord.org_id));\n    }\n  }, [dispatch, jobRecord?.org_id, authorized.size]);\n\n  // Only fetch tokens for integrations that will be shown\n  React.useEffect(() => {\n    if (!jobRecord?.org_id) {\n      return;\n    }\n\n    if (showMarketsharp && authorized.getIn([\"marketsharp\", \"authorized\"])) {\n      dispatch(tokenAsyncActions.getToken(jobRecord.org_id, \"marketsharp\"));\n    }\n    if (showSalesforce && authorized.getIn([\"salesforce\", \"authorized\"])) {\n      dispatch(tokenAsyncActions.getToken(jobRecord.org_id, \"salesforce\", true));\n    }\n    if (showJobNimbus && authorized.getIn([\"job_nimbus\", \"authorized\"])) {\n      dispatch(tokenAsyncActions.getToken(jobRecord.org_id, \"job_nimbus\"));\n    }\n    if (showJobProgress && authorized.getIn([\"jobprogress\", \"authorized\"])) {\n      dispatch(tokenAsyncActions.getToken(jobRecord.org_id, \"jobprogress\"));\n    }\n    if (showLeadPerfection && authorized.getIn([\"lead_perfection\", \"authorized\"])) {\n      dispatch(tokenAsyncActions.getToken(jobRecord.org_id, \"lead_perfection\"));\n    }\n  }, [\n    dispatch,\n    authorized,\n    showMarketsharp,\n    showSalesforce,\n    showJobNimbus,\n    showJobProgress,\n    showLeadPerfection,\n    jobRecord?.org_id,\n  ]);\n\n  const attachIntegration = (integration: string) => {\n    // Match old tracking event names\n    const integrationName =\n      integration === \"job_nimbus\"\n        ? \"job nimbus\"\n        : integration === \"job_progress\"\n          ? \"jobprogress\"\n          : integration === \"lead_perfection\"\n            ? \"LeadPerfection\"\n            : integration;\n    trackEvent({ action: `attach proposal to ${integrationName}` });\n    dispatch(AsyncActions.attachIntegration(estimateId, integration, documentType));\n  };\n\n  return (\n    <>\n      <IntegrationButton\n        show={showMarketsharp}\n        label=\"Marketsharp\"\n        integration=\"marketsharp\"\n        onClick={() => attachIntegration(\"marketsharp\")}\n        documentType={documentType}\n      />\n      <IntegrationButton\n        show={showSalesforce}\n        label=\"Salesforce\"\n        integration=\"salesforce\"\n        onClick={() => attachIntegration(\"salesforce\")}\n        documentType={documentType}\n      />\n      <IntegrationButton\n        show={showJobNimbus}\n        label=\"Job Nimbus\"\n        integration=\"job_nimbus\"\n        onClick={() => attachIntegration(\"job_nimbus\")}\n        documentType={documentType}\n      />\n      <IntegrationButton\n        show={showJobProgress}\n        label=\"JobProgress\"\n        integration=\"jobprogress\"\n        onClick={() => attachIntegration(\"job_progress\")}\n        documentType={documentType}\n      />\n\n      <IntegrationButton\n        show={showLeadPerfection}\n        label=\"LeadPerfection\"\n        integration=\"lead_perfection\"\n        onClick={() => attachIntegration(\"lead_perfection\")}\n        documentType={documentType}\n      />\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Form, Modal } from \"react-bootstrap\";\nimport ButtonFooter from \"app2/src/components/Common/ButtonFooter\";\n\nexport interface EmailMessageArgs {\n  email: string;\n  message: string;\n}\n\ninterface EmailMessageModalProps {\n  initEmail: string;\n  title: string;\n  emailMessage: (args: EmailMessageArgs) => void;\n  cancel: () => void;\n}\n\nexport const EmailMessageModal: React.FC<EmailMessageModalProps> = ({ initEmail, title, emailMessage, cancel }) => {\n  const [email, setEmail] = React.useState(initEmail);\n  const [message, setMessage] = React.useState(\"\");\n\n  const update = () => {\n    emailMessage({ email, message });\n  };\n\n  return (\n    <Modal show={true} onHide={cancel} size={\"lg\"} backdrop=\"static\">\n      <Modal.Header closeButton>\n        <Modal.Title>{title}</Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        <Form.Group>\n          <Form.Label>Email</Form.Label>\n          <Form.Control value={email} onChange={(e) => setEmail(e.target.value)} />\n        </Form.Group>\n        <Form.Group>\n          <Form.Label>Message</Form.Label>\n          <Form.Control\n            value={message}\n            onChange={(e) => setMessage(e.target.value)}\n            as=\"textarea\"\n            rows={4}\n            placeholder=\"Message to the email recipient\"\n          />\n        </Form.Group>\n      </Modal.Body>\n      <Modal.Footer>\n        <ButtonFooter cancel={cancel} update={update} saveText={\"Send\"} />\n      </Modal.Footer>\n    </Modal>\n  );\n};\n","import { currentJob, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { AsyncActions } from \"app2/src/reducers/estimate.actions\";\nimport { useTracking } from \"react-tracking\";\nimport { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\nimport { capitalizeString } from \"app2/src/services/string.service\";\nimport { EmailMessageArgs, EmailMessageModal } from \"app2/src/components/Common/EmailMessageModal\";\n\nexport interface EmailDocumentModalProps {\n  documentType: \"estimate\" | \"contract\";\n}\n\nexport const EmailDocumentModal: React.FC<EmailDocumentModalProps> = ({ documentType }) => {\n  // Selectors\n  const estimateId = useSelector(selectedEstimateId);\n  const job = useSelector(currentJob);\n\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({\n    category: \"Estimate\",\n    estimate: estimateId,\n  });\n  const { goBack } = usePreviousPath();\n\n  // Methods\n  const close = () => {\n    goBack(\"/email\");\n  };\n\n  const emailEstimate = (args: EmailMessageArgs) => {\n    trackEvent({\n      action: `${documentType} emailed`,\n      category: capitalizeString(documentType),\n      estimate: estimateId,\n    });\n    dispatch(AsyncActions.emailEstimate({ kind: \"email\", doc_type: documentType, ...args }));\n    close();\n  };\n\n  const cancel = () => {\n    trackEvent({\n      action: `email ${documentType} canceled`,\n      category: capitalizeString(documentType),\n      estimate: estimateId,\n    });\n    close();\n  };\n\n  return (\n    <EmailMessageModal cancel={cancel} initEmail={job.email} emailMessage={emailEstimate} title=\"Email Document\" />\n  );\n};\n","import * as React from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport SaveablePdfDisplay from \"../../Pdf/SaveablePdfDisplay\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Route, Switch, useRouteMatch } from \"react-router\";\nimport { currentJob, selectedEstimateId as selectedEstimateIdSelector } from \"app2/src/selectors/job.selectors\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { estimateService } from \"app2/src/api/estimate.service\";\nimport { IntegrationButtonGroup } from \"../../Estimate/IntegrationButtonGroup\";\nimport MakePaymentButton from \"../../PaymentsModal/MakePaymentButton\";\nimport { useTracking } from \"react-tracking\";\nimport { push } from \"connected-react-router/immutable\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { estimateTitle } from \"app2/src/selectors/org.selectors\";\nimport { EmailDocumentModal } from \"../../Document/EmailDocumentModal\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { JobTabTitle } from \"../JobTabTitle\";\n\nexport const ViewProposal: React.FC = () => {\n  // Hooks\n  const { trackEvent } = useTracking();\n  const dispatch = useDispatch();\n  const match = useRouteMatch<{ estimateId: string }>();\n  const estimateId = parseInt(match.params.estimateId);\n\n  // Selectors\n  const path = useSelector(pathname);\n  const selectedEstimateId = useSelector(selectedEstimateIdSelector);\n  const jobRecord = useSelector(currentJob);\n  const title = useSelector(estimateTitle);\n  const pdfUrl = React.useMemo(() => fetcher.joinUrls(estimateService.url, `${estimateId}.pdf`), [estimateId]);\n\n  // Methods\n  const backToAll = () => {\n    trackEvent({ action: \"back to all\" });\n    const prevPath = path.split(\"/proposals/\" + match.params.estimateId)[0] + \"/proposals\";\n    dispatch(jobActions.Actions.setSelectedEstimateId(null));\n    dispatch(push(prevPath));\n  };\n\n  const openEmailModal = () => {\n    trackEvent({ action: \"email estimate\", category: \"Estimate\", estimate: estimateId });\n    dispatch(push(path + \"/email\"));\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    // This is needed in case there is a reload of the page\n    if (selectedEstimateId !== estimateId) {\n      dispatch(jobActions.Actions.setSelectedEstimateId(estimateId));\n    }\n  }, [estimateId, selectedEstimateId]);\n\n  return (\n    <>\n      <JobTabTitle title={title}>\n        <div className=\"float-right\">\n          <IntegrationButtonGroup estimateId={estimateId} documentType=\"estimate\" />\n          <MakePaymentButton />\n\n          <Button onClick={backToAll} className=\"ml-2\">\n            Back to All\n          </Button>\n          <Button onClick={openEmailModal} className=\"ml-2\">\n            Email {title}\n          </Button>\n        </div>\n      </JobTabTitle>\n      <Row>\n        <Col>\n          <SaveablePdfDisplay pdfUrl={pdfUrl} job={jobRecord} disabledFeatures={[\"Annotations\"]} />\n        </Col>\n      </Row>\n      <Switch>\n        <Route path={`${match.url}/email`} render={() => <EmailDocumentModal documentType=\"estimate\" />} />\n      </Switch>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { useTracking } from \"react-tracking\";\nimport { Redirect, Route, Switch, useRouteMatch } from \"react-router\";\nimport { SelectProposal } from \"./SelectProposal\";\nimport { ViewProposal } from \"./ViewProposal\";\nimport { selectedEstimateId as selectedEstimateIdSelector } from \"app2/src/selectors/job.selectors\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { replace } from \"connected-react-router/immutable\";\n\nexport const ProposalsTab: React.FC = () => {\n  const dispatch = useDispatch();\n  const match = useRouteMatch();\n  const { Track } = useTracking<any>({\n    component: \"ProposalsTab\",\n    category: \"Proposals\",\n  });\n  const selectedEstimateId = useSelector(selectedEstimateIdSelector);\n\n  React.useEffect(() => {\n    if (selectedEstimateId && selectedEstimateId !== \"new\") {\n      dispatch(replace(`${match.url}/${selectedEstimateId}`));\n    }\n  }, []);\n\n  return (\n    <Track>\n      <Switch>\n        <Route path={`${match.url}/:estimateId`} component={ViewProposal} />\n        <Route path={`${match.url}`} component={SelectProposal} />\n      </Switch>\n    </Track>\n  );\n};\n","import * as React from \"react\";\nimport { RootState } from \"app2/src/reducers\";\nimport { jobOverviewEstimates } from \"app2/src/selectors/estimate.selectors\";\nimport { currentJobId, selectedEstimateId as selectedEstimateIdSelector } from \"app2/src/selectors/job.selectors\";\nimport { getTitle } from \"app2/src/selectors/org.selectors\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport MakePaymentButton from \"../../PaymentsModal/MakePaymentButton\";\nimport { JobTabTitle } from \"../JobTabTitle\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { EstimateOverviewTable } from \"../../Estimate/EstimateOverviewTable\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport SpinnerComponent from \"../../SpinnerComponent\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { push } from \"connected-react-router/immutable\";\nimport { useTracking } from \"react-tracking\";\nimport { contractTitle as contractTitleSelector } from \"app2/src/selectors/org.selectors\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\n\nexport const SelectEstimate: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking();\n\n  // Selectors\n  const path = useSelector(pathname);\n  const jobId = useSelector(currentJobId);\n  const estimatorTitle = useSelector((state: RootState) => getTitle(state, { documentType: \"estimator\" }));\n  const contractTitle = useSelector(contractTitleSelector);\n  const estimates = useSelector((state: RootState) => jobOverviewEstimates(state, { jobId }));\n  const selectedEstimateId = useSelector(selectedEstimateIdSelector);\n\n  // Local State\n  const [loading, setLoading] = React.useState(false);\n\n  // Methods\n  const load = async () => {\n    setLoading(true);\n    await dispatch(estimateActions.AsyncActions.getJobEstimates(jobId));\n    setLoading(false);\n  };\n\n  const onClickHandler = (estimateId: number) => {\n    dispatch(push(path + \"/\" + estimateId));\n    dispatch(jobActions.Actions.setSelectedEstimateId(estimateId));\n  };\n\n  const goToEstimates = () => {\n    trackEvent({ action: \"create estimate\" });\n\n    const $rootScope: RsfRootScope = StoreRegistry.get(\"$rootScope\");\n    dispatch(push(\"/jobs/\" + jobId + \"/estimates\"));\n    $rootScope.$digest();\n  };\n\n  React.useEffect(() => {\n    if (!selectedEstimateId) load();\n  }, []);\n\n  return (\n    <>\n      <SpinnerComponent localProperty={loading} />\n      <JobTabTitle title={contractTitle}>\n        <div className=\"float-right\">\n          <MakePaymentButton />\n        </div>\n      </JobTabTitle>\n      <Row>\n        <Col>\n          <h2>Select a {estimatorTitle}</h2>\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          {estimates?.size > 0 ? (\n            <EstimateOverviewTable estimates={estimates} onClickHandler={onClickHandler} />\n          ) : (\n            <div className=\"form-section blank-state\">\n              <img src=\"/assets/images/icons-large/estimates.022a621b.png\" />\n              <h2>No estimates added. Let's add one.</h2>\n              <Button onClick={goToEstimates}>Go to {estimatorTitle}</Button>\n            </div>\n          )}\n        </Col>\n      </Row>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentJobId, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\nimport * as signedDocumentActions from \"app2/src/reducers/signedDocument.actions\";\nimport { useTracking } from \"react-tracking\";\nimport { SignedDocumentForm } from \"app2/src/components/Common/SignedDocumentForm\";\nimport { estimate } from \"app2/src/selectors/estimate.selectors\";\nimport { document } from \"app2/src/selectors/document.selectors\";\nimport { currentSignedDocument } from \"app2/src/selectors/signedDocument.selectors\";\nimport { AsyncActions as SignedDocumentAsyncActions } from \"app2/src/reducers/signedDocument.actions\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { replace } from \"connected-react-router/immutable\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\n\nexport interface SignatureSetupModalProps {}\n\nexport const SignatureSetupModal: React.FC<SignatureSetupModalProps> = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { goBack } = usePreviousPath();\n  const { trackEvent } = useTracking<any>({\n    category: \"Contract\",\n  });\n\n  // Local State\n  const [loading, setLoading] = React.useState(false);\n\n  // Selectors\n  const estimateId = useSelector(selectedEstimateId);\n  const jobId = useSelector(currentJobId);\n  const estimateRecord = useSelector((state: RootState) => estimate(state, { estimateId }));\n  const documentRecord = useSelector((state: RootState) =>\n    document(state, { documentId: estimateRecord?.get(\"tempDocumentId\") }),\n  );\n  const signedDocument = useSelector(currentSignedDocument);\n  const path = useSelector(pathname);\n\n  // Methods\n  const close = () => {\n    trackEvent({ action: \"cancel sign contract\" });\n    goBack(\"/signature\");\n  };\n\n  const sign = async (event: React.FormEvent<HTMLFormElement>) => {\n    let notify = false;\n    let message = \"\";\n    setLoading(true);\n\n    // @ts-ignore\n    if (event?.nativeEvent?.submitter?.name === \"email\") {\n      notify = true;\n      message = \"\";\n    }\n\n    const newSignedDocumentId = await dispatch(\n      signedDocumentActions.AsyncActions.contractFlowCreate(documentRecord, { notify, message }),\n    );\n    await dispatch(signedDocumentActions.AsyncActions.listEstimateSignedDocuments(jobId));\n\n    if (notify) {\n      dispatch(replace(path.split(\"/view_pdf\")[0]));\n    } else {\n      dispatch(replace(`${path.split(\"/view_pdf\")[0]}/signing/${newSignedDocumentId}`));\n    }\n    setLoading(false);\n    const recipientsCount = signedDocument.recipients.size;\n    trackEvent({ action: \"Request Submitted\", recipientsCount });\n  };\n\n  React.useEffect(() => {\n    dispatch(SignedDocumentAsyncActions.validateSignedDocument(documentRecord, false, estimateId));\n  }, []);\n\n  React.useEffect(() => {\n    if (signedDocument?.get(\"validation_status\") === 422) {\n      const newPath = path.split(\"/view_pdf/new/signature\")[0];\n      dispatch(replace(newPath));\n    }\n  }, [signedDocument]);\n\n  return (\n    <>\n      <SpinnerComponent localProperty={!signedDocument || signedDocument?.get(\"loading\") || loading} />\n      <Modal show={true} onHide={close} size=\"xl\" backdrop=\"static\">\n        <Modal.Header closeButton>\n          <Modal.Title>Signing Recipients</Modal.Title>\n        </Modal.Header>\n        {signedDocument && !signedDocument?.get(\"loading\") && <SignedDocumentForm onSubmit={sign} close={close} />}\n      </Modal>\n    </>\n  );\n};\n","import MakePaymentButton from \"app2/src/components/PaymentsModal/MakePaymentButton\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { JobTabTitle } from \"../../JobTabTitle\";\nimport { SignatureSetupModal } from \"./SignatureSetupModal\";\nimport { estimate as estimateSelector } from \"app2/src/selectors/estimate.selectors\";\nimport { currentJob, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport SaveablePdfDisplay from \"app2/src/components/Pdf/SaveablePdfDisplay\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { push } from \"connected-react-router/immutable\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { Route, Switch, useRouteMatch } from \"react-router\";\nimport { contractTitle } from \"app2/src/selectors/org.selectors\";\nimport { EmailDocumentModal } from \"app2/src/components/Document/EmailDocumentModal\";\nimport { IntegrationButtonGroup } from \"app2/src/components/Estimate/IntegrationButtonGroup\";\nimport { PaymentsModal } from \"app2/src/components/PaymentsModal\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport * as signedDocumentActions from \"app2/src/reducers/signedDocument.actions\";\nimport { AsyncActions as DocumentAsyncActions } from \"app2/src/reducers/document.actions\";\nimport { useTracking } from \"react-tracking\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { document as documentSelector } from \"app2/src/selectors/document.selectors\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\n\nexport const CreateContract: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const match = useRouteMatch<{ estimateId: string }>();\n  const { trackEvent } = useTracking<any>({\n    category: \"Contract\",\n  });\n\n  // Selectors\n  const path = useSelector(pathname);\n  const estimateId = useSelector(selectedEstimateId);\n  const estimate: EstimateRecord = useSelector((state: RootState) => estimateSelector(state, { estimateId }));\n  const job: JobRecord = useSelector(currentJob);\n  const title = useSelector(contractTitle);\n  const document = useSelector((state: RootState) =>\n    documentSelector(state, { documentId: estimate?.get(\"tempDocumentId\") }),\n  );\n  const documentValueRef = React.useRef<DocumentRecord>();\n\n  // Methods\n  const email = () => {\n    trackEvent({ action: \"email contract\" });\n    dispatch(push(`${path}/email`));\n  };\n  const sign = async () => {\n    trackEvent({ action: \"sign contract\" });\n    dispatch(push(`${path}/signature`));\n  };\n  const cancel = () => {\n    trackEvent({ action: \"cancel sign contract\" });\n    dispatch(push(path.split(\"/view_pdf/new\")[0], { noRedirect: true }));\n  };\n  const resetSignedDocument = () => {\n    const document = documentValueRef.current;\n    if (!document?.signed_document) {\n      dispatch(DocumentAsyncActions.deleteDocument(document));\n    }\n    dispatch(signedDocumentActions.Actions.setCurrentSignedDocumentId(-1));\n    dispatch(signedDocumentActions.Actions.receiveDocument({ id: -1 }));\n    dispatch(estimateActions.Actions.removeEstimatePdf(estimateId));\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    dispatch(estimateActions.AsyncActions.getEstimatePdf(Number(match.params.estimateId), \"contract\", true));\n    return resetSignedDocument;\n  }, []);\n\n  React.useEffect(() => {\n    documentValueRef.current = document;\n  }, [document]);\n\n  return (\n    <>\n      <SpinnerComponent localProperty={estimate?.get(\"loading\") || document?.get(\"loading\")} />\n      <JobTabTitle title={title}>\n        <div className=\"pull-right\">\n          <IntegrationButtonGroup estimateId={estimateId} documentType=\"contract\" />\n          <Button onClick={email}>Email {title}</Button>\n          <MakePaymentButton />\n          <Button onClick={sign}>Signature</Button>\n          <Button onClick={cancel}>Cancel</Button>\n        </div>\n      </JobTabTitle>\n      <SaveablePdfDisplay pdfUrl={document?.get(\"base64\")} job={job} disabledFeatures={[\"Annotations\"]} />\n      {document && (\n        <Switch>\n          <Route path={`${match.url}/signature`} component={SignatureSetupModal} />\n          <Route path={`${match.url}/email`} render={() => <EmailDocumentModal documentType=\"contract\" />} />\n          <Route path={`${match.url}/payments`} component={PaymentsModal} />\n        </Switch>\n      )}\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { JobTabTitle } from \"../../JobTabTitle\";\nimport MakePaymentButton from \"app2/src/components/PaymentsModal/MakePaymentButton\";\nimport { Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { currentJobId, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { contractTitle } from \"app2/src/selectors/org.selectors\";\nimport SignedDocumentsTable from \"app2/src/components/SignedDocument/SignedDocumentsTable\";\nimport { estimateSignedDocuments } from \"app2/src/selectors/estimate.selectors\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\nimport { push, replace } from \"connected-react-router/immutable\";\nimport { locationState as locationStateSelector, pathname } from \"app2/src/selectors/router.selectors\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { Route, Switch, useRouteMatch } from \"react-router\";\nimport { SigningRecipientsModal } from \"../../SignaturesTab/SigningRecipientsModal\";\nimport { PaymentsModal } from \"app2/src/components/PaymentsModal\";\nimport { useTracking } from \"react-tracking\";\n\nexport const SelectContract: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const match = useRouteMatch<{ estimateId: string }>();\n  const { trackEvent } = useTracking<any>({\n    category: \"Contract\",\n  });\n\n  // Selectors\n  const path = useSelector(pathname);\n  const jobId = useSelector(currentJobId);\n  const estimateId = useSelector(selectedEstimateId);\n  const title = useSelector(contractTitle);\n  const documents = useSelector((state: RootState) => estimateSignedDocuments(state, { jobId, estimateId }));\n  const locationState = useSelector(locationStateSelector);\n\n  // Methods\n  const createContract = () => {\n    dispatch(push(`${path}/view_pdf/new`));\n  };\n  const emailOrSign = (document: DocumentRecord) => {\n    dispatch(push(`${path}/signing/${document.signed_document.id}`));\n  };\n  const showPDF = (document: DocumentRecord) => {\n    trackEvent({ action: \"existing contract selected\" });\n    dispatch(push(`${path}/view_pdf/${document.id}`));\n  };\n  const backToAll = () => {\n    trackEvent({ action: \"cleared\" });\n    dispatch(jobActions.Actions.setSelectedEstimateId(null));\n    dispatch(push(path.split(`/contracts/${estimateId}`)[0] + \"/contracts\"));\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    if (!estimateId) {\n      dispatch(jobActions.Actions.setSelectedEstimateId(Number(match.params.estimateId)));\n    }\n    if (documents?.isEmpty() && !locationState?.get(\"noRedirect\")) {\n      dispatch(replace(`${path}/view_pdf/new`));\n    }\n  }, []);\n\n  return (\n    <>\n      <JobTabTitle title={title}>\n        <div className=\"pull-right\">\n          <MakePaymentButton />\n          <Button onClick={backToAll}>Back to All</Button>\n          <Button onClick={createContract}>Create {title} for Signature</Button>\n        </div>\n      </JobTabTitle>\n      {documents?.size > 0 ? (\n        <SignedDocumentsTable\n          documents={documents}\n          emailOrSign={emailOrSign}\n          showPDF={showPDF}\n          onDocumentClick={showPDF}\n        />\n      ) : (\n        <div className=\"form-section blank-state\">\n          <img src=\"/assets/images/icons-large/estimates.022a621b.png\" />\n          <h2>No {title}s added. Let's add one.</h2>\n          <Button onClick={createContract}>Create {title} for Signature</Button>\n        </div>\n      )}\n      <Switch>\n        <Route path={`${match.url}/signing/:signedDocumentId`} component={SigningRecipientsModal} />\n        <Route path={`${match.url}/payments`} component={PaymentsModal} />\n      </Switch>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Route, Switch, useRouteMatch } from \"react-router\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { push } from \"connected-react-router/immutable\";\nimport SpinnerComponent from \"../../../SpinnerComponent\";\nimport MakePaymentButton from \"../../../PaymentsModal/MakePaymentButton\";\nimport { JobTabTitle } from \"../../JobTabTitle\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport SaveablePdfDisplay from \"../../../Pdf/SaveablePdfDisplay\";\nimport { currentJob, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { estimate as estimateSelector } from \"app2/src/selectors/estimate.selectors\";\nimport { document as documentSelector } from \"app2/src/selectors/document.selectors\";\nimport { IntegrationButtonGroup } from \"app2/src/components/Estimate/IntegrationButtonGroup\";\nimport { SigningRecipientsModal } from \"../../SignaturesTab/SigningRecipientsModal\";\nimport { PaymentsModal } from \"app2/src/components/PaymentsModal\";\nimport { useTracking } from \"react-tracking\";\nimport { contractTitle } from \"app2/src/selectors/org.selectors\";\n\nexport const ViewContract: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const match = useRouteMatch<{ documentId: string; estimateId: string }>();\n  const documentId = Number(match.params.documentId);\n  const { trackEvent } = useTracking<any>({\n    category: \"Contract\",\n  });\n\n  // Selectors\n  const path = useSelector(pathname);\n  const job = useSelector(currentJob);\n  const estimateId = useSelector(selectedEstimateId);\n  const estimate = useSelector((state: RootState) => estimateSelector(state, { estimateId }));\n  const document = useSelector((state: RootState) => documentSelector(state, { documentId }));\n  const title = useSelector(contractTitle);\n\n  // Methods\n  const backToAll = () => {\n    trackEvent({ action: \"clear selected contract\" });\n    dispatch(push(path.split(\"/view_pdf\")[0]));\n  };\n  const emailOrSign = () => {\n    dispatch(push(`${path}/signing/${document.signed_document.id}`));\n  };\n\n  return (\n    <>\n      <SpinnerComponent localProperty={estimate?.get(\"loading\")} />\n      <JobTabTitle title={title}>\n        <div className=\"pull-right\">\n          <IntegrationButtonGroup estimateId={estimateId} documentType=\"contract\" />\n          <MakePaymentButton />\n          <Button onClick={() => emailOrSign()}>Email/Sign</Button>\n          <Button onClick={() => backToAll()}>Back to All</Button>\n        </div>\n      </JobTabTitle>\n      <Row>\n        <Col>\n          <SaveablePdfDisplay pdfUrl={document?.url} job={job} disabledFeatures={[\"Annotations\"]} />\n        </Col>\n      </Row>\n      <Switch>\n        <Route path={`${match.url}/signing/:signedDocumentId`} component={SigningRecipientsModal} />\n        <Route path={`${match.url}/payments`} component={PaymentsModal} />\n      </Switch>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Route, Switch, useRouteMatch } from \"react-router\";\nimport { CreateContract } from \"./CreateContract\";\nimport { SelectContract } from \"./SelectContract\";\nimport { ViewContract } from \"./ViewContract\";\nimport { currentJobId, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport * as signedDocumentActions from \"app2/src/reducers/signedDocument.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\n\nexport const EstimateContracts: React.FC = () => {\n  // Hooks\n  const match = useRouteMatch<{ estimateId: string }>();\n  const dispatch = useDispatch();\n\n  // Selectors\n  const jobId = useSelector(currentJobId);\n  const estimateId = useSelector(selectedEstimateId);\n\n  // Local State\n  const [loading, setLoading] = React.useState(true);\n\n  // Methods\n  const loadDocuments = async () => {\n    await dispatch(signedDocumentActions.AsyncActions.listEstimateSignedDocuments(jobId));\n    setLoading(false);\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    loadDocuments();\n\n    if (!estimateId) {\n      dispatch(jobActions.Actions.setSelectedEstimateId(Number(match.params.estimateId)));\n    }\n  }, []);\n\n  return (\n    <>\n      <SpinnerComponent localProperty={loading} />\n      {estimateId && (\n        <Switch>\n          <Route path={`${match.path}/view_pdf/new`} component={CreateContract} />\n          <Route path={`${match.url}/view_pdf/:documentId`} component={ViewContract} />\n          {!loading && <Route path={`${match.path}`} component={SelectContract} />}\n        </Switch>\n      )}\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Route, Switch, useRouteMatch } from \"react-router\";\nimport { useTracking } from \"react-tracking\";\nimport { selectedEstimateId as selectedEstimateIdSelector } from \"app2/src/selectors/job.selectors\";\nimport { SelectEstimate } from \"./SelectEstimate\";\nimport { EstimateContracts } from \"./EstimateContracts\";\nimport { replace } from \"connected-react-router/immutable\";\n\nexport const ContractsTab: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const match = useRouteMatch();\n  const routeMatch = useRouteMatch<{ estimateId: string }>(`${match.url}/:estimateId`);\n  const { Track } = useTracking<any>({\n    component: \"ContractsTab\",\n    category: \"Contracts\",\n  });\n\n  // Selectors\n  const selectedEstimateId = useSelector(selectedEstimateIdSelector);\n\n  // Lifecycle\n  React.useEffect(() => {\n    if (selectedEstimateId && !routeMatch?.params?.estimateId && selectedEstimateId !== \"new\") {\n      dispatch(replace(`${match.url}/${selectedEstimateId}`));\n    }\n  }, [selectedEstimateId]);\n\n  return (\n    <Track>\n      <Switch>\n        <Route path={`${match.url}/:estimateId`} component={EstimateContracts} />\n        <Route path={`${match.url}`} component={SelectEstimate} />\n      </Switch>\n    </Track>\n  );\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { ToolRecord } from \"app2/src/records/Tool\";\nimport { Map, List } from \"immutable\";\n\nexport const toolsById = (state: RootState) => state.getIn([\"tools\", \"byId\"]);\nexport const orgToolIds = (state: RootState, props: any): List<number> =>\n  state.getIn([\"tools\", \"byOrgId\", parseInt(props.orgId), \"tools\"]);\n\n/**\n * Gets the tool records for the given orgId\n * @param {RootState} state RootState\n * @param {{ orgId: number }} props\n * @returns {List<ToolRecord>} The list of tool records\n */\nexport const getOrgTools = createSelector(\n  [toolsById, orgToolIds],\n  (byId: Map<number, ToolRecord>, toolIds: List<number>): List<ToolRecord> => {\n    if (!toolIds) {\n      return List();\n    }\n\n    return toolIds.map((id) => byId.get(id));\n  },\n);\n","import { AddressRecord } from \"../records/Address\";\n\nexport const isAddressValid = (address: AddressRecord): boolean =>\n  Boolean(!_.isEmpty(address.line_1?.trim()) && !_.isEmpty(address.city?.trim()) && !_.isEmpty(address.state?.trim()));\n\nexport const isValidLatLon = (address: AddressRecord): boolean => {\n  if (address?.lat && address?.lon) {\n    return address.lat >= -90 && address.lat <= 90 && address.lon >= -180 && address.lon <= 180;\n  }\n\n  return false;\n};\n\nexport const zillowAddress = (address: AddressRecord) => {\n  let addr = \"\";\n\n  if (address.line_1) {\n    addr = addr + \"-\" + address.line_1.split(\" \").join(\"-\");\n    addr = addr.split(\",\").join(\"\");\n  }\n  if (address.line_2) {\n    addr = addr + \"-\" + address.line_2;\n  }\n  if (address.city) {\n    addr = addr + \"-\" + address.city;\n  }\n  if (address.state) {\n    addr = addr + \"-\" + address.state;\n  }\n  if (address.postal_code) {\n    addr = addr + \"-\" + address.postal_code;\n  }\n\n  if (addr !== \"\") {\n    addr = addr + \"_rb\";\n  }\n\n  return addr.trim().substr(1);\n};\n","import { useSelector } from \"app2/src/storeRegistry\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport { isAddressValid, isValidLatLon, zillowAddress } from \"app2/src/helpers/Address\";\nimport { org as orgSelector } from \"app2/src/selectors/org.selectors\";\nimport { toOneLiner } from \"app2/src/records/Address\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { TokenRecord } from \"app2/src/records/Token\";\n\nexport interface ToolConfig {\n  title: string;\n  image: string;\n  link?: (job: JobRecord, base_url: string) => string;\n  action?: (job: JobRecord) => void;\n  paid: boolean;\n  visible: (job: JobRecord, navDisplay: boolean) => boolean;\n}\n\nexport const getToolConfig = (toolKey: string): ToolConfig => toolConfigs[toolKey];\n\nconst getIntegrationLink = (toolKey: string) =>\n  useSelector((state: RootState) => currentOrgPrefConfig(state, { path: [\"integrations\", toolKey, \"url\"] }));\nconst getRenoworksLink = () =>\n  useSelector((state: RootState) => {\n    const renoworksToken = token(state, { kind: \"renoworks\" }) as TokenRecord;\n    if (!renoworksToken) return \"\";\n\n    return renoworksToken.getIn([\"data\", \"renoworks_url\"]) || \"\";\n  });\nconst getProviaToken = () =>\n  useSelector((state: RootState) => {\n    const proviaToken = token(state, { kind: \"provia\" }) as TokenRecord;\n    return (proviaToken?.get(\"data\")?.toJSON() || {}) as any;\n  });\n\nconst toolConfigs: Record<string, ToolConfig> = {\n  renoworks_masking: {\n    title: \"Order Renoworks Design\",\n    image: \"/assets/images/image-tools/renoworks.b4f1f801.jpg\",\n    link: (job: JobRecord, base_url: string) => {\n      const visualizationUrl = getRenoworksLink();\n      return (\n        \"https://www.renoworkspro.com/designrequest?job_id=\" +\n        job.id +\n        \"&email=\" +\n        job.assignments.first()?.user?.email +\n        \"&rw_site_id=\" +\n        visualizationUrl +\n        \"&mode=\" +\n        base_url\n      );\n    },\n    paid: true,\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      const visualizationUrl = getRenoworksLink();\n      return !_.isEmpty(visualizationUrl) && visualizationUrl.indexOf(\"http\") > -1 && isAddressValid(job.address);\n    },\n  },\n  eagleview_order: {\n    title: \"Order EagleView\",\n    image: \"/assets/images/image-tools/eagleview.7264a419.png\",\n    action: async (job: JobRecord) => {\n      const form = document.createElement(\"form\");\n      form.action = \"https://my.eagleview.com/Order.aspx\";\n      form.method = \"POST\";\n      form.target = \"_blank\";\n      form.setAttribute(\"style\", \"display: none;\");\n\n      const address = document.createElement(\"input\");\n      address.type = \"text\";\n      address.name = \"address\";\n      address.value = job.address.line_1;\n      form.appendChild(address);\n\n      const city = document.createElement(\"input\");\n      city.type = \"text\";\n      city.name = \"city\";\n      city.value = job.address.city;\n      form.appendChild(city);\n\n      const state = document.createElement(\"input\");\n      state.type = \"text\";\n      state.name = \"state\";\n      state.value = job.address.state;\n      form.appendChild(state);\n\n      const zip = document.createElement(\"input\");\n      zip.type = \"text\";\n      zip.name = \"zip\";\n      zip.value = job.address.postal_code;\n      form.appendChild(zip);\n\n      const submit = document.createElement(\"input\");\n      submit.type = \"submit\";\n      submit.value = \"Submit\";\n      form.appendChild(submit);\n\n      document.body.appendChild(form);\n      submit.click();\n\n      document.body.removeChild(form);\n    },\n    paid: true,\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return navDisplay && isValidLatLon(job.address);\n    },\n  },\n  eagleview_order_decra: {\n    title: \"Order EagleView: Decra\",\n    image: \"/assets/images/image-tools/eagleview-decra.f196df2e.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.eagleview.com/decra/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  google_maps: {\n    title: \"Google Maps\",\n    image: \"/assets/images/image-tools/google-maps.77fc6ed8.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"http://maps.google.com/maps?f=q&source=s_q&hl=en&q=\" + job.address.lat + \",+\" + job.address.lon + \"&t=h\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isValidLatLon(job.address);\n    },\n  },\n  bing_ortho: {\n    title: \"Bing Ortho\",\n    image: \"/assets/images/image-tools/bing-maps.736170f1.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return (\n        \"http://maps.live.com/default.aspx?v=2&cp=\" +\n        job.address.lat +\n        \"~\" +\n        job.address.lon +\n        \"&sp=point.\" +\n        job.address.lat +\n        \"_\" +\n        job.address.lon +\n        \"_Location&style=a&lvl=19\"\n      );\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isValidLatLon(job.address);\n    },\n  },\n  bing_birdseye: {\n    title: \"Bing Birdseye\",\n    image: \"/assets/images/image-tools/bing-maps.736170f1.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return (\n        \"http://maps.live.com/default.aspx?v=2&cp=\" +\n        job.address.lat +\n        \"~\" +\n        job.address.lon +\n        \"&sp=point.\" +\n        job.address.lat +\n        \"_\" +\n        job.address.lon +\n        \"_Location&style=o&lvl=19\"\n      );\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isValidLatLon(job.address);\n    },\n  },\n  zoom_earth: {\n    title: \"Zoom Earth\",\n    image: \"/assets/images/image-tools/zoom-earth.5fd286a4.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"http://www.flashearth.com/?lat=\" + job.address.lat + \"&lon=\" + job.address.lon + \"&z=18&r=0&src=msl\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isValidLatLon(job.address);\n    },\n  },\n  terra_server: {\n    title: \"Terra Server\",\n    image: \"/assets/images/image-tools/terraserver.ebabb553.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return (\n        \"https://www.terraserver.com/view?utf8=%E2%9C%93&search_text=&searchLat=&searchLng=&lat=\" +\n        job.address.lat +\n        \"&lng=\" +\n        job.address.lon +\n        \"&bbox=&center=\"\n      );\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isValidLatLon(job.address);\n    },\n  },\n  pictometry_online: {\n    title: \"Pictometry Online\",\n    image: \"/assets/images/image-tools/pictometry.ba413df1.jpg\",\n    paid: true,\n    link: (job: JobRecord, base_url: string) => {\n      return (\n        \"http://pol.pictometry.com/en-us/app/default.php?lat=\" +\n        job.address.lat +\n        \"&lon=\" +\n        job.address.lon +\n        \"&v=p&o=n&type=ob&level=n\"\n      );\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isValidLatLon(job.address);\n    },\n  },\n  pictometry_connect: {\n    title: \"Pictometry Connect\",\n    image: \"/assets/images/image-tools/pictometry.ba413df1.jpg\",\n    paid: true,\n    link: (job: JobRecord, base_url: string) => {\n      return (\n        \"http://explorer.pictometry.com/index.php?lat=\" +\n        job.address.lat +\n        \"&lon=\" +\n        job.address.lon +\n        \"&angle=Ob&zoom=18\"\n      );\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isValidLatLon(job.address);\n    },\n  },\n  chi_overhead_door: {\n    title: \"C.H.I. Overhead Door\",\n    image: \"/assets/images/image-tools/chi.2ee188c1.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://doorvisions.chiohd.com\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  map_developers_area: {\n    title: \"Map Developers Area Tool\",\n    image: \"/assets/images/image-tools/measure-area.d8345cee.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return (\n        \"https://www.mapdevelopers.com/area_calculator_adv.php?zoom=19&lat=\" +\n        job.address.lat +\n        \"&lng=\" +\n        job.address.lon +\n        \"&height=600&width=600&square_meter=true&acres=true&square_mile=true&square_km=true\"\n      );\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isValidLatLon(job.address);\n    },\n  },\n  ca_3d_demo: {\n    title: \"Chief Architect 3D Demo\",\n    image: \"/assets/images/image-tools/chief-architect.3be4717b.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://accounts.chiefarchitect.com/viewer-uploads/embed/919911640610451?autoplay=true\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  daltile_demo: {\n    title: \"daltile 3D Demo\",\n    image: \"/assets/images/image-tools/daltile-3d.b0358778.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://visualize.daltile.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  alside_renoworks: {\n    title: \"Alside Visualizer\",\n    image: \"/assets/images/image-tools/alside-renoworks.abfa27b1.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://alside.renoworks.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  abbeycarpet_demo: {\n    title: \"Abbey Carpet Demo\",\n    image: \"/assets/images/image-tools/abbey-carpet.d1f97bcd.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://abbeycarpet.chameleonpower.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  renuit_cabinet_demo: {\n    title: \"Renuit Cabinet Refacing Demo\",\n    image: \"/assets/images/image-tools/renuit-cabinet.1e1567ba.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://renuit.renoworks.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  zillow: {\n    title: \"Zillow\",\n    image: \"/assets/images/image-tools/zillow.2004fc7a.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.zillow.com/homes/\" + zillowAddress(job.address);\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isAddressValid(job.address);\n    },\n  },\n  trulia: {\n    title: \"Trulia\",\n    image: \"/assets/images/image-tools/trulia.d59c3c65.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return (\n        \"https://www.trulia.com/submit_search/?display_select=for_sale&search=\" +\n        toOneLiner(job.address) +\n        \"&locationType=address&tst=h&ac_entered_query=\" +\n        toOneLiner(job.address) +\n        \"&ac_index=0&propertyIndex=sold&bedFilter=&bathFilter=&propertyFilter=&display=for+sale&maxPrice=\"\n      );\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return isAddressValid(job.address);\n    },\n  },\n  houzz_link: {\n    title: \"Houzz\",\n    image: \"/assets/images/image-tools/houzz.090177e8.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://houzz.com/\" + getIntegrationLink(\"houzz\");\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return !_.isEmpty(getIntegrationLink(\"houzz\"));\n    },\n  },\n  home_advisor_link: {\n    title: \"Home Advisor\",\n    image: \"/assets/images/image-tools/home-advisor.cef530c8.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return getIntegrationLink(\"home_advisor\");\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return !_.isEmpty(getIntegrationLink(\"home_advisor\"));\n    },\n  },\n  angies_list_link: {\n    title: \"Angie's List\",\n    image: \"/assets/images/image-tools/angies-list.d9d503d0.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return getIntegrationLink(\"angies_list\");\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return !_.isEmpty(getIntegrationLink(\"angies_list\"));\n    },\n  },\n  gaf_quick_measure_link: {\n    title: \"GAF QuickMeasure\",\n    image: \"/assets/images/image-tools/gaf-quickmeasure.1cce6eec.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://eave.us\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  gaf_smart_money_link: {\n    title: \"GAF SmartMoney\",\n    image: \"/assets/images/image-tools/gaf-smart-money.6fee8391.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.payzer.com/Entry/Login\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  gaf_vhr_link: {\n    title: \"GAF Virtual Remodeler\",\n    image: \"/assets/images/image-tools/gaf-vhr.8e7970e9.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://virtualremodeler.gaf.com\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  gaf_vent_calc_link: {\n    title: \"GAF Attic Ventilation Calculator\",\n    image: \"/assets/images/image-tools/gaf-vent-calc.307968a7.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.gaf.com/en-us/for-professionals/tools/ventilation-calculator\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  greensky_link: {\n    title: \"GreenSky Financing\",\n    image: \"/assets/images/image-tools/greensky-tool.b944e2e1.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://portal.greenskycredit.com/MerchantLogin#stay\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  wellsfargo_link: {\n    title: \"Wells Fargo\",\n    image: \"/assets/images/image-tools/wellsfargo-link.add16f5c.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return getIntegrationLink(\"wells_fargo\");\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return !_.isEmpty(getIntegrationLink(\"wells_fargo\"));\n    },\n  },\n  homeguard: {\n    title: \"HomeGuard Windows & Doors\",\n    image: \"/assets/images/image-tools/homeguard-tool.f6cb5a7c.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"http://homeguard.renoworks.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  plygem_visualizer: {\n    title: \"PlyGem Visualizer\",\n    image: \"/assets/images/image-tools/plygem-visualizer.07457cdb.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://plygemcorp.chameleonpower.com/Visualizer.aspx\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  oc_design_eyeq: {\n    title: \"Owens Corning DESIGN EyeQ\",\n    image: \"/assets/images/image-tools/oc-design-eyeq.d1ba2eb1.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://roofvisualizer.owenscorning.com\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  gaf_vhr: {\n    title: \"GAF Virtual Remodeler\",\n    image: \"/assets/images/image-tools/gaf-vhr.8e7970e9.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://virtualremodeler.gaf.com\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  colorview: {\n    title: \"CertainTeed Colorview\",\n    image: \"/assets/images/image-tools/colorview.2ff6449d.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://colorview.certainteed.com\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  provia: {\n    title: \"ProVia EntryLink\",\n    image: \"/assets/images/image-tools/provia.d881f989.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      const portalID = getProviaToken().portal_id;\n      return `https://entrylink.provia.com/PortalLogin.aspx?PortalID=${portalID}`;\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return getProviaToken().portal;\n    },\n  },\n  provia_non_portal: {\n    title: \"ProVia EntryLink (Non-Portal)\",\n    image: \"/assets/images/image-tools/provia.d881f989.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://entrylink.provia.com/login.aspx\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return getProviaToken().non_portal;\n    },\n  },\n  sketchup: {\n    title: \"Sketchup\",\n    image: \"/assets/images/image-tools/sketchup.b207b481.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://app.sketchup.com/app?hl=en\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  global_transport_link: {\n    title: \"Global Transport VT\",\n    image: \"/assets/images/image-tools/global-transport.29f79afc.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://vt.globalpay.com/admin/login.aspx\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  sigler_online_link: {\n    title: \"Sigler Online\",\n    image: \"/assets/images/image-tools/sigler-online.72b50bc7.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.siglers.com/store/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  service_finance_link: {\n    title: \"Service Finance\",\n    image: \"/assets/images/image-tools/service-finance.9aff4bc2.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.svcfin.com\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  ami_design_showcase_siding: {\n    title: \"AMI Design Showcase: Preservation Siding\",\n    image: \"/assets/images/image-tools/ami-design-showcase.e5d2aced.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://sdspr.amidesignshowcases.com/app\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  ami_design_showcase_alside_window: {\n    title: \"AMI Design Showcase: Alside Windows\",\n    image: \"/assets/images/image-tools/ami-design-showcase.e5d2aced.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://wdsal.amidesignshowcases.com/app\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  ami_design_showcase_pres_window: {\n    title: \"AMI Design Showcase: Preservation Windows\",\n    image: \"/assets/images/image-tools/ami-design-showcase.e5d2aced.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://wdspr.amidesignshowcases.com/app\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  foundation_finance_dealer_link: {\n    title: \"Foundation Finance Company Dealer\",\n    image: \"/assets/images/image-tools/foundation-finance-company.6b85ed63.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://foundationfinance.com/dealer-login/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  foundation_finance_link: {\n    title: \"Foundation Finance Company\",\n    image: \"/assets/images/image-tools/foundation-finance-company.6b85ed63.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://sb7.compass-technologies.com:8158/k_dealer/f/104.html\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  advisar_link: {\n    title: \"Advisar\",\n    image: \"/assets/images/image-tools/advisar-link.eeae2a05.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.advisar.com/residential/login\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  square_d_link: {\n    title: \"Square D\",\n    image: \"/assets/images/image-tools/square-d-link.6eda3aa8.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://partner.schneider-electric.com/partners/Menu/Login\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  lp_smartside_visualizer: {\n    title: \"LP SmartSide Visualizer\",\n    image: \"/assets/images/image-tools/lp-smartside-link.bb300452.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://lp2.renoworks.com/#projectId=&userId=&open=samples&share=https://www.upsidetosmartside.com/explore-ideas/visualize-home/samples&planner=https://www.upsidetosmartside.com/explore-ideas/visualize-home&login=https://www.upsidetosmartside.com/wishlist/?lpwaction=visualizer&api=https://www.upsidetosmartside.com/sfs-webservice&whereToBuy=https://www.upsidetosmartside.com\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  lp_smartside_link: {\n    title: \"LP BuildSmart\",\n    image: \"/assets/images/image-tools/lp-smartside-link.bb300452.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://lpcorp.com/buildsmart\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  square_d_ezsel: {\n    title: \"Square D EZ Selector\",\n    image: \"/assets/images/image-tools/square-d-ez-selector.b7db522b.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://ezlist.schneider-electric.com/?prod=E2.D01A&subset=LC&lang=en_US&apiKey=dbfs1df383\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  hearth_financing_link: {\n    title: \"Hearth Financing\",\n    image: \"/assets/images/image-tools/hearth-financing-link.364c467f.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.gethearth.com/contractors/login\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  york_hvac_link: {\n    title: \"York HVAC\",\n    image: \"/assets/images/image-tools/york-link.a75a1604.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.upgnet.com/Site/_mem_bin/FormsLogin.asp\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  sighten_solar: {\n    title: \"Sighten Solar\",\n    image: \"/assets/images/image-tools/sighten-solar.3ef37e5d.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://engine.sighten.io/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  enerbank_link: {\n    title: \"EnerBank\",\n    image: \"/assets/images/image-tools/enerbank.12483ec2.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"http://www.enerbank.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  pella_portal: {\n    title: \"Contractor Program Portal Login\",\n    image: \"/assets/images/image-tools/pella-platinum.c06b8f5f.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"http://professional.pella.com/support/contractors\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  sunrise_configurator: {\n    title: \"Sunrise Windows\",\n    image: \"/assets/images/image-tools/sunrise-configurator.bc624e33.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.sunrisewindows.com/visualizer/sunrise_ui.html\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  royal_homeplay: {\n    title: \"HomePlay by Royal\",\n    image: \"/assets/images/image-tools/royal-homeplay.193e7c4d.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://homeplay.renoworks.com/#\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  sherwin_williams_colorsnap: {\n    title: \"Sherwin Williams COLORSNAP\",\n    image: \"/assets/images/image-tools/sherwin-williams-colorsnap.08613b9b.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.sherwin-williams.com/visualizer\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  iko_roof_viewer: {\n    title: \"IKO Roof Viewer TM\",\n    image: \"/assets/images/image-tools/iko-roof-viewer.ec37bd65.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://iko.chameleonpower.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  paragon_visualizer: {\n    title: \"Paragon Visualizer\",\n    image: \"/assets/images/image-tools/paragon-door-visualizer.d4a1f5a1.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://sunrise.renoworks.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  timbertech_worry_less: {\n    title: \"TimberTech: Worry Less\",\n    image: \"/assets/images/image-tools/timbertech-worry-less.5c2429d9.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.timbertech.com/imagine/stories/worry-less-about-your-deck-weathering-with-timbertech-decking\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  timbertech_deck_designer: {\n    title: \"TimberTech Deck Designer\",\n    image: \"/assets/images/image-tools/timbertech-deck-designer.f7c1365b.jpg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://deckdesigner.timbertech.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  lowes_deck_designer: {\n    title: \"Lowe's Deck Designer\",\n    image: \"/assets/images/image-tools/lowes-deck-designer.a17840f6.png\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://deckdesigner.lowes.com/\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  thermatru_design_your_door: {\n    title: \"ThermaTru Design Your Door\",\n    image: \"/assets/images/image-tools/therma-tru-doors.f3115ad7.jpeg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.thermatru.com/explore-products/design-your-door\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n  pella_lowes_product_designer: {\n    title: \"Pella Lowe's Product Designer\",\n    image: \"/assets/images/image-tools/pella-at-lowes.d7a83ac3.jpeg\",\n    paid: false,\n    link: (job: JobRecord, base_url: string) => {\n      return \"https://www.pellaatlowes.com/product-designer\";\n    },\n    visible: (job: JobRecord, navDisplay: boolean) => {\n      return true;\n    },\n  },\n};\n","import { currentJob } from \"app2/src/selectors/job.selectors\";\nimport * as React from \"react\";\nimport { Card } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { getToolConfig } from \"./tool.service\";\nimport { ToolRecord } from \"app2/src/records/Tool\";\nimport * as config from \"react-global-configuration\";\nimport { navDisplay as navDisplaySelector } from \"app2/src/selectors/components/common.selectors\";\nimport { useTracking } from \"react-tracking\";\nimport { RootState } from \"app2/src/reducers\";\nimport { replaceRecordValues } from \"app2/src/helpers/Record\";\n\nexport interface ToolCardProps {\n  toolKey?: string;\n  toolRecord?: ToolRecord;\n}\n\nexport const ToolCard: React.FC<ToolCardProps> = ({ toolKey, toolRecord }) => {\n  const { trackEvent } = useTracking();\n  const tool = getToolConfig(toolKey);\n  const job = useSelector(currentJob);\n  const navDisplay = useSelector((state: RootState) => navDisplaySelector(state));\n\n  if (toolKey && !tool.visible(job, navDisplay)) return null;\n\n  const handleClick = (e) => {\n    if (tool?.action) {\n      e.preventDefault();\n      tool.action(job);\n    }\n    trackEvent({\n      action: tool?.title || toolRecord?.name,\n      category: \"Tool\",\n      navDisplay: !navDisplay,\n      toolId: toolRecord?.id,\n    });\n  };\n\n  if (toolKey)\n    return (\n      <div className=\"tool-display\">\n        <Card className=\"rsf-card\">\n          <a href={tool?.link ? tool.link(job, config.get(\"APP_URL\")) : \"#\"} onClick={handleClick} target=\"_blank\">\n            <div className=\"text-center\">\n              <img src={tool.image} alt={tool.title} />\n            </div>\n            <h3>\n              {tool.title}\n              {\"  \"}\n              {tool.paid && <span>$</span>}\n            </h3>\n          </a>\n        </Card>\n      </div>\n    );\n\n  return (\n    <div className=\"tool-display\">\n      <Card className=\"rsf-card\" onClick={handleClick}>\n        <a href={replaceRecordValues(toolRecord?.link, job, \"job\")} target=\"_blank\">\n          <div className=\"text-center\">\n            {toolRecord?.brand_image?.file?.url && <img src={toolRecord.brand_image.file.url} alt={toolRecord.name} />}\n          </div>\n          <h3>{toolRecord.name}</h3>\n        </a>\n      </Card>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { JobTabTitle } from \"../JobTabTitle\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport * as toolActions from \"app2/src/reducers/org/tool.actions\";\nimport { currentOrgId, currentOrgPrefAcl } from \"app2/src/selectors/org.selectors\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { getOrgTools } from \"app2/src/selectors/tool.selectors\";\nimport { ToolCard } from \"./ToolCard\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { push } from \"connected-react-router/immutable\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { isAddressValid, isValidLatLon } from \"app2/src/helpers/Address\";\nimport SpinnerComponent from \"../../SpinnerComponent\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { TokenRecord } from \"app2/src/records/Token\";\n\nexport const ToolsTab: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n\n  // Selectors\n  const orgId = useSelector(currentOrgId);\n  const job: JobRecord = useSelector(currentJob);\n  const customTools = useSelector((state: RootState) => getOrgTools(state, { orgId }));\n  const aclTools = useSelector((state: RootState) => currentOrgPrefAcl(state, { path: [\"tools\"] }));\n  const proviaToken = useSelector((state: RootState) => token(state, { kind: \"provia\" })) as TokenRecord;\n\n  const address = job?.address;\n  const isAddressInvalid = !isAddressValid(address);\n  const isAddressNotGeocoded = !isValidLatLon(address);\n\n  // Methods\n  const goToAdress = () => {\n    const $rootScope: RsfRootScope = StoreRegistry.get(\"$rootScope\");\n    dispatch(push(`/jobs/${job.id}/info`));\n    $rootScope.$digest();\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    dispatch(tokenActions.AsyncActions.getToken(orgId, \"provia\"));\n    dispatch(toolActions.AsyncActions.listTools(orgId, job.id));\n  }, []);\n\n  return (\n    <Row>\n      <Col>\n        <JobTabTitle title=\"Tools\" />\n        <SpinnerComponent stateProperty={[\"tools\", \"byOrgId\", orgId, \"loading\"]} />\n        <Row>\n          <Col>\n            {(isAddressInvalid || isAddressNotGeocoded) && (\n              <div className=\"form-section blank-state\">\n                <img src=\"/assets/images/icons-large/tools.fea01226.png\" />\n                {isAddressInvalid && isAddressNotGeocoded && <h2>No valid address</h2>}\n                {isAddressInvalid && !isAddressNotGeocoded && (\n                  <h2>Address is not complete. Missing one of: Address 1, City, State</h2>\n                )}\n                {!isAddressInvalid && isAddressNotGeocoded && (\n                  <h2>Address has not been geocoded. Please refresh the page to get the latest information.</h2>\n                )}\n                <p>\n                  <span>Not all tools will be available until a complete address is provided </span>\n                  <span className=\"underline link\" onClick={goToAdress}>\n                    here\n                  </span>\n                  <span>.</span>\n                </p>\n              </div>\n            )}\n          </Col>\n        </Row>\n        <div className=\"d-flex flex-wrap\">\n          {aclTools?.map((tool) => {\n            if (typeof tool === \"number\") {\n              const toolRecord = customTools.find((t) => t.get(\"id\") === tool);\n\n              if (!toolRecord) return undefined;\n              return <ToolCard toolRecord={toolRecord} key={tool} />;\n            }\n            if (tool?.name === \"provia\") {\n              if (proviaToken.loading === false) return <ToolCard toolKey={tool} key={tool} />;\n            } else {\n              return <ToolCard toolKey={tool} key={tool} />;\n            }\n          })}\n        </div>\n      </Col>\n    </Row>\n  );\n};\n\nexport default ToolsTab;\n","import { selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { AsyncActions } from \"app2/src/reducers/estimate.actions\";\nimport { useTracking } from \"react-tracking\";\nimport { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\nimport { EmailMessageArgs, EmailMessageModal } from \"app2/src/components/Common/EmailMessageModal\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport { RootState } from \"app2/src/reducers\";\n\nexport const EmailOrderCsvModal: React.FC = () => {\n  // Selectors\n  const estimateId = useSelector(selectedEstimateId);\n  const path = [\"estimator\", \"order_csv_emails\"];\n  const initEmails = useSelector((state: RootState) => currentOrgPrefConfig(state, { path })) || \"\";\n\n  // Hooks\n  const dispatch = useDispatch();\n  const { goBack } = usePreviousPath();\n  const { trackEvent } = useTracking<any>({ category: \"Estimate\", estimate: estimateId });\n\n  // Methods\n  const close = () => {\n    goBack(\"/email_order_csv\");\n  };\n\n  const emailEstimate = (args: EmailMessageArgs) => {\n    trackEvent({ action: \"email order csv sent\" });\n    dispatch(AsyncActions.emailEstimate({ kind: \"email_csv\", csv_type: \"order\", ...args }));\n    close();\n  };\n\n  const cancel = () => {\n    trackEvent({ action: \"email order csv canceled\" });\n    close();\n  };\n\n  return (\n    <EmailMessageModal\n      cancel={cancel}\n      initEmail={initEmails}\n      emailMessage={emailEstimate}\n      title=\"Email Document (Order CSV)\"\n    />\n  );\n};\n","import * as React from \"react\";\nimport { Modal, ModalFooter } from \"react-bootstrap\";\nimport ButtonFooter from \"../../Common/ButtonFooter\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\nimport { useTracking } from \"react-tracking\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { selectedEstimateId } from \"app2/src/selectors/job.selectors\";\n\nexport const ManualTriggerModal: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { goBack } = usePreviousPath();\n  const estimateId = useSelector(selectedEstimateId);\n  const { trackEvent } = useTracking<any>({ category: \"Estimate\", estimate: estimateId });\n\n  // Methods\n  const close = () => {\n    goBack(\"/manual_trigger\");\n  };\n\n  const submit = () => {\n    dispatch(estimateActions.AsyncActions.manuallyTrigger(estimateId));\n    trackEvent({ action: \"manual trigger\" });\n    close();\n  };\n\n  return (\n    <Modal show={true} size=\"sm\">\n      <Modal.Header closeButton>\n        <Modal.Title>Manual Trigger</Modal.Title>\n      </Modal.Header>\n      <ModalFooter>\n        <ButtonFooter cancel={close} update={submit} saveText=\"OK\" />\n      </ModalFooter>\n    </Modal>\n  );\n};\n","import React from \"react\";\nimport { Form } from \"react-bootstrap\";\n\nexport const VGSTextInput = ({ id, label, errors }) => {\n  const isInvalid = errors?.[id]?.errorMessages?.[0];\n  return (\n    <Form.Group>\n      <Form.Label>{label}</Form.Label>\n      <div id={id} className={`form-control ${isInvalid ? \"error-border\" : \"\"}`} />\n      {isInvalid && <div className=\"has-error\">{isInvalid}</div>}\n    </Form.Group>\n  );\n};\n\nexport const VGSUploadInput = ({ id, label, errors }) => {\n  return (\n    <div style={{ marginBottom: \"16px\" }}>\n      <Form.Label>{label}</Form.Label>\n      <div id={id} className={`form-uploader ${errors?.[id]?.errorMessages?.[0] ? \"error-border\" : \"\"}`} />\n      {errors?.[id]?.errorMessages?.[0] && <div className=\"has-error\">{errors?.[id]?.errorMessages?.[0]}</div>}\n    </div>\n  );\n};\n\nconst VGSTextAreaInput = ({ id, label }) => {\n  return (\n    <Form.Group>\n      <Form.Label>{label}</Form.Label>\n      <div id={id} className=\"form-control-textarea\" />\n    </Form.Group>\n  );\n};\n\nconst VGSCheckboxInput = ({ id, label }) => {\n  return (\n    <div className=\"form-check form-check-inline\">\n      <div id={id} className=\"form-check-input\" />\n      <label className=\"form-check-label\">{label}</label>\n    </div>\n  );\n};\n","import { FormControl, Select } from \"@tberrysoln/rsf-form\";\nimport { us_states } from \"app/src/Common/StatesConstant\";\nimport React from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\n\ninterface AddressFormProps {\n  prefix: string;\n}\n\nexport const AddressForm: React.FC<AddressFormProps> = ({ prefix }) => {\n  return (\n    <>\n      <Row>\n        <Col>\n          <FormControl name={`${prefix}.line_1`} label=\"Address 1\" />\n        </Col>\n        <Col>\n          <FormControl name={`${prefix}.line_2`} label=\"Address 2\" />\n        </Col>\n      </Row>\n      <Row>\n        <Col xs={6}>\n          <FormControl name={`${prefix}.city`} label=\"City\" />\n        </Col>\n        <Col>\n          <Select name={`${prefix}.state`} label=\"State\">\n            <option value=\"\">Select</option>\n            {us_states.map((state) => (\n              <option key={state} value={state}>\n                {state}\n              </option>\n            ))}\n          </Select>\n        </Col>\n        <Col>\n          <FormControl name={`${prefix}.postal_code`} label=\"Zip Code\" />\n        </Col>\n      </Row>\n    </>\n  );\n};\n","import { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Actions as CommonActions } from \"app2/src/reducers/components/common.actions\";\nimport { Actions as RsfFormActions } from \"app2/src/reducers/rsfForm.actions\";\nimport { titleCaseString } from \"app2/src/services/string.service\";\nimport imageCompression, { Options } from \"browser-image-compression\";\nimport { List } from \"immutable\";\nimport React, { useEffect, useState } from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport Files from \"react-files\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\ninterface LicenseImageProps {\n  prefix: string;\n  name: string;\n  rootPath: (string | number)[];\n  className?: string;\n}\n\nexport const LicenseImage = ({ prefix, name, className, rootPath }: LicenseImageProps) => {\n  // Constants\n  const imageDataRootPath = [\"rsfForms\", \"byForm\", \"customFormImageData\", prefix];\n\n  // Hooks\n  const dispatch = useDispatch();\n\n  // State\n  const [fileName, setFileName] = useState(\"\");\n  const [isLoading, setIsLoading] = useState(false);\n\n  // Selectors\n  const imageData = useSelector((state: RootState) => state.getIn(imageDataRootPath));\n  const customFormRecord = useSelector((state: RootState) => state.getIn(rootPath));\n  const imageRequired = [\"INDIVIDUAL CREDIT\", \"JOINT CREDIT\"].includes(customFormRecord?.get(\"application_status\"));\n\n  // Methods\n  const onFilesChange = async (files: any) => {\n    const file = files[0];\n    setIsLoading(true);\n    try {\n      const base64 = await compressAndConvertToBase64(file, {\n        maxSizeMB: 0.1,\n        fileType: \"image/jpeg\",\n        useWebWorker: true,\n      });\n      setFileName(file.name);\n      updateImage(base64);\n      setIsLoading(false);\n    } catch (error) {\n      setIsLoading(false);\n      onFilesError(error);\n    }\n  };\n\n  const updateImage = (image: string) => {\n    dispatch(\n      RsfFormActions.update({\n        rootPath: imageDataRootPath,\n        name,\n        value: image ? List([image]) : null,\n      }),\n    );\n  };\n\n  const onFilesError = (error: any) => {\n    setFileName(\"\");\n    updateImage(null);\n    dispatch(CommonActions.flashAddAlert(FlashLevels.danger, \"There was an error uploading the file\"));\n    setIsLoading(false);\n  };\n\n  useEffect(() => {\n    return () => {\n      updateImage(null);\n    };\n  }, []);\n\n  return (\n    <div className={className}>\n      <Row>\n        <Col>\n          <div style={{ height: \"35px\" }} className=\"d-flex align-items-center\">\n            <Files\n              className=\"files-dropzone mr-2\"\n              onChange={onFilesChange}\n              onError={onFilesError}\n              accepts={[\"image/*\"]}\n              multiple={false}\n              maxFileSize={30000000}\n              minFileSize={0}\n              clickable>\n              <Button variant=\"primary\" disabled={isLoading}>\n                {isLoading ? \"Uploading...\" : `Upload ${titleCaseString(name)}`}\n              </Button>\n            </Files>\n            {fileName && <p className=\"align-items-center mb-0\">{fileName}</p>}\n          </div>\n          {!imageData?.get(name) && imageRequired && <div className=\"has-error mt-1\">Required</div>}\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\nconst compressAndConvertToBase64 = async (file: File, options: Options): Promise<string> => {\n  const compressedFile = await imageCompression(file, options);\n\n  // Convert to base64 and strip base64 prefix\n  return new Promise<string>((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => {\n      const base64 = reader.result.toString().split(\"base64,\")[1];\n      resolve(base64);\n    };\n    reader.onerror = (error) => reject(error);\n    reader.readAsDataURL(compressedFile);\n  });\n};\n","import { Check, FormControl, FormControlDate, Select } from \"@tberrysoln/rsf-form\";\nimport { VGSTextInput } from \"app2/src/components/JobTabs/InfoTab/CustomForm/Common\";\nimport { AddressForm } from \"app2/src/components/JobTabs/InfoTab/CustomForm/AddressForm\";\nimport React, { useEffect } from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useState } from \"react\";\nimport { checkRequired, composeValidators, email, required } from \"app2/src/helpers/FinalFormValidator\";\nimport { CustomFormRecord } from \"app2/src/components/JobTabs/InfoTab/CustomForm/CustomFormRecord\";\nimport { LicenseImage } from \"app2/src/components/JobTabs/InfoTab/CustomForm/LicenseImage\";\n\nconst css = {\n  color: \"#495057\",\n  fontFamily: '\"Roboto\", helvetica, sans-serif',\n  fontSize: \"14px\",\n  textTransform: \"uppercase\",\n};\n\ninterface ApplicantFormProps {\n  prefix: string;\n  vgsForm: any;\n  errors: any;\n  applicationStatus: string;\n  customFormRecord: CustomFormRecord;\n  rootPath: (string | number)[];\n}\n\nexport const ApplicantForm: React.FC<ApplicantFormProps> = ({\n  prefix,\n  vgsForm,\n  errors,\n  applicationStatus,\n  customFormRecord,\n  rootPath,\n}) => {\n  // State\n  const [fields, setFields] = useState<any>(null);\n  const [ssnVisible, setSSNVisible] = useState(true);\n\n  // Methods\n  const applicantValidate = prefix === \"applicant\" ? required : undefined;\n  const applicantEmailValidate = prefix === \"applicant\" ? composeValidators(required, email) : undefined;\n  const applicantDateValidate = prefix === \"applicant\" ? checkRequired : undefined;\n  const toggleSSNVisibility = () => {\n    fields[`${prefix}_ssn`].update({ hideValue: !ssnVisible });\n    setSSNVisible(!ssnVisible);\n  };\n\n  // Constants\n  const ssnName = `${prefix}_ssn`;\n  const dobName = `${prefix}_dob`;\n  const licenseNumberName = `${prefix}_license_number`;\n  const minDate = \"1900-01-01\";\n  const maxDate = new Date().toISOString().split(\"T\")[0];\n  const vgsValidations = {\n    [ssnName]: [\"required\", \"/.{11}/\"],\n    [dobName]: [\n      \"required\",\n      {\n        type: \"compareDate\",\n        params: {\n          field: maxDate,\n          function: \"less\",\n        },\n      },\n    ],\n    [licenseNumberName]: [\"required\"],\n  };\n\n  // Life Cycle\n  useEffect(() => {\n    const setupFields = {};\n\n    setupFields[ssnName] = vgsForm.field(`#${ssnName}`, {\n      name: ssnName,\n      type: \"ssn\",\n      hideValue: true,\n      validations: vgsValidations[ssnName],\n      css,\n    });\n    setupFields[dobName] = vgsForm.field(`#${dobName}`, {\n      name: dobName,\n      type: \"date\",\n      min: minDate,\n      max: maxDate,\n      validations: vgsValidations[dobName],\n      css,\n    });\n    setupFields[licenseNumberName] = vgsForm.field(`#${licenseNumberName}`, {\n      name: licenseNumberName,\n      maxLength: 30,\n      type: \"text\",\n      validations: vgsValidations[licenseNumberName],\n      css,\n    });\n    setFields(setupFields);\n  }, []);\n\n  useEffect(() => {\n    if (!fields) return;\n\n    if (prefix === \"co_applicant\") {\n      if ([\"INDIVIDUAL CREDIT\", \"INDIVIDUAL (REMOTE)\"].includes(applicationStatus)) {\n        Object.keys(fields).forEach((key) => {\n          fields[key].update({ validations: false });\n        });\n      } else {\n        Object.keys(fields).forEach((key) => {\n          fields[key].update({ validations: vgsValidations[key] });\n        });\n      }\n    }\n  }, [applicationStatus]);\n\n  return (\n    <>\n      <Row>\n        <Col>\n          <FormControl name={`${prefix}.first_name`} label=\"First Name\" validate={applicantValidate} />\n        </Col>\n        <Col xs={1}>\n          <FormControl name={`${prefix}.middle_initial`} label=\"Middle Initial\" />\n        </Col>\n        <Col>\n          <FormControl name={`${prefix}.last_name`} label=\"Last Name\" validate={applicantValidate} />\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          <VGSTextInput id={`${prefix}_ssn`} label=\"SSN\" errors={errors} />\n          <span\n            onClick={toggleSSNVisibility}\n            style={{\n              position: \"absolute\",\n              right: \"25px\",\n              top: \"50%\",\n              transform: \"translateY(-50%)\",\n              cursor: \"pointer\",\n              fontSize: \"18px\",\n            }}\n            title={ssnVisible ? \"Hide SSN\" : \"Show SSN\"}>\n            <i className={`fa ${ssnVisible ? \"fa-eye-slash\" : \"fa-eye\"}`} />\n          </span>\n        </Col>\n        <Col>\n          <VGSTextInput id={`${prefix}_dob`} label=\"Date of Birth\" errors={errors} />\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          {prefix === \"co_applicant\" && (\n            <Check name={`${prefix}.physical_address.same_as_applicant`} label=\"Same as Applicant's Address\" />\n          )}\n        </Col>\n      </Row>\n      {(prefix === \"applicant\" ||\n        (prefix === \"co_applicant\" && !customFormRecord?.getIn([prefix, \"physical_address\", \"same_as_applicant\"]))) && (\n        <>\n          <Row>\n            <Col>\n              <h5>Physical Address {prefix === \"applicant\" ? \"(Applicant)\" : \"(Co-Applicant)\"}</h5>\n              <AddressForm prefix={`${prefix}.physical_address`} />\n            </Col>\n          </Row>\n\n          <Row>\n            <Col>\n              <h5>Mailing Address {prefix === \"applicant\" ? \"(Applicant)\" : \"(Co-Applicant)\"}</h5>\n              <Check name={`${prefix}.mailing_address.same_as_physical`} label=\"Same as Physical Address\" />\n              {customFormRecord?.getIn([prefix, \"mailing_address\", \"same_as_physical\"]) ? null : (\n                <AddressForm prefix={`${prefix}.mailing_address`} />\n              )}\n            </Col>\n          </Row>\n        </>\n      )}\n      <Row>\n        <Col>\n          <h5>Contact Information {prefix === \"applicant\" ? \"(Applicant)\" : \"(Co-Applicant)\"}</h5>\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          <FormControl name={`${prefix}.phone`} label=\"Home Phone Number\" validate={applicantValidate} />\n          <FormControl name={`${prefix}.email`} label=\"Email Address\" validate={applicantEmailValidate} />\n        </Col>\n        <Col>\n          <VGSTextInput id={`${prefix}_license_number`} label=\"Valid Picture ID #\" errors={errors} />\n          <FormControlDate\n            name={`${prefix}.picture_id_issue_date`}\n            label=\"ID Issue Date\"\n            validate={applicantDateValidate as any}\n          />\n          <FormControlDate\n            name={`${prefix}.picture_id_expiration_date`}\n            label=\"ID Expiration Date\"\n            validate={applicantDateValidate as any}\n          />\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          <h5>Employment Information {prefix === \"applicant\" ? \"(Applicant)\" : \"(Co-Applicant)\"}</h5>\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          <FormControl name={`${prefix}.employer_name`} label=\"Employer\" validate={applicantValidate} />\n          <FormControl\n            name={`${prefix}.gross_monthly_income`}\n            label=\"Gross Monthly Income\"\n            validate={applicantValidate}\n            formControlProps={{ type: \"number\" }}\n            numberInputProps={{ min: 0 }}\n          />\n          <FormControlDate\n            name={`${prefix}.employed_start_date`}\n            label=\"Employed Since\"\n            validate={applicantDateValidate as any}\n          />\n        </Col>\n        <Col>\n          <FormControl name={`${prefix}.position`} label=\"Position\" validate={applicantValidate} />\n          <FormControl name={`${prefix}.employer_phone`} label=\"Employer Phone Number\" validate={applicantValidate} />\n        </Col>\n      </Row>\n      <Row>\n        <Col>\n          <Select\n            name={`${prefix}.less_than_2_years`}\n            label=\"At Previous Employer Less Than 2 Years?\"\n            validate={applicantValidate}>\n            <option value=\"\">SELECT</option>\n            <option value=\"YES\">YES</option>\n            <option value=\"NO\">NO</option>\n          </Select>\n        </Col>\n        <Col />\n      </Row>\n\n      {customFormRecord?.getIn([prefix, \"less_than_2_years\"]) === \"YES\" && (\n        <Row>\n          <Col>\n            <FormControl name={`${prefix}.previous_employer`} label=\"Previous Employer\" />\n          </Col>\n          <Col>\n            <FormControlDate name={`${prefix}.previous_employer_start_date`} label=\"From\" />\n            <FormControlDate name={`${prefix}.previous_employer_end_date`} label=\"To\" />\n          </Col>\n        </Row>\n      )}\n\n      <Row style={{ marginBottom: \"1rem\" }}>\n        <Col>\n          <h5>Additional Income {prefix === \"applicant\" ? \"(Applicant)\" : \"(Co-Applicant)\"}</h5>\n          <small>\n            *Alimony, child support or separate maintenance income need not be disclosed if you do not wish to have it\n            considered as a basis for paying this obligation.\n          </small>\n        </Col>\n      </Row>\n\n      <Row>\n        <Col>\n          <FormControl name={`${prefix}.additional_income_source`} label=\"Source\" />\n          <FormControl\n            name={`${prefix}.additional_income_amount`}\n            label=\"Amount\"\n            formControlProps={{ type: \"number\" }}\n            numberInputProps={{ min: 0 }}\n          />\n        </Col>\n        <Col>\n          <FormControlDate name={`${prefix}.additional_income_from`} label=\"From\" />\n        </Col>\n      </Row>\n\n      <Row>\n        <Col>\n          <h5>\n            Please attach photos of the front and back of your license. <br />\n            <small>Images must be in PNG or JPG format.</small>\n          </h5>\n        </Col>\n      </Row>\n      <Row style={{ marginBottom: \"16px\" }}>\n        <Col>\n          <LicenseImage className=\"mb-2\" prefix={prefix} name=\"license_image_front\" rootPath={rootPath} />\n          <LicenseImage prefix={prefix} name=\"license_image_back\" rootPath={rootPath} />\n        </Col>\n      </Row>\n    </>\n  );\n};\n","import { currentJob, currentJobId } from \"app2/src/selectors/job.selectors\";\nimport React, { useEffect, useState } from \"react\";\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { loadVGSCollect } from \"@vgs/collect-js\";\nimport { Check, FormControl, FormControlDate, RsfForm, Select } from \"@tberrysoln/rsf-form\";\nimport { RootState } from \"app2/src/reducers\";\nimport { checkRequired, composeValidators, email, required } from \"app2/src/helpers/FinalFormValidator\";\nimport { ApplicantForm } from \"app2/src/components/JobTabs/InfoTab/CustomForm/ApplicantForm\";\nimport { currentOrg } from \"app2/src/selectors/org.selectors\";\nimport { getFullName } from \"app2/src/records/UserRecord\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport DirtyWatcher from \"app2/src/components/Common/DirtyWatcher\";\nimport { Actions as CommonActions } from \"app2/src/reducers/components/common.actions\";\nimport { Actions as CustomFormActions } from \"app2/src/reducers/customForm.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport {\n  customFormTestData,\n  dabellaCustomFormToJSON,\n} from \"app2/src/components/JobTabs/InfoTab/CustomForm/CustomFormRecord\";\nimport { currentRefreshToken, currentToken } from \"app2/src/reducers/auth.selectors\";\nimport * as config from \"react-global-configuration\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { currentAccessUid } from \"app2/src/selectors/auth.selectors\";\nimport { currentJobApplicantCount } from \"app2/src/selectors/customForm.selectors\";\nimport { AsyncActions as CustomFormAsyncActions } from \"app2/src/reducers/customForm.actions\";\nimport { isCurrentPageLoading } from \"app2/src/selectors/pagination.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { IAuthService } from \"app2/src/helpers/Auth.service\";\nimport { useTracking } from \"react-tracking\";\n\nconst coApplicantRequiredFields = [\n  \"marital_status\",\n  \"us_citizen\",\n  \"first_name\",\n  \"last_name\",\n  \"phone\",\n  \"employer_name\",\n  \"gross_monthly_income\",\n  \"position\",\n  \"employer_phone\",\n  \"less_than_2_years\",\n];\n\nconst coApplicantDateRequiredFields = [\"employed_start_date\", \"picture_id_expiration_date\", \"picture_id_issue_date\"];\n\nconst addressRequiredFields = [\"line_1\", \"city\", \"state\", \"postal_code\"];\n\nexport const CustomForm = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"CustomForm\" });\n\n  // State\n  const [form, setForm] = useState(null);\n  const [errors, setErrors] = useState(null);\n  const [showError, setShowError] = useState(false);\n  const [submitButtonClicked, setSubmitButtonClicked] = useState(false);\n  const [isLoading, setIsLoading] = useState(false);\n  const [dirty, setDirty] = useState(true);\n\n  // Constants\n  const rootPath = [\"customForms\", \"byId\", 0];\n\n  // Selectors\n  const customFormRecord = useSelector((state: RootState) => state.getIn(rootPath));\n  const customFormImageData = useSelector((state: RootState) =>\n    state.getIn([\"rsfForms\", \"byForm\", \"customFormImageData\"]),\n  );\n  const jobId = useSelector(currentJobId);\n  const job = useSelector(currentJob);\n  const org = useSelector(currentOrg);\n  const token = useSelector(currentToken);\n  const currentAccess = useSelector(currentAccessUid);\n  const refreshToken = useSelector(currentRefreshToken);\n  const applicantCount = useSelector((state: RootState) => currentJobApplicantCount(state));\n  const pageLoading = useSelector((state: RootState) => isCurrentPageLoading(state, { modelName: \"customForms\" }));\n\n  // More Constants\n  const rep1User = job?.assignments?.first()?.user;\n  const rep2User = job?.additional_assignment?.user;\n  const rep1Name = rep1User ? getFullName(rep1User) : \"\";\n  const rep2Name = rep2User ? getFullName(rep2User) : \"\";\n\n  // Methods\n  const resetForm = () => {\n    dispatch(CustomFormActions.receiveCustomForm({}));\n  };\n\n  // Life Cycle\n  useEffect(() => {\n    dispatch(CustomFormAsyncActions.listCustomForms(jobId));\n    dispatch(\n      CustomFormActions.receiveCustomForm({\n        // ...customFormTestData, // Uncomment to allow quicker testing of the custom form\n        id: 0,\n        todays_date: new Date(),\n        market: org?.name,\n        dealer_name: org?.name,\n        rep_1: rep1Name,\n        rep_2: rep2Name,\n        customer_name: job?.customer_name,\n      }),\n    );\n\n    initializeVGSForm();\n  }, []);\n\n  // Methods\n  const initializeVGSForm = () => {\n    setIsLoading(true);\n    loadVGSCollect({\n      vaultId: config.get(\"VGS_VAULT_ID\"), // required\n      environment: config.get(\"VGS_ENVIRONMENT\"),\n      version: \"2.25.1\",\n    })\n      .then((collect) => {\n        const vgsForm = collect.init((state) => {\n          setErrors((errors) => {\n            if (errors) {\n              return state;\n            }\n            return null;\n          });\n        });\n\n        setForm(vgsForm);\n        setIsLoading(false);\n      })\n      .catch((e) => {\n        // script was not loaded\n        setForm({ loadingError: e });\n        setIsLoading(false);\n        dispatch(CommonActions.flashAddAlert(FlashLevels.danger, \"Please reload the page and try again.\"));\n        console.error(\"VGS Collect script was not loaded\", e);\n      });\n  };\n\n  const handleSubmit = async (e: any) => {\n    e.preventDefault();\n    trackEvent({ action: \"submit finance application\" });\n    setIsLoading(true);\n\n    const formData = dabellaCustomFormToJSON(customFormRecord);\n    const imageData = customFormImageData?.toJS();\n\n    if (customFormRecord?.get(\"application_status\") === \"JOINT CREDIT\") {\n      if (\n        !imageData?.applicant?.license_image_front ||\n        !imageData?.co_applicant?.license_image_front ||\n        !imageData?.applicant?.license_image_back ||\n        !imageData?.co_applicant?.license_image_back\n      ) {\n        dispatch(CommonActions.flashAddAlert(FlashLevels.danger, \"Images are required for this application.\"));\n        setIsLoading(false);\n        return;\n      }\n    } else if (customFormRecord?.get(\"application_status\") === \"INDIVIDUAL CREDIT\") {\n      if (!imageData?.applicant?.license_image_front || !imageData?.applicant?.license_image_back) {\n        dispatch(CommonActions.flashAddAlert(FlashLevels.danger, \"Images are required for this application.\"));\n        setIsLoading(false);\n        return;\n      }\n    }\n\n    const authService = StoreRegistry.get<IAuthService>(\"authService\");\n    let bearerToken = token;\n    try {\n      const response = await authService.refreshToken(refreshToken, true);\n      bearerToken = response.token;\n    } catch (error) {\n      console.error(\"error\", error);\n      dispatch(\n        CommonActions.flashAddAlert(\n          FlashLevels.danger,\n          \"Unable to refresh token. Please try again or contact support.\",\n        ),\n      );\n      return;\n    }\n\n    form.submit(\n      `/api/v1/jobs/${job?.id}/custom_forms`,\n      {\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${bearerToken}`,\n          \"x-rsf-auth\": currentAccess,\n        },\n        data: (formValues) => {\n          return {\n            custom_form: {\n              kind: \"pii_form\",\n              form_data: {\n                ...formData,\n                applicant: {\n                  ...formData.applicant,\n                  ssn: formValues.applicant_ssn,\n                  dob: formValues.applicant_dob,\n                  license_number: formValues.applicant_license_number,\n                  license_image_front: imageData?.applicant?.license_image_front,\n                  license_image_back: imageData?.applicant?.license_image_back,\n                },\n                co_applicant: {\n                  ...formData.co_applicant,\n                  ssn: formValues.co_applicant_ssn,\n                  dob: formValues.co_applicant_dob,\n                  license_number: formValues.co_applicant_license_number,\n                  license_image_front: imageData?.co_applicant?.license_image_front,\n                  license_image_back: imageData?.co_applicant?.license_image_back,\n                },\n              },\n            },\n          };\n        },\n      },\n      (status, data) => {\n        setIsLoading(false);\n\n        if (status === 201) {\n          setDirty(false);\n          trackEvent({ action: \"submit finance application success\" });\n          dispatch(CommonActions.flashAddAlert(FlashLevels.success, \"Finance Application submitted successfully.\"));\n          dispatch(push(`./custom_form/${data.custom_form.id}/signature_request`));\n        } else if (status === 419) {\n          const authService = StoreRegistry.get<IAuthService>(\"authService\");\n          authService\n            .refreshToken(refreshToken)\n            .then(() => {\n              handleSubmit(e);\n            })\n            .catch((error) => {\n              console.error(\"error\", error);\n              dispatch(push(\"/login\"));\n              dispatch(\n                CommonActions.flashAddAlert(\n                  FlashLevels.danger,\n                  \"An unexpected error occurred. Please try again or contact support.\",\n                ),\n              );\n            });\n        } else {\n          trackEvent({ action: \"submit finance application error\" });\n          dispatch(\n            CommonActions.flashAddAlert(\n              FlashLevels.danger,\n              \"An unexpected error occurred. Please try again or contact support.\",\n            ),\n          );\n        }\n      },\n      (error) => {\n        console.error(\"error\", error);\n        setIsLoading(false);\n        trackEvent({ action: \"submit finance application validation error\" });\n        dispatch(\n          CommonActions.flashAddAlert(\n            FlashLevels.danger,\n            \"Required fields are missing or invalid data was entered. Review the form and try again.\",\n          ),\n        );\n        // set errors in form to show which in the UI\n        setErrors(error);\n      },\n    );\n  };\n\n  const validateForm = (args) => {\n    const { name } = args;\n\n    if (name && !submitButtonClicked) {\n      return [];\n    }\n\n    let errors = [];\n    if (\n      customFormRecord?.get(\"product_roof\") ||\n      customFormRecord?.get(\"product_siding\") ||\n      customFormRecord?.get(\"product_gutters\") ||\n      customFormRecord?.get(\"product_windows\") ||\n      customFormRecord?.get(\"product_bath\")\n    ) {\n      setShowError(false);\n      errors = errors.concat([\n        { name: \"product_roof\" },\n        { name: \"product_siding\" },\n        { name: \"product_gutters\" },\n        { name: \"product_windows\" },\n        { name: \"product_bath\" },\n      ]);\n    } else {\n      setShowError(true);\n      errors = errors.concat([\n        { name: \"product_roof\", error: \" \" },\n        { name: \"product_siding\", error: \" \" },\n        { name: \"product_gutters\", error: \" \" },\n        { name: \"product_windows\", error: \" \" },\n        { name: \"product_bath\", error: \" \" },\n      ]);\n    }\n\n    if (applicantCount && applicantCount >= 5 && customFormRecord?.get(\"application_status\") === \"JOINT CREDIT\") {\n      errors.push({\n        name: \"application_status\",\n        error:\n          \"You're unable to create a Joint finance application because you've exceeded the maximum number of applicants.\",\n      });\n    } else {\n      errors.push({\n        name: \"application_status\",\n      });\n    }\n\n    if (customFormRecord?.get(\"application_status\") === \"JOINT CREDIT\") {\n      errors.push({\n        name: \"co_applicant.email\",\n        error: composeValidators(required, email)(customFormRecord?.getIn([\"co_applicant\", \"email\"])),\n      });\n      coApplicantRequiredFields.forEach((field) => {\n        errors.push({\n          name: `co_applicant.${field}`,\n          error: required(customFormRecord?.getIn([\"co_applicant\", field])),\n        });\n      });\n      coApplicantDateRequiredFields.forEach((field) => {\n        errors.push({\n          name: `co_applicant.${field}`,\n          error: checkRequired(customFormRecord?.getIn([\"co_applicant\", field])),\n        });\n      });\n      if (\n        customFormRecord?.getIn([\"co_applicant\", \"mailing_address\", \"same_as_physical\"]) ||\n        customFormRecord?.getIn([\"co_applicant\", \"physical_address\", \"same_as_applicant\"])\n      ) {\n        addressRequiredFields.forEach((subField) => {\n          errors.push({\n            name: `co_applicant.physical_address.${subField}`,\n          });\n        });\n      } else {\n        addressRequiredFields.forEach((subField) => {\n          errors.push({\n            name: `co_applicant.physical_address.${subField}`,\n            error: required(customFormRecord?.getIn([\"co_applicant\", \"physical_address\", subField])),\n          });\n        });\n      }\n      if (\n        customFormRecord?.getIn([\"co_applicant\", \"mailing_address\", \"same_as_physical\"]) ||\n        customFormRecord?.getIn([\"co_applicant\", \"physical_address\", \"same_as_applicant\"])\n      ) {\n        addressRequiredFields.forEach((subField) => {\n          errors.push({\n            name: `co_applicant.mailing_address.${subField}`,\n          });\n        });\n      } else {\n        addressRequiredFields.forEach((subField) => {\n          errors.push({\n            name: `co_applicant.mailing_address.${subField}`,\n            error: required(customFormRecord?.getIn([\"co_applicant\", \"mailing_address\", subField])),\n          });\n        });\n      }\n    } else {\n      errors.push({\n        name: \"co_applicant.email\",\n      });\n      coApplicantRequiredFields.forEach((field) => {\n        errors.push({\n          name: `co_applicant.${field}`,\n        });\n      });\n      coApplicantDateRequiredFields.forEach((field) => {\n        errors.push({\n          name: `co_applicant.${field}`,\n        });\n      });\n      addressRequiredFields.forEach((subField) => {\n        errors.push({\n          name: `co_applicant.physical_address.${subField}`,\n        });\n      });\n      addressRequiredFields.forEach((subField) => {\n        errors.push({\n          name: `co_applicant.mailing_address.${subField}`,\n        });\n      });\n    }\n\n    addressRequiredFields.forEach((subField) => {\n      errors.push({\n        name: `applicant.physical_address.${subField}`,\n        error: required(customFormRecord?.getIn([\"applicant\", \"physical_address\", subField])),\n      });\n    });\n\n    if (customFormRecord?.getIn([\"applicant\", \"mailing_address\", \"same_as_physical\"])) {\n      addressRequiredFields.forEach((subField) => {\n        errors.push({\n          name: `applicant.mailing_address.${subField}`,\n        });\n      });\n    } else {\n      addressRequiredFields.forEach((subField) => {\n        errors.push({\n          name: `applicant.mailing_address.${subField}`,\n          error: required(customFormRecord?.getIn([\"applicant\", \"mailing_address\", subField])),\n        });\n      });\n    }\n\n    if (customFormRecord?.get(\"property_second_mortgage\") === \"YES\") {\n      errors = errors.concat([\n        {\n          name: \"property_second_mortgage_payment\",\n          error: required(customFormRecord?.get(\"property_second_mortgage_payment\")),\n        },\n        {\n          name: \"property_second_mortgage_balance\",\n          error: required(customFormRecord?.get(\"property_second_mortgage_balance\")),\n        },\n      ]);\n    } else {\n      errors = errors.concat([\n        { name: \"property_second_mortgage_payment\" },\n        { name: \"property_second_mortgage_balance\" },\n      ]);\n    }\n\n    if (customFormRecord?.get(\"plan\") === \"STANDARD\") {\n      errors = errors.concat([\n        { name: \"standard_apr\", error: required(customFormRecord?.get(\"standard_apr\")) },\n        { name: \"standard_term\", error: required(customFormRecord?.get(\"standard_term\")) },\n        { name: \"deferred_term\" },\n      ]);\n    }\n\n    if (customFormRecord?.get(\"plan\") === \"DEFERRED\") {\n      errors = errors.concat([\n        { name: \"standard_apr\" },\n        { name: \"standard_term\" },\n        { name: \"deferred_term\", error: required(customFormRecord?.get(\"deferred_term\")) },\n      ]);\n    }\n\n    return errors;\n  };\n\n  if (!form || pageLoading) {\n    return <SpinnerComponent localProperty={true} />;\n  }\n\n  if (form.loadingError) {\n    return (\n      <div>\n        <p>Error loading form</p>\n        <p>{form.loadingError}</p>\n      </div>\n    );\n  }\n\n  if (!Acl.can(\"create\", \"custom_form\")) {\n    return <div>You are not authorized to create a custom form</div>;\n  }\n\n  if (applicantCount && applicantCount >= 6) {\n    return (\n      <div>You're unable to create a finance application because you've exceeded the maximum number of applicants.</div>\n    );\n  }\n\n  return (\n    <div className=\"vgs-form\">\n      <SpinnerComponent localProperty={isLoading} />\n      <DirtyWatcher check={() => dirty} reset={resetForm} reactRouter />\n      <RsfForm\n        onSubmit={(e) => handleSubmit(e)}\n        rootPath={rootPath}\n        updateFormReducer={CustomFormActions.updateDabellaForm}\n        validate={validateForm}>\n        <Row>\n          <Col>\n            <h2>Finance Request</h2>\n          </Col>\n        </Row>\n        <Row style={{ marginBottom: \"1rem\" }}>\n          <Col>\n            <Select name=\"application_status\" label=\"I am applying for\">\n              {!customFormRecord?.get(\"application_status\") && <option value=\"\">SELECT</option>}\n              <option value=\"INDIVIDUAL CREDIT\">INDIVIDUAL CREDIT</option>\n              <option value=\"JOINT CREDIT\">JOINT CREDIT</option>\n              <option value=\"INDIVIDUAL (REMOTE)\">INDIVIDUAL (REMOTE)</option>\n            </Select>\n            <small>\n              If the collateral for your loan has more than one legal or registered owner, we will require the signature\n              of all non-applicant owners to secure our interest in the collateral.\n            </small>\n          </Col>\n          <Col />\n        </Row>\n        <Row>\n          <Col>\n            <FormControlDate name=\"todays_date\" label=\"Date\" validate={checkRequired as any} />\n            <FormControl name=\"rep_1\" label=\"Rep 1\" validate={required} />\n          </Col>\n          <Col>\n            <FormControl name=\"market\" label=\"Market\" validate={required} />\n            <FormControl name=\"rep_2\" label=\"Rep 2\" />\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <h2>Customer Information</h2>\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <FormControl name=\"customer_name\" label=\"Customer Name\" validate={required} />\n          </Col>\n          <Col>\n            <div className=\"products-container\">\n              <Form.Label className=\"products-label\">Products</Form.Label>\n              <br />\n              <Row>\n                <Col>\n                  <Check name=\"product_roof\" label=\"Roof\" />\n                </Col>\n                <Col>\n                  <Check name=\"product_siding\" label=\"Siding\" />\n                </Col>\n                <Col>\n                  <Check name=\"product_gutters\" label=\"Gutters\" />\n                </Col>\n                <Col>\n                  <Check name=\"product_windows\" label=\"Windows\" />\n                </Col>\n                <Col>\n                  <Check name=\"product_bath\" label=\"Bath\" />\n                </Col>\n              </Row>\n              {showError && <div className=\"has-error\">Select a product</div>}\n            </div>\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <Select name=\"proof_of_income\" label=\"Proof of Income\" validate={required}>\n              <option value=\"\">Select</option>\n              <option value=\"YES\">Yes</option>\n              <option value=\"NO\">No</option>\n            </Select>\n          </Col>\n          <Col>\n            <FormControl name=\"county\" label=\"County\" validate={required} />\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <FormControl\n              name=\"deposit\"\n              label=\"Deposit\"\n              formControlProps={{ type: \"number\" }}\n              numberInputProps={{ min: 0 }}\n              validate={required}\n            />\n          </Col>\n          <Col>\n            <FormControl\n              name=\"estimated_payment\"\n              label=\"Estimated Payment\"\n              formControlProps={{ type: \"number\" }}\n              numberInputProps={{ min: 0 }}\n              validate={required}\n            />\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <Select name=\"credit_select\" label=\"How is their credit?\" validate={required}>\n              <option value=\"\">SELECT CREDIT</option>\n              <option value=\"EXCELLENT\">EXCELLENT</option>\n              <option value=\"GOOD\">GOOD</option>\n              <option value=\"FAIR\">FAIR</option>\n              <option value=\"POOR\">POOR</option>\n            </Select>\n          </Col>\n          <Col>\n            <FormControl\n              name=\"credit_score\"\n              label=\"Score\"\n              formControlProps={{ type: \"number\" }}\n              numberInputProps={{ min: 0, max: 850 }}\n              validate={required}\n            />\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <Form.Label className=\"products-label\">Information for Finance</Form.Label>\n            <FormControl\n              as=\"textarea\"\n              name=\"finance_information\"\n              label=\"Additional Income? Own Property? Lender? BK? CO-APP?\"\n            />\n          </Col>\n          <Col></Col>\n        </Row>\n        {[\"INDIVIDUAL CREDIT\", \"JOINT CREDIT\"].includes(customFormRecord?.get(\"application_status\")) && (\n          <>\n            <Row>\n              <Col>\n                <h2>Choose One Plan</h2>\n              </Col>\n            </Row>\n            <Row>\n              <Col>\n                <Select name=\"plan\" label=\"Plan\" validate={required}>\n                  <option value=\"\">SELECT A PLAN</option>\n                  <option value=\"STANDARD\">STANDARD</option>\n                  <option value=\"DEFERRED\">DEFERRED</option>\n                </Select>\n                {customFormRecord?.get(\"plan\") === \"STANDARD\" && (\n                  <>\n                    <Select name=\"standard_apr\" label=\"APR\">\n                      <option value=\"\">SELECT APR</option>\n                      <option value=\"9.99\">9.99%</option>\n                      <option value=\"10.99\">10.99%</option>\n                      <option value=\"11.99\">11.99%</option>\n                      <option value=\"12.99\">12.99%</option>\n                      <option value=\"15.49\">15.49%</option>\n                    </Select>\n                    <Select name=\"standard_term\" label=\"Term\">\n                      <option value=\"\">SELECT A TERM</option>\n                      <option value=\"36\">36 Months</option>\n                      <option value=\"60\">60 Months</option>\n                      <option value=\"84\">84 Months</option>\n                      <option value=\"120\">120 Months</option>\n                      <option value=\"144\">144 Months</option>\n                      <option value=\"180\">180 Months</option>\n                      <option value=\"240\">240 Months</option>\n                    </Select>\n                  </>\n                )}\n\n                {customFormRecord?.get(\"plan\") === \"DEFERRED\" && (\n                  <Select name=\"deferred_term\" label=\"Term\">\n                    <option value=\"\">SELECT A TERM</option>\n                    <option value=\"3\">3 Months Deferred</option>\n                    <option value=\"6\">6 Months Deferred</option>\n                    <option value=\"12\">12 Months Deferred</option>\n                    <option value=\"18\">18 Months Deferred</option>\n                    <option value=\"24\">24 Months Deferred</option>\n                  </Select>\n                )}\n              </Col>\n              <Col>\n                <FormControl as=\"textarea\" name=\"special_plan\" label=\"Special Plan\" />\n              </Col>\n            </Row>\n          </>\n        )}\n        <Row>\n          <Col>\n            <h3>Application for Credit</h3>\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <h4>Property Information</h4>\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <FormControl\n              name=\"property_payment_rent\"\n              label=\"Mo. Payment/Rent\"\n              formControlProps={{ type: \"number\" }}\n              numberInputProps={{ min: 0 }}\n              validate={required}\n            />\n            <FormControl\n              name=\"property_balance_owed\"\n              label=\"Balance Owed\"\n              formControlProps={{ type: \"number\" }}\n              numberInputProps={{ min: 0 }}\n              validate={required}\n            />\n            <FormControl\n              name=\"property_market_value\"\n              label=\"Market Value\"\n              formControlProps={{ type: \"number\" }}\n              numberInputProps={{ min: 0 }}\n              validate={required}\n            />\n            <FormControlDate name=\"property_purchase_date\" label=\"Purchase Date\" validate={checkRequired as any} />\n          </Col>\n          <Col>\n            <Select name=\"property_home_type\" label=\"Home Type\" validate={required}>\n              <option value=\"\">SELECT</option>\n              <option value=\"1-4 FAMILY\">1-4 FAMILY</option>\n              <option value=\"CONDO/TOWNHOME\">CONDO/TOWNHOME</option>\n              <option value=\"MANUFACTURED HOME\">MANUFACTURED</option>\n              <option value=\"MULTI-UNIT\">MULTI-UNIT</option>\n            </Select>\n            <Select name=\"property_primary_residence\" label=\"Is this your primary residence?\" validate={required}>\n              <option value=\"\">SELECT</option>\n              <option value=\"YES\">YES</option>\n              <option value=\"NO\">NO</option>\n            </Select>\n            <Select name=\"property_owner\" label=\"Do you own this property?\" validate={required}>\n              <option value=\"\">SELECT</option>\n              <option value=\"YES\">YES</option>\n              <option value=\"NO\">NO</option>\n            </Select>\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            <Select name=\"property_second_mortgage\" label=\"Do you have a 2nd Mortgage?\" validate={required}>\n              <option value=\"\">SELECT</option>\n              <option value=\"YES\">YES</option>\n              <option value=\"NO\">NO</option>\n            </Select>\n          </Col>\n          <Col>\n            {customFormRecord?.get(\"property_second_mortgage\") === \"YES\" && (\n              <>\n                <FormControl\n                  name=\"property_second_mortgage_payment\"\n                  label=\"Monthly Payment\"\n                  formControlProps={{ type: \"number\" }}\n                  numberInputProps={{ min: 0 }}\n                />\n                <FormControl\n                  name=\"property_second_mortgage_balance\"\n                  label=\"Balance Owed\"\n                  formControlProps={{ type: \"number\" }}\n                  numberInputProps={{ min: 0 }}\n                />\n              </>\n            )}\n          </Col>\n        </Row>\n        {[\"INDIVIDUAL CREDIT\", \"JOINT CREDIT\", \"INDIVIDUAL (REMOTE)\"].includes(\n          customFormRecord?.get(\"application_status\"),\n        ) && (\n          <>\n            <Row>\n              <Col>\n                <h4>Status</h4>\n              </Col>\n            </Row>\n            <Row>\n              <Col>\n                <Select name=\"applicant.marital_status\" label=\"Applicant's Marital Status\" validate={required}>\n                  <option value=\"\">SELECT</option>\n                  <option value=\"MARRIED\">MARRIED</option>\n                  <option value=\"UNMARRIED\">UNMARRIED</option>\n                  <option value=\"SEPARATED\">SEPARATED</option>\n                  <option value=\"WIDOWED\">WIDOWED</option>\n                </Select>\n                <Select name=\"applicant.us_citizen\" label=\"Applicant is a U.S. Citizen?\" validate={required}>\n                  <option value=\"\">SELECT</option>\n                  <option value=\"YES\">YES</option>\n                  <option value=\"NO\">NO</option>\n                </Select>\n              </Col>\n              <Col>\n                {customFormRecord?.get(\"application_status\") === \"JOINT CREDIT\" && (\n                  <>\n                    <Select name=\"co_applicant.marital_status\" label=\"Co-Applicant's Marital Status\">\n                      <option value=\"\">SELECT</option>\n                      <option value=\"MARRIED\">MARRIED</option>\n                      <option value=\"UNMARRIED\">UNMARRIED</option>\n                      <option value=\"SEPARATED\">SEPARATED</option>\n                      <option value=\"WIDOWED\">WIDOWED</option>\n                    </Select>\n                    <Select name=\"co_applicant.us_citizen\" label=\"Co-Applicant is a U.S. Citizen?\">\n                      <option value=\"\">SELECT</option>\n                      <option value=\"YES\">YES</option>\n                      <option value=\"NO\">NO</option>\n                    </Select>\n                  </>\n                )}\n              </Col>\n            </Row>\n          </>\n        )}\n        <div style={{ display: customFormRecord?.get(\"application_status\") ? \"block\" : \"none\" }}>\n          <Row>\n            <Col>\n              <h2>Applicant Information</h2>\n            </Col>\n          </Row>\n          <ApplicantForm\n            prefix=\"applicant\"\n            rootPath={rootPath}\n            vgsForm={form}\n            errors={errors}\n            applicationStatus={customFormRecord?.get(\"application_status\")}\n            customFormRecord={customFormRecord}\n          />\n          <div style={{ display: customFormRecord?.get(\"application_status\") === \"JOINT CREDIT\" ? \"block\" : \"none\" }}>\n            <Row>\n              <Col>\n                <h2>Co-Applicant Information</h2>\n              </Col>\n            </Row>\n            <ApplicantForm\n              prefix=\"co_applicant\"\n              rootPath={rootPath}\n              vgsForm={form}\n              errors={errors}\n              applicationStatus={customFormRecord?.get(\"application_status\")}\n              customFormRecord={customFormRecord}\n            />\n          </div>\n        </div>\n        <Row style={{ marginBottom: \"1rem\" }}>\n          <Col>\n            <small>\n              <b>USA PATRIOT ACT</b> - IMPORTANT INFORMATION ABOUT PROCEDURES FOR OPENING A NEW ACCOUNT To help the\n              government fight the funding of terrorism and money laundering activities, federal law requires all\n              financial institutions to obtain, verify, and record information that identifies each person who opens an\n              account. What this means for you: a) When you open an account, we will ask for your name, address, date of\n              birth, and other information that will allow us to identify you; b) We may also ask to see your driver's\n              license or other identifying documents.\n            </small>\n          </Col>\n        </Row>\n        <Row style={{ marginTop: \"1rem\", marginBottom: \"10rem\" }}>\n          <Col>\n            <div className=\"pull-right\">\n              <Button type=\"submit\" onClick={() => setSubmitButtonClicked(true)}>\n                Submit\n              </Button>\n            </div>\n          </Col>\n        </Row>\n      </RsfForm>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport SaveablePdfDisplay from \"app2/src/components/Pdf/SaveablePdfDisplay\";\nimport { Context } from \"app2/src/components/SignatureRequest/Context\";\nimport { document as combinedDoc } from \"app2/src/selectors/document.selectors\";\nimport { currentSignedDocument as currentSignedDocSelector } from \"app2/src/selectors/signedDocument.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { currentOrgPrefAcl } from \"app2/src/selectors/org.selectors\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport const ReviewSignatureRequest: React.FunctionComponent = () => {\n  // Selectors\n  const documentAcl = useSelector((s: RootState) => currentOrgPrefAcl(s, { path: [\"document\"] }));\n\n  // Constants\n  const enforceRequiredSignableDoc = documentAcl?.includes(\"enforce_required_signable_doc\") || false;\n\n  // State\n  const [requiredInitialized, setRequiredInitialized] = React.useState(false);\n  const [requiredFieldsFilled, setRequiredFieldsFilled] = React.useState(!enforceRequiredSignableDoc);\n\n  const { dispatch: contextDispatch, job } = React.useContext(Context);\n\n  const currentSignedDocument = useSelector(currentSignedDocSelector);\n  const document = useSelector((s: RootState) =>\n    combinedDoc(s, { documentId: currentSignedDocument?.document_id || -1 }),\n  );\n\n  // Methods\n  const modifyDoc = (isModified: boolean, getFile: () => Promise<DocumentRecord>, requiredPdfFieldsFilled: boolean) => {\n    if (enforceRequiredSignableDoc) {\n      setRequiredFieldsFilled(requiredPdfFieldsFilled);\n      if (!requiredInitialized) {\n        setRequiredInitialized(true);\n      }\n    }\n    contextDispatch(\"modifyDoc\", { isModified: isModified, getModifiedFile: getFile });\n  };\n\n  const handleNext = () => {\n    if (requiredFieldsFilled) {\n      contextDispatch(\"validate\");\n    } else {\n      let message = \"\";\n      if (requiredInitialized) {\n        message =\n          \"Some required fields are missing in the PDF. Please review and complete all required fields before proceeding.\";\n      } else {\n        message = \"Please review the document below before sending for signature.\";\n      }\n      contextDispatch(\"flashAddAlert\", {\n        message,\n        type: FlashLevels.danger,\n      });\n    }\n  };\n\n  if (!document || !document?.file?.url) return <SpinnerComponent localProperty={true} />;\n\n  return (\n    <div>\n      <Modal.Header closeButton>\n        <h3>Review Signature Request</h3>\n      </Modal.Header>\n\n      <Modal.Body className=\"overflow-hidden document-pdf\">\n        <p>Please review the document below before sending for signature.</p>\n        <div className=\"d-flex align-items-center justify-content-center\">\n          <SaveablePdfDisplay\n            pdfUrl={document.file.url}\n            job={job}\n            documentName={document.file.filename}\n            modifyDoc={modifyDoc}\n          />\n        </div>\n      </Modal.Body>\n\n      <Modal.Footer>\n        <div className=\"button-footer d-flex justify-content-between w-100 flex-md-row-reverse\">\n          <div className=\"right-footer-buttons\">\n            <Button variant=\"save\" type=\"submit\" onClick={handleNext}>\n              Next\n            </Button>\n          </div>\n          <div className=\"left-footer-buttons\">\n            <Button variant=\"cancel\" onClick={() => contextDispatch(\"close\", { modalType: \"\", destroy: true })}>\n              Cancel\n            </Button>\n          </div>\n        </div>\n      </Modal.Footer>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { useCallback, useState, useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { push, replace } from \"connected-react-router/immutable\";\nimport { Context, ContextRecord, SignatureAction } from \"app2/src/components/SignatureRequest/Context\";\nimport { List } from \"immutable\";\nimport { onSortEnd } from \"app2/src/helpers/Record\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport { SignatureRequestModal } from \"app2/src/components/SignatureRequest/SignatureRequestModal\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\nimport * as signedDocumentActions from \"app2/src/reducers/signedDocument.actions\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { currentJob as currentJobSelector } from \"app2/src/selectors/job.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { document as combinedDoc } from \"app2/src/selectors/document.selectors\";\nimport { currentSignedDocument as currentSignedDocSelector } from \"app2/src/selectors/signedDocument.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { Nullable } from \"app2/src/records\";\nimport { useTracking } from \"react-tracking\";\nimport { RootState } from \"app2/src/reducers\";\nimport { SignatureConfiguration } from \"app2/src/components/SignatureRequest/SignatureConfiguration\";\nimport { useParams } from \"react-router-dom\";\nimport { DateFormat } from \"app2/src/helpers/Format\";\nimport { ReviewSignatureRequest } from \"./ReviewSignatureRequest\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\n\nexport type ViewStates = \"review\" | \"configuration\" | \"signing\";\n\nexport const CustomFormSignatureRequest: React.FunctionComponent = () => {\n  // hooks\n  const dispatch: RootDispatchType = useDispatch();\n  const { trackEvent } = useTracking();\n  const { customFormId } = useParams<{ customFormId: string }>();\n\n  // states\n  const [documentIds, setDocumentIds] = useState(List<number>());\n  const [requestName, setRequestName] = useState(\"\");\n  const [downloading, setDownloading] = useState(false);\n  const [modified, setModified] = useState(false);\n  const [viewState, setViewState] = useState<ViewStates>(\"review\");\n  const downloadRef = React.useRef<Nullable<() => Promise<DocumentRecord>>>(null);\n  // For analytics only\n  const [documentNameChanged, setDocumentNameChanged] = useState(false);\n\n  // selectors\n  const currentSignedDocument = useSelector(currentSignedDocSelector);\n  const sdDocument: DocumentRecord = useSelector((s: RootState) =>\n    combinedDoc(s, { documentId: currentSignedDocument?.document_id || -1 }),\n  );\n\n  const path = useSelector(pathname);\n  const job = useSelector(currentJobSelector);\n  const orgId = useSelector((s: RootState) => currentOrgId(s));\n\n  // useEffect\n  useEffect(() => {\n    resetSignedDocument();\n    dispatch(documentActions.AsyncActions.createCustomFormDocument(customFormId));\n  }, []);\n\n  useEffect(() => {\n    if (!currentSignedDocument) return;\n    if (currentSignedDocument.validation_status === null) return;\n\n    if (currentSignedDocument.validation_status === 422) {\n      close(\"view\", false);\n    }\n  }, [currentSignedDocument]);\n\n  useEffect(() => {\n    if (viewState === \"signing\" && currentSignedDocument.id > 0) {\n      const prevPath = path.split(\"/info\")[0];\n      dispatch(push(`${prevPath}/signatures/signable_documents/signing/${currentSignedDocument.id}`));\n    }\n  }, [currentSignedDocument, viewState]);\n\n  const resetSignedDocument = () => {\n    dispatch(signedDocumentActions.Actions.setCurrentSignedDocumentId(-1));\n    dispatch(\n      signedDocumentActions.Actions.receiveDocument({\n        id: -1,\n        document_id: -1,\n        metadata: { custom_form_id: customFormId },\n      }),\n    );\n  };\n\n  const back = (screen) => {\n    setDownloading(true);\n    switch (screen) {\n      case \"viewDocument\":\n        setModified(false);\n        downloadRef.current = null;\n        setViewState(\"review\");\n        break;\n      case \"configureSigners\":\n        setViewState(\"configuration\");\n        break;\n    }\n    setDownloading(false);\n  };\n\n  const close = async (modalType: string, destroy = false) => {\n    setDownloading(true);\n    if (destroy === true) {\n      await dispatch(documentActions.AsyncActions.deleteDocument(sdDocument));\n    }\n\n    resetSignedDocument();\n    setViewState(\"review\");\n    setModified(false);\n    setDownloading(false);\n\n    dispatch(push(`/jobs/${job.id}/info`));\n    const $state = StoreRegistry.get<ng.ui.IStateService>(\"$state\");\n    $state.go(\"jobs.info\", { jobId: job.id });\n  };\n\n  const validate = async () => {\n    let modifiedDoc: DocumentRecord;\n    if (modified) {\n      modifiedDoc = await downloadRef.current();\n      dispatch(documentActions.AsyncActions.deleteDocument(sdDocument));\n    }\n    setDownloading(true);\n\n    await dispatch(\n      signedDocumentActions.AsyncActions.validateSignedDocument(!modifiedDoc ? sdDocument : modifiedDoc, modified),\n    );\n    setViewState(\"configuration\");\n    setDownloading(false);\n  };\n\n  const combineDocuments = async () => {\n    setDownloading(true);\n\n    try {\n      await dispatch(signedDocumentActions.AsyncActions.combineDocument(documentIds, requestName, job.id));\n      setViewState(\"review\");\n    } finally {\n      setDownloading(false);\n    }\n  };\n\n  const modifyDoc = useCallback((isModified: boolean, getModifiedFile: () => Promise<DocumentRecord>) => {\n    setModified(isModified);\n    downloadRef.current = getModifiedFile;\n  }, []);\n\n  const handleSubmit = async (event) => {\n    let notify = false;\n    let message = \"\";\n\n    setDownloading(true);\n    if (event?.nativeEvent?.submitter?.name === \"email\") {\n      notify = true;\n      message = (document.getElementById(\"message\") as HTMLInputElement).value;\n    }\n\n    const documentName = \"Finance Application - \" + DateFormat(new Date(), \"short-hyphenated\") + \".pdf\";\n    dispatch(\n      signedDocumentActions.Actions.updateForm({\n        rootPath: [\"signedDocuments\", \"byId\", -1],\n        name: \"metadata.custom_form_id\",\n        value: customFormId,\n      }),\n    );\n    await dispatch(\n      signedDocumentActions.AsyncActions.create(sdDocument?.set(\"name\", documentName), { notify, message }),\n    );\n\n    if (notify) {\n      close(\"\", false);\n    } else {\n      setViewState(\"signing\");\n    }\n\n    const recipientsCount = currentSignedDocument.recipients.size;\n    trackEvent({ action: \"Request Submitted\", recipientsCount });\n  };\n\n  // methods\n  const signatureReducer = (action: SignatureAction, payload: any) => {\n    switch (action) {\n      case \"addDocumentId\":\n        const { id: addId } = payload;\n        setDocumentIds((docIds) => docIds.push(addId).toSet().toList());\n        trackEvent({ action: \"Document Added\", documentId: addId });\n        return;\n      case \"removeDocumentId\":\n        const { id: removeId } = payload;\n        setDocumentIds((docIds) =>\n          docIds\n            .filter((documentId) => documentId !== removeId)\n            .toSet()\n            .toList(),\n        );\n        trackEvent({ action: \"Document Removed\", documentId: removeId });\n        return;\n      case \"onDragEnd\":\n        const { oldIndex, newIndex } = payload;\n        setDocumentIds((docIds) => onSortEnd(docIds, oldIndex, newIndex, []).list);\n        trackEvent({ action: \"Document Dragged\", oldIndex, newIndex });\n        return;\n      case \"setRequestName\":\n        if (requestName !== \"\") setDocumentNameChanged(true);\n        setRequestName(payload.requestName);\n        return;\n      case \"combineDocuments\":\n        if (documentNameChanged) trackEvent({ action: \"Document Name updated\" });\n        trackEvent({ action: \"Document(s) submitted for combination\", documentCount: documentIds.size });\n        combineDocuments();\n        return;\n      case \"validate\":\n        validate();\n        trackEvent({ action: \"Document Validated\" });\n        return;\n      case \"close\":\n        close(payload.modalType, payload.destroy || false);\n        trackEvent({ action: \"Modal Closed\", modalType: payload.modalType });\n        return;\n      case \"back\":\n        const { screen } = payload;\n        back(screen);\n        trackEvent({ action: \"Back button clicked\", screen });\n        return;\n      case \"modifyDoc\":\n        const { getModifiedFile, isModified } = payload;\n        modifyDoc(isModified, getModifiedFile);\n        trackEvent({ action: \"Document Modified\" });\n        return;\n      case \"handleSubmit\":\n        const { event } = payload;\n        handleSubmit(event);\n        return;\n      case \"spinner\":\n        setDownloading(true);\n        return;\n    }\n  };\n\n  return (\n    <Context.Provider\n      value={\n        new ContextRecord({\n          requestName,\n          documentIds,\n          job,\n          orgId,\n          dispatch: signatureReducer,\n        })\n      }>\n      <SignatureRequestModal>\n        {downloading && (\n          <div className=\"h-100 d-flex align-items-center justify-content-center\">\n            <img className=\"spinner-graphic\" />\n          </div>\n        )}\n        {(() => {\n          switch (downloading ? \"\" : viewState) {\n            case \"review\":\n              return <ReviewSignatureRequest />;\n            case \"configuration\":\n              return <SignatureConfiguration />;\n            case \"signing\":\n              return (\n                <div className=\"h-100 d-flex align-items-center justify-content-center\">\n                  <img className=\"spinner-graphic\" />\n                </div>\n              );\n            default:\n              return null;\n          }\n        })()}\n      </SignatureRequestModal>\n    </Context.Provider>\n  );\n};\n","import { useDispatch, useSelector } from \"react-redux\";\nimport * as React from \"react\";\nimport { exactValues } from \"app2/src/selectors/pricePresentation.selectors\";\nimport { PricePresentationActions } from \"app2/src/reducers/pricePresentation.actions\";\nimport { useTracking } from \"react-tracking\";\n\nexport const Toggle: React.FunctionComponent = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"Toggle\" });\n\n  // Selector\n  const showExactValues = useSelector(exactValues);\n\n  const toggle = () => {\n    trackEvent({ action: \"toggle_exact_values\", showExactValues: !showExactValues });\n    dispatch(\n      PricePresentationActions.updatePricePresentation({\n        rootPath: [\"pricePresentation\"],\n        name: \"showExactValues\",\n        value: !showExactValues,\n      }),\n    );\n  };\n\n  return (\n    <span className=\"d-flex align-items-baseline\">\n      <span className=\"text-muted mr-2\" style={{ fontSize: \"0.875rem\" }}>\n        Show exact values\n      </span>\n      <div\n        className=\"custom-toggle mr-3\"\n        onClick={toggle}\n        style={{\n          width: \"32px\",\n          height: \"18px\",\n          backgroundColor: showExactValues ? \"#000\" : \"#ccc\",\n          borderRadius: \"9px\",\n          position: \"relative\",\n          cursor: \"pointer\",\n          transition: \"background-color 0.2s\",\n          alignSelf: \"end\",\n        }}>\n        <div\n          style={{\n            width: \"14px\",\n            height: \"14px\",\n            backgroundColor: \"white\",\n            borderRadius: \"50%\",\n            position: \"absolute\",\n            top: \"2px\",\n            left: showExactValues ? \"16px\" : \"2px\",\n            transition: \"left 0.2s\",\n          }}\n        />\n      </div>\n    </span>\n  );\n};\n","import { Toggle } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Toggle\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { exactValues, precisionExactValues } from \"app2/src/selectors/pricePresentation.selectors\";\nimport * as React from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\n\nexport interface HeaderProps {\n  slide: any;\n  estimate: EstimateRecord;\n}\n\nexport const Header: React.FunctionComponent<HeaderProps> = ({ slide, estimate }) => {\n  // Selectors\n  const precision = useSelector(precisionExactValues);\n\n  return (\n    <Modal.Header\n      closeButton\n      className=\"border-0 bg-white\"\n      style={{\n        padding: \"2rem 2.5rem\",\n        minHeight: \"120px\",\n      }}>\n      <div className=\"d-flex justify-content-between align-items-center w-100\">\n        <Modal.Title>{slide.get(\"title\")}</Modal.Title>\n        <Modal.Title\n          className=\"d-flex flex-wrap align-items-baseline justify-content-end\"\n          style={{ height: \"100%\", rowGap: \"1rem\" }}>\n          <Toggle />\n          <span className=\"d-flex align-items-baseline\">\n            {(estimate?.get(\"subtotal\") || 0) !== (estimate?.get(\"total\") || 0) && (\n              <span\n                className=\"text-dark font-weight-bold mr-3\"\n                style={{ fontSize: \"1rem\", textDecoration: \"line-through\" }}>\n                {CurrencyFormat(estimate?.get(\"subtotal\") || 0, precision, false)}\n              </span>\n            )}\n            <span\n              className=\"text-dark font-weight-bold mr-2\"\n              style={{\n                lineHeight: \"1\",\n              }}>\n              {CurrencyFormat(estimate?.get(\"total\") || 0, precision, false)}\n            </span>\n          </span>\n        </Modal.Title>\n      </div>\n    </Modal.Header>\n  );\n};\n","import * as React from \"react\";\nimport { Dropdown } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { EstimateDiscountRecord } from \"app2/src/records/EstimateDiscount\";\nimport { useDispatch } from \"react-redux\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { ConfirmDialog } from \"app2/src/components/Common/ConfirmDialog\";\nimport { useTracking } from \"react-tracking\";\nimport { Can } from \"app2/src/components/Common/CanComponent\";\nimport { Acl } from \"app2/src/helpers/Acl\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport { useSelector } from \"react-redux\";\nimport { discountGroupContaining } from \"app2/src/selectors/pricePresentation.selectors\";\n\nexport interface DiscountRowProps {\n  discount: EstimateDiscountRecord;\n  precision: number;\n  onAddDiscount: (showExisting?: boolean) => void;\n  estimateId: number;\n}\n\nexport const DiscountRow: React.FunctionComponent<DiscountRowProps> = ({\n  discount,\n  precision,\n  onAddDiscount,\n  estimateId,\n}) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"DiscountRow\" });\n\n  // Selectors/Redux\n  const discountsEnabled = useSelector((state) =>\n    currentOrgPrefConfig(state, { path: [\"enhanced_price_presentation\", \"enable_current_discounts\"] }),\n  );\n  const discountGroup = useSelector((state) => discountGroupContaining(state, { discountUuid: discount.get(\"uuid\") }));\n\n  // Constants\n  const discountName = `${discount?.get(\"name\")}${\n    discount?.get(\"kind\") && [\"percent\", \"percent_limit\"].includes(discount?.get(\"kind\"))\n      ? ` (${discount?.get(\"amount\")}%)`\n      : \"\"\n  }`;\n  const canDeleteOrCustom = Acl.can(\"custom\", \"discount\") || Acl.can(\"delete\", \"discount\");\n\n  // Methods\n  const handleAddFlatDiscount = () => {\n    onAddDiscount();\n  };\n\n  const handleAddCurrentDiscount = () => {\n    onAddDiscount(true);\n  };\n\n  const handleDeleteDiscount = () => {\n    trackEvent({ action: \"delete_discount\", estimateId, discountId: discount?.get(\"discountId\") });\n\n    if (discountGroup) {\n      discountGroup.forEach((uuid, id) => {\n        dispatch(estimateActions.AsyncActions.removeDiscount(id, uuid));\n      });\n    } else {\n      dispatch(estimateActions.AsyncActions.removeDiscount(estimateId, discount));\n    }\n  };\n\n  return (\n    <div className=\"d-flex align-items-center justify-content-between pr-4\" style={{ minHeight: \"37px\" }}>\n      <span className=\"text-muted mr-2\">{discountName}</span>\n      <div className=\"d-flex align-items-center justify-content-between\">\n        <span className=\"font-weight-bold\">{CurrencyFormat(discount?.get(\"calculated\"), precision, false)}</span>\n        {canDeleteOrCustom && (\n          <Dropdown id=\"discount-dropdown\">\n            <Dropdown.Toggle\n              variant=\"link\"\n              className=\"py-2 px-3 ml-2 text-muted\"\n              style={{ border: \"none\" }}\n              data-testid=\"dropdown-toggle\"\n              bsPrefix=\"dropdown-toggle-no-caret\">\n              <FontAwesome name=\"ellipsis-v\" />\n            </Dropdown.Toggle>\n\n            <Dropdown.Menu>\n              <Can resource=\"discount\" permission=\"custom\">\n                <Dropdown.Item onClick={handleAddFlatDiscount}>Add Flat Discount</Dropdown.Item>\n              </Can>\n              {discountsEnabled && <Dropdown.Item onClick={handleAddCurrentDiscount}>Current Promotions</Dropdown.Item>}\n\n              <Can resource=\"discount\" permission=\"delete\">\n                <ConfirmDialog title=\"Are you sure you want to delete this discount?\">\n                  {(confirm) => (\n                    <Dropdown.Item className=\"text-danger\" onClick={confirm(handleDeleteDiscount)}>\n                      Delete Discount\n                    </Dropdown.Item>\n                  )}\n                </ConfirmDialog>\n              </Can>\n            </Dropdown.Menu>\n          </Dropdown>\n        )}\n      </div>\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { Map } from \"immutable\";\nimport { DecimalInputComponent } from \"app2/src/components/Common/DecimalInputComponent\";\nimport { useState, useEffect, useRef } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { flatDiscountData, PricePresentationActions } from \"app2/src/reducers/pricePresentation.actions\";\nimport { currentOrg } from \"app2/src/selectors/org.selectors\";\nimport { getOrgDiscounts } from \"app2/src/selectors/discount.selectors\";\nimport { Nullable } from \"app2/src/records\";\nimport { calculate, EstimateDiscountRecord, toDiscountData } from \"app2/src/records/EstimateDiscount\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport {\n  currentSlideIndex,\n  precisionExactValues,\n  slideEstimateIds,\n} from \"app2/src/selectors/pricePresentation.selectors\";\nimport * as uuid from \"uuid/v4\";\n\ninterface EditDiscountProps {\n  onSave: () => void;\n  onCancel: () => void;\n  useExisting?: boolean;\n  estimate: EstimateRecord;\n}\n\nexport const EditDiscount = ({ onCancel, onSave, estimate, useExisting = false }: EditDiscountProps) => {\n  // Hooks\n  const dispatch = useDispatch();\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  // State\n  const [tempValue, setTempValue] = useState(0);\n  const [tempName, setTempName] = useState(\"\");\n  const [selectedDiscount, setSelectedDiscount] = useState<Nullable<EstimateDiscountRecord>>(null);\n\n  // Redux\n  const org = useSelector(currentOrg);\n  const discounts = useSelector((state) => getOrgDiscounts(state, { orgId: org?.get(\"id\") }));\n  const precision = useSelector(precisionExactValues);\n  const slideIndex = useSelector(currentSlideIndex);\n  const estimateIds = useSelector(slideEstimateIds);\n\n  useEffect(() => {\n    if (inputRef.current) {\n      inputRef.current.focus();\n    }\n  }, []);\n\n  const handleSave = () => {\n    if (useExisting && !selectedDiscount) {\n      // save is essentially disabled, currently no UI indication\n      return;\n    }\n\n    if (useExisting) {\n      let uuids: Map<number, string> = Map();\n\n      for (let i = slideIndex; i < estimateIds.size; i++) {\n        const id = estimateIds.get(i);\n        const newUuid = uuid();\n        const specificDiscount = selectedDiscount.set(\"uuid\", newUuid);\n        uuids = uuids.set(id, newUuid);\n        dispatch(estimateActions.AsyncActions.addDiscount(id, specificDiscount));\n      }\n      dispatch(PricePresentationActions.addDiscountGroup(uuids));\n    } else {\n      dispatch(estimateActions.AsyncActions.addDiscount(estimate.get(\"id\"), flatDiscountData(tempName, tempValue)));\n    }\n\n    onSave();\n  };\n\n  const discountSelected = (event: React.ChangeEvent<HTMLSelectElement>) => {\n    if (event.target.value === \"\") {\n      setSelectedDiscount(null);\n      return;\n    }\n\n    const discountId = parseInt(event.target.value);\n    const discount = discounts.find((d) => d.get(\"id\") === discountId) || null;\n\n    const data = toDiscountData(discount);\n\n    const record = calculate(data, estimate.get(\"running_discountable\") || 0);\n\n    setSelectedDiscount(record);\n  };\n\n  const handleKeyPress = (e) => {\n    if (e.key === \"Enter\") {\n      handleSave();\n    } else if (e.key === \"Escape\") {\n      onCancel();\n    }\n  };\n\n  const discountName = (discount) =>\n    `${discount?.get(\"name\")}${\n      discount?.getIn([\"breakdown\", \"kind\"]) &&\n      [\"percent\", \"percent_limit\"].includes(discount?.getIn([\"breakdown\", \"kind\"]))\n        ? ` (${discount?.getIn([\"breakdown\", \"amount\"])}%)`\n        : \"\"\n    }`;\n\n  return (\n    <div\n      className={`d-flex align-items-center justify-content-between price-presentation-input ${useExisting ? \"pr-4\" : \"\"}`}>\n      {!useExisting && (\n        <>\n          <div>\n            <label htmlFor=\"discount-name-input\">Name</label>\n            <input\n              id=\"discount-name-input\"\n              ref={inputRef}\n              type=\"text\"\n              value={tempName}\n              onChange={(e) => setTempName(e.target.value)}\n              onKeyPress={handleKeyPress}\n            />\n          </div>\n\n          <div className=\"d-flex ml-1 decimal-input-parent\">\n            <div className=\"w-100\">\n              <label htmlFor=\"discount-amount-input\">Amount</label>\n              <DecimalInputComponent\n                id=\"discount-amount-input\"\n                type=\"number\"\n                value={tempValue}\n                onNumberChange={setTempValue}\n                onKeyPress={handleKeyPress}\n              />\n            </div>\n            <div className=\"button-group\">\n              <FontAwesome name=\"check\" onClick={handleSave} data-testid=\"check\" />\n              <FontAwesome name=\"times\" onClick={onCancel} data-testid=\"times\" />\n            </div>\n          </div>\n        </>\n      )}\n      {useExisting && (\n        <>\n          <select className=\"form-control flex-fill mr-2\" onChange={discountSelected} style={{ minWidth: 0 }}>\n            <option value=\"\">Choose a Promotion</option>\n            {discounts.map((discount, idx) => (\n              <option key={idx} value={discount.get(\"id\")}>\n                {discountName(discount)}\n              </option>\n            ))}\n          </select>\n          <div className=\"d-flex align-items-center justify-content-between\" style={{ minWidth: \"100px\" }}>\n            <span className=\"font-weight-bold text-right\" style={{ minWidth: \"60px\" }}>\n              {selectedDiscount ? CurrencyFormat(selectedDiscount.get(\"calculated\") || 0, precision, false) : 0}\n            </span>\n            <div className=\"button-group ml-2\">\n              <FontAwesome name=\"check\" onClick={handleSave} data-testid=\"check\" />\n              <FontAwesome name=\"times\" onClick={onCancel} data-testid=\"times\" />\n            </div>\n          </div>\n        </>\n      )}\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport { Card, Row, Col } from \"react-bootstrap\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { List } from \"immutable\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { precisionExactValues } from \"app2/src/selectors/pricePresentation.selectors\";\nimport { useSelector } from \"react-redux\";\nimport { DiscountRow } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Discounts/DiscountRow\";\nimport { useState } from \"react\";\nimport { EditDiscount } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Discounts/EditDiscount\";\nimport { useTracking } from \"react-tracking\";\n\nexport interface DiscountsProps {\n  estimate: EstimateRecord;\n  slideIndex: number;\n}\n\nexport const Discounts: React.FunctionComponent<DiscountsProps> = ({ estimate, slideIndex }) => {\n  // State\n  const [editing, setEditing] = useState(false);\n  const [useExisting, setUseExisting] = useState(false);\n  const { trackEvent } = useTracking<any>({ component: \"Discounts\" });\n\n  // Selectors\n  const precision = useSelector(precisionExactValues);\n\n  // Constants\n  const discounts = estimate?.get(\"discounts\") || List();\n\n  // Methods\n  const onAddDiscount = (existing = false) => {\n    if (existing) {\n      trackEvent({ action: \"add_current_discount\" });\n      setUseExisting(true);\n    } else {\n      trackEvent({ action: \"add_flat_discount\" });\n      setUseExisting(false);\n    }\n    setEditing(true);\n  };\n\n  const onSaveDiscount = () => {\n    if (useExisting) {\n      trackEvent({ action: \"save_current_discount\" });\n    } else {\n      trackEvent({ action: \"save_discount\" });\n    }\n    setEditing(false);\n  };\n\n  const onCancelEdit = () => {\n    if (useExisting) {\n      trackEvent({ action: \"cancel_add_current_discount\" });\n    } else {\n      trackEvent({ action: \"cancel_add_flat_discount\" });\n    }\n    setEditing(false);\n  };\n\n  React.useEffect(() => {\n    if (editing) {\n      setEditing(false);\n    }\n  }, [slideIndex]);\n\n  return (\n    <Card className=\"mb-4 shadow-sm\" style={{ borderRadius: \"1rem\", position: \"relative\" }}>\n      <Card.Body className=\"py-3\">\n        <Row className=\"align-items-center h-100 p-0\">\n          <Col xs={6}>\n            {discounts.map((discount, index) => (\n              <DiscountRow\n                key={`discount-${index}`}\n                discount={discount}\n                precision={precision}\n                onAddDiscount={onAddDiscount}\n                estimateId={estimate?.get(\"id\")}\n              />\n            ))}\n            {editing && (\n              <EditDiscount\n                onSave={onSaveDiscount}\n                onCancel={onCancelEdit}\n                useExisting={useExisting}\n                estimate={estimate}\n              />\n            )}\n          </Col>\n          <Col xs={6} className=\"text-right\">\n            <div className=\"d-flex align-items-center justify-content-end\">\n              <span className=\"text-muted mr-4 h2 pb-0 mb-0 font-weight-bold\">Total Savings</span>\n              <span className=\"green-dark-text font-weight-bold\" style={{ fontSize: \"52px\", lineHeight: \"1\" }}>\n                {CurrencyFormat(estimate?.get(\"discount\") || 0, precision)}\n              </span>\n            </div>\n          </Col>\n        </Row>\n      </Card.Body>\n      {/* Vertical border that spans full height */}\n      <div\n        style={{\n          position: \"absolute\",\n          left: \"50%\",\n          top: 0,\n          bottom: 0,\n          width: \"1px\",\n          backgroundColor: \"#dee2e6\",\n          transform: \"translateX(-50%)\",\n        }}\n      />\n    </Card>\n  );\n};\n","import * as React from \"react\";\nimport { DecimalInputComponent } from \"app2/src/components/Common/DecimalInputComponent\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { PricePresentationActions } from \"app2/src/reducers/pricePresentation.actions\";\nimport { financing, precisionExactValues } from \"app2/src/selectors/pricePresentation.selectors\";\nimport { dispatch } from \"app2/src/storeRegistry\";\nimport { useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useTracking } from \"react-tracking\";\n\nexport const DownPaymentInput = ({ titles }: { titles: Map<string, string> }) => {\n  // Hooks\n  const { trackEvent } = useTracking<any>({ component: \"DownPaymentInput\" });\n\n  // Selectors\n  const financingRecord = useSelector(financing);\n  const precision = useSelector(precisionExactValues);\n\n  // State\n  const [isEditing, setIsEditing] = useState(false);\n  const [tempValue, setTempValue] = useState(financingRecord.get(\"downPayment\"));\n\n  const handleEdit = () => {\n    trackEvent({ action: \"edit_down_payment\" });\n    setTempValue(financingRecord.get(\"downPayment\"));\n    setIsEditing(true);\n  };\n\n  const handleSave = () => {\n    trackEvent({ action: \"save_down_payment\" });\n    dispatch(\n      PricePresentationActions.updatePricePresentation({\n        rootPath: [\"pricePresentation\", \"financing\"],\n        name: \"downPayment\",\n        value: tempValue,\n      }),\n    );\n    setIsEditing(false);\n  };\n\n  const handleCancel = () => {\n    trackEvent({ action: \"cancel_down_payment\" });\n    setTempValue(financingRecord.get(\"downPayment\"));\n    setIsEditing(false);\n  };\n\n  const handleKeyPress = (e) => {\n    if (e.key === \"Enter\") {\n      handleSave();\n    } else if (e.key === \"Escape\") {\n      handleCancel();\n    }\n  };\n\n  const onNumberChange = (value: number) => {\n    if (value < 0) {\n      return;\n    }\n    trackEvent({ action: \"change_down_payment\", value: value.toString() });\n\n    setTempValue(value);\n  };\n\n  return (\n    <div\n      className=\"d-flex justify-content-between align-items-center price-presentation-input\"\n      style={{ height: \"36px\" }}>\n      <span className=\"text-muted title\">{titles?.get(\"down_payment\") || \"Down Payment\"}</span>\n      {isEditing ? (\n        <div className=\"decimal-input-parent d-flex align-items-center ml-1\">\n          <DecimalInputComponent\n            type=\"number\"\n            min=\"0\"\n            value={tempValue}\n            onNumberChange={onNumberChange}\n            onKeyPress={handleKeyPress}\n            autoFocus\n          />\n          <div className=\"button-group\">\n            <FontAwesome name=\"check\" onClick={handleSave} data-testid=\"check\" />\n            <FontAwesome name=\"times\" onClick={handleCancel} data-testid=\"times\" />\n          </div>\n        </div>\n      ) : (\n        <div\n          className=\"d-flex align-items-center\"\n          onClick={handleEdit}\n          style={{ cursor: \"pointer\" }}\n          data-testid=\"pencil\">\n          <span className=\"font-weight-bold text-dark mr-2\">\n            {CurrencyFormat(financingRecord.get(\"downPayment\"), precision, false)}\n          </span>\n          <FontAwesome name=\"pencil\" className=\"text-muted\" style={{ fontSize: \"14px\" }} />\n        </div>\n      )}\n    </div>\n  );\n};\n","import * as React from \"react\";\n\nexport const SplatIcon: React.FunctionComponent = () => {\n  return (\n    <svg className=\"splat-icon\" width=\"80\" height=\"69\" viewBox=\"0 0 80 69\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path\n        d=\"M18.9545 18.0208C20.0743 19.3086 20.9317 20.8629 21.4659 22.5725C22.0001 24.2825 22.1977 26.1059 22.045 27.9132L22.0981 27.8524C21.941 29.9798 22.1921 32.1204 22.8335 34.1255C23.475 36.1303 24.4913 37.9511 25.8117 39.4608C27.1324 40.9701 28.7252 42.1323 30.4793 42.8652C32.2331 43.5984 34.106 43.8855 35.9668 43.7058L35.9136 43.7666C38.1395 43.5298 40.3753 44.0834 42.3161 45.3522C44.2566 46.6211 45.8078 48.5432 46.7577 50.8567C47.7075 53.1702 48.0104 55.762 47.6245 58.2795C47.2384 60.7966 46.1827 63.1166 44.6011 64.9228C43.0196 66.729 40.9892 67.9337 38.7869 68.3724C36.5843 68.8115 34.3173 68.463 32.2943 67.3751C30.2713 66.2869 28.5913 64.5124 27.4831 62.2928C26.3748 60.0732 25.8924 57.5172 26.1016 54.9727L26.0454 55.0335C26.2026 52.9064 25.9518 50.7655 25.3103 48.7604C24.6689 46.7556 23.6522 44.9348 22.3318 43.4251C21.0112 41.9158 19.4184 40.7536 17.6646 40.0207C15.9104 39.2875 14.0379 39.0004 12.1768 39.1801L12.2329 39.1193C10.4147 39.3061 8.58435 38.9653 6.91178 38.1284C5.23951 37.2915 3.77879 35.9854 2.66551 34.3315C1.55224 32.6776 0.821873 30.7289 0.542965 28.6667C0.26376 26.6041 0.44458 24.4946 1.06858 22.533C1.69258 20.5718 2.73967 18.8223 4.11265 17.4467C5.48562 16.0711 7.14017 15.1139 8.92294 14.6641C10.7057 14.2142 12.5591 14.2858 14.3111 14.8725C16.0632 15.4594 17.6572 16.5422 18.9456 18.0208H18.9545Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M40.7481 35.7908L40.8042 35.73C39.2226 35.9121 37.6254 35.6902 36.1277 35.0802C34.6304 34.4703 33.2701 33.4878 32.1456 32.2034C31.0214 30.919 30.1604 29.3647 29.626 27.6534C29.0912 25.9421 28.8959 24.1166 29.054 22.3083L28.9978 22.3691C29.155 20.2417 28.9039 18.1011 28.2627 16.096C27.6213 14.0912 26.6047 12.2704 25.2843 10.7608C23.9636 9.25141 22.3708 8.08926 20.617 7.35637C18.8629 6.623 16.9903 6.33616 15.1292 6.51574L15.1853 6.45494C12.9591 6.69406 10.7228 6.14207 8.78106 4.87467C6.83904 3.60728 5.28672 1.68599 4.33536 -0.627071C3.384 -2.9401 3.07998 -5.53234 3.46466 -8.0502C3.84934 -10.5681 4.90411 -12.8889 6.48538 -14.6963C8.06636 -16.5036 10.0967 -17.7095 12.2993 -18.1493C14.502 -18.5891 16.7696 -18.2416 18.7931 -17.154C20.8167 -16.0664 22.4972 -14.2918 23.6061 -12.0722C24.7149 -9.85254 25.1977 -7.29597 24.9885 -4.75118L25.0417 -4.81535C24.8842 -2.68798 25.1348 -0.546928 25.7759 1.45829C26.417 3.4635 27.4337 5.28455 28.7541 6.79437C30.0748 8.30372 31.6679 9.46588 33.422 10.1988C35.1764 10.9317 37.0493 11.2181 38.9103 11.038L38.8572 11.1022C40.4387 10.9202 42.0362 11.1421 43.5336 11.752C45.031 12.3616 46.3912 13.3445 47.5157 14.6289C48.6402 15.9133 49.5009 17.4676 50.0357 19.1789C50.5701 20.8902 50.7654 22.7157 50.6074 24.5239L50.6606 24.4631C50.504 26.5902 50.7554 28.7308 51.3968 30.7356C52.0386 32.74 53.0549 34.5608 54.3753 36.0701C55.6958 37.5795 57.2884 38.7413 59.0421 39.4749C60.7958 40.2081 62.6684 40.4955 64.5292 40.3165L64.476 40.3773C66.7022 40.1382 68.9387 40.69 70.8805 41.9576C72.8222 43.2251 74.3747 45.1462 75.326 47.4593C76.2775 49.7725 76.5816 52.3646 76.1968 54.8824C75.812 57.4003 74.7571 59.7212 73.1761 61.5284C71.595 63.336 69.5647 64.5417 67.362 64.9815C65.1594 65.4212 62.8917 65.0737 60.8682 63.9862C58.8447 62.8987 57.164 61.1242 56.0553 58.9046C54.9464 56.6846 54.4636 54.1283 54.6728 51.5834L54.6167 51.6442C54.7739 49.5168 54.5227 47.3762 53.8813 45.3711C53.2402 43.3663 52.2235 41.5455 50.9031 40.0358C49.5824 38.5265 47.9897 37.3643 46.2358 36.6315C44.4817 35.8982 42.6091 35.6111 40.7481 35.7908Z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M60.5476 29.0184C59.4277 27.7309 58.5704 26.1767 58.0367 24.4667C57.503 22.7567 57.3061 20.933 57.4601 19.1261L57.404 19.1869C57.5611 17.0591 57.3101 14.9175 56.6684 12.912C56.0266 10.9065 55.0096 9.08546 53.6883 7.57577C52.367 6.06615 50.7736 4.90437 49.0189 4.17165C47.2642 3.43889 45.3908 3.15283 43.5294 3.33345L43.5855 3.27266C41.3602 3.511 39.1245 2.95883 37.1836 1.69151C35.2428 0.424215 33.6913 -1.4966 32.7403 -3.80892C31.7895 -6.12127 31.4858 -8.71257 31.8705 -11.2295C32.2551 -13.7464 33.3099 -16.0664 34.8903 -17.8731C36.4707 -19.6798 38.5005 -20.8852 40.7022 -21.325C42.9039 -21.7649 45.1709 -21.4176 47.1936 -20.3307C49.2166 -19.2438 50.8968 -17.4701 52.0054 -15.2515C53.1142 -13.0329 53.5973 -10.4774 53.3887 -7.93347L53.4419 -7.99426C53.2847 -5.86702 53.5358 -3.72621 54.1773 -1.72126C54.8187 0.283682 55.835 2.10446 57.1556 3.61401C58.4761 5.12356 60.069 6.28548 61.8229 7.01851C63.5768 7.75173 65.4496 8.03881 67.3105 7.85913L67.2573 7.91993C69.0757 7.7335 70.9057 8.07495 72.5779 8.9122C74.2502 9.74945 75.7104 11.0558 76.8234 12.7101C77.9365 14.364 78.6662 16.3127 78.945 18.3749C79.2238 20.4375 79.0428 22.547 78.4185 24.5079C77.7943 26.4691 76.7472 28.2183 75.3741 29.5936C74.001 30.9692 72.3465 31.926 70.5638 32.3758C68.7811 32.8254 66.9279 32.7534 65.176 32.1668C63.424 31.5798 61.83 30.497 60.5417 29.0184H60.5476Z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n","import { DownPaymentInput } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/DownPaymentInput\";\nimport { SplatIcon } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/SplatIcon\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport { List } from \"immutable\";\nimport * as React from \"react\";\nimport { Card, Button, Col } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useSelector } from \"react-redux\";\n\nexport interface PaymentTermCardProps {\n  title: \"cash\" | \"same_as_cash\" | \"payment_range\";\n  icon: React.ReactNode;\n  children: React.ReactNode;\n  priority?: boolean;\n  hideDownPayment?: boolean;\n  onSelect: (type: \"cash\" | \"same_as_cash\" | \"payment_range\") => void;\n}\n\nconst titleMap = {\n  cash: \"Cash\",\n  same_as_cash: \"Same as Cash\",\n  payment_range: \"Payment Range\",\n};\n\nexport const PaymentTermCard: React.FunctionComponent<PaymentTermCardProps> = ({\n  children,\n  title,\n  icon,\n  priority,\n  hideDownPayment,\n  onSelect,\n}) => {\n  // Selectors\n  const config = useSelector((state: RootState) =>\n    currentOrgPrefConfig(state, { path: [\"enhanced_price_presentation\"] }),\n  );\n  const titles = config?.get(\"titles\");\n  const sameAsCash = config?.get(\"same_as_cash\") || List();\n\n  // Constants\n  const showSameAsCash = sameAsCash.size > 0;\n\n  if (!showSameAsCash && title === \"same_as_cash\") {\n    return null;\n  }\n\n  // Methods\n  const handleSelect = () => {\n    onSelect(title);\n  };\n\n  return (\n    <Col md={showSameAsCash ? 4 : 6} className=\"mb-4\">\n      <Card className={`h-100 shadow-sm payment-term-card ${priority ? \"priority\" : \"standard\"}`}>\n        <Card.Body className=\"p-4 d-flex flex-column\">\n          <SplatIcon />\n\n          {/* Header with icon and title */}\n          <div className=\"d-flex align-items-center mt-4 mb-5 justify-content-center card-title\">\n            <span className=\"mr-3\">{icon}</span>\n            <h2 className=\"font-weight-bold mb-0 text-dark\">{titles?.get(title) || titleMap[title]}</h2>\n          </div>\n\n          {/* Down Payment section (if not hidden) */}\n          <div className=\"mb-4\">{!hideDownPayment && <DownPaymentInput titles={titles} />}</div>\n\n          {/* Main content area */}\n          <div className=\"flex-grow-1 d-flex flex-column justify-content-center mb-4\">{children}</div>\n\n          <div className=\"mb-4 h-[20px]\"></div>\n\n          {/* Select button */}\n          <Button className={`w-100 ${priority ? \"btn-green-dark\" : \"btn-green-light\"}`} onClick={handleSelect}>\n            <FontAwesome name=\"external-link\" className=\"mr-2\" />\n            Select\n          </Button>\n        </Card.Body>\n      </Card>\n    </Col>\n  );\n};\n","import { Header } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Header\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport * as React from \"react\";\nimport { Modal, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Discounts } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/Discounts\";\nimport { PaymentTermCard } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer/PaymentTermCard\";\nimport { List } from \"immutable\";\nimport { titleCaseString } from \"app2/src/services/string.service\";\nimport { slideEstimate } from \"app2/src/selectors/estimate.selectors\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { currentSlideIndex, financing, precisionExactValues } from \"app2/src/selectors/pricePresentation.selectors\";\nimport { PricePresentationAsyncActions } from \"app2/src/reducers/pricePresentation.actions\";\nimport { useTracking } from \"react-tracking\";\nimport { isSlideEnabled } from \"app2/src/isSlideEnabled\";\n\nexport const SlideContainer: React.FunctionComponent = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"SlideContainer\" });\n\n  // Selectors\n  const slideIndex = useSelector(currentSlideIndex);\n  const precision = useSelector(precisionExactValues);\n  const financingRecord = useSelector(financing);\n  const config = useSelector((state: RootState) =>\n    currentOrgPrefConfig(state, { path: [\"enhanced_price_presentation\"] }),\n  );\n  const slide = config?.get(\"slides\")?.filter(isSlideEnabled)?.get(slideIndex);\n  const estimate = useSelector((state: RootState) => slideEstimate(state, { slideIndex }));\n  const paymentTermItems = estimate?.getIn([\"payment_terms\", \"payment_term_items\"]) || List();\n  const sameAsCash = config?.getIn([\"same_as_cash\"]) || List();\n\n  if (!slide) {\n    return null;\n  }\n\n  // Methods\n  const select = (type: \"cash\" | \"same_as_cash\" | \"payment_range\") => {\n    trackEvent({ action: \"select_payment_term\", type, estimateId: estimate?.get(\"id\"), slideIndex });\n    dispatch(PricePresentationAsyncActions.select(estimate?.get(\"id\"), type));\n  };\n\n  return (\n    <>\n      <Header slide={slide} estimate={estimate} />\n      <Modal.Body>\n        {estimate?.get(\"discounts\") && estimate?.get(\"discounts\")?.size > 0 && (\n          <Discounts estimate={estimate} slideIndex={slideIndex} />\n        )}\n\n        <Row className=\"g-4\">\n          {/* Cash Option */}\n          <PaymentTermCard\n            onSelect={select}\n            title=\"cash\"\n            icon={<img src=\"/assets/images/price-presentation/cash.bc284e42.svg\" alt=\"Cash\" />}\n            hideDownPayment>\n            <div className=\"text-left\">\n              {paymentTermItems.map((item, index) => {\n                return (\n                  <div\n                    key={`payment-term-item-${index}`}\n                    className=\"d-flex justify-content-between align-items-center mb-3\">\n                    <span className=\"text-muted d-flex align-items-center\">\n                      <img\n                        className=\"mr-3\"\n                        src=\"/assets/images/price-presentation/green-right-arrow.5ef1cecb.svg\"\n                        alt=\"Arrow Right\"\n                      />\n                      {item.get(\"type\") === \"percent\"\n                        ? `${item.get(\"amount\")}% - ${item.get(\"description\")}`\n                        : item.get(\"description\")}\n                    </span>\n                    <span className=\"font-weight-bold text-dark\" style={{ fontSize: \"18px\" }}>\n                      {CurrencyFormat(item.get(\"calculated\"), precision, false)}\n                    </span>\n                  </div>\n                );\n              })}\n            </div>\n          </PaymentTermCard>\n\n          {/* Same as Cash Option */}\n          <PaymentTermCard\n            onSelect={select}\n            title=\"same_as_cash\"\n            icon={<img src=\"/assets/images/price-presentation/same-as-cash.1d143767.svg\" alt=\"Same as Cash\" />}>\n            <div\n              className=\"d-flex flex-wrap justify-content-center align-items-center\"\n              style={{\n                gap: \"12px\",\n                minHeight: \"60px\",\n              }}>\n              {sameAsCash.map((item, index) => (\n                <div\n                  key={index}\n                  className=\"d-flex align-items-center\"\n                  style={{\n                    flex: sameAsCash.size <= 2 ? \"1 1 45%\" : \"1 1 40%\",\n                    minWidth: sameAsCash.size === 1 ? \"100%\" : \"120px\",\n                    justifyContent: sameAsCash.size === 1 ? \"center\" : \"flex-start\",\n                  }}>\n                  <img\n                    className=\"mr-3\"\n                    src=\"/assets/images/price-presentation/green-right-arrow.5ef1cecb.svg\"\n                    alt=\"Arrow Right\"\n                  />\n                  <span className=\"text-muted\">{titleCaseString(item)}</span>\n                </div>\n              ))}\n            </div>\n          </PaymentTermCard>\n\n          {/* Payment Range Option */}\n          <PaymentTermCard\n            onSelect={select}\n            title=\"payment_range\"\n            icon={<img src=\"/assets/images/price-presentation/payment-range.448ce429.svg\" alt=\"Payment Range\" />}\n            priority>\n            <div className=\"text-center\">\n              <span className=\"font-weight-bold green-dark-text\" style={{ fontSize: \"48px\", lineHeight: \"1\" }}>\n                {CurrencyFormat(financingRecord.get(\"minPayment\"), precision, false)} –{\" \"}\n                {CurrencyFormat(financingRecord.get(\"maxPayment\"), precision, false)}\n              </span>\n            </div>\n          </PaymentTermCard>\n        </Row>\n      </Modal.Body>\n    </>\n  );\n};\n","import * as React from \"react\";\nimport { Modal, Button } from \"react-bootstrap\";\nimport * as FontAwesome from \"react-fontawesome\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport { push } from \"connected-react-router/immutable\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { useTracking } from \"react-tracking\";\nimport { List } from \"immutable\";\nimport { currentSlideIndex } from \"app2/src/selectors/pricePresentation.selectors\";\nimport { isSlideEnabled } from \"app2/src/isSlideEnabled\";\n\nexport interface SlideNavigationProps {\n  handleClose: () => void;\n}\n\nexport const SlideNavigation: React.FunctionComponent<SlideNavigationProps> = ({ handleClose }) => {\n  // Hooks\n  const slideIndex = useSelector(currentSlideIndex);\n  const dispatch = useDispatch();\n  const { trackEvent } = useTracking<any>({ component: \"SlideNavigation\" });\n\n  // Selectors\n  const slides =\n    useSelector((state: RootState) =>\n      currentOrgPrefConfig(state, { path: [\"enhanced_price_presentation\", \"slides\"] })?.filter(isSlideEnabled),\n    ) || List();\n  const path = useSelector(pathname);\n\n  // Methods\n  const handleNext = () => {\n    trackEvent({ action: \"next_slide\", slide: slideIndex + 1 });\n    dispatch(push(`${path}?slide=${slideIndex + 1}`));\n  };\n\n  const handlePrevious = () => {\n    trackEvent({ action: \"previous_slide\", slide: slideIndex - 1 });\n    dispatch(push(`${path}?slide=${slideIndex - 1}`));\n  };\n\n  return (\n    <Modal.Footer className=\"flex justify-content-between border-0 mb-4\">\n      <div>\n        <Button className=\"btn-borderless\" onClick={handleClose}>\n          Cancel\n        </Button>\n      </div>\n      <div>\n        <p>Offers are for qualified customers only</p>\n      </div>\n      <div>\n        <Button\n          className=\"btn-borderless text-black\"\n          disabled={slideIndex === 0}\n          onClick={handlePrevious}\n          aria-label=\"Previous Slide\">\n          <FontAwesome name=\"chevron-left\" />\n        </Button>\n        <Button\n          className=\"btn-borderless text-black\"\n          disabled={slideIndex === slides.size - 1}\n          onClick={handleNext}\n          aria-label=\"Next Slide\">\n          <FontAwesome name=\"chevron-right\" />\n        </Button>\n      </div>\n    </Modal.Footer>\n  );\n};\n","import { isSlideEnabled } from \"app2/src/isSlideEnabled\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { PricePresentationActions, PricePresentationAsyncActions } from \"app2/src/reducers/pricePresentation.actions\";\nimport { slideEstimate } from \"app2/src/selectors/estimate.selectors\";\nimport { currentSlideIndex, downPayment } from \"app2/src/selectors/pricePresentation.selectors\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { push } from \"connected-react-router\";\n\nexport const SlideSetup: React.FunctionComponent = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const slideIndex = useSelector(currentSlideIndex);\n  const path = useSelector(pathname);\n\n  // Selectors\n  const slides = useSelector((state: RootState) =>\n    currentOrgPrefConfig(state, { path: [\"enhanced_price_presentation\", \"slides\"] }),\n  )?.filter(isSlideEnabled);\n  const estimateId = useSelector((state: RootState) => selectedEstimateId(state));\n  const estimate = useSelector((state: RootState) => slideEstimate(state, { slideIndex }));\n  const downPaymentValue = useSelector(downPayment);\n\n  // Lifecycle\n  React.useEffect(() => {\n    if (slides && slides.size > 0 && estimateId) {\n      dispatch(PricePresentationAsyncActions.setupPricePresentation(estimateId));\n    } else {\n      dispatch(push(path.split(\"/present\")[0]));\n    }\n    return () => {\n      dispatch(PricePresentationActions.resetPricePresentation());\n    };\n  }, []);\n\n  React.useEffect(() => {\n    if (slides && slides.size > 0 && estimateId && estimate) {\n      dispatch(PricePresentationActions.updateFinancing(estimate.get(\"total\")));\n    }\n  }, [estimate, downPaymentValue]);\n\n  return null;\n};\n","import { SlideContainer } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideContainer\";\nimport { SlideNavigation } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideNavigation\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport * as React from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { SlideSetup } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal/SlideSetup\";\nimport { push } from \"connected-react-router/immutable\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { useTracking } from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { hasOneLookMetadata } from \"app2/src/selectors/oneLook.selectors\";\nimport { PricePresentationActions } from \"app2/src/reducers/pricePresentation.actions\";\nimport { useLocation } from \"react-router\";\nimport { OneLookAsyncActions } from \"app2/src/reducers/oneLook.async.actions\";\nimport { IAuthService } from \"app2/src/helpers/Auth.service\";\nimport { getCurrentOrgAuthorization } from \"app2/src/selectors/token.selectors\";\n\nexport interface EnhancedPricePresentationModalProps {}\n\nexport const EnhancedPricePresentationModal: React.FunctionComponent = () => {\n  const location = useLocation();\n  const slideIndex = parseInt(new URLSearchParams(location.search).get(\"slide\") || \"0\");\n  const oneLookAuthorized = useSelector((state) => getCurrentOrgAuthorization(state, { integration: \"one_look\" }));\n  // Hooks\n  const dispatch = useDispatch();\n  const { Track, trackEvent } = useTracking<any>(\n    {\n      component: \"EnhancedPricePresentationModal\",\n      category: \"enhanced_price_presentation\",\n    },\n    { dispatch: Dispatch.dispatch },\n  );\n  const authService = StoreRegistry.get<IAuthService>(\"authService\");\n\n  // Ref to prevent duplicate metadata warnings\n  const hasShownMetadataWarning = React.useRef(false);\n\n  // Selectors\n  const enabled = useSelector((state: RootState) =>\n    currentOrgPrefConfig(state, { path: [\"enhanced_price_presentation\", \"enabled\"] }),\n  );\n  const path = useSelector(pathname);\n  const estimateId = useSelector(selectedEstimateId);\n  const hasMetadata = useSelector((state: RootState) => hasOneLookMetadata(state, { estimateId }));\n\n  // Methods\n  const handleClose = () => {\n    trackEvent({ action: \"close\" });\n    const $rootScope: RsfRootScope = StoreRegistry.get(\"$rootScope\");\n    dispatch(push(path.split(\"/present\")[0]));\n    $rootScope.$digest();\n  };\n\n  React.useEffect(() => {\n    dispatch(PricePresentationActions.setCurrentSlideIndex(slideIndex));\n  }, [dispatch, slideIndex]);\n\n  // Clear discount groups on mount/unmount\n  React.useEffect(() => {\n    dispatch(PricePresentationActions.clearDiscountGroups());\n\n    return () => {\n      dispatch(PricePresentationActions.clearDiscountGroups());\n    };\n  }, []);\n\n  // Handle side effects in useEffect to avoid render-time dispatches\n  React.useEffect(() => {\n    if (!enabled) {\n      trackEvent({ action: \"opened_not_enabled\" });\n      dispatch(\n        commonActions.Actions.flashAddAlert(\n          FlashLevels.warning,\n          \"Price Presentation is not enabled for your organization. Please contact your administrator to enable it.\",\n        ),\n      );\n    }\n  }, [enabled, dispatch, trackEvent]);\n\n  React.useEffect(() => {\n    if (!hasShownMetadataWarning.current && hasMetadata) {\n      hasShownMetadataWarning.current = true;\n      trackEvent({ action: \"opened_with_one_look_metadata\" });\n      dispatch(\n        commonActions.Actions.flashAddAlert(\n          FlashLevels.warning,\n          \"You have already completed a finance application for this estimate.\\nIf you would like to access the completed finance application, please go to 1LOOK. If you would like to submit a new finance application, please create a new estimate or duplicate the current estimate.\",\n        ),\n      );\n    }\n  }, [hasMetadata, dispatch, trackEvent]);\n\n  React.useEffect(() => {\n    // If they don't have 1LOOK enabled, don't do any more checks\n    if (!oneLookAuthorized) return;\n\n    // If they have 1LOOK enabled but are not SSO, show warning\n    if ((authService as any)?.getIdp() !== \"occ\") {\n      trackEvent({ action: \"opened_enhanced_presentation_with_1look_not_sso\" });\n      dispatch(\n        commonActions.Actions.flashAddAlert(\n          FlashLevels.warning,\n          \"You are unable to use the 1LOOK integration until your account has been migrated to SSO. Please contact Support\",\n        ),\n      );\n      return;\n    }\n\n    // If they are 1LOOK enabled and SSO, run getLocations check\n    dispatch(OneLookAsyncActions.getLocations(true));\n  }, [oneLookAuthorized, dispatch]);\n\n  if (!enabled) {\n    return null;\n  }\n\n  return (\n    <Track>\n      <SlideSetup />\n      <Modal show={true} onHide={handleClose} size=\"xl\" dialogClassName=\"enhanced-price-presentation-modal\">\n        <SlideContainer />\n        <SlideNavigation handleClose={handleClose} />\n      </Modal>\n    </Track>\n  );\n};\n","import { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\nimport { OneLookAsyncActions } from \"app2/src/reducers/oneLook.async.actions\";\nimport { hasOneLookMetadata, oneLookLocations } from \"app2/src/selectors/oneLook.selectors\";\nimport * as React from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { RsfForm, Select } from \"@tberrysoln/rsf-form\";\nimport { Record } from \"immutable\";\nimport * as rsfFormActions from \"app2/src/reducers/rsfForm.actions\";\nimport { SnakeToCapitalized } from \"app2/src/helpers/Format\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { IAuthService } from \"app2/src/helpers/Auth.service\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { useParams } from \"react-router\";\nimport { estimate as estimateSelector } from \"app2/src/selectors/estimate.selectors\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { RootState } from \"app2/src/reducers\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { useTracking } from \"react-tracking\";\nimport { OneLookLocationRecord } from \"app2/src/records/OneLookLocation\";\n\nexport const FinanceApplicationModal: React.FC = () => {\n  // Hooks\n  const dispatch = useDispatch();\n  const { goBack } = usePreviousPath();\n  const params = useParams<{ estimateId: string }>();\n  const estimateId = parseInt(params.estimateId);\n  const { trackEvent } = useTracking();\n\n  // Refs to prevent multiple executions\n  const hasShownMetadataWarning = React.useRef(false);\n  const hasShownSsoWarning = React.useRef(false);\n  const hasCleared = React.useRef(false);\n  const prevLocationCode = React.useRef<string | undefined>(undefined);\n\n  // Selectors\n  const locations = useSelector(oneLookLocations);\n  const currentLocationCode = useSelector((state: RootState) =>\n    state.getIn([\"rsfForms\", \"byForm\", \"oneLookFinanceApplication\", \"location\"]),\n  );\n  const currentMethod = useSelector((state: RootState) =>\n    state.getIn([\"rsfForms\", \"byForm\", \"oneLookFinanceApplication\", \"method\"]),\n  );\n  const currentProduct = useSelector((state: RootState) =>\n    state.getIn([\"rsfForms\", \"byForm\", \"oneLookFinanceApplication\", \"product\"]),\n  );\n\n  // Derive the selected location record directly from Redux state so Method/Product\n  // options update in the same render as the location selection — no effect batching needed.\n  const selectedLocation = React.useMemo<OneLookLocationRecord | null>(\n    () => (currentLocationCode ? (locations.find((l) => l.code === currentLocationCode) ?? null) : null),\n    [currentLocationCode, locations],\n  );\n  const estimate = useSelector((state: RootState) => estimateSelector(state, { estimateId }));\n  const hasMetadata = useSelector((state: RootState) => hasOneLookMetadata(state, { estimateId }));\n\n  // Methods\n  const close = () => {\n    goBack(\"/finance_application\");\n  };\n\n  const submit = async () => {\n    hasShownMetadataWarning.current = true;\n\n    trackEvent({ action: \"submit finance application\" });\n    const newWindow = window.open(\"\", \"_blank\");\n    await dispatch(OneLookAsyncActions.submitApplication(estimate.id, estimate.total, newWindow));\n    goBack(\"/finance_application\");\n  };\n  const cancel = () => {\n    trackEvent({ action: \"cancel finance application\" });\n    close();\n  };\n\n  // Lifecycle\n  React.useEffect(() => {\n    const authService = StoreRegistry.get<IAuthService>(\"authService\");\n\n    if (!hasShownSsoWarning.current && authService && (authService as any).getIdp() !== \"occ\") {\n      hasShownSsoWarning.current = true;\n      dispatch(\n        commonActions.Actions.flashAddAlert(\n          FlashLevels.danger,\n          \"You are unable to use the 1LOOK integration until your account has been migrated to SSO. Please contact Support\",\n        ),\n      );\n\n      const $rootScope: RsfRootScope = StoreRegistry.get(\"$rootScope\");\n      goBack(\"/finance_application\");\n      $rootScope.$digest();\n      return;\n    }\n\n    if (!hasShownMetadataWarning.current && hasMetadata) {\n      hasShownMetadataWarning.current = true;\n      dispatch(\n        commonActions.Actions.flashAddAlert(\n          FlashLevels.warning,\n          \"You have already completed a finance application for this estimate.\\nIf you would like to access the completed finance application, please go to 1LOOK. If you would like to submit a new finance application, please create a new estimate or duplicate the current estimate.\",\n        ),\n      );\n      const $rootScope: RsfRootScope = StoreRegistry.get(\"$rootScope\");\n      goBack(\"/finance_application\");\n      $rootScope.$digest();\n      return;\n    }\n  }, [dispatch, goBack, hasMetadata]);\n\n  React.useEffect(() => {\n    if (locations.size <= 0) {\n      dispatch(OneLookAsyncActions.getLocations());\n    }\n\n    // cleanup.  doing it in the useEffect cleanup was having unusual effects, something is unmounting in this chain of components\n    if (!hasCleared.current) {\n      dispatch(rsfFormActions.Actions.initializeForm(\"oneLookFinanceApplication\", {}));\n      hasCleared.current = true;\n      prevLocationCode.current = undefined;\n      return;\n    }\n\n    // When the user actively changes the location, reset method and product to null so\n    // they are forced to re-select for the new location.\n    if (currentLocationCode && currentLocationCode !== prevLocationCode.current && selectedLocation) {\n      prevLocationCode.current = currentLocationCode;\n      dispatch(\n        rsfFormActions.Actions.initializeForm(\n          \"oneLookFinanceApplication\",\n          Record({\n            location: selectedLocation.get(\"code\"),\n            method: null,\n            product: null,\n          })(),\n        ),\n      );\n    } else if (!currentLocationCode) {\n      prevLocationCode.current = undefined;\n    }\n  }, [locations, currentLocationCode, selectedLocation, dispatch]);\n\n  React.useEffect(() => {\n    if (!estimate) {\n      dispatch(estimateActions.AsyncActions.getEstimate(estimateId));\n    }\n  }, [estimate, dispatch, estimateId]);\n  return (\n    <Modal show={true} onHide={cancel} size=\"sm\">\n      <Modal.Header closeButton>\n        <Modal.Title>1LOOK Financing</Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        <SpinnerComponent stateProperty={[\"oneLook\", \"loading\"]} />\n        <SpinnerComponent localProperty={estimate?.loading} />\n        <RsfForm\n          rootPath={[\"rsfForms\", \"byForm\", \"oneLookFinanceApplication\"]}\n          updateFormReducer={rsfFormActions.Actions.update}\n          onSubmit={() => null}>\n          <Select label=\"Location\" name=\"location\">\n            <option value=\"\">Select a location...</option>\n            {locations &&\n              locations.map((loc, idx) => (\n                <option key={idx} value={loc?.get(\"code\")}>\n                  {loc?.get(\"name\")}\n                </option>\n              ))}\n          </Select>\n          <Select label=\"Method\" name=\"method\">\n            <option value=\"\">Select a method...</option>\n            {selectedLocation\n              ?.get(\"create\")\n              ?.keySeq()\n              .toArray()\n              .map((method) => (\n                <option key={method} value={method}>\n                  {SnakeToCapitalized(method)}\n                </option>\n              ))}\n          </Select>\n          <Select label=\"Product\" name=\"product\">\n            <option value=\"\">Select a product...</option>\n            {selectedLocation?.get(\"products\").map((product) => (\n              <option key={product} value={product}>\n                {SnakeToCapitalized(product)}\n              </option>\n            ))}\n          </Select>\n        </RsfForm>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button variant=\"secondary\" onClick={cancel}>\n          Close\n        </Button>\n        <Button onClick={submit} disabled={!currentLocationCode || !currentMethod || !currentProduct}>\n          Submit\n        </Button>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n","import { FC } from \"react\";\nimport * as React from \"react\";\nimport Form from \"@rjsf/core\";\nimport validator from \"@rjsf/validator-ajv6\";\nimport { jobResultingOptionWithProcessedSchema } from \"app2/src/selectors/org.selectors\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Button } from \"react-bootstrap\";\nimport { customForm as customFormSelector } from \"app2/src/selectors/customForm.selectors\";\nimport { Actions, AsyncActions } from \"app2/src/reducers/customForm.actions\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { Spinner } from \"app2/src/components/SpinnerComponent\";\nimport { RootState } from \"app2/src/reducers\";\n\ninterface ResultFormProps {\n  handleClose: () => void;\n  customFormId: string;\n}\n\nexport const ResultForm: FC<ResultFormProps> = ({ handleClose, customFormId }) => {\n  // Hooks\n  const dispatch = useDispatch();\n\n  // Selectors\n  const option = useSelector((state: RootState) => jobResultingOptionWithProcessedSchema(state, { id: customFormId }));\n  const customForm = useSelector((state: RootState) => customFormSelector(state, { id: customFormId }));\n  const formData = customForm?.get(\"form_data\")?.toJS() || {};\n  const jobId = useSelector(currentJobId);\n\n  // Constants - processed schema and uiSchema come from selector\n  const schema = option?.get(\"schema\")?.toJS();\n  const uiSchema = option?.get(\"uiSchema\")?.toJS();\n\n  // Methods\n  const handleChange = (data: any) => {\n    dispatch(Actions.updateCustomFormRJSF(customForm?.get(\"id\"), data.formData));\n  };\n\n  const handleSubmit = async (data: any) => {\n    dispatch(AsyncActions.updateOrCreateCustomForm(jobId, customForm, handleClose));\n  };\n\n  if (!schema && formData.result) {\n    return <div>No schema found. Please contact support.</div>;\n  }\n\n  if (!schema) {\n    return null;\n  }\n\n  return (\n    <>\n      <Spinner localProperty={customForm?.get(\"loading\")} />\n      <Form\n        schema={schema}\n        uiSchema={uiSchema}\n        formData={formData}\n        validator={validator}\n        omitExtraData={true}\n        liveOmit={true}\n        showErrorList=\"top\"\n        onChange={handleChange}\n        onSubmit={handleSubmit}\n        templates={{ ButtonTemplates: { SubmitButton: CustomSubmitButton } }}\n      />\n    </>\n  );\n};\n\nconst CustomSubmitButton = (props: any) => {\n  return (\n    <Button className=\"pull-right\" type=\"submit\" style={{ minWidth: \"100px\" }}>\n      {props.uiSchema[\"ui:submitButtonOptions\"]?.submitText || \"Submit\"}\n    </Button>\n  );\n};\n","import DirtyWatcher from \"app2/src/components/Common/DirtyWatcher\";\nimport { RootState } from \"app2/src/reducers\";\nimport { Actions } from \"app2/src/reducers/rsfForm.actions\";\nimport { Actions as CustomFormActions } from \"app2/src/reducers/customForm.actions\";\nimport { customForm, customFormChanged } from \"app2/src/selectors/customForm.selectors\";\nimport { jobResultingOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport { List } from \"immutable\";\nimport { FC } from \"react\";\nimport * as React from \"react\";\nimport { Button, ButtonGroup, Col, Row } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Select from \"react-select\";\n\ninterface ResultToggleProps {\n  customFormId: string;\n}\n\nexport const ResultToggle: FC<ResultToggleProps> = ({ customFormId }) => {\n  // Hooks\n  const dispatch = useDispatch();\n\n  // Selectors\n  const config = useSelector(jobResultingOrgPrefConfig);\n  const options = config?.get(\"options\") || List();\n  const customFormRecord = useSelector((state: RootState) => customForm(state, { id: customFormId }));\n  const result = customFormRecord?.getIn([\"form_data\", \"result\"]);\n  const dirty = useSelector((state: RootState) => customFormChanged(state, { id: customFormId }));\n\n  // Methods\n  const onChange = (value: any) => {\n    dispatch(\n      Actions.update({\n        rootPath: [\"customForms\", \"byId\", customFormId, \"form_data\"],\n        name: \"result\",\n        value,\n      }),\n    );\n  };\n\n  const check = () => {\n    return dirty;\n  };\n\n  const reset = () => {\n    dispatch(CustomFormActions.resetCustomForm(customFormId));\n  };\n\n  return (\n    <Row>\n      <Col>\n        <DirtyWatcher check={check} reset={reset} reactRouter />\n        {options.size <= 3 ? (\n          <ButtonGroup className=\"d-flex w-100 mb-2\">\n            {options.map((option) => (\n              <Button\n                key={option.get(\"name\")}\n                variant={result === option.get(\"name\") ? \"primary\" : \"light\"}\n                onClick={() => onChange(option.get(\"name\"))}>\n                {option.get(\"name\")}\n              </Button>\n            ))}\n          </ButtonGroup>\n        ) : (\n          <Select\n            className=\"mb-2\"\n            defaultValue={result || []}\n            options={options.toJS()}\n            onChange={(value) => onChange(value.name)}\n            getOptionValue={(x: any) => x.name.toString()}\n            getOptionLabel={(x: any) => x.name.toString()}\n          />\n        )}\n      </Col>\n    </Row>\n  );\n};\n","import { ResultForm } from \"app2/src/components/JobResultModal/ResultForm\";\nimport { ResultToggle } from \"app2/src/components/JobResultModal/ResultToggle\";\nimport { usePreviousPath } from \"app2/src/hooks/usePreviousPath\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentPage } from \"app2/src/selectors/pagination.selectors\";\nimport { FC } from \"react\";\nimport * as React from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { useParams } from \"react-router\";\n\nexport const JobResultModal: FC = () => {\n  // Hooks\n  const { goBack } = usePreviousPath();\n  let { customFormId } = useParams<{ customFormId: string }>();\n  if (customFormId === \"new\") {\n    customFormId = \"0\";\n  }\n\n  // Selectors\n  const page = useSelector((state: RootState) => currentPage(state, { modelName: \"jobResultingForms\" }));\n\n  // Methods\n  const handleClose = () => {\n    goBack(\"/job_result\");\n  };\n\n  React.useEffect(() => {\n    if (!page) {\n      handleClose();\n    }\n  }, []);\n\n  return (\n    <Modal show={true} dialogClassName=\"job-result-modal\" size=\"lg\" onHide={handleClose}>\n      <Modal.Header closeButton>\n        <Modal.Title>Edit Job Result</Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        <ResultToggle customFormId={customFormId} />\n        <ResultForm customFormId={customFormId} handleClose={handleClose} />\n      </Modal.Body>\n    </Modal>\n  );\n};\n","import * as React from \"react\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { connect, ConnectedProps } from \"app2/src/connect\";\nimport { history } from \"app2/src/store\";\nimport track from \"react-tracking\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { Switch, Route, useRouteMatch, Redirect } from \"react-router-dom\";\nimport ImageTab from \"app2/src/components/JobTabs/ImageTab\";\nimport { currentJobId, currentJobName, jobLoading } from \"app2/src/selectors/job.selectors\";\nimport DocumentTab from \"app2/src/components/JobTabs/DocumentTab\";\nimport { ConnectedRouter } from \"connected-react-router/immutable\";\nimport { PresentationRouting } from \"app2/src/components/JobTabs/PresentationTab/PresentationRouting\";\nimport SpinnerComponent from \"app2/src/components/SpinnerComponent\";\nimport NoteTab from \"app2/src/components/JobTabs/NoteTab\";\nimport Homevest from \"app2/src/components/Homevest\";\nimport { PaymentsModal } from \"app2/src/components/PaymentsModal\";\nimport AppointmentsTab from \"./AppointmentsTab\";\nimport { SignaturesTab } from \"./SignaturesTab\";\nimport { MeasurementTab } from \"./MeasurementTab\";\nimport { ProposalsTab } from \"./ProposalsTab\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { pathname } from \"app2/src/selectors/router.selectors\";\nimport { AsyncActions } from \"app2/src/reducers/components/common.actions\";\nimport { IPretty } from \"app/src/Common/PrettyNameService\";\nimport * as config from \"react-global-configuration\";\nimport { getTitle } from \"app2/src/selectors/org.selectors\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { ContractsTab } from \"./ContractsTab\";\nimport ToolsTab from \"./ToolsTab\";\nimport { EmailOrderCsvModal } from \"app2/src/components/JobTabs/EstimateTab/EmailOrderCsvModal\";\nimport { ManualTriggerModal } from \"./EstimateTab/ManualTriggerModal\";\nimport { CustomForm } from \"app2/src/components/JobTabs/InfoTab/CustomForm\";\nimport { CustomFormSignatureRequest } from \"app2/src/components/JobTabs/InfoTab/CustomForm/SignatureRequest/SignatureRequest\";\nimport { EnhancedPricePresentationModal } from \"app2/src/components/JobTabs/EstimateTab/EnhancedPricePresentationModal\";\nimport { FinanceApplicationModal } from \"app2/src/components/JobTabs/EstimateTab/OneLook/FinanceApplicationModal\";\nimport { JobResultModal } from \"app2/src/components/JobResultModal\";\n\nconst mapStateToProps = (state: RootState) => {\n  return {\n    jobLoading: jobLoading(state),\n    jobId: currentJobId(state),\n    orgId: currentOrgId(state),\n    path: pathname(state),\n    jobName: currentJobName(state),\n    estimatorName: getTitle(state, { documentType: \"estimator\" }),\n    estimateName: getTitle(state, { documentType: \"estimate\" }),\n    contractName: getTitle(state, { documentType: \"contract\" }),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch<RootState, {}, RootActions>, ownProps: JobTabsProps) => {\n  return {\n    setPageTitle: (pageTitle: string) => {\n      return dispatch(AsyncActions.setPageTitle(pageTitle));\n    },\n  };\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface JobTabsProps {}\n\ninterface JobTabsState {}\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & JobTabsProps;\n@track(\n  (props) => {\n    return {\n      component: \"JobTabs\",\n      job: props.jobId,\n      org: props.orgId,\n    };\n  },\n  {\n    dispatch: Dispatch.dispatch,\n  },\n)\nclass JobTabs extends React.Component<Props, JobTabsState> {\n  constructor(props: Props) {\n    super(props);\n  }\n\n  public componentDidUpdate(prevProps: Readonly<Props>, prevState: Readonly<JobTabsState>, snapshot?: any): void {\n    const pretty: IPretty = StoreRegistry.get(\"Pretty\");\n    const { path, jobName, estimatorName, setPageTitle, contractName, estimateName } = this.props;\n    const page = path.split(\"/\")[3];\n\n    if (jobName && page) {\n      let pageName;\n      switch (page) {\n        case \"estimates\":\n          pageName = estimatorName;\n          break;\n        case \"contracts\":\n          pageName = contractName + \"s\";\n          break;\n        case \"proposals\":\n          pageName = estimateName + \"s\";\n          break;\n\n        default:\n          pageName = pretty.name[page];\n      }\n      const pageTitle = `${jobName}: ${pageName} - ${config.get(\"APP_NAME_SHORT\")}`;\n      setPageTitle(pageTitle);\n    }\n  }\n\n  public render() {\n    const { jobLoading } = this.props;\n\n    return (\n      <ConnectedRouter history={history}>\n        <Switch>\n          <Route path={\"/jobs/:jobId\"}>{jobLoading ? <SpinnerComponent localProperty={true} /> : <JobRoutes />}</Route>\n        </Switch>\n      </ConnectedRouter>\n    );\n  }\n}\n\nexport default connector(JobTabs);\n\nconst JobRoutes = () => {\n  const match = useRouteMatch();\n\n  return (\n    <Switch>\n      <Route\n        path={`${match.url}/info/custom_form/:customFormId/signature_request`}\n        component={CustomFormSignatureRequest}\n      />\n      <Route path={`${match.url}/info/custom_form`} component={CustomForm} />\n      <Route path={`${match.url}/info/job_result/:customFormId`} component={JobResultModal} />\n      <Route path={`${match.url}/info/payments`} component={PaymentsModal} />\n      <Route path={`${match.url}/info`} />\n      <Route path={`${match.url}/appointments`} component={AppointmentsTab} />\n      <Route path={`${match.url}/property`} />\n      <Route path={`${match.url}/tools`} component={ToolsTab} />\n      <Route path={`${match.url}/images`} component={ImageTab} />\n      <Route path={`${match.url}/documents`} component={DocumentTab} />\n      <Route path={`${match.url}/measurements`} component={MeasurementTab} />\n      <Route path={`${match.url}/inspection`} />\n      <Route path={`${match.url}/notes`} component={NoteTab} />\n      <Route path={`${match.url}/history`} />\n      <Route path={`${match.url}/presentations`} component={PresentationRouting} />\n      <Route path={`${match.url}/design-tools`} />\n      <Route path={`${match.url}/estimates/:estimateId/homevest`} component={Homevest} />\n      <Route path={`${match.url}/estimates/:estimateId/email_order_csv`} component={EmailOrderCsvModal} />\n      <Route path={`${match.url}/estimates/:estimateId/manual_trigger`} component={ManualTriggerModal} />\n      <Route path={`${match.url}/estimates/:estimateId/present`} component={EnhancedPricePresentationModal} />\n      <Route path={`${match.url}/estimates/:estimateId/finance_application`} component={FinanceApplicationModal} />\n      <Route path={`${match.url}/estimates`} />\n      <Route path={`${match.url}/price`} />\n      <Route path={`${match.url}/:jobTab/:estimateId/payments`} component={PaymentsModal} />\n      <Route path={`${match.url}/:jobTab/payments`} component={PaymentsModal} />\n      <Route path={`${match.url}/proposals`} component={ProposalsTab} />\n      <Route path={`${match.url}/contracts`} component={ContractsTab} />\n      <Route path={`${match.url}/signatures`} component={SignaturesTab} />\n      <Route path={`${match.url}`} render={() => <Redirect to={`${match.url}/info`} />} />\n      <Route render={() => <Redirect to=\"/jobs\" />} />\n    </Switch>\n  );\n};\n","import * as React from \"react\";\nimport { connect } from \"app2/src/connect\";\nimport { history } from \"app2/src/store\";\nimport { ConnectedRouter } from \"connected-react-router/immutable\";\n\nconst connector = connect(null, null);\n\ninterface ConnectorProps {}\n\ninterface ConnectorState {}\n\nclass Connector extends React.Component<ConnectorProps, ConnectorState> {\n  constructor(props: ConnectorProps) {\n    super(props);\n  }\n\n  public render() {\n    return <ConnectedRouter history={history}></ConnectedRouter>;\n  }\n}\n\nexport default connector(Connector);\n","import { Workbox } from \"workbox-window\";\n\nconst serviceWorkerExpiration = 1800000;\n\nexport const setupServiceWorker = async function (\n  globalNavigator: Navigator,\n  globalWindow: Window,\n  globalLocalStorage: Storage,\n): Promise<void> {\n  try {\n    globalLocalStorage.setItem(\"serviceWorkerUpdateExpiration\", Date.now().toString());\n    const registration = await globalNavigator.serviceWorker.register(\"/service-worker.js\");\n    registration.addEventListener(\"updatefound\", () => {\n      const wb = new Workbox(\"/service-worker.js\");\n\n      const showSkipWaiting = () => {\n        checkForUpdate(wb, globalNavigator, globalWindow, globalLocalStorage);\n      };\n\n      wb.addEventListener(\"waiting\", showSkipWaiting);\n\n      wb.register();\n    });\n\n    await globalNavigator.serviceWorker.ready;\n    if (!globalNavigator.serviceWorker.controller) {\n      globalWindow.location.reload();\n    }\n  } catch (error) {\n    console.error(\"ServiceWorker registration failed\", error);\n  }\n};\n\nexport const checkForUpdate = (\n  reg: any,\n  globalNavigator: Navigator,\n  globalWindow: Window,\n  globalLocalStorage: Storage,\n) => {\n  if (!globalNavigator.serviceWorker.controller) {\n    console.error(\"No service worker controller found, do nothing\");\n    return;\n  }\n\n  const expiration = globalLocalStorage.getItem(\"serviceWorkerUpdateExpiration\");\n\n  if (expiration) {\n    const expirationDate = new Date(parseInt(expiration, 10));\n    const now = new Date();\n\n    if (now > expirationDate) {\n      globalWindow.location.reload();\n    }\n  } else {\n    globalLocalStorage.setItem(\"serviceWorkerUpdateExpiration\", (Date.now() + serviceWorkerExpiration).toString());\n    globalWindow.location.reload();\n  }\n};\n","import { pathname } from \"app2/src/selectors/router.selectors\";\nimport * as React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as config from \"react-global-configuration\";\nimport { connectFC } from \"app2/src/connect\";\nimport { pageTitle as pageTitleSelector } from \"app2/src/selectors/components/common.selectors\";\nimport { Actions } from \"app2/src/reducers/components/common.actions\";\n\nexport const PageTitleUpdater: React.FC = () => {\n  const dispatch = useDispatch();\n  const path = useSelector(pathname);\n  const pageTitle = useSelector(pageTitleSelector);\n\n  const updateTitle = (pageTitle: string) => {\n    document.title = pageTitle;\n  };\n\n  const debouncedUpdateTitle = React.useCallback(_.debounce(updateTitle, 100), []);\n\n  React.useEffect(() => {\n    debouncedUpdateTitle(pageTitle || config.get(\"APP_NAME_SHORT\"));\n  }, [pageTitle]);\n\n  React.useEffect(() => {\n    dispatch(Actions.setPageTitle(\"\"));\n  }, [path]);\n\n  return <></>;\n};\n\nexport default connectFC(PageTitleUpdater);\n","const urlMap: Array<[string, string]> = [\n  [\"^/orgs/global_stats\", \"orgs\"],\n  [\"^/orgs/patterns\", \"system_settings/patterns\"],\n  [\"^/orgs/(\\\\d+)/price_list_editor/(\\\\d+)/editor\", \"orgs/:id/products/editor/:priceListId\"],\n  [\"^/orgs/(\\\\d+)/integrations/.+\", \"orgs/:id/integrations\"],\n  [\"^/orgs/(\\\\d+)/duplicate_data\", \"orgs/:id/info/duplicate\"],\n  [\"^/orgs/(\\\\d+)/price_list_editor\", \"orgs/:id/products\"],\n  [\"^/orgs/(\\\\d+)/measurement_links\", \"orgs/:id/products/links\"],\n  [\"^/orgs/(\\\\d+)/payment_terms\", \"orgs/:id/financing\"],\n  [\"^/orgs/(\\\\d+)/job_attributes\", \"orgs/:id/settings\"],\n  [\"^/orgs/(\\\\d+)/price_lists\", \"orgs/:id/products\"],\n  [\"^/orgs/(\\\\d+)/notifications\", \"orgs/:id/settings\"],\n  [\"^/orgs/(\\\\d+)/preferences\", \"orgs/:id/settings\"],\n  [\"^/orgs/(\\\\d+)/integrations\", \"orgs/:id/integrations\"],\n  [\"^/orgs/(\\\\d+)/presentations\", \"orgs/:id/presentations\"],\n  [\"^/orgs/(\\\\d+)/documents\", \"orgs/:id/documents\"],\n  [\"^/orgs/(\\\\d+)/discounts\", \"orgs/:id/financing\"],\n  [\"^/orgs/(\\\\d+)/webhooks\", \"orgs/:id/webhooks\"],\n  [\"^/orgs/(\\\\d+)/settings\", \"orgs/:id/settings\"],\n  [\"^/orgs/(\\\\d+)/patterns\", \"orgs/:id/documents/patterns\"],\n  [\"^/orgs/(\\\\d+)/billing\", \"orgs/:id/info\"],\n  [\"^/orgs/(\\\\d+)/users\", \"orgs/:id/users\"],\n  [\"^/orgs/(\\\\d+)/setup\", \"orgs/:id/estimator\"],\n  [\"^/orgs/(\\\\d+)/stats\", \"orgs/:id/info\"],\n  [\"^/orgs/(\\\\d+)/emails\", \"orgs/:id/info\"],\n  [\"^/orgs/(\\\\d+)/jobs\", \"orgs/:id/jobs\"],\n  [\"^/orgs/(\\\\d+)/orgs\", \"orgs/:id/child_orgs\"],\n  [\"^/orgs/(\\\\d+)/info\", \"orgs/:id/info\"],\n  [\"^/orgs/(\\\\d+)\", \"orgs/:id\"],\n  [\"^/orgs\", \"orgs\"],\n];\n\nexport const occAppRedirect = (urlPath: string): string | null => {\n  for (const [pattern, redirectTemplate] of urlMap) {\n    const regex = new RegExp(pattern);\n    const match = urlPath.match(regex);\n\n    // the match groups in the regex's replace the automatic param parsing of ui-router, used for org :id, and :price_list_id\n    if (match) {\n      let redirectUrl = redirectTemplate;\n\n      // if there was a first match group, it's :id for the orgs we're dealing with\n      if (match[1]) {\n        redirectUrl = redirectUrl.replace(\":id\", match[1]);\n      }\n\n      // if there was a second match group, that was an integer, it's the priceListId\n      if (match[2] && /^\\d+$/.test(match[2])) {\n        redirectUrl = redirectUrl.replace(\":priceListId\", match[2]);\n      }\n\n      return redirectUrl;\n    }\n  }\n\n  // No match found\n  return null;\n};\n","import { IOrg, IOrgResource } from \"app/src/Models/Org\";\nimport { IUserResource } from \"app/src/Models/User\";\nimport { IImageResource } from \"app/src/Models/Image\";\nimport { IOrgData, includeCheck, fromJSON as orgFromJSON } from \"app2/src/records/OrgRecord\";\nimport { orgService } from \"app2/src/api/org.service\";\n\nexport interface IOrgFetcherService {\n  $q: ng.IQService;\n  Org: IOrgResource;\n  org: IOrg;\n  orgPromise: ng.IPromise<IOrg>;\n\n  loadOrg(id: number): ng.IPromise<IOrg>;\n  reloadOrg(id: number): ng.IPromise<IOrg>;\n  getParent(id: number): ng.IPromise<IOrg>;\n  getTree(id: number, object: number): ng.IPromise<any>;\n  save(org: IOrg): ng.IPromise<IOrg>;\n  resetState();\n  checkState(): boolean;\n}\n\nexport class OrgFetcherService implements IOrgFetcherService {\n  public org: IOrg;\n  public orgPromise: ng.IPromise<IOrg>;\n  private tree: any = [];\n  private notInTree: any = [];\n  private treeDeferred: ng.IPromise<any>[] = [];\n  private _originalState: any;\n\n  public static $inject = [\"Org\", \"User\", \"Image\", \"$q\"];\n\n  constructor(\n    public Org: IOrgResource,\n    public User: IUserResource,\n    public Image: IImageResource,\n    public $q: ng.IQService,\n  ) {}\n\n  public loadOrg(id: number): ng.IPromise<IOrg> {\n    const reduxOrg = orgService.getStoredOrg(id);\n    orgService.setCurrentOrgId(id);\n\n    if (reduxOrg) {\n      if (reduxOrg.get(\"loading\") && this.orgPromise) {\n        return this.orgPromise;\n      } else if (includeCheck(reduxOrg, orgService.orgIncludes)) {\n        this.org = this.Org.fromJSON(reduxOrg.toJS());\n        this.orgPromise = this.$q.resolve(this.org);\n        this.resetState();\n        return this.orgPromise;\n      }\n    }\n    return this.reloadOrg(id);\n  }\n\n  public save(org: IOrg): ng.IPromise<IOrg> {\n    this.orgPromise = this.reduxSave(org).then((org: IOrg) => {\n      this.org = org;\n      this.resetState();\n      return this.org;\n    });\n    return this.orgPromise;\n  }\n\n  public reloadOrg(id: number): ng.IPromise<IOrg> {\n    this.orgPromise = this.get(id, true).then((org: IOrg) => {\n      this.org = org;\n      this.resetState();\n      return this.org;\n    });\n    return this.orgPromise;\n  }\n\n  public getParent(id: number): ng.IPromise<IOrg> {\n    const reduxOrg = orgService.getStoredOrg(id);\n\n    if (reduxOrg) {\n      return this.$q.resolve(this.Org.fromJSON(reduxOrg.toJS()));\n    } else {\n      return this.get(id).then((org: IOrg) => {\n        return org;\n      });\n    }\n  }\n\n  public getTree(id: number, childID: number): ng.IPromise<any> {\n    const deferred = this.$q.defer();\n    return this.$q.all(this.treeDeferred).then(() => {\n      if (_.contains(this.tree, childID)) {\n        deferred.resolve(true);\n        return deferred.promise;\n      } else if (_.contains(this.notInTree, childID)) {\n        deferred.resolve(false);\n        return deferred.promise;\n      } else {\n        const tree = this.Org.tree({ id: id, child: childID }).$promise.then((resp: any) => {\n          if (resp.id) {\n            this.tree.push(resp.id);\n            return true;\n          } else {\n            this.notInTree.push(childID);\n            return false;\n          }\n        });\n        this.treeDeferred.push(tree);\n        return tree;\n      }\n    });\n  }\n\n  public resetState() {\n    this._originalState = angular.toJson(this.org);\n  }\n\n  public checkState(): boolean {\n    if (!this.org) {\n      return false;\n    }\n    return this._originalState !== \"\" && this._originalState !== angular.toJson(this.org);\n  }\n\n  protected get(id: number, set_current_org = false): ng.IPromise<IOrg> {\n    const orgPromise = orgService.getOrg(id, set_current_org);\n    return this.setupOrg(orgPromise);\n  }\n\n  protected reduxSave(org: IOrg): ng.IPromise<IOrg> {\n    const orgData: IOrgData = JSON.parse(JSON.stringify(org));\n    const orgPromise = orgService.updateOrg(orgFromJSON(orgData));\n    return this.setupOrg(orgPromise);\n  }\n\n  protected setupOrg(orgPromise): ng.IPromise<IOrg> {\n    const deferred = this.$q.defer();\n\n    orgPromise.then(\n      (orgData: IOrgData) => {\n        deferred.resolve(this.Org.fromJSON(orgFromJSON(orgData).toJS()));\n      },\n      (errors: string[]) => {\n        console.error(errors);\n        deferred.reject(errors);\n      },\n    );\n\n    return deferred.promise as ng.IPromise<IOrg>;\n  }\n}\n","import \"./preload\";\nimport \"./Vendor\";\nimport \"./templates.js\";\n\nimport \"app2/src/Ioc\";\nimport { StoreRegistry, dispatch } from \"app2/src/storeRegistry\";\nimport * as angular from \"angular\";\nimport * as ng from \"angular\";\nimport * as moment from \"moment\";\nimport { IBaseConfig } from \"app/src/Common/IBaseConfig\";\nimport { TransitionService, Transition } from \"@uirouter/core\";\nimport { HeaderCtrl } from \"app/src/Header/HeaderCtrl\";\nimport { Session, ISession } from \"app/src/Common/SessionService\";\nimport { RsfPermissions } from \"app/src/Common/PermissionsDirective\";\nimport { RsfConfirmationDialog } from \"app/src/Common/ConfirmationDialogDirective\";\nimport { DecimalPlaces } from \"app/src/Common/DecimalPlacesDirective\";\nimport { JobAnalytics } from \"app/src/Common/JobAnalyticsDirective\";\nimport { us_states, countries, us_states_abbreviation, countries_abbreviation } from \"app/src/Common/StatesConstant\";\nimport { JobRoutes } from \"app/src/Jobs/JobRoutes\";\nimport { ProductColorDropdown } from \"app/src/Estimator/ProductColorDropdown\";\nimport { HumanizeFilter } from \"app/src/Common/HumanizeFilter\";\nimport { CalendarRoutes } from \"app/src/Calendar/CalendarRoutes\";\nimport { EstimatorRoutes } from \"app/src/Estimator/EstimatorRoutes\";\nimport { ScreenShareRoutes } from \"app/src/ScreenShare/ScreenShareRoutes\";\nimport { ProfileRoutes } from \"app/src/Profile/ProfileRoutes\";\nimport { AuthHttpInterceptor } from \"app/src/Common/AuthHttpInterceptor\";\nimport { FakeFormAction } from \"app/src/Common/FakeFormAction\";\nimport { SignatureRoutes } from \"app/src/Signature/SignatureRoutes\";\nimport { SpinnerComponent } from \"app/src/Common/SpinnerComponent\";\nimport { EmbedSrc } from \"app/src/Common/EmbedSrcDirective\";\nimport { FlashService } from \"app/src/Common/FlashService\";\nimport { ConfirmDialogService } from \"app/src/Common/ConfirmDialogService\";\nimport { PaymentInfoRoutes } from \"app/src/PaymentInfo/PaymentInfoRoutes\";\nimport { ModelRoutes } from \"app/src/Models/ModelRoutes\";\nimport { LoginRoutes } from \"app/src/Login/LoginRoutes\";\nimport { VisualizationRoutes } from \"app/src/Visualization/VisualizationRoutes\";\nimport { UnitConversionService } from \"app/src/Common/UnitConversionService\";\nimport { PrettyNameService } from \"app/src/Common/PrettyNameService\";\nimport { ToolInfoService } from \"app/src/Common/ToolInfoService\";\nimport { HandlebarsHelperService } from \"app/src/Patterns/HandlebarsHelperService\";\nimport { EstimatorTourService } from \"app/src/Common/Tours/EstimatorTourService\";\nimport { JobInfoTourService } from \"app/src/Common/Tours/JobInfoTourService\";\nimport { JobShowTourService } from \"app/src/Common/Tours/JobShowTourService\";\nimport { DirtyWatcher } from \"app/src/Common/DirtyWatcher\";\nimport EventingService from \"app/src/Common/EventingFactory\";\nimport FileQueueInit from \"app/src/Common/FileQueueFactory\";\nimport MeasurementImporterFactory from \"app/src/Common/MeasurementImporterFactory\";\nimport * as Humanize from \"humanize-plus\";\nimport { IRepository, Repository } from \"app/src/Common/Repository\";\nimport { SetFocus } from \"app/src/Common/SetFocus\";\nimport { RsfTab } from \"app/src/Common/RsfTab\";\nimport { ScrollIf } from \"app/src/Common/ScrollIf\";\nimport { valid_uom, valid_kind } from \"app/src/Common/Constants\";\nimport { StartFromFilter } from \"app/src/Common/StartFromFilter\";\nimport { BillingRoutes } from \"./Billing/BillingRoutes\";\nimport { JobMenuRoutes } from \"./JobMenu/JobMenuRoutes\";\nimport { ReportRoutes } from \"./Reports/ReportRoutes\";\nimport { DrawingComponent } from \"./Drawing/DrawingComponent\";\nimport { ToolDisplayComponent } from \"./Common/Components/ToolDisplayComponent\";\nimport { RefreshButtonComponent } from \"./Common/Components/RefreshButtonComponent\";\nimport { TosHttpInterceptor } from \"./Common/TosHttpInterceptor\";\nimport { GmapsAutocompleteComponent } from \"app/src/GoogleMapsAutocomplete/GmapsAutocompleteComponent\";\nimport { LeafletMapComponent } from \"app/src/LeafletMap/LeafletMapComponent\";\nimport { RsfMapComponent } from \"app/src/RsfMap/RsfMapComponent\";\nimport { OrgActivationHttpInterceptor } from \"./Common/OrgActivationHttpInterceptor\";\nimport { SignedDocRoutes } from \"./SignedDocuments/SignedDocRoutes\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { ForbiddenHttpInterceptor } from \"./Common/ForbiddenHttpInterceptor\";\nimport * as ngResource from \"angular-resource\";\nimport * as ngMap from \"ngmap\";\nimport uiTour from \"angular-ui-tour/dist/angular-ui-tour\";\nimport { OrgAclType } from \"./Models/Org\";\nimport { react2angular } from \"react2angular\";\nimport PdfDisplay from \"app2/src/components/Pdf/PdfDisplay\";\nimport SaveablePdfDisplay from \"app2/src/components/Pdf/SaveablePdfDisplay\";\nimport FlashAlert from \"app2/src/components/Common/FlashAlert\";\nimport InviteModal from \"app2/src/components/Common/InviteModal\";\nimport ScreenShare from \"app2/src/components/ScreenShare/ScreenShare\";\nimport Toolbar from \"app2/src/components/ScreenShare/Toolbar\";\nimport Notifier from \"app2/src/components/Common/Notifier\";\nimport { ReactSelectWrapper } from \"app2/src/components/Common/ReactSelectWrapper\";\nimport UserHeaderInfo from \"app2/src/components/Common/UserHeaderInfo\";\nimport MessageBell from \"app2/src/components/Common/MessageBell\";\nimport RsfSref from \"app/src/Routing/RsfSrefDirective\";\nimport { Router as ReactRouter } from \"app2/src/helpers/Router\";\nimport JobTabs from \"app2/src/components/JobTabs\";\nimport Connector from \"app2/src/components/Common/Connector\";\nimport { push } from \"connected-react-router/immutable\";\nimport { setupServiceWorker, checkForUpdate } from \"app2/src/services/serviceWorker.service\";\nimport NgDocumentLink from \"app2/src/components/Document/NgDocumentLink\";\nimport PageTitleUpdater from \"app2/src/components/Common/PageTitleUpdater\";\nimport { currentAccessUid } from \"app2/src/reducers/auth.selectors\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { occAppRedirect } from \"./OccAppRedirect\";\nimport * as reactGlobalConfig from \"react-global-configuration\";\nimport { OrgFetcherService } from \"app/src/Orgs/OrgFetcherService\";\n\nconst modules = [\n  ModelRoutes,\n  LoginRoutes,\n  JobRoutes,\n  JobMenuRoutes,\n  EstimatorRoutes,\n  CalendarRoutes,\n  ScreenShareRoutes,\n  ProfileRoutes,\n  SignatureRoutes,\n  PaymentInfoRoutes,\n  VisualizationRoutes,\n  BillingRoutes,\n  ReportRoutes,\n  SignedDocRoutes,\n];\n\nconst app = angular\n  .module(\"RSF\", [\n    \"RSF.templates\",\n    \"RSF.globals\",\n    ngResource,\n    \"ngStorage\",\n    \"ngSanitize\",\n    \"ui.router\",\n    \"ui.bootstrap\",\n    \"ui.sortable\",\n    \"kendo.directives\",\n    \"ngFileUpload\",\n    \"ngMessages\",\n    ngMap,\n    \"angulartics\",\n    \"angulartics.rsf.analytics\",\n    \"stripe.checkout\",\n    \"infinite-scroll\",\n    \"focus-if\",\n    \"cfp.hotkeys\",\n    uiTour,\n    \"nvd3\",\n  ])\n  .config(config)\n  .constant(\"COUNTRIES\", countries)\n  .constant(\"US_STATES\", us_states)\n  .run(run);\n\nconfig.$inject = <ReadonlyArray<string>>[\n  \"$provide\",\n  \"$locationProvider\",\n  \"$stateProvider\",\n  \"$urlRouterProvider\",\n  \"$httpProvider\",\n  \"$analyticsProvider\",\n  \"StripeCheckoutProvider\",\n  \"$qProvider\",\n  \"BaseConfig\",\n  \"$uiRouterProvider\",\n];\n\nfunction config(\n  $provide: ng.auto.IProvideService,\n  $locationProvider: ng.ILocationProvider,\n  $stateProvider: ng.ui.IStateProvider,\n  $urlRouterProvider: ng.ui.IUrlRouterProvider,\n  $httpProvider: ng.IHttpProvider,\n  $analyticsProvider: angulartics.IAnalyticsServiceProvider,\n  StripeCheckoutProvider: ng.stripe.IStripeCheckoutProvider,\n  $qProvider: ng.IQProvider,\n  BaseConfig: IBaseConfig,\n  $uiRouterProvider: any,\n) {\n  ($analyticsProvider.settings as any).rsf_analytics_key = BaseConfig.RSF_ANALYTICS_KEY;\n  ($analyticsProvider.settings as any).rsf_analytics_url = BaseConfig.RSF_ANALYTICS_URL;\n  $analyticsProvider.trackExceptions(true);\n  $qProvider.errorOnUnhandledRejections(false);\n\n  $uiRouterProvider.stateService.defaultErrorHandler(_.noop());\n\n  //html5 removes the need for # in URL\n  $locationProvider\n    .html5Mode({\n      enabled: true,\n      requireBase: false,\n    })\n    .hashPrefix(\"!\");\n\n  const resolveAuth = {\n    auth: [\n      \"Session\",\n      \"$q\",\n      (Session, $q) => {\n        if (!Session.hasToken()) {\n          return $q.reject({ reason: \"unauthorized\" });\n        }\n\n        return Session.currentUser.$promise;\n      },\n    ],\n  };\n\n  $provide.constant(\"resolveAuth\", resolveAuth);\n\n  if (process.env.NODE_ENV !== \"development\" && \"serviceWorker\" in navigator) {\n    setupServiceWorker(navigator, window, sessionStorage);\n  }\n\n  $urlRouterProvider.otherwise(($injector, $location) => {\n    const $state = $injector.get(\"$state\");\n    const urlPath = $location.url();\n\n    // Check if this is an old org route that should redirect to OCC app\n    const redirectUrl = occAppRedirect(urlPath);\n    if (redirectUrl) {\n      const authUser = useSelector(currentAccessUid);\n\n      let occAppUrl = `${reactGlobalConfig.get(\"APP_V2_URL\")}/${redirectUrl}`;\n      if (authUser) {\n        occAppUrl = `${occAppUrl}?authUser=${authUser}`;\n      }\n      location.href = occAppUrl;\n      return;\n    }\n\n    $state.go(BaseConfig.DEFAULT_ROUTE);\n  });\n  $urlRouterProvider.when(\"/jobs/{id:[0-9]{1,10}|new}\", \"/jobs/:id/info\");\n  $urlRouterProvider.when(\"/orgs/{id:[0-9]{1,10}}\", \"/orgs/:id/info\");\n\n  //angular-ui-router for multiple view\n  $stateProvider.state(\"root\", <ng.ui.IState>{\n    abstract: true,\n    views: {\n      header: {\n        templateUrl: \"src/Header/header.html\",\n        controller: \"HeaderCtrl\",\n        controllerAs: \"ctrl\",\n      },\n    },\n  });\n\n  $httpProvider.interceptors.push(ForbiddenHttpInterceptor.factory);\n\n  if (BaseConfig.ENFORCE_TOS === true) {\n    $httpProvider.interceptors.push(TosHttpInterceptor.factory);\n  }\n  $httpProvider.interceptors.push(OrgActivationHttpInterceptor.factory);\n  $httpProvider.interceptors.push(AuthHttpInterceptor.factory);\n\n  _.each(modules, (routes) => {\n    //\n    routes.configure($stateProvider, resolveAuth);\n  });\n\n  StripeCheckoutProvider.defaults(<ng.stripe.IStripeCheckoutConfig>{\n    key: BaseConfig.STRIPE_KEY,\n  });\n}\n\nrun.$inject = <ReadonlyArray<string>>[\n  \"$rootScope\",\n  \"$state\",\n  \"$window\",\n  \"$location\",\n  \"Repository\",\n  \"Session\",\n  \"$transitions\",\n  \"BaseConfig\",\n  \"$uibModalStack\",\n];\nfunction run(\n  $rootScope: RsfRootScope,\n  $state: ng.ui.IStateService,\n  $window: ng.IWindowService,\n  $location: ng.ILocationService,\n  Repository: IRepository,\n  Session: ISession,\n  $transitions: TransitionService,\n  BaseConfig: IBaseConfig,\n  $uibModalStack: ng.ui.bootstrap.IModalStackService,\n) {\n  ReactRouter.setup($state);\n  StoreRegistry.set(\"$state\", $state);\n  StoreRegistry.set(\"$location\", $location);\n  StoreRegistry.set(\"$rootScope\", $rootScope);\n  StoreRegistry.set(\"Pretty\", new PrettyNameService());\n  StoreRegistry.set(\"Session\", Session);\n  $transitions.onFinish({}, ({ router }) => {\n    Session.stripAuthUser();\n  });\n\n  $transitions.onStart({}, (transition: Transition) => {\n    $rootScope.$broadcast(\"RSF_StateChange\", { transition: transition });\n    const fromUrl = $location.url();\n    transition.onSuccess(\n      {},\n      async () => {\n        if (fromUrl !== $location.url()) {\n          dispatch(push($location.url()));\n        }\n\n        if (process.env.NODE_ENV !== \"development\" && \"serviceWorker\" in navigator) {\n          const regs = await navigator.serviceWorker.getRegistrations();\n          regs.forEach((reg) => {\n            if (reg.waiting) {\n              reg.waiting?.postMessage({ type: \"SKIP_WAITING\" });\n              checkForUpdate(reg.waiting, navigator, window, localStorage);\n            } else {\n              reg.update();\n            }\n          });\n        }\n      },\n      { priority: -1 },\n    );\n  });\n\n  $transitions.onError({}, function (trans: Transition) {\n    if (trans.error().detail && trans.error().detail.reason === \"unauthorized\") {\n      $rootScope.$broadcast(\"auth:logout\");\n      $rootScope.savedState = trans.$to().name;\n      $rootScope.savedParams = trans.$to().params;\n      $state.go(StoreRegistry.get<any>(\"authService\").getLoginRoute(), {\n        routeTo: trans.to(),\n        routeParams: trans.params(),\n      });\n    }\n  });\n\n  window.addEventListener(\"beforeunload\", function (e) {\n    const confirmation: any = {};\n    const event = $rootScope.$broadcast(\"onBeforeUnload\", confirmation);\n    if (event.defaultPrevented) {\n      e.returnValue = confirmation[\"message\"];\n      return confirmation[\"message\"];\n    }\n  });\n\n  $window.onunload = function () {\n    $rootScope.$broadcast(\"onUnload\");\n  };\n\n  $rootScope.underscore = _;\n  $rootScope.Humanize = Humanize;\n  $rootScope.OrgAclType = OrgAclType;\n\n  $rootScope.moment = moment;\n  $rootScope.setAppName = () => {\n    return BaseConfig.APP_NAME;\n  };\n  $rootScope.setCompanyName = () => {\n    return BaseConfig.COMPANY_NAME;\n  };\n  $rootScope.setAppLogoUrl = () => {\n    return BaseConfig.APP_LOGO_URL;\n  };\n  $rootScope.setAppIconUrl = () => {\n    return BaseConfig.APP_ICON_URL;\n  };\n  $rootScope.setFaviconUrl = () => {\n    return BaseConfig.FAVICON_FILE;\n  };\n  $rootScope.$on(\"$locationChangeStart\", () => $uibModalStack.dismissAll());\n}\n\n_.each(modules, (routes) => {\n  if (routes.load) {\n    routes.load(app);\n  }\n});\n\napp.controller(\"HeaderCtrl\", HeaderCtrl);\napp.service(\"Session\", Session);\napp.service(\"OrgFetcher\", OrgFetcherService);\napp.service(\"Flash\", FlashService);\napp.service(\"ConfirmDialog\", ConfirmDialogService);\napp.service(\"Conversion\", UnitConversionService);\napp.service(\"Pretty\", PrettyNameService);\napp.service(\"ToolInfo\", ToolInfoService);\napp.service(\"EstimatorTourService\", EstimatorTourService);\napp.service(\"JobInfoTourService\", JobInfoTourService);\napp.service(\"JobShowTourService\", JobShowTourService);\napp.service(\"Repository\", Repository);\napp.service(\"HandlebarsHelperService\", HandlebarsHelperService);\napp.factory(\"DirtyWatcher\", DirtyWatcher);\napp.factory(\"EventingFactory\", EventingService);\napp.factory(\"FileQueueFactory\", FileQueueInit);\napp.factory(\"MeasurementImporterFactory\", MeasurementImporterFactory);\napp.directive(\"rsfPermissions\", RsfPermissions.factory());\napp.directive(\"rsfConfirmationDialog\", RsfConfirmationDialog.factory());\napp.directive(\"decimalPlaces\", DecimalPlaces.factory());\napp.directive(\"jobAnalytics\", JobAnalytics.factory());\napp.directive(\"productColorDropdown\", ProductColorDropdown.factory());\napp.directive(\"fakeFormAction\", FakeFormAction.factory());\napp.directive(\"embedSrc\", EmbedSrc.factory());\napp.directive(\"setFocus\", SetFocus.factory());\napp.directive(\"scrollIf\", ScrollIf.factory());\napp.directive(\"sortableTab\", RsfTab.factory());\napp.directive(\"uiSref\", [\"$timeout\", RsfSref]);\napp.component(\"rsfSpinner\", new SpinnerComponent());\napp.component(\"toolDisplay\", new ToolDisplayComponent());\napp.component(\"rsfDrawing\", new DrawingComponent());\napp.component(\"refreshButton\", new RefreshButtonComponent());\napp.component(\"gmapsAutocomplete\", new GmapsAutocompleteComponent());\napp.component(\"leafletMap\", new LeafletMapComponent());\napp.component(\"rsfMap\", new RsfMapComponent());\napp.filter(\"humanize\", HumanizeFilter.factory);\napp.filter(\"startFrom\", StartFromFilter.factory);\napp.constant(\"valid_uom\", valid_uom);\napp.constant(\"valid_kind\", valid_kind);\napp.constant(\"US_STATES_ABBREV\", us_states_abbreviation);\napp.constant(\"COUNTRIES_ABBREV\", countries_abbreviation);\n\napp.component(\"pdfDisplay\", react2angular(PdfDisplay, [\"pdfUrl\", \"disabledFeatures\"]));\napp.component(\"saveablePdfDisplay\", react2angular(SaveablePdfDisplay, [\"job\", \"pdfUrl\", \"disabledFeatures\"]));\napp.component(\"flashAlert\", react2angular(FlashAlert));\napp.component(\"inviteModal\", react2angular(InviteModal));\napp.component(\"screenShare\", react2angular(ScreenShare, null, [\"$scope\", \"ScreenShareService\", \"$state\"]));\napp.component(\"notifer\", react2angular(Notifier));\napp.component(\"reactSelectWrapper\", react2angular(ReactSelectWrapper, [\"defaultValue\", \"available\", \"onChange\"]));\napp.component(\"screenShareToolbar\", react2angular(Toolbar));\napp.component(\"jobTabs\", react2angular(JobTabs));\napp.component(\"connector\", react2angular(Connector));\napp.component(\"documentLink\", react2angular(NgDocumentLink, [\"document\", \"iconOnly\"]));\napp.component(\"pageTitleUpdater\", react2angular(PageTitleUpdater));\n\napp.component(\n  \"userHeaderInfo\",\n  react2angular(\n    UserHeaderInfo,\n    [\"refreshQuery\", \"navDisplay\", \"detailed\"],\n    [\"$state\", \"$rootScope\", \"JobInfoTourService\", \"JobShowTourService\"],\n  ),\n);\n\napp.component(\"messageBell\", react2angular(MessageBell, [\"hideLeftSeparator\"]));\n\nexport default app;\n","import * as ng from \"angular\";\nimport User from \"app/src/Models/User\";\nimport UserPreference from \"app/src/Models/UserPreference\";\nimport Address from \"app/src/Models/Address\";\nimport Measurement from \"app/src/Models/Measurement\";\nimport Org from \"app/src/Models/Org\";\nimport Job from \"app/src/Models/Job\";\nimport Estimate from \"app/src/Models/Estimate\";\nimport PriceList from \"app/src/Models/PriceList\";\nimport ActivatedPriceList from \"app/src/Models/ActivatedPriceList\";\nimport Product from \"app/src/Models/Product\";\nimport PaymentTerm from \"app/src/Models/PaymentTerm\";\nimport EstimateTemplate from \"app/src/Models/EstimateTemplate\";\nimport MeasurementLink from \"app/src/Models/MeasurementLink\";\nimport Doc from \"app/src/Models/Doc\";\nimport Image from \"app/src/Models/Image\";\nimport Presentation from \"app/src/Models/Presentation\";\nimport Note from \"app/src/Models/Note\";\nimport Event from \"app/src/Models/Event\";\nimport Result from \"app/src/Models/Result\";\nimport ResultReason from \"app/src/Models/ResultReason\";\nimport ScreenShare from \"app/src/Models/ScreenShare\";\nimport SignedDocument from \"app/src/Models/SignedDocument\";\nimport SignedDocumentRecipient from \"app/src/Models/SignedDocumentRecipient\";\nimport ProductOptionGroup from \"app/src/Models/ProductOptionGroup\";\nimport ProductOption from \"app/src/Models/ProductOption\";\nimport Visualization from \"app/src/Models/Visualization\";\nimport Calendar from \"app/src/Models/Calendar\";\nimport Report from \"app/src/Models/Report\";\nimport Pattern from \"app/src/Models/Pattern\";\nimport PhoneNumber from \"app/src/Models/PhoneNumber\";\nimport Token from \"app/src/Models/Token\";\nimport SfUser from \"app/src/Models/SfUser\";\nimport I360User from \"app/src/Models/I360User\";\nimport MsUser from \"app/src/Models/MsUser\";\nimport JnUser from \"app/src/Models/JnUser\";\nimport SrUser from \"app/src/Models/SrUser\";\nimport LpUser from \"app/src/Models/LpUser\";\nimport Email from \"app/src/Models/Email\";\nimport Elevation from \"app/src/Models/Elevation\";\n\nexport class ModelRoutes {\n  public static load(app: ng.IModule) {\n    app.factory(\"User\", User);\n    app.factory(\"UserPreference\", UserPreference);\n    app.factory(\"Address\", Address);\n    app.factory(\"Doc\", Doc);\n    app.factory(\"Measurement\", Measurement);\n    app.factory(\"Org\", Org);\n    app.factory(\"Job\", Job);\n    app.factory(\"Product\", Product);\n    app.factory(\"Estimate\", Estimate);\n    app.factory(\"PaymentTerm\", PaymentTerm);\n    app.factory(\"EstimateTemplate\", EstimateTemplate);\n    app.factory(\"MeasurementLink\", MeasurementLink);\n    app.factory(\"Image\", Image);\n    app.factory(\"Presentation\", Presentation);\n    app.factory(\"Note\", Note);\n    app.factory(\"Event\", Event);\n    app.factory(\"Result\", Result);\n    app.factory(\"ResultReason\", ResultReason);\n    app.factory(\"ScreenShare\", ScreenShare);\n    app.factory(\"SignedDocumentRecipient\", SignedDocumentRecipient);\n    app.factory(\"SignedDocument\", SignedDocument);\n    app.factory(\"ProductOptionGroup\", ProductOptionGroup);\n    app.factory(\"ProductOption\", ProductOption);\n    app.factory(\"PriceList\", PriceList);\n    app.factory(\"ActivatedPriceList\", ActivatedPriceList);\n    app.factory(\"Visualization\", Visualization);\n    app.factory(\"Calendar\", Calendar);\n    app.factory(\"Report\", Report);\n    app.factory(\"Pattern\", Pattern);\n    app.factory(\"PhoneNumber\", PhoneNumber);\n    app.factory(\"Token\", Token);\n    app.factory(\"SfUser\", SfUser);\n    app.factory(\"I360User\", I360User);\n    app.factory(\"MsUser\", MsUser);\n    app.factory(\"JnUser\", JnUser);\n    app.factory(\"SrUser\", SrUser);\n    app.factory(\"LpUser\", LpUser);\n    app.factory(\"Email\", Email);\n    app.factory(\"Elevation\", Elevation);\n  }\n\n  public static configure(): void {}\n}\n","import { LogoutCtrl } from \"app/src/Login/LogoutCtrl\";\nimport { react2angular } from \"react2angular\";\nimport OidcLogin from \"app2/src/components/Authentication/OidcLogin\";\nimport OidcCallback from \"app2/src/components/Authentication/OidcCallback\";\nimport OktaLogin from \"app2/src/components/Authentication/OktaLogin\";\nimport { OktaLogoutLandingPage } from \"app2/src/components/Authentication/OktaLogoutLandingPage\";\nimport OktaCallback from \"app2/src/components/Authentication/OktaCallback\";\nimport { TermsAndConditionsCtrl } from \"app/src/Login/TermsAndConditionsCtrl\";\nimport { LeadsRedirectComponent } from \"app2/src/components/Authentication/LeadsRedirectComponent\";\nimport { OrgAccessChooser } from \"app2/src/components/OrgAccessChooser\";\n\nexport class LoginRoutes {\n  public static load(app: ng.IModule) {\n    app.controller(\"LogoutCtrl\", LogoutCtrl);\n    app.controller(\"TermsAndConditionsCtrl\", TermsAndConditionsCtrl);\n\n    app.component(\"ssoLogin\", react2angular(OidcLogin, null, [\"$stateParams\"]));\n    app.component(\"oktaLogin\", react2angular(OktaLogin, null, [\"$stateParams\"]));\n    app.component(\"oktaLogout\", react2angular(OktaLogoutLandingPage, null, []));\n    app.component(\"ssoCallback\", react2angular(OidcCallback));\n    app.component(\"oktaCallback\", react2angular(OktaCallback));\n    app.component(\"leadsAuthComponent\", react2angular(LeadsRedirectComponent));\n    app.component(\"orgAccessChooser\", react2angular(OrgAccessChooser, [], [\"$state\"]));\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    $stateProvider\n      .state(\"root.login\", <ng.ui.IState>{\n        url: \"/login?redirect=\",\n        views: {\n          \"container@\": {\n            component: \"ssoLogin\",\n          },\n        },\n        params: {\n          routeTo: null,\n          routeParams: null,\n        },\n      })\n      .state(\"root.logout\", <ng.ui.IState>{\n        url: \"/logout?redirect=\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Login/logout.html\",\n            controller: \"LogoutCtrl\",\n            controllerAs: \"ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"root.terms_and_conditions\", <ng.ui.IState>{\n        url: \"/terms\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Login/terms_and_conditions.html\",\n            controller: \"TermsAndConditionsCtrl\",\n            controllerAs: \"ctrl\",\n          },\n        },\n      })\n      .state(\"root.screen_share_help\", <ng.ui.IState>{\n        url: \"/screen-share-help\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Login/screen_share_help.html\",\n          },\n        },\n      })\n      .state(\"root.ssologin\", <ng.ui.IState>{\n        url: \"/sso/login\",\n        views: {\n          \"container@\": {\n            component: \"ssoLogin\",\n          },\n        },\n        params: {\n          routeTo: null,\n          routeParams: null,\n        },\n      })\n      .state(\"root.ssocallback\", <ng.ui.IState>{\n        url: \"/sso/callback\",\n        views: {\n          \"container@\": {\n            component: \"ssoCallback\",\n          },\n        },\n      })\n      .state(\"root.dabellalogin\", <ng.ui.IState>{\n        url: \"/dabella/login\",\n        views: {\n          \"container@\": {\n            component: \"oktaLogin\",\n          },\n        },\n        params: {\n          routeTo: null,\n          routeParams: null,\n        },\n      })\n      .state(\"root.oktacallback\", <ng.ui.IState>{\n        url: \"/okta/callback\",\n        views: {\n          \"container@\": {\n            component: \"oktaCallback\",\n          },\n        },\n      })\n      .state(\"root.oktalogout\", <ng.ui.IState>{\n        url: \"/okta/logout\",\n        views: {\n          \"container@\": {\n            component: \"oktaLogout\",\n          },\n        },\n      })\n      .state(\"leads_auth\", <ng.ui.IState>{\n        url: \"/leads_module\",\n\n        views: {\n          \"header@\": {},\n          \"container@\": {\n            component: \"leadsAuthComponent\",\n          },\n        },\n      })\n      .state(\"root.accesses\", <ng.ui.IState>{\n        url: \"/orgs/accesses\",\n        views: {\n          \"container@\": {\n            component: \"orgAccessChooser\",\n          },\n        },\n        resolve: resolveAuth,\n      });\n  }\n}\n","import * as ng from \"angular\";\nimport { JobShowCtrl } from \"./JobShowCtrl\";\nimport { JobListCtrl } from \"./JobListCtrl\";\nimport { JobFetcherService } from \"./JobFetcherService\";\nimport { ToolTabCtrl } from \"./tabs/ToolTabCtrl\";\nimport { EstimateTabCtrl } from \"./tabs/EstimateTabCtrl\";\nimport { EstimatesTabCtrl } from \"./tabs/EstimatesTabCtrl\";\nimport { MeasurementTabCtrl } from \"./tabs/MeasurementTabCtrl\";\nimport { HistoryTabCtrl } from \"./tabs/HistoryTabCtrl\";\nimport { InfoTabCtrl } from \"./tabs/InfoTabCtrl\";\nimport { InspectionTabCtrl } from \"app/src/Jobs/tabs/InspectionTabCtrl\";\nimport { DesignToolTabCtrl } from \"./tabs/DesignToolTabCtrl\";\nimport { AreaCalculatorCtrl } from \"app/src/Jobs/tabs/AreaCalculatorCtrl\";\nimport { MeasurementEditorCtrl } from \"./tabs/MeasurementEditorCtrl\";\nimport { MeasurementEditorComponent } from \"app/src/Jobs/MeasurementEditorComponent\";\nimport { UploaderCtrl } from \"app/src/Jobs/uploader/UploaderCtrl\";\nimport { ImportMeasurementsCtrl } from \"./tabs/ImportMeasurementsCtrl\";\nimport { VisualizationModalCtrl } from \"./tabs/VisualizationModalCtrl\";\nimport { EmailModal } from \"./tabs/EmailModal\";\nimport { PinDropComponent } from \"./Components/PinDropComponent\";\nimport { ScreenShareService } from \"app/src/Jobs/ScreenShareService\";\nimport { ProductOptionSelectorComponent } from \"app/src/ProductOptionSelector/ProductOptionSelectorComponent\";\nimport { ImageUploadComponent } from \"./Components/ImageUploadComponent\";\nimport { RapidAreaComponent } from \"app/src/RsfMap/RapidAreaComponent\";\nimport { SatelliteMeasureComponent } from \"app/src/RsfMap/SatelliteMeasureComponent\";\nimport { DeckWizardComponent } from \"app/src/RsfMap/DeckWizardComponent\";\nimport { PoolToolComponent } from \"app/src/RsfMap/PoolToolComponent\";\nimport { react2angular } from \"react2angular\";\nimport PresentationContainer from \"app2/src/components/PricePresentation/PresentationContainer\";\nimport PdfPageContainer from \"app2/src/components/PdfPage/PdfPageContainer\";\nimport FilterButton from \"app2/src/components/JobList/FilterButton\";\nimport Sidebar from \"app2/src/components/JobList/Sidebar\";\nimport DownloadDocumentButton from \"app2/src/components/Document/DownloadDocumentButton\";\nimport PricePresentationButton from \"app2/src/components/JobTabs/EstimateTab/IngagePricePresentation/PricePresentationButton\";\nimport ReportList from \"app2/src/components/JobTabs/MeasurementTab/ReportList\";\nimport InspectionContainer from \"app2/src/components/JobTabs/InspectionTab\";\nimport PresentationBuilderContainer from \"app2/src/components/JobTabs/PresentationTab/Customer/PresentationBuilder/PresentationBuilderContainer\";\nimport FinanceTab from \"app2/src/components/FinanceTab\";\nimport JobMetadata from \"app2/src/components/JobMetadata\";\nimport JobResultingSection from \"app2/src/components/JobResultingSection\";\n\nexport class JobRoutes {\n  public static load(app: ng.IModule) {\n    app.controller(\"JobListCtrl\", JobListCtrl);\n    app.controller(\"JobShowCtrl\", JobShowCtrl);\n    app.controller(\"UploaderCtrl\", UploaderCtrl);\n\n    // Tab Ctrls\n    app.controller(\"EstimateTabCtrl\", EstimateTabCtrl);\n    app.controller(\"EstimatesTabCtrl\", EstimatesTabCtrl);\n    app.controller(\"HistoryTabCtrl\", HistoryTabCtrl);\n    app.controller(\"InfoTabCtrl\", InfoTabCtrl);\n    app.controller(\"DesignToolTabCtrl\", DesignToolTabCtrl);\n    app.controller(\"MeasurementTabCtrl\", MeasurementTabCtrl);\n    app.controller(\"ToolTabCtrl\", ToolTabCtrl);\n    app.controller(\"InspectionTabCtrl\", InspectionTabCtrl);\n\n    app.controller(\"AreaCalculatorCtrl\", AreaCalculatorCtrl);\n    app.controller(\"MeasurementEditorCtrl\", MeasurementEditorCtrl);\n    app.controller(\"ImportMeasurementsCtrl\", ImportMeasurementsCtrl);\n    app.controller(\"VisualizationModalCtrl\", VisualizationModalCtrl);\n    app.controller(\"EmailModal\", EmailModal);\n\n    app.component(\"measurementEditorComponent\", new MeasurementEditorComponent());\n    app.component(\"pinDrop\", new PinDropComponent());\n    app.component(\"jobImageUpload\", new ImageUploadComponent());\n    app.component(\"productOptionSelector\", new ProductOptionSelectorComponent());\n    app.component(\"rapidArea\", new RapidAreaComponent());\n    app.component(\"satelliteMeasure\", new SatelliteMeasureComponent());\n    app.component(\"deckWizard\", new DeckWizardComponent());\n    app.component(\"poolTool\", new PoolToolComponent());\n    app.component(\"pricePresentation\", react2angular(PresentationContainer, [\"estimateids\", \"orgid\"], [\"$state\"]));\n    app.component(\"pdfPage\", react2angular(PdfPageContainer, [\"estimateId\", \"docType\"], []));\n    app.component(\"filterButton\", react2angular(FilterButton, null, [\"$scope\"]));\n    app.component(\"sidebar\", react2angular(Sidebar));\n    app.component(\"downloadDocumentButton\", react2angular(DownloadDocumentButton, [\"documentId\", \"signed\"]));\n    app.component(\"pricePresentationButton\", react2angular(PricePresentationButton, [\"isEstimateDirty\", \"estimate\"]));\n    app.component(\"reportList\", react2angular(ReportList));\n    app.component(\"jobMetadata\", react2angular(JobMetadata, [\"update\"]));\n    app.component(\"jobResultingSection\", react2angular(JobResultingSection));\n\n    app.service(\"JobFetcher\", JobFetcherService);\n    app.service(\"ScreenShareService\", ScreenShareService);\n    app.component(\n      \"inspectionContainer\",\n      react2angular(\n        InspectionContainer,\n        [\"queue\", \"email\", \"download\"],\n        [\"EstimatorService\", \"$scope\", \"DirtyWatcher\", \"$analytics\", \"JobFetcher\", \"ConfirmDialog\"],\n      ),\n    );\n    app.component(\n      \"presentationBuilder\",\n      react2angular(\n        PresentationBuilderContainer,\n        [],\n        [\"$state\", \"EstimatorService\", \"$scope\", \"DirtyWatcher\", \"$analytics\"],\n      ),\n    );\n    app.component(\"financeTab\", react2angular(FinanceTab));\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    $stateProvider\n      .state(\"job_header\", <ng.ui.IState>{\n        abstract: true,\n        views: {\n          header: {\n            templateUrl: \"src/Header/job_header.html\",\n            controller: \"HeaderCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n      })\n      .state(\"root.job_list\", <ng.ui.IState>{\n        url: \"/jobs?status=\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Jobs/list.html\",\n            controller: \"JobListCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"root.finance\", <ng.ui.IState>{\n        url: \"/finance\",\n        views: {\n          \"container@\": {\n            component: \"financeTab\",\n          },\n        },\n      })\n      .state(\"job_header.job_show\", <ng.ui.IState>{\n        url: \"/jobs/:id?embedded&header\",\n        abstract: true,\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Jobs/show.html\",\n            controller: \"JobShowCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"job_header.job_show.info\", <ng.ui.IState>{\n        url: \"/info\",\n        views: {\n          \"jobShow@job_header.job_show\": {\n            templateUrl: \"src/Jobs/tabs/info.html\",\n            controller: \"InfoTabCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"job_header.job_show.estimate\", <ng.ui.IState>{\n        url: \"/estimates/:estimate_id\",\n        views: {\n          \"jobShow@job_header.job_show\": {\n            templateUrl: \"src/Jobs/tabs/estimate.html\",\n            controller: \"EstimateTabCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"job_header.job_show.estimate.price_presentation\", <ng.ui.IState>{\n        url: \"/price_presentation\",\n        views: {\n          \"jobShow@job_header.job_show\": {\n            templateUrl: \"src/Jobs/tabs/estimate.html\",\n            controller: \"EstimateTabCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"job_header.job_show.estimates\", <ng.ui.IState>{\n        url: \"/estimates\",\n        views: {\n          \"jobShow@job_header.job_show\": {\n            templateUrl: \"src/Jobs/tabs/estimates.html\",\n            controller: \"EstimatesTabCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"job_header.job_show.measurements\", <ng.ui.IState>{\n        url: \"/measurements/:path\",\n        views: {\n          \"jobShow@job_header.job_show\": {\n            templateUrl: \"src/Jobs/tabs/measurements.html\",\n            controller: \"MeasurementTabCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        params: {\n          path: { type: \"string\", raw: true },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"job_header.job_show.history\", <ng.ui.IState>{\n        url: \"/history\",\n        views: {\n          \"jobShow@job_header.job_show\": {\n            templateUrl: \"src/Jobs/tabs/history.html\",\n            controller: \"HistoryTabCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"job_header.job_show.design_tools\", <ng.ui.IState>{\n        url: \"/design-tools\",\n        views: {\n          \"jobShow@job_header.job_show\": {\n            templateUrl: \"src/Jobs/tabs/design_tools.html\",\n            controller: \"DesignToolTabCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"job_header.job_show.signing\", <ng.ui.IState>{\n        url: \"/:job_tab/signing/:signed_document_id\",\n        views: {\n          \"jobShow@job_header.job_show\": {},\n        },\n      })\n      .state(\"job_header.job_show.price\", <ng.ui.IState>{\n        url: \"/price?estimateids&orgid\",\n        views: {\n          \"jobShow@job_header.job_show\": {\n            component: \"pricePresentation\",\n          },\n        },\n        resolve: {\n          ...resolveAuth,\n          estimateids: [\n            \"$stateParams\",\n            ($stateParams) => {\n              return $stateParams.estimateids;\n            },\n          ],\n          orgid: [\n            \"$stateParams\",\n            ($stateParams) => {\n              return $stateParams.orgid;\n            },\n          ],\n        },\n      })\n      .state(\"upload_job_images\", <ng.ui.IState>{\n        url: \"/jobs/upload/:key?token=?folder_id\",\n        views: {\n          header: {\n            templateUrl: \"src/Header/viewer.html\",\n          },\n          \"container@\": {\n            templateUrl: \"src/Jobs/uploader/uploader.html\",\n            controller: \"UploaderCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n      })\n      .state(\"pdf_viewer\", <ng.ui.IState>{\n        url: \"/estimates/:estimateId/pdf/:docType?embedded&header\",\n        views: {\n          header: {\n            templateUrl: \"src/Header/viewer.html\",\n          },\n          \"container@\": {\n            component: \"pdfPage\",\n          },\n        },\n        resolve: {\n          ...resolveAuth,\n          estimateId: [\"$stateParams\", ($stateParams) => parseInt($stateParams.estimateId)],\n          docType: [\"$stateParams\", ($stateParams) => $stateParams.docType],\n        },\n      })\n      .state(\"job_header.job_show.inspection\", <ng.ui.IState>{\n        url: \"/inspection\",\n        views: {\n          \"jobShow@job_header.job_show\": {\n            templateUrl: \"src/Jobs/tabs/inspection.html\",\n            controller: \"InspectionTabCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"job_header.job_show.react-job-tabs\", <ng.ui.IState>{\n        url: \"/:path\",\n        params: {\n          path: { type: \"string\", raw: true },\n        },\n        views: {\n          \"jobShow@job_header.job_show\": {},\n        },\n      });\n  }\n}\n","import { JobMenuValues } from \"./JobMenuValues\";\nimport { JobMenuManagerComponent } from \"./JobMenuManagerComponent\";\nimport { JobMenuOrderService } from \"./JobMenuOrderService\";\n\nexport class JobMenuRoutes {\n  public static load(app: ng.IModule) {\n    app.component(\"rsfJobMenuManager\", new JobMenuManagerComponent());\n\n    app.service(\"JobMenuOrderService\", JobMenuOrderService);\n\n    app.value(\"JobMenuValues\", JobMenuValues);\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {}\n}\n","import { EstimatorService } from \"app/src/Estimator/EstimatorService\";\nimport { EstimateEditor } from \"app/src/Estimator/EstimateEditorComponent\";\nimport { ProductSelectorCtrl } from \"app/src/Estimator/ProductSelectorCtrl\";\nimport { LoanCalc } from \"app/src/Estimator/LoanCalculator\";\nimport { DiscountEditor } from \"app/src/Estimator/Discounts/DiscountEditor\";\nimport { GroupDiscountEditor } from \"app/src/Estimator/Discounts/GroupDiscountEditor\";\nimport { TemplateEditorCtrl } from \"app/src/Estimator/TemplateEditorCtrl\";\nimport { EstimateLineItemComponent } from \"app/src/Estimator/EstimateLineItemComponent\";\nimport { EstimateGroupComponent } from \"app/src/Estimator/EstimateGroupComponent\";\nimport { OpeningsWizard } from \"app/src/Estimator/OpeningsWizard\";\nimport { SalesTaxEditor } from \"app/src/Estimator/SalesTaxEditor\";\nimport { WindowAnnotatingComponent } from \"./WindowAnnotatingComponent\";\nimport { react2angular } from \"react2angular\";\nimport LineItemEditor from \"app2/src/components/LineItemEditor/LineItemEditor\";\nimport DiscountChooser from \"app2/src/components/Discount/Chooser\";\nimport PaymentTermChooser from \"app2/src/components/PaymentTerm/Chooser\";\nimport PriceDrawerWrapper from \"app2/src/components/PriceDrawer\";\nimport MarkupEditor from \"app2/src/components/Estimate/MarkupEditor\";\nimport EstimateTemplateModal from \"app2/src/components/JobTabs/EstimateTab/EstimateTemplateModal\";\nimport FinanceOptionsButton from \"app2/src/components/Homevest/FinanceOptionsButton\";\nimport CommissionActions from \"app2/src/components/JobTabs/EstimateTab/CommissionActions\";\nimport RoomSummary from \"app2/src/components/JobTabs/EstimateTab/RoomSummary\";\n\nexport class EstimatorRoutes {\n  public static load(app: ng.IModule) {\n    app.controller(\"ProductSelectorCtrl\", ProductSelectorCtrl);\n    app.controller(\"TemplateEditorCtrl\", TemplateEditorCtrl);\n    app.controller(\"OpeningsWizard\", OpeningsWizard);\n    app.component(\"estimateEditor\", new EstimateEditor());\n    app.component(\"estimateLineItem\", new EstimateLineItemComponent());\n    app.component(\"estimateGroup\", new EstimateGroupComponent());\n    app.component(\"loanCalc\", new LoanCalc());\n    app.component(\"discountEditor\", new DiscountEditor());\n    app.component(\"groupDiscountEditor\", new GroupDiscountEditor());\n    app.component(\"salesTaxEditor\", new SalesTaxEditor());\n    app.component(\"windowAnnotator\", new WindowAnnotatingComponent());\n    app.component(\n      \"priceDrawerWrapper\",\n      react2angular(\n        PriceDrawerWrapper,\n        [\"orgId\", \"jobId\", \"currentEstimate\", \"openDrawer\", \"saveEditorEstimate\"],\n        [\"$state\", \"EstimatorService\", \"ConfirmDialog\"],\n      ),\n    );\n    app.service(\"EstimatorService\", EstimatorService);\n\n    app.component(\n      \"lineItemEditor\",\n      react2angular(\n        LineItemEditor,\n        [\"lineItem\", \"estimate\", \"measurementId\", \"controller\", \"estimateGroup\"],\n        [\"$analytics\"],\n      ),\n    );\n\n    app.component(\n      \"discountChooser\",\n      react2angular(DiscountChooser, [\n        \"onSelect\",\n        \"existing\",\n        \"showHeaderText\",\n        \"total\",\n        \"update\",\n        \"destroy\",\n        \"params\",\n      ]),\n    );\n    app.component(\"financeOptionsButton\", react2angular(FinanceOptionsButton, [\"estimateId\"]));\n    app.component(\n      \"paymentTermChooser\",\n      react2angular(PaymentTermChooser, [\n        \"orgId\",\n        \"paymentTerm\",\n        \"showHeaderText\",\n        \"addItem\",\n        \"addTemplate\",\n        \"removeItem\",\n        \"updateItem\",\n        \"doneButton\",\n        \"view\",\n      ]),\n    );\n\n    app.component(\n      \"markupEditor\",\n      react2angular(MarkupEditor, [\"orgId\", \"estimateOrGroup\", \"lineItemEditorOpen\", \"updated\"]),\n    );\n    app.component(\n      \"estimateTemplateModal\",\n      react2angular(EstimateTemplateModal, [\"show\", \"readOnly\", \"saveAs\", \"select\"]),\n    );\n    app.component(\"commissionActions\", react2angular(CommissionActions, [\"estimateId\"]));\n    app.component(\"roomSummary\", react2angular(RoomSummary, [\"estimateGroup\"]));\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider): void {\n    $stateProvider.state(\"job_header.job_show.estimate.homevest\", <ng.ui.IState>{\n      url: \"/homevest\",\n      views: {},\n    });\n    $stateProvider.state(\"job_header.job_show.estimate.homevest_route\", <ng.ui.IState>{\n      url: \"/homevest/:route\",\n      views: {},\n    });\n  }\n}\n","import { CalendarCtrl } from \"app/src/Calendar/CalendarCtrl\";\nimport { AppointmentCreator } from \"app/src/Calendar/AppointmentCreator\";\nimport { EventService } from \"app/src/Calendar/EventService\";\nimport { InviteModal } from \"app/src/Calendar/InviteModal\";\nimport { ResultModal } from \"app/src/Calendar/ResultModal\";\nimport { CalendarProviderUnit } from \"app/src/Calendar/CalendarProviderUnit\";\nimport { react2angular } from \"react2angular\";\nimport SchedulerTab from \"app2/src/components/SchedulerTab\";\n\nexport class CalendarRoutes {\n  public static load(app: ng.IModule) {\n    app.controller(\"CalendarCtrl\", CalendarCtrl);\n    app.service(\"EventService\", EventService);\n    app.component(\"appointmentCreator\", new AppointmentCreator());\n    app.component(\"resultModal\", new ResultModal());\n    app.controller(\"InviteModal\", InviteModal);\n    app.filter(\"calendarProvider\", CalendarProviderUnit.factory);\n    app.component(\"schedulerTab\", react2angular(SchedulerTab));\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    $stateProvider\n      .state(\"root.calendar\", <ng.ui.IState>{\n        url: \"/calendar\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Calendar/calendar.html\",\n            controller: \"CalendarCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"root.scheduler\", <ng.ui.IState>{\n        url: \"/scheduler\",\n        views: {\n          \"container@\": {\n            component: \"schedulerTab\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"root.scheduler.modal_route\", <ng.ui.IState>{\n        url: \"/{path:.*}\",\n        views: {},\n      });\n  }\n}\n","import { ScreenShareShowCtrl } from \"app/src/ScreenShare/ScreenShareShowCtrl\";\nimport { ScreenShareJoinCtrl } from \"app/src/ScreenShare/ScreenShareJoinCtrl\";\nimport { ScreenShareIndexCtrl } from \"app/src/ScreenShare/ScreenShareIndexCtrl\";\nimport { ScreenShareHostCtrl } from \"app/src/ScreenShare/ScreenShareHostCtrl\";\nimport { react2angular } from \"react2angular\";\nimport Host from \"app2/src/components/Twilio/Host\";\nimport Attendee from \"app2/src/components/Twilio/Attendee\";\n\nexport class ScreenShareRoutes {\n  public static load(app: ng.IModule) {\n    app.controller(\"ScreenShareShowCtrl\", ScreenShareShowCtrl);\n    app.controller(\"ScreenShareJoinCtrl\", ScreenShareJoinCtrl);\n    app.controller(\"ScreenShareIndexCtrl\", ScreenShareIndexCtrl);\n    app.controller(\"ScreenShareHostCtrl\", ScreenShareHostCtrl);\n    app.component(\"host\", react2angular(Host, [\"jobId\"]));\n    app.component(\"attendee\", react2angular(Attendee, [\"jobUid\", \"screenShare\"]));\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    $stateProvider\n      .state(\"root.screen_share_index\", <ng.ui.IState>{\n        url: \"/screen_shares\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/ScreenShare/index.html\",\n            controller: \"ScreenShareIndexCtrl\",\n            controllerAs: \"ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"screen_share_host\", <ng.ui.IState>{\n        url: \"/jobs/:job_id/screen_shares/:uid\",\n        views: {\n          header: {\n            templateUrl: \"src/Header/viewer.html\",\n          },\n          \"container@\": {\n            templateUrl: \"src/ScreenShare/host.html\",\n            controller: \"ScreenShareHostCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"screen_share_join\", <ng.ui.IState>{\n        url: \"/screen_shares/join\",\n        views: {\n          header: {\n            templateUrl: \"src/Header/viewer.html\",\n          },\n          \"container@\": {\n            templateUrl: \"src/ScreenShare/join.html\",\n            controller: \"ScreenShareJoinCtrl\",\n            controllerAs: \"ctrl\",\n          },\n        },\n      })\n      .state(\"screen_share_presenter\", <ng.ui.IState>{\n        url: \"/screen_shares/:id\",\n        views: {\n          header: {\n            templateUrl: \"src/Header/viewer.html\",\n          },\n          \"container@\": {\n            templateUrl: \"src/ScreenShare/show.html\",\n            controller: \"ScreenShareShowCtrl\",\n            controllerAs: \"ctrl\",\n          },\n        },\n      });\n  }\n}\n","import { ProfileCtrl } from \"app/src/Profile/ProfileCtrl\";\nimport { AcceptTosCtrl } from \"./AcceptTosCtrl\";\nimport { AlertCtrl } from \"./AlertCtrl\";\nimport { ErrorCtrl } from \"./ErrorCtrl\";\nimport PermissionsErrorPage from \"app2/src/components/ErrorPages/Permissions\";\nimport TaskList from \"app2/src/components/Task/List\";\nimport { react2angular } from \"react2angular\";\nimport Notifications from \"app2/src/components/Profile/Notifications\";\nimport ClearWorkersButton from \"app2/src/components/Common/ClearWorkersButton\";\n\nexport class ProfileRoutes {\n  public static load(app: ng.IModule) {\n    app.controller(\"ProfileCtrl\", ProfileCtrl);\n    app.controller(\"AcceptTosCtrl\", AcceptTosCtrl);\n    app.controller(\"AlertCtrl\", AlertCtrl);\n    app.controller(\"ErrorCtrl\", ErrorCtrl);\n\n    app.component(\"taskList\", react2angular(TaskList));\n    app.component(\n      \"notifications\",\n      react2angular(Notifications, [\"user\", \"userPreferences\", \"updateUserNotifications\", \"setNotificationError\"]),\n    );\n    app.component(\"permissionsErrorPage\", react2angular(PermissionsErrorPage));\n    app.component(\"clearWorkersButton\", react2angular(ClearWorkersButton));\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    $stateProvider\n      .state(\"root.profile\", <ng.ui.IState>{\n        url: \"/profile?authUser=\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Profile/profile.html\",\n            controller: \"ProfileCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"root.tos\", <ng.ui.IState>{\n        url: \"/tos\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Profile/accept_tos.html\",\n            controller: \"AcceptTosCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"root.error\", <ng.ui.IState>{\n        url: \"/404\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Profile/error.html\",\n            controller: \"ErrorCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n      })\n      .state(\"root.permissions\", <ng.ui.IState>{\n        url: \"/error\",\n        views: {\n          \"container@\": {\n            component: \"permissionsErrorPage\",\n          },\n        },\n      })\n      .state(\"root.alert\", <ng.ui.IState>{\n        url: \"/alert\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Profile/alert.html\",\n            controller: \"AlertCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n      })\n      .state(\"root.tasks\", <ng.ui.IState>{\n        url: \"/tasks\",\n        views: {\n          \"container@\": {\n            component: \"taskList\",\n          },\n        },\n        resolve: resolveAuth,\n      });\n  }\n}\n","import { SignatureRedirectCtrl } from \"app/src/Signature/SignatureRedirectCtrl\";\nimport { SignatureSignCtrl } from \"app/src/Signature/SignatureSignCtrl\";\nimport { SignatureSignedCtrl } from \"app/src/Signature/SignatureSignedCtrl\";\nimport { SignatureSetupComponent } from \"./SignatureSetupComponent\";\nimport { SignatureNotificationComponent } from \"./SignatureNotificationComponent\";\n\nexport class SignatureRoutes {\n  public static load(app: ng.IModule) {\n    app.controller(\"SignatureRedirectCtrl\", SignatureRedirectCtrl);\n    app.controller(\"SignatureSignCtrl\", SignatureSignCtrl);\n    app.controller(\"SignatureSignedCtrl\", SignatureSignedCtrl);\n    app.component(\"signatureSetup\", new SignatureSetupComponent());\n    app.component(\"signatureNotification\", new SignatureNotificationComponent());\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    $stateProvider\n      .state(\"signature_sign\", <ng.ui.IState>{\n        url: \"/signatures/sign\",\n        views: {\n          header: {\n            templateUrl: \"src/Header/viewer.html\",\n          },\n          \"container@\": {\n            templateUrl: \"src/Signature/sign.html\",\n            controller: \"SignatureSignCtrl\",\n            controllerAs: \"ctrl\",\n          },\n        },\n      })\n      .state(\"signature_signed\", <ng.ui.IState>{\n        url: \"/signatures/signed\",\n        views: {\n          header: {\n            templateUrl: \"src/Header/viewer.html\",\n          },\n          \"container@\": {\n            templateUrl: \"src/Signature/signed.html\",\n            controller: \"SignatureSignedCtrl\",\n            controllerAs: \"ctrl\",\n          },\n        },\n      })\n      .state(\"signature_redirect\", <ng.ui.IState>{\n        url: \"/signatures/:id\",\n        views: {\n          header: {\n            templateUrl: \"src/Header/viewer.html\",\n          },\n          \"container@\": {\n            templateUrl: \"src/Signature/redirect.html\",\n            controller: \"SignatureRedirectCtrl\",\n            controllerAs: \"ctrl\",\n          },\n        },\n      });\n  }\n}\n","export class PaymentInfoRoutes {\n  public static load(app: ng.IModule): void {\n    // Payment info routes loading logic if needed\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    $stateProvider.state(\"root.payment_info\", <ng.ui.IState>{\n      url: \"/payment_info/:id\",\n      views: {\n        \"container@\": {\n          templateUrl: \"src/Profile/alert.html\",\n          controller: \"AlertCtrl\",\n          controllerAs: \"$ctrl\",\n        },\n      },\n    });\n  }\n}\n","import { VisualizationCardComponent } from \"app/src/Visualization/VisualizationCardComponent\";\nexport class VisualizationRoutes {\n  public static load(app: ng.IModule) {\n    app.component(\"visualizationCard\", new VisualizationCardComponent());\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {}\n}\n","import * as ng from \"angular\";\nimport { EagleviewOrderingModalComponent } from \"./EagleviewOrderingModalComponent\";\nimport { EagleviewLoginModalComponent } from \"./EagleviewLoginModalComponent\";\nimport { ReportListCtrl } from \"./ReportListCtrl\";\nimport { react2angular } from \"react2angular\";\nimport DashboardComponent from \"app2/src/components/Analytics/DashboardComponent\";\nimport LeadsComponent from \"app2/src/components/Leads/LeadsComponent\";\nimport EagleviewReportImportComponent from \"app2/src/components/Integrations/Eagleview/EagleviewReportImportComponent\";\nimport HoverImportJob from \"app2/src/components/Integrations/Hover/ImportJob\";\nimport QuickMeasureOrder from \"app2/src/components/Integrations/QuickMeasure/QuickMeasureOrder\";\nimport RoofScopeReportModal from \"app2/src/components/Integrations/RoofScope/RoofScopeReportModal\";\nimport PlnarReportModal from \"app2/src/components/Integrations/Plnar/PlnarReportModal\";\n\nexport class ReportRoutes {\n  public static load(app: ng.IModule) {\n    app.controller(\"ReportListCtrl\", ReportListCtrl);\n    app.component(\"eagleviewOrderingModal\", new EagleviewOrderingModalComponent());\n    app.component(\"eagleviewLoginModal\", new EagleviewLoginModalComponent());\n    app.component(\"analyticsDashboard\", react2angular(DashboardComponent, null, [\"Repository\"]));\n    app.component(\"leadsList\", react2angular(LeadsComponent, null, [\"$state\", \"$scope\"]));\n    app.component(\"eagleviewImport\", react2angular(EagleviewReportImportComponent, null, [\"Repository\"]));\n    app.component(\"hoverImport\", react2angular(HoverImportJob, [\"modalInstance\"], [\"Repository\"]));\n    app.component(\"quickMeasureModal\", react2angular(QuickMeasureOrder, [\"address\"]));\n    app.component(\"roofScopeReportModal\", react2angular(RoofScopeReportModal, [\"address\"]));\n    app.component(\"plnarReportModal\", react2angular(PlnarReportModal, [\"address\"]));\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    $stateProvider\n      .state(\"root.analytics\", <ng.ui.IState>{\n        url: \"/analytics\",\n        views: {\n          \"container@\": {\n            component: \"analyticsDashboard\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"root.leads_list\", <ng.ui.IState>{\n        url: \"/leads\",\n        views: {\n          \"container@\": {\n            component: \"leadsList\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"root.report_list\", <ng.ui.IState>{\n        url: \"/reports?page&per&by&order&q\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Reports/list.html\",\n            controller: \"ReportListCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      })\n      .state(\"root.report_show\", <ng.ui.IState>{\n        url: \"/reports/:id\",\n        views: {\n          \"container@\": {\n            templateUrl: \"src/Reports/show.html\",\n            controller: \"ReportShowCtrl\",\n            controllerAs: \"$ctrl\",\n          },\n        },\n        resolve: resolveAuth,\n      });\n  }\n}\n","import * as ng from \"angular\";\nimport { SignedDocListCtrl } from \"./SignedDocListCtrl\";\n\nexport class SignedDocRoutes {\n  public static load(app: ng.IModule) {\n    app.controller(\"SignedDocListCtrl\", SignedDocListCtrl);\n  }\n\n  public static configure($stateProvider: ng.ui.IStateProvider, resolveAuth): void {\n    $stateProvider.state(\"root.signed_doc_list\", <ng.ui.IState>{\n      url: \"/signed_docs?page&per&by&order&q\",\n      views: {\n        \"container@\": {\n          templateUrl: \"src/SignedDocuments/list.html\",\n          controller: \"SignedDocListCtrl\",\n          controllerAs: \"$ctrl\",\n        },\n      },\n      resolve: resolveAuth,\n    });\n  }\n}\n","import { useSelector } from \"app2/src/storeRegistry\";\nimport { currentAccessUid as accessUidSelector } from \"app2/src/selectors/auth.selectors\";\n\nexport default function ($timeout) {\n  return {\n    restrict: \"A\",\n    priority: 1,\n    link: function (scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes) {\n      const currentAccessUid = useSelector(accessUidSelector);\n      if (!currentAccessUid) {\n        return;\n      }\n      const href = attrs[\"href\"];\n\n      if (!href) return;\n\n      let currentParams = \"\";\n      let path = href;\n      if (href.includes(\"?\")) {\n        [path, currentParams] = href.split(\"?\");\n      }\n      const searchParams = new URLSearchParams(currentParams);\n      searchParams.set(\"authUser\", currentAccessUid);\n      const newHref = `${path}?${searchParams.toString()}`;\n      $timeout(() => attrs.$set(\"href\", newHref));\n    },\n  };\n}\n","export class HumanizeFilter {\n  public static factory() {\n    const factoryFunction = (text) => {\n      if (text) {\n        let result = text.split(\"_\").join(\" \").toLowerCase();\n        result = result.charAt(0).toUpperCase() + result.slice(1);\n        return result;\n      }\n    };\n\n    factoryFunction.$inject = [];\n\n    return factoryFunction;\n  }\n}\n","export class StartFromFilter {\n  public static factory() {\n    const factoryFunction = (input, start) => {\n      start = +start; //parse to int\n      return input.slice(start);\n    };\n\n    factoryFunction.$inject = [];\n\n    return factoryFunction;\n  }\n}\n","import * as React from \"react\";\nimport { IDoc } from \"app/src/Models/Doc\";\nimport { downloadFile } from \"app2/src/helpers/File\";\n\nexport interface DocumentLinkProps {\n  document: IDoc;\n  iconOnly?: boolean;\n}\n\n/**\n * Used in product_editor.html and reports/show.html to download document file using proper authentication\n */\nexport const NgDocumentLink: React.FC<DocumentLinkProps> = ({ document, iconOnly }) => {\n  const download = () => {\n    downloadFile(document.file.url, document.name);\n  };\n\n  if (iconOnly) return <i onClick={download} className=\"rsf-download-link rsf-base-66\"></i>;\n\n  return (\n    <a className=\"link\" onClick={download}>\n      {document?.name}\n    </a>\n  );\n};\n\nexport default NgDocumentLink;\n","export const getPayload = (token: string): any => {\n  if (!token) {\n    return {};\n  }\n\n  try {\n    const payloadData = atob(token.split(\".\")[1]);\n\n    return JSON.parse(payloadData);\n  } catch (_) {\n    return {};\n  }\n};\n\n/**\n * Checks if a JWT token has expired.\n *\n * @param token - The JWT token string to validate\n * @returns true if the token is expired or invalid, false if still valid\n *\n * @example\n * const token = \"eyJhbGc...\";\n * if (isExpired(token)) {\n *   console.log(\"Token has expired\");\n * }\n */\nexport const isExpired = (token: string): boolean => {\n  const payload = getPayload(token);\n\n  // If no exp claim, consider it invalid/expired\n  if (!payload.exp) {\n    return true;\n  }\n\n  const expiresAt = payload.exp * 1000; // Convert seconds to milliseconds\n  const now = Date.now();\n\n  return now >= expiresAt;\n};\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\n\nexport interface IEagleviewReportData {\n  id: number;\n  street_1: string;\n  street_2: string;\n  city: string;\n  state: string;\n  zip: string;\n}\n\nexport interface IPagination {\n  pagination: {\n    total_count: number;\n    total_pages: number;\n    current_page: number;\n  };\n}\n\nexport interface Page {\n  page: number;\n  reports: IEagleviewReportData[];\n  meta: IPagination;\n}\n\nclass EagleviewService {\n  public async getPage(page: number) {\n    return await fetcher.get<Page>(\"/integrations/eagleview/reports\", { page: page });\n  }\n\n  public async importReport(reportId: number) {\n    return await fetcher.get<boolean>(\"/integrations/eagleview/import\", { report_id: reportId });\n  }\n\n  public async login(credentials: any) {\n    return await fetcher.post(\"/integrations/eagleview/login\", credentials);\n  }\n}\n\nexport const eagleviewService = new EagleviewService();\n","import { ThunkAction } from \"redux-thunk\";\nimport { ActionsUnion, createAction } from \"../Utils\";\nimport { RootState } from \"..\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { eagleviewService, Page } from \"app2/src/api/integrations/eagleview.service\";\n\nexport const RECEIVE_PAGE = \"@integrations/eagleview/RECEIVE_PAGE\";\nexport const RESET_PAGES = \"@integrations/eagleview/RESET_PAGES\";\nexport const FETCH_PAGE = \"@integrations/eagleview/FETCH_PAGE\";\nexport const START_IMPORT = \"@integrations/eagleview/START_IMPORT\";\nexport const FINISH_IMPORT = \"@integrations/eagleview/FINISH_IMPORT\";\n\nexport const Actions = {\n  receivePage: (page: Page) => createAction(RECEIVE_PAGE, page),\n  fetchPage: (page: number) => createAction(FETCH_PAGE, page),\n  resetPages: () => createAction(RESET_PAGES),\n  startImport: () => createAction(START_IMPORT),\n  finishImport: () => createAction(FINISH_IMPORT),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, ActionsUnion<typeof Actions>>;\n\nexport const AsyncActions = {\n  getPage: (page: number): ThunkResult<Promise<Page>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(Actions.fetchPage(page));\n        const data = await eagleviewService.getPage(page);\n        data.page = page;\n        dispatch(Actions.receivePage(data));\n        return data;\n      } catch {}\n    };\n  },\n  importReport: (reportId: number): ThunkResult<Promise<boolean>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(Actions.startImport());\n        const data = await eagleviewService.importReport(reportId);\n        dispatch(Actions.finishImport());\n        return data;\n      } catch {}\n    };\n  },\n  login: (credentials: any) => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const response = await eagleviewService.login(credentials);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Successfully authenticated with EagleView\"));\n      } catch (response) {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, handleErrors(response)));\n        throw response;\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { createAction, ActionsUnion } from \"app2/src/reducers/Utils\";\nimport { IPageData } from \"../records/Page\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { List } from \"immutable\";\nimport { getPaginationByModel, ids, pagination, queryParams } from \"app2/src/selectors/pagination.selectors\";\nimport { RootState, ThunkResult } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nexport const FETCH_PAGE = \"@pagination/FETCH_PAGE\";\nexport const RECEIVE_PAGE = \"@pagination/RECEIVE_PAGE\";\nexport const SET_PAGE_IDS = \"@pagination/SET_PAGE_IDS\";\nexport const RECEIVE_PAGE_ERROR = \"@pagination/RECEIVE_PAGE_ERROR\";\nexport const PUSH_ID = \"@pagination/PUSH_ID\";\nexport const PREPEND_ID = \"@pagination/PREPEND_ID\";\nexport const REPLACE_ID = \"@pagination/REPLACE_ID\";\nexport const REMOVE_ID = \"@pagination/REMOVE_ID\";\nexport const CLEAR_PAGE = \"@pagination/CLEAR_PAGE\";\nexport const SET_BY_ATTR_PATH = \"@pagination/SET_BY_ATTR_PATCH\";\nexport const SET_DIRTY_IDS = \"@pagination/SET_DIRTY_IDS\";\n\nexport const Actions = {\n  fetchPage: (model: string, queryParams: QueryParamsRecord) =>\n    createAction(FETCH_PAGE, { model: model, queryParams: queryParams }),\n  receivePage: (model: string, queryParams: QueryParamsRecord, pageData: Partial<IPageData>) =>\n    createAction(RECEIVE_PAGE, {\n      model: model,\n      queryParams: queryParams,\n      pageData: pageData,\n    }),\n  setPageIds: (modelName: string, ids: List<number | string>) => createAction(SET_PAGE_IDS, { modelName, ids }),\n  receivePageError: (model: string, queryParams: QueryParamsRecord, errors: string[]) =>\n    createAction(RECEIVE_PAGE_ERROR, {\n      model: model,\n      queryParams: queryParams,\n      errors: errors,\n    }),\n  pushId: (id: number | string, modelName: string) => createAction(PUSH_ID, { id, modelName }),\n  prependId: (id: number, modelName: string) => createAction(PREPEND_ID, { id, modelName }),\n  replaceId: (replacedId: number, newId: number, modelName: string) =>\n    createAction(REPLACE_ID, { replacedId, newId, modelName }),\n  removeId: (removeId: number | string, modelName: string) => createAction(REMOVE_ID, { removeId, modelName }),\n  clearPage: (modelName: string) => createAction(CLEAR_PAGE, { modelName }),\n  setByAttrPath: (id: number, modelName: string, attrPath: string[], value: number) =>\n    createAction(SET_BY_ATTR_PATH, { id, modelName, attrPath, value }),\n  setDirtyIds: (ids: List<number>) => createAction(SET_DIRTY_IDS, { ids }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nexport const AsyncActions = {\n  onSortEnd: (\n    modelName: string,\n    oldIndex: number,\n    newIndex: number,\n    attrPath = [\"sort_order\"],\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      if (oldIndex === newIndex) {\n        return Promise.reject();\n      }\n      const recordList = getPaginationByModel(getState(), { modelName, path: [`${modelName}s`, \"byId\"] });\n\n      const moving = recordList.get(oldIndex);\n      let dirtyIds = List();\n\n      const min = _.min([oldIndex, newIndex]);\n      const max = _.max([oldIndex, newIndex]);\n      const sorted = recordList.map((l) => l.getIn(attrPath)).sortBy((l) => l);\n\n      const sortedIds = recordList\n        .delete(oldIndex)\n        .insert(newIndex, moving)\n        .map((record, idx) => {\n          const id = record.get(\"id\");\n          if (idx >= min && idx <= max) {\n            dirtyIds = dirtyIds.push(id);\n            dispatch(Actions.setByAttrPath(id, modelName, attrPath, sorted.get(idx)));\n          }\n\n          return id;\n        });\n\n      dispatch(Actions.setDirtyIds(dirtyIds.toSet().toList()));\n      dispatch(Actions.setPageIds(modelName, sortedIds));\n    };\n  },\n};\n\nexport const checkPageEmpty = (\n  state: RootState,\n  modelName: string,\n  callback: (newQueryParams: QueryParamsRecord) => Promise<void>,\n): Promise<void> => {\n  const modelIds = ids(state, { modelName });\n  const recordQueryParams = queryParams(state, { modelName });\n  const page = recordQueryParams.get(\"page\");\n  const paginationRecord = pagination(state, { modelName, page });\n\n  if (paginationRecord && paginationRecord.total_pages > 1 && modelIds.size === 0) {\n    const page = _.max([paginationRecord.current_page - 1, 1]);\n    const newQueryParams = recordQueryParams.setIn([\"page\"], page);\n\n    return callback(newQueryParams);\n  }\n};\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IEstimateOverviewData>): EstimateOverviewRecord => {\n  return new EstimateOverviewRecord(json);\n};\n\nexport interface IEstimateOverviewData {\n  id: number;\n  name: string;\n  line_items_count: number;\n  total: number;\n\n  created_at?: Date;\n  updated_at: Date;\n}\n\nexport interface IEstimateOverviewRecord {\n  id: Nullable<number>;\n  name: Nullable<string>;\n  line_items_count: Nullable<number>;\n  total: Nullable<number>;\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nexport const defaultEstimateOverviewProps = {\n  id: 0,\n  name: null,\n  line_items_count: 0,\n  total: 0,\n  created_at: null,\n  updated_at: null,\n};\n\nexport class EstimateOverviewRecord extends Record(defaultEstimateOverviewProps) implements IEstimateOverviewRecord {}\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IRoomData } from \"../records/Room\";\nimport { List } from \"immutable\";\n\nexport const RECEIVE_ROOM = \"@rooms/RECEIVE_ROOM\";\nexport const EDIT_ROOM = \"@rooms/EDIT_ROOM\";\nexport const RESET_ROOMS = \"@rooms/RESET_ROOMS\";\nexport const UPDATE_FORM = \"@rooms/UPDATE_FORM\";\n\nexport const Actions = {\n  receiveRoom: (room: Partial<IRoomData>) => createAction(RECEIVE_ROOM, { room }),\n  editRoom: (room: Partial<IRoomData>) => createAction(EDIT_ROOM, { room }),\n  resetRooms: (roomIds: List<number>) => createAction(RESET_ROOMS, { roomIds }),\n  updateForm: (event: { rootPath: any; name: string; value: any }) => createAction(UPDATE_FORM, { event }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"../../helpers/Fetcher\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { ActionsUnion, createAction, handleErrors } from \"../Utils\";\nimport { RootState } from \"..\";\nimport { IMetaCountlessPaginationData } from \"app2/src/records/MetaPagination\";\nimport { TaskPoller } from \"app2/src/api/task.service\";\nimport { ITaskData } from \"app2/src/records/Task\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nexport const FETCH_PAGE = \"@integrations/hover/FETCH_PAGE\";\nexport const RECEIVE_PAGE = \"@integrations/hover/RECEIVE_PAGE\";\nexport const RESET_PAGES = \"@integrations/hover/RESET_PAGES\";\nexport const SET_AUTHORIZING = \"@integrations/hover/SET_AUTHORIZING\";\nexport const SET_AUTHORIZED = \"@integrations/hover/SET_AUTHORIZED\";\nexport const SET_ERRORS = \"@integrations/hover/SET_ERRORS\";\nexport const SET_CURRENT_JOB = \"@integrations/hover/SET_CURRENT_JOB\";\nexport const SET_IMPORTING = \"@integrations/hover/SET_IMPORTING\";\nexport const SET_IMPORT_LOG = \"@integrations/hover/SET_IMPORT_LOG\";\nexport const FETCH_HOVER_USER = \"@integrations/hover/FETCH_HOVER_USER\";\nexport const RECEIVE_HOVER_USER = \"@integrations/hover/RECEIVE_HOVER_USER\";\nexport const SET_HOVER_USERS_LOADED = \"@ingetrations/hover/SET_HOVER_USERS_LOADED\";\nexport const FETCH_ORG_HOVER_USERS = \"@integrations/hover/FETCH_ORG_HOVER_USERS\";\nexport const RECEIVE_ORG_HOVER_USERS = \"@integrations/hover/RECEIVE_ORG_HOVER_USERS\";\nexport const RECEIVE_ORG_ERRORS = \"@integrations/hover/RECEIVE_ORG_ERRORS\";\n\nexport interface IHoverJobData {\n  id: number;\n  archived: boolean;\n  name: string;\n  customer_notes: string;\n  deliverable_id: number;\n  location_line_1: string;\n  location_line_2: string;\n  location_city: string;\n  location_region: string;\n  location_postal_code: string;\n  location_country: string;\n  location_lat: string;\n  location_lon: string;\n  roof_estimate_access_level: string;\n  estimated_hours_to_completion: number;\n  approved: boolean;\n  example: boolean;\n  property_type: string;\n  updated_at: string;\n  completed_at: string;\n  approved_at: string;\n  created_at: string;\n  org_id: number;\n  user_id: number;\n  captured_user_id: number;\n  search_rank: string;\n  state: string;\n  via_job_share: number;\n}\n\nexport interface IHoverPagination {\n  pagination: IMetaCountlessPaginationData;\n}\n\nexport interface Page {\n  loading?: boolean;\n  page: number;\n  jobs: IHoverJobData[];\n  meta: IHoverPagination;\n}\n\nexport interface IHoverParams {\n  page: number;\n  search: string;\n}\n\nexport const Actions = {\n  fetchPage: (params: IHoverParams) => createAction(FETCH_PAGE, params),\n  receivePage: (page: Page) => createAction(RECEIVE_PAGE, page),\n  resetPages: () => createAction(RESET_PAGES),\n  setAuthorizing: (authorizing: boolean) => createAction(SET_AUTHORIZING, authorizing),\n  setAuthorized: (authorized: boolean) => createAction(SET_AUTHORIZED, authorized),\n  setErrors: (errors: string[]) => createAction(SET_ERRORS, errors),\n  setImporting: (importing: boolean) => createAction(SET_IMPORTING, importing),\n  setImportLog: (log: string) => createAction(SET_IMPORT_LOG, log),\n  setCurrentJob: (jobId: number) => createAction(SET_CURRENT_JOB, jobId),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  getAuthorization: (code: string): ThunkResult<Promise<boolean>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.setAuthorizing(true));\n      return fetcher.post(\"/integrations/hover/callback\", { code: code }).then(\n        () => {\n          dispatch(Actions.setAuthorizing(false));\n          dispatch(Actions.setAuthorized(true));\n          return true;\n        },\n        (errors) => {\n          handleErrors(errors);\n          dispatch(Actions.setErrors([\"There was a problem with your authorization code.  Please try again.\"]));\n          dispatch(Actions.setAuthorizing(false));\n          return false;\n        },\n      );\n    };\n  },\n  getPage: (params: IHoverParams): ThunkResult<Promise<Page>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPage(params));\n      return fetcher.get<Page>(\"/integrations/hover/jobs\", params).then((data) => {\n        data.page = params.page;\n        dispatch(Actions.receivePage(data));\n        return data;\n      });\n    };\n  },\n  getAuthorized: (): ThunkResult<Promise<{ authorized: boolean }>> => {\n    return (dispatch: RootDispatchType) => {\n      return fetcher.get<{ authorized: boolean }>(\"/integrations/hover/authorized\").then((result) => {\n        dispatch(Actions.setAuthorized(result.authorized));\n        return result;\n      });\n    };\n  },\n  importReport: (reportId: number, jobId: number): ThunkResult<Promise<TaskPoller>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.setImporting(true));\n      return fetcher\n        .post<{ location: string }>(\"/integrations/hover/import\", { hover_id: reportId, job_id: jobId })\n        .then((result) => {\n          const poller = new TaskPoller(result.location);\n\n          poller.callback = (task: ITaskData) => {\n            dispatch(Actions.setImportLog(task.logs));\n          };\n\n          poller.promise.then(\n            () => {\n              dispatch(Actions.setImporting(false));\n            },\n            (task: ITaskData) => {\n              dispatch(Actions.setImportLog(task.logs));\n              dispatch(Actions.setErrors([task.logs]));\n              dispatch(Actions.setImporting(false));\n            },\n          );\n\n          return poller;\n        });\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { createAction, ActionsUnion } from \"app2/src/reducers/UtilsTypes\";\nimport { Map } from \"immutable\";\n\nexport const UPDATE_FORM = \"@rsfForm/UPDATE_FORM\";\nexport const UPDATE_FORM_ERROR = \"@rsfForm/UPDATE_FORM_ERROR\";\nexport const UPDATE_FORM_ERRORS = \"@rsfForm/UPDATE_FORM_ERRORS\";\nexport const INITIALIZE_FORM = \"@rsfForm/INITIALIZE_FORM\"; // New action type\n\nexport interface FormUpdateEvent {\n  rootPath: (string | number)[];\n  name: string;\n  value: any;\n}\n\nexport const Actions = {\n  update: (event: FormUpdateEvent) => createAction(UPDATE_FORM, { event }),\n  /**\n   * Use this action to manually set a single error on a form field\n   */\n  updateError: (event: { rootPath: (string | number)[]; name: string; error: string }) =>\n    createAction(UPDATE_FORM_ERROR, { event }),\n  /**\n   * Should only be used by Form component to set the entire errors map\n   */\n  updateErrors: (event: { rootPath: (string | number)[]; errors: Map<string, string> }) =>\n    createAction(UPDATE_FORM_ERRORS, { event }),\n  /**\n   * Use this action to initialize a form with a name and data\n   */\n  initializeForm: (formName: string, data: any) => createAction(INITIALIZE_FORM, { formName, data }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { Record, List } from \"immutable\";\nimport { Nullable } from \".\";\nimport { fromJSON as imageFromJSON, toJSON as imageToJSON, ImageRecord, IImageData } from \"app2/src/records/Image\";\n\nexport const fromJSON = (json: Partial<IToolData>): ToolRecord => {\n  const data: IToolRecord = { ...(json as any) };\n\n  if (json.brand_image) {\n    data.brand_image = imageFromJSON(json.brand_image);\n  } else {\n    data.brand_image = imageFromJSON({});\n  }\n\n  return new ToolRecord(data);\n};\n\nexport const toJSON = (record: ToolRecord): IToolData => {\n  const Tool: IToolData = record.toJSON() as any as IToolData;\n\n  if (Tool.id <= 0) {\n    delete Tool.id;\n  }\n\n  return Tool;\n};\n\nexport const toFormData = (record: ToolRecord): any => {\n  const data = new FormData();\n  if (record.id > 0) {\n    data.set(\"tool[id]\", record.id as any);\n  }\n  data.set(\"tool[name]\", record.name);\n  data.set(\"tool[link]\", record.link);\n  data.set(\"tool[kind]\", record.kind);\n  data.set(\"tool[org_id]\", record.org_id as any);\n  if (record.brand_image) {\n    if (record.brand_image.id > 0 && record.brand_image._destroy) {\n      data.set(\"tool[brand_image_attributes][id]\", record.brand_image.id.toString());\n      data.set(\"tool[brand_image_attributes][_destroy]\", record.brand_image._destroy.toString());\n    } else if (record.brand_image.file_queue) {\n      data.set(\"tool[brand_image_attributes][file]\", record.brand_image.file_queue);\n    }\n  }\n  return data;\n};\n\nexport interface IToolData {\n  id: number;\n  brand_image: any;\n  name: string;\n  link: string;\n  kind: string;\n  org_id: number;\n  archived: boolean;\n  loading?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IToolRecord {\n  id: number;\n  brand_image: ImageRecord;\n  name: string;\n  link: string;\n  kind: string;\n  org_id: number;\n  archived: boolean;\n\n  loading: boolean;\n  errors: Nullable<List<string>>;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nconst defaultToolProps: IToolRecord = {\n  id: 0,\n  brand_image: null,\n  name: \"\",\n  link: \"\",\n  kind: \"\",\n  org_id: null,\n  archived: false,\n  loading: false,\n  errors: List<string>(),\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class ToolRecord extends Record(defaultToolProps) implements IToolRecord {\n  public readonly id!: number;\n  public readonly brand_image!: ImageRecord;\n  public readonly name!: string;\n  public readonly link!: string;\n  public readonly kind!: string;\n  public readonly org_id!: Nullable<number>;\n  public readonly archived!: boolean;\n\n  public readonly loading!: boolean;\n  public readonly errors!: List<string>;\n\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public constructor(values?: Partial<IToolRecord>) {\n    values ? super(values) : super();\n  }\n}\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"util/main.min\",[\"kendo.core.min\"],t)}(function(){return function(){function t(t){return typeof t!==B}function e(t,e){var r=n(e);return I.round(t*r)/r}function n(t){return t?I.pow(10,t):1}function r(t,e,n){return I.max(I.min(t,n),e)}function i(t){return t*P}function o(t){return t/P}function a(t){return\"number\"==typeof t&&!isNaN(t)}function s(e,n){return t(e)?e:n}function h(t){return t*t}function c(t){var e,n=[];for(e in t)n.push(e+t[e]);return n.sort().join(\"\")}function u(t){var e,n=2166136261;for(e=0;t.length>e;++e)n+=(n<<1)+(n<<4)+(n<<7)+(n<<8)+(n<<24),n^=t.charCodeAt(e);return n>>>0}function f(t){return u(c(t))}function d(t){var e,n=t.length,r=E,i=G;for(e=0;n>e;e++)i=I.max(i,t[e]),r=I.min(r,t[e]);return{min:r,max:i}}function l(t){return d(t).min}function p(t){return d(t).max}function g(t){return S(t).min}function m(t){return S(t).max}function S(t){var e,n,r,i=E,o=G;for(e=0,n=t.length;n>e;e++)r=t[e],null!==r&&isFinite(r)&&(i=I.min(i,r),o=I.max(o,r));return{min:i===E?void 0:i,max:o===G?void 0:o}}function w(t){return t?t[t.length-1]:void 0}function y(t,e){return t.push.apply(t,e),t}function v(t){return R.template(t,{useWithBlock:!1,paramName:\"d\"})}function x(e,n){return t(n)&&null!==n?\" \"+e+\"='\"+n+\"' \":\"\"}function _(t){var e,n=\"\";for(e=0;t.length>e;e++)n+=x(t[e][0],t[e][1]);return n}function b(e){var n,r,i=\"\";for(n=0;e.length>n;n++)r=e[n][1],t(r)&&(i+=e[n][0]+\":\"+r+\";\");return\"\"!==i?i:void 0}function C(t){return\"string\"!=typeof t&&(t+=\"px\"),t}function T(t){var e,n,r=[];if(t)for(e=R.toHyphens(t).split(\"-\"),n=0;e.length>n;n++)r.push(\"k-pos-\"+e[n]);return r.join(\" \")}function D(e){return\"\"===e||null===e||\"none\"===e||\"transparent\"===e||!t(e)}function k(t){for(var e={1:\"i\",10:\"x\",100:\"c\",2:\"ii\",20:\"xx\",200:\"cc\",3:\"iii\",30:\"xxx\",300:\"ccc\",4:\"iv\",40:\"xl\",400:\"cd\",5:\"v\",50:\"l\",500:\"d\",6:\"vi\",60:\"lx\",600:\"dc\",7:\"vii\",70:\"lxx\",700:\"dcc\",8:\"viii\",80:\"lxxx\",800:\"dccc\",9:\"ix\",90:\"xc\",900:\"cm\",1e3:\"m\"},n=[1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],r=\"\";t>0;)n[0]>t?n.shift():(r+=e[n[0]],t-=n[0]);return r}function F(t){var e,n,r,i,o;for(t=t.toLowerCase(),e={i:1,v:5,x:10,l:50,c:100,d:500,m:1e3},n=0,r=0,i=0;t.length>i;++i){if(o=e[t.charAt(i)],!o)return null;n+=o,o>r&&(n-=2*r),r=o}return n}function A(t){var e=Object.create(null);return function(){var n,r=\"\";for(n=arguments.length;--n>=0;)r+=\":\"+arguments[n];return r in e?e[r]:t.apply(this,arguments)}}function M(t){for(var e,n,r=[],i=0,o=t.length;o>i;)e=t.charCodeAt(i++),e>=55296&&56319>=e&&o>i?(n=t.charCodeAt(i++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),i--)):r.push(e);return r}function L(t){return t.map(function(t){var e=\"\";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t)}).join(\"\")}function O(t,e){function n(t,n){for(var r=[],i=0,o=0,a=0;t.length>i&&n.length>o;)e(t[i],n[o])<=0?r[a++]=t[i++]:r[a++]=n[o++];return t.length>i&&r.push.apply(r,t.slice(i)),n.length>o&&r.push.apply(r,n.slice(o)),r}return 2>t.length?t.slice():function r(t){var e,i,o;return 1>=t.length?t:(e=Math.floor(t.length/2),i=t.slice(0,e),o=t.slice(e),i=r(i),o=r(o),n(i,o))}(t)}var I=Math,R=window.kendo,N=R.deepExtend,P=I.PI/180,E=Number.MAX_VALUE,G=-Number.MAX_VALUE,B=\"undefined\",U=Date.now;U||(U=function(){return(new Date).getTime()}),N(R,{util:{MAX_NUM:E,MIN_NUM:G,append:y,arrayLimits:d,arrayMin:l,arrayMax:p,defined:t,deg:o,hashKey:u,hashObject:f,isNumber:a,isTransparent:D,last:w,limitValue:r,now:U,objectKey:c,round:e,rad:i,renderAttr:x,renderAllAttr:_,renderPos:T,renderSize:C,renderStyle:b,renderTemplate:v,sparseArrayLimits:S,sparseArrayMin:g,sparseArrayMax:m,sqr:h,valueOrDefault:s,romanToArabic:F,arabicToRoman:k,memoize:A,ucs2encode:L,ucs2decode:M,mergeSort:O}}),R.drawing.util=R.util,R.dataviz.util=R.util}(),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"pdf/core.min\",[\"kendo.core.min\",\"util/main.min\"],t)}(function(){!function(t,e,n){\"use strict\";function r(){function t(){var e,i,o;for(e=0;arguments.length>e;++e){if(i=arguments[e],i===n)throw Error(\"Cannot output undefined to PDF\");if(i instanceof x)i.beforeRender(t),i.render(t);else if(z(i))g(i,t);else if(p(i))m(i,t);else if(\"number\"==typeof i){if(isNaN(i))throw Error(\"Cannot output NaN to PDF\");o=i.toFixed(7),o.indexOf(\".\")>=0&&(o=o.replace(/\\.?0+$/,\"\")),\"-0\"==o&&(o=\"0\"),r.writeString(o)}else/string|boolean/.test(typeof i)?r.writeString(i+\"\"):\"function\"==typeof i.get?r.write(i.get()):\"object\"==typeof i&&(i?t(new W(i)):r.writeString(\"null\"))}}var e=0,r=I();return t.writeData=function(t){r.write(t)},t.withIndent=function(n){++e,n(t),--e},t.indent=function(){t(rt,f(\"\",2*e,\"  \")),t.apply(null,arguments)},t.offset=function(){return r.offset()},t.toString=function(){throw Error(\"FIX CALLER\")},t.get=function(){return r.get()},t.stream=function(){return r},t}function i(t,e){var n=t.beforeRender,r=t.render;t.beforeRender=function(){},t.render=function(t){t(e,\" 0 R\")},t.renderFull=function(i){t._offset=i.offset(),i(e,\" 0 obj \"),n.call(t,i),r.call(t,i),i(\" endobj\")}}function o(t){var e,n,r;if(\"function\"!=typeof t&&(e=t,t=function(t,n){return t in e?e[t]:n}),n=t(\"paperSize\",at.a4),!n)return{};if(\"string\"==typeof n&&(n=at[n.toLowerCase()],null==n))throw Error(\"Unknown paper size\");return n[0]=v(n[0]),n[1]=v(n[1]),t(\"landscape\",!1)&&(n=[Math.max(n[0],n[1]),Math.min(n[0],n[1])]),r=t(\"margin\"),r&&(\"string\"==typeof r||\"number\"==typeof r?(r=v(r,0),r={left:r,top:r,right:r,bottom:r}):r={left:v(r.left,0),top:v(r.top,0),right:v(r.right,0),bottom:v(r.bottom,0)},t(\"addMargin\")&&(n[0]+=r.left+r.right,n[1]+=r.top+r.bottom)),{paperSize:n,margin:r}}function a(t){function e(e,n){return t&&null!=t[e]?t[e]:n}var n,a,s=this,h=r(),c=0,u=[];s.getOption=e,s.attach=function(t){return u.indexOf(t)<0&&(i(t,++c),u.push(t)),t},s.pages=[],s.FONTS={},s.IMAGES={},s.GRAD_COL_FUNCTIONS={},s.GRAD_OPC_FUNCTIONS={},s.GRAD_COL={},s.GRAD_OPC={},n=s.attach(new Z),a=s.attach(new V),n.setPages(a),s.addPage=function(t){var e,n,i,h=o(function(e,n){return t&&null!=t[e]?t[e]:n}),c=h.paperSize,u=h.margin,f=c[0],d=c[1];return u&&(f-=u.left+u.right,d-=u.top+u.bottom),e=new K(r(),null,!0),n={Contents:s.attach(e),Parent:a,MediaBox:[0,0,c[0],c[1]]},i=new J(s,n),i._content=e,a.addPage(s.attach(i)),i.transform(1,0,0,-1,0,c[1]),u&&(i.translate(u.left,u.top),i.rect(0,0,f,d),i.clip()),s.pages.push(i),i},s.render=function(){var t,r;for(h(\"%PDF-1.4\",rt,\"%ÂÁÚÏÎ\",rt,rt),t=0;u.length>t;++t)u[t].renderFull(h),h(rt,rt);for(r=h.offset(),h(\"xref\",rt,0,\" \",u.length+1,rt),h(\"0000000000 65535 f \",rt),t=0;u.length>t;++t)h(d(u[t]._offset,10),\" 00000 n \",rt);return h(rt),h(\"trailer\",rt),h(new W({Size:u.length+1,Root:n,Info:new W({Producer:new j(e(\"producer\",\"Kendo UI PDF Generator v.\"+et.version)),Title:new j(e(\"title\",\"\")),Author:new j(e(\"author\",\"\")),Subject:new j(e(\"subject\",\"\")),Keywords:new j(e(\"keywords\",\"\")),Creator:new j(e(\"creator\",\"Kendo UI PDF Generator v.\"+et.version)),CreationDate:e(\"date\",new Date)})}),rt,rt),h(\"startxref\",rt,r,rt),h(\"%%EOF\",rt),h.stream().offset(0)}}function s(e,n){function r(){t.console&&(t.console.error?t.console.error(\"Cannot load URL: %s\",e):t.console.log(\"Cannot load URL: %s\",e)),n(null)}var i=new XMLHttpRequest;i.open(\"GET\",e,!0),nt&&(i.responseType=\"arraybuffer\"),i.onload=function(){200==i.status||304==i.status?n(nt?new Uint8Array(i.response):new VBArray(i.responseBody).toArray()):r()},i.onerror=r,i.send(null)}function h(t,e){var n=st[t];n?e(n):s(t,function(n){if(null==n)throw Error(\"Cannot load font from \"+t);var r=new et.pdf.TTFFont(n);st[t]=r,e(r)})}function c(t,e){function r(t){c.src=t,c.complete&&!et.support.browser.msie?o():(c.onload=o,c.onerror=i)}function i(){e(ht[t]=\"TAINTED\")}function o(){var r,o,h,u,f,d,l,p,g,m,S,w;if(s&&/^image\\/jpe?g$/i.test(s.type))return r=new FileReader,r.onload=function(){c=new C(c.width,c.height,I(new Uint8Array(this.result))),URL.revokeObjectURL(a),e(ht[t]=c)},r.readAsArrayBuffer(s),n;o=document.createElement(\"canvas\"),o.width=c.width,o.height=c.height,h=o.getContext(\"2d\"),h.drawImage(c,0,0);try{u=h.getImageData(0,0,c.width,c.height)}catch(y){return i()}finally{a&&URL.revokeObjectURL(a)}for(f=!1,d=I(),l=I(),p=u.data,g=0;p.length>g;)d.writeByte(p[g++]),d.writeByte(p[g++]),d.writeByte(p[g++]),m=p[g++],255>m&&(f=!0),l.writeByte(m);f?c=new T(c.width,c.height,d,l):(S=o.toDataURL(\"image/jpeg\"),S=S.substr(S.indexOf(\";base64,\")+8),w=I(),w.writeBase64(S),w.offset(0),c=new C(c.width,c.height,w)),e(ht[t]=c)}var a,s,h,c=ht[t];c?e(c):(c=new Image,/^data:/i.test(t)||(c.crossOrigin=\"Anonymous\"),nt&&!/^data:/i.test(t)?(h=new XMLHttpRequest,h.onload=function(){s=h.response,a=URL.createObjectURL(s),r(a)},h.onerror=i,h.open(\"GET\",t,!0),h.responseType=\"blob\",h.send()):r(t))}function u(t){return function(e,n){var r=e.length,i=r;if(0===r)return n();for(;i-- >0;)t(e[i],function(){0===--r&&n()})}}function f(t,e,n){for(;e>t.length;)t=n+t;return t}function d(t,e){return f(t+\"\",e,\"0\")}function l(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function p(t){return t instanceof Date}function g(t,e){e(\"[\"),t.length>0&&e.withIndent(function(){for(var n=0;t.length>n;++n)n>0&&n%8===0?e.indent(t[n]):e(\" \",t[n])}),e(\" ]\")}function m(t,e){e(\"(D:\",d(t.getUTCFullYear(),4),d(t.getUTCMonth()+1,2),d(t.getUTCDate(),2),d(t.getUTCHours(),2),d(t.getUTCMinutes(),2),d(t.getUTCSeconds(),2),\"Z)\")}function S(t){return t*(72/25.4)}function w(t){return S(10*t)}function y(t){return 72*t}function v(t,n){var r,i;if(\"number\"==typeof t)return t;if(\"string\"==typeof t&&(r=/^\\s*([0-9.]+)\\s*(mm|cm|in|pt)\\s*$/.exec(t),r&&(i=e(r[1]),!isNaN(i))))return\"pt\"==r[2]?i:{mm:S,cm:w,\"in\":y}[r[2]](i);if(null!=n)return n;throw Error(\"Can't parse unit: \"+t)}function x(){}function _(t,e,n){n||(n=x),t.prototype=new n;for(var r in e)l(e,r)&&(t.prototype[r]=e[r]);return t}function b(t){return l(X,t)?X[t]:X[t]=new H(t)}function C(t,e,n){this.asStream=function(){var r=new K(n,{Type:b(\"XObject\"),Subtype:b(\"Image\"),Width:t,Height:e,BitsPerComponent:8,ColorSpace:b(\"DeviceRGB\"),Filter:b(\"DCTDecode\")});return r._resourceName=b(\"I\"+ ++it),r}}function T(t,e,n,r){this.asStream=function(i){var o=new K(r,{Type:b(\"XObject\"),Subtype:b(\"Image\"),Width:t,Height:e,BitsPerComponent:8,ColorSpace:b(\"DeviceGray\")},!0),a=new K(n,{Type:b(\"XObject\"),Subtype:b(\"Image\"),Width:t,Height:e,BitsPerComponent:8,ColorSpace:b(\"DeviceRGB\"),SMask:i.attach(o)},!0);return a._resourceName=b(\"I\"+ ++it),a}}function D(t){return t.map(function(t){return z(t)?D(t):\"number\"==typeof t?(Math.round(1e3*t)/1e3).toFixed(3):t}).join(\" \")}function k(t,e,n,r,i,o,a){var s=D([e,n,r,i,o,a]),h=t.GRAD_COL_FUNCTIONS[s];return h||(h=t.GRAD_COL_FUNCTIONS[s]=t.attach(new W({FunctionType:2,Domain:[0,1],Range:[0,1,0,1,0,1],N:1,C0:[e,n,r],C1:[i,o,a]}))),h}function F(t,e,n){var r=D([e,n]),i=t.GRAD_OPC_FUNCTIONS[r];return i||(i=t.GRAD_OPC_FUNCTIONS[r]=t.attach(new W({FunctionType:2,Domain:[0,1],Range:[0,1],N:1,C0:[e],C1:[n]}))),i}function A(t,e){function n(t){return 1==t.length?t[0]:{FunctionType:3,Functions:t,Domain:[0,1],Bounds:f,Encode:d}}var r,i,o,a,s,h=!1,c=[],u=[],f=[],d=[];for(r=1;e.length>r;++r)i=e[r-1],o=e[r],a=i.color,s=o.color,u.push(k(t,a.r,a.g,a.b,s.r,s.g,s.b)),(1>a.a||1>s.a)&&(h=!0),f.push(o.offset),d.push(0,1);if(h)for(r=1;e.length>r;++r)i=e[r-1],o=e[r],a=i.color,s=o.color,c.push(F(t,a.a,s.a));return f.pop(),{hasAlpha:h,colors:n(u),opacities:h?n(c):null}}function M(t,e,n,r,i,o){var a,s,h;return o||(h=[e].concat(r),n.forEach(function(t){h.push(t.offset,t.color.r,t.color.g,t.color.b)}),s=D(h),a=t.GRAD_COL[s]),a||(a=new W({Type:b(\"Shading\"),ShadingType:e?3:2,ColorSpace:b(\"DeviceRGB\"),Coords:r,Domain:[0,1],Function:i,Extend:[!0,!0]}),t.attach(a),a._resourceName=\"S\"+ ++it,s&&(t.GRAD_COL[s]=a)),a}function L(t,e,n,r,i,o){var a,s,h;return o||(h=[e].concat(r),n.forEach(function(t){h.push(t.offset,t.color.a)}),s=D(h),a=t.GRAD_OPC[s]),a||(a=new W({Type:b(\"ExtGState\"),AIS:!1,CA:1,ca:1,SMask:{Type:b(\"Mask\"),S:b(\"Luminosity\"),G:t.attach(new K(\"/a0 gs /s0 sh\",{Type:b(\"XObject\"),Subtype:b(\"Form\"),FormType:1,BBox:o?[o.left,o.top+o.height,o.left+o.width,o.top]:[0,1,1,0],Group:{Type:b(\"Group\"),S:b(\"Transparency\"),CS:b(\"DeviceGray\"),I:!0},Resources:{ExtGState:{a0:{CA:1,ca:1}},Shading:{s0:{ColorSpace:b(\"DeviceGray\"),Coords:r,Domain:[0,1],ShadingType:e?3:2,Function:i,Extend:[!0,!0]}}}}))}}),t.attach(a),a._resourceName=\"O\"+ ++it,s&&(t.GRAD_OPC[s]=a)),a}function O(t,e,n){var r=\"radial\"==e.type,i=A(t,e.stops),o=r?[e.start.x,e.start.y,e.start.r,e.end.x,e.end.y,e.end.r]:[e.start.x,e.start.y,e.end.x,e.end.y],a=M(t,r,e.stops,o,i.colors,e.userSpace&&n),s=i.hasAlpha?L(t,r,e.stops,o,i.opacities,e.userSpace&&n):null;return{hasAlpha:i.hasAlpha,shading:a,opacity:s}}function I(e){function n(){return D>=k}function r(){return k>D?e[D++]:0}function i(t){x(D),e[D++]=255&t,D>k&&(k=D)}function o(){return r()<<8|r()}function a(t){i(t>>8),i(t)}function s(){var t=o();return t>=32768?t-65536:t}function h(t){a(0>t?t+65536:t)}function c(){return 65536*o()+o()}function u(t){a(t>>>16&65535),a(65535&t)}function f(){var t=c();return t>=2147483648?t-4294967296:t}function d(t){u(0>t?t+4294967296:t)}function l(){return c()/65536}function p(t){u(Math.round(65536*t))}function g(){return f()/65536}function m(t){d(Math.round(65536*t))}function S(t){return v(t,r)}function w(t){return String.fromCharCode.apply(String,S(t))}function y(t){for(var e=0;t.length>e;++e)i(t.charCodeAt(e))}function v(t,e){for(var n=Array(t),r=0;t>r;++r)n[r]=e();return n}var x,_,b,C,T,D=0,k=0;return null==e?e=nt?new Uint8Array(256):[]:k=e.length,x=nt?function(t){if(t>=e.length){var n=new Uint8Array(Math.max(t+256,2*e.length));n.set(e,0),e=n}}:function(){},_=nt?function(){return new Uint8Array(e.buffer,0,k)}:function(){return e},b=nt?function(t){if(\"string\"==typeof t)return y(t);var n=t.length;x(D+n),e.set(t,D),D+=n,D>k&&(k=D)}:function(t){if(\"string\"==typeof t)return y(t);for(var e=0;t.length>e;++e)i(t[e])},C=nt?function(t,n){if(e.buffer.slice)return new Uint8Array(e.buffer.slice(t,t+n));var r=new Uint8Array(n);return r.set(new Uint8Array(e.buffer,t,n)),r}:function(t,n){return e.slice(t,t+n)},T={eof:n,readByte:r,writeByte:i,readShort:o,writeShort:a,readLong:c,writeLong:u,readFixed:l,writeFixed:p,readShort_:s,writeShort_:h,readLong_:f,writeLong_:d,readFixed_:g,writeFixed_:m,read:S,write:b,readString:w,writeString:y,times:v,get:_,slice:C,offset:function(t){return null!=t?(D=t,T):D},skip:function(t){D+=t},toString:function(){throw Error(\"FIX CALLER.  BinaryStream is no longer convertible to string!\")},length:function(){return k},saveExcursion:function(t){var e=D;try{return t()}finally{D=e}},writeBase64:function(e){t.atob?y(t.atob(e)):b(ot.decode(e))},base64:function(){return ot.encode(_())}}}function R(t){return t.replace(/^\\s*(['\"])(.*)\\1\\s*$/,\"$2\")}function N(t){var e,n=/^\\s*((normal|italic)\\s+)?((normal|small-caps)\\s+)?((normal|bold|\\d+)\\s+)?(([0-9.]+)(px|pt))(\\/(([0-9.]+)(px|pt)|normal))?\\s+(.*?)\\s*$/i,r=n.exec(t);return r?(e=r[8]?parseInt(r[8],10):12,{italic:r[2]&&\"italic\"==r[2].toLowerCase(),variant:r[4],bold:r[6]&&/bold|700/i.test(r[6]),fontSize:e,lineHeight:r[12]?\"normal\"==r[12]?e:parseInt(r[12],10):null,fontFamily:r[14].split(/\\s*,\\s*/g).map(R)}):{fontSize:12,fontFamily:\"sans-serif\"}}function P(t){function e(e){return t.bold&&(e+=\"|bold\"),t.italic&&(e+=\"|italic\"),e.toLowerCase()}var n,r,i,o=t.fontFamily;if(o instanceof Array)for(i=0;o.length>i&&(n=e(o[i]),!(r=tt[n]));++i);else r=tt[o.toLowerCase()];for(;\"function\"==typeof r;)r=r();return r||(r=\"Times-Roman\"),r}function E(t,e){t=t.toLowerCase(),tt[t]=function(){return tt[e]},tt[t+\"|bold\"]=function(){return tt[e+\"|bold\"]},tt[t+\"|italic\"]=function(){return tt[e+\"|italic\"]},tt[t+\"|bold|italic\"]=function(){return tt[e+\"|bold|italic\"]}}function G(t,e){if(1==arguments.length)for(var n in t)l(t,n)&&G(n,t[n]);else switch(t=t.toLowerCase(),tt[t]=e,t){case\"dejavu sans\":tt[\"sans-serif\"]=e;break;case\"dejavu sans|bold\":tt[\"sans-serif|bold\"]=e;break;case\"dejavu sans|italic\":tt[\"sans-serif|italic\"]=e;break;case\"dejavu sans|bold|italic\":tt[\"sans-serif|bold|italic\"]=e;break;case\"dejavu serif\":tt.serif=e;break;case\"dejavu serif|bold\":tt[\"serif|bold\"]=e;break;case\"dejavu serif|italic\":tt[\"serif|italic\"]=e;break;case\"dejavu serif|bold|italic\":tt[\"serif|bold|italic\"]=e;break;case\"dejavu mono\":tt.monospace=e;break;case\"dejavu mono|bold\":tt[\"monospace|bold\"]=e;break;case\"dejavu mono|italic\":tt[\"monospace|italic\"]=e;break;case\"dejavu mono|bold|italic\":tt[\"monospace|bold|italic\"]=e}}function B(t,e){var n=t[0],r=t[1],i=t[2],o=t[3],a=t[4],s=t[5],h=e[0],c=e[1],u=e[2],f=e[3],d=e[4],l=e[5];return[n*h+r*u,n*c+r*f,i*h+o*u,i*c+o*f,a*h+s*u+d,a*c+s*f+l]}function U(t){return 1===t[0]&&0===t[1]&&0===t[2]&&1===t[3]&&0===t[4]&&0===t[5]}var z,j,q,H,X,W,K,Z,V,Y,$,Q,J,tt,et=t.kendo,nt=!!t.Uint8Array,rt=\"\\n\",it=0,ot=function(){var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{decode:function(e){for(var n,r,i,o,a,s,h,c=e.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\"),u=0,f=c.length,d=[];f>u;)n=t.indexOf(c.charAt(u++)),r=t.indexOf(c.charAt(u++)),i=t.indexOf(c.charAt(u++)),o=t.indexOf(c.charAt(u++)),a=n<<2|r>>>4,s=(15&r)<<4|i>>>2,h=(3&i)<<6|o,d.push(a),64!=i&&d.push(s),64!=o&&d.push(h);return d},encode:function(e){for(var n,r,i,o,a,s,h,c=0,u=e.length,f=\"\";u>c;)n=e[c++],r=e[c++],i=e[c++],o=n>>>2,a=(3&n)<<4|r>>>4,s=(15&r)<<2|i>>>6,h=63&i,c-u==2?s=h=64:c-u==1&&(h=64),f+=t.charAt(o)+t.charAt(a)+t.charAt(s)+t.charAt(h);return f}}}(),at={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],executive:[521.86,756],folio:[612,936],legal:[612,1008],letter:[612,792],tabloid:[792,1224]},st={\"Times-Roman\":!0,\"Times-Bold\":!0,\"Times-Italic\":!0,\"Times-BoldItalic\":!0,Helvetica:!0,\"Helvetica-Bold\":!0,\"Helvetica-Oblique\":!0,\"Helvetica-BoldOblique\":!0,Courier:!0,\"Courier-Bold\":!0,\"Courier-Oblique\":!0,\"Courier-BoldOblique\":!0,Symbol:!0,ZapfDingbats:!0},ht={},ct=u(h),ut=u(c);a.prototype={loadFonts:ct,loadImages:ut,getFont:function(t){var e=this.FONTS[t];if(!e){if(e=st[t],!e)throw Error(\"Font \"+t+\" has not been loaded\");e=this.attach(e===!0?new Y(t):new $(this,e)),this.FONTS[t]=e}return e},getImage:function(t){var e=this.IMAGES[t];if(!e){if(e=ht[t],!e)throw Error(\"Image \"+t+\" has not been loaded\");if(\"TAINTED\"===e)return null;e=this.IMAGES[t]=this.attach(e.asStream(this))}return e},getOpacityGS:function(t,n){var r,i,o,a=e(t).toFixed(3);return t=e(a),a+=n?\"S\":\"F\",r=this._opacityGSCache||(this._opacityGSCache={}),i=r[a],i||(o={Type:b(\"ExtGState\")},n?o.CA=t:o.ca=t,i=this.attach(new W(o)),i._resourceName=b(\"GS\"+ ++it),r[a]=i),i},dict:function(t){return new W(t)},name:function(t){return b(t)},stream:function(t,e){return new K(e,t)}},z=Array.isArray||function(t){return t instanceof Array},x.prototype.beforeRender=function(){},j=_(function(t){this.value=t},{render:function(t){var e,n=\"\",r=this.escape();for(e=0;r.length>e;++e)n+=String.fromCharCode(255&r.charCodeAt(e));t(\"(\",n,\")\")},escape:function(){return this.value.replace(/([\\(\\)\\\\])/g,\"\\\\$1\")},toString:function(){return this.value}}),q=_(function(t){this.value=t},{render:function(t){t(\"<\");for(var e=0;this.value.length>e;++e)t(d(this.value.charCodeAt(e).toString(16),4));t(\">\")}},j),H=_(function(t){this.name=t},{render:function(t){t(\"/\"+this.escape())},escape:function(){return this.name.replace(/[^\\x21-\\x7E]/g,function(t){return\"#\"+d(t.charCodeAt(0).toString(16),2)})},toString:function(){return this.name}}),X={},H.get=b,W=_(function(t){this.props=t},{render:function(t){var e=this.props,n=!0;t(\"<<\"),t.withIndent(function(){for(var r in e)l(e,r)&&!/^_/.test(r)&&(n=!1,t.indent(b(r),\" \",e[r]))}),n||t.indent(),t(\">>\")}}),K=_(function(t,e,n){if(\"string\"==typeof t){var r=I();r.write(t),t=r}this.data=t,this.props=e||{},this.compress=n},{render:function(e){var n=this.data.get(),r=this.props;this.compress&&t.pako&&\"function\"==typeof t.pako.deflate&&(r.Filter?r.Filter instanceof Array||(r.Filter=[r.Filter]):r.Filter=[],r.Filter.unshift(b(\"FlateDecode\")),n=t.pako.deflate(n)),r.Length=n.length,e(new W(r),\" stream\",rt),e.writeData(n),e(rt,\"endstream\")}}),Z=_(function(t){t=this.props=t||{},t.Type=b(\"Catalog\")},{setPages:function(t){this.props.Pages=t}},W),V=_(function(){this.props={Type:b(\"Pages\"),Kids:[],Count:0}},{addPage:function(t){this.props.Kids.push(t),this.props.Count++}},W),Y=_(function(t){this.props={Type:b(\"Font\"),Subtype:b(\"Type1\"),BaseFont:b(t)},this._resourceName=b(\"F\"+ ++it)},{encodeText:function(t){return new j(t+\"\")}},W),$=_(function(t,e,n){var r,i;n=this.props=n||{},n.Type=b(\"Font\"),n.Subtype=b(\"Type0\"),n.Encoding=b(\"Identity-H\"),this._pdf=t,this._font=e,this._sub=e.makeSubset(),this._resourceName=b(\"F\"+ ++it),r=e.head,this.name=e.psName,i=this.scale=e.scale,this.bbox=[r.xMin*i,r.yMin*i,r.xMax*i,r.yMax*i],this.italicAngle=e.post.italicAngle,this.ascent=e.ascent*i,this.descent=e.descent*i,this.lineGap=e.lineGap*i,this.capHeight=e.os2.capHeight||this.ascent,this.xHeight=e.os2.xHeight||0,this.stemV=0,this.familyClass=(e.os2.familyClass||0)>>8,this.isSerif=this.familyClass>=1&&7>=this.familyClass,this.isScript=10==this.familyClass,this.flags=(e.post.isFixedPitch?1:0)|(this.isSerif?2:0)|(this.isScript?8:0)|(0!==this.italicAngle?64:0)|32},{encodeText:function(t){return new q(this._sub.encodeText(t+\"\"))},getTextWidth:function(t,e){var n,r,i=0,o=this._font.cmap.codeMap;for(n=0;e.length>n;++n)r=o[e.charCodeAt(n)],i+=this._font.widthOfGlyph(r||0);return i*t/1e3},beforeRender:function(){var t,e,n,i,o=this,a=o._sub,s=a.render(),h=new K(I(s),{Length1:s.length},!0),c=o._pdf.attach(new W({Type:b(\"FontDescriptor\"),FontName:b(o._sub.psName),FontBBox:o.bbox,Flags:o.flags,StemV:o.stemV,ItalicAngle:o.italicAngle,Ascent:o.ascent,Descent:o.descent,CapHeight:o.capHeight,XHeight:o.xHeight,FontFile2:o._pdf.attach(h)})),u=a.ncid2ogid,f=a.firstChar,d=a.lastChar,l=[];!function p(t,e){if(d>=t){var n=u[t];null==n?p(t+1):(e||l.push(t,e=[]),e.push(o._font.widthOfGlyph(n)),p(t+1,e))}}(f),t=new W({Type:b(\"Font\"),Subtype:b(\"CIDFontType2\"),BaseFont:b(o._sub.psName),CIDSystemInfo:new W({Registry:new j(\"Adobe\"),Ordering:new j(\"Identity\"),Supplement:0}),FontDescriptor:c,FirstChar:f,LastChar:d,DW:Math.round(o._font.widthOfGlyph(0)),W:l,CIDToGIDMap:o._pdf.attach(o._makeCidToGidMap())}),e=o.props,e.BaseFont=b(o._sub.psName),e.DescendantFonts=[o._pdf.attach(t)],n=new Q(f,d,a.subset),i=new K(r(),null,!0),i.data(n),e.ToUnicode=o._pdf.attach(i)},_makeCidToGidMap:function(){return new K(I(this._sub.cidToGidMap()),null,!0)}},W),Q=_(function(t,e,n){this.firstChar=t,this.lastChar=e,this.map=n},{render:function(t){t.indent(\"/CIDInit /ProcSet findresource begin\"),t.indent(\"12 dict begin\"),t.indent(\"begincmap\"),t.indent(\"/CIDSystemInfo <<\"),t.indent(\"  /Registry (Adobe)\"),t.indent(\"  /Ordering (UCS)\"),t.indent(\"  /Supplement 0\"),t.indent(\">> def\"),t.indent(\"/CMapName /Adobe-Identity-UCS def\"),t.indent(\"/CMapType 2 def\"),t.indent(\"1 begincodespacerange\"),t.indent(\"  <0000><ffff>\"),t.indent(\"endcodespacerange\");var e=this;t.indent(e.lastChar-e.firstChar+1,\" beginbfchar\"),t.withIndent(function(){var n,r,i,o;for(n=e.firstChar;e.lastChar>=n;++n){for(r=e.map[n],i=et.util.ucs2encode([r]),t.indent(\"<\",d(n.toString(16),4),\">\",\"<\"),o=0;i.length>o;++o)t(d(i.charCodeAt(o).toString(16),4));t(\">\")}}),t.indent(\"endbfchar\"),t.indent(\"endcmap\"),t.indent(\"CMapName currentdict /CMap defineresource pop\"),t.indent(\"end\"),t.indent(\"end\")}}),J=_(function(t,e){this._pdf=t,this._rcount=0,this._textMode=!1,this._fontResources={},this._gsResources={},this._xResources={},this._patResources={},this._shResources={},this._opacity=1,this._matrix=[1,0,0,1,0,0],this._annotations=[],this._font=null,this._fontSize=null,this._contextStack=[],e=this.props=e||{},e.Type=b(\"Page\"),e.ProcSet=[b(\"PDF\"),b(\"Text\"),b(\"ImageB\"),b(\"ImageC\"),b(\"ImageI\")],e.Resources=new W({Font:new W(this._fontResources),ExtGState:new W(this._gsResources),XObject:new W(this._xResources),Pattern:new W(this._patResources),Shading:new W(this._shResources)}),e.Annots=this._annotations},{_out:function(){this._content.data.apply(null,arguments)},transform:function(t,e,n,r,i,o){U(arguments)||(this._matrix=B(arguments,this._matrix),this._out(t,\" \",e,\" \",n,\" \",r,\" \",i,\" \",o,\" cm\"),this._out(rt))},translate:function(t,e){this.transform(1,0,0,1,t,e)},scale:function(t,e){this.transform(t,0,0,e,0,0)},rotate:function(t){var e=Math.cos(t),n=Math.sin(t);this.transform(e,n,-n,e,0,0)},beginText:function(){this._textMode=!0,this._out(\"BT\",rt)},endText:function(){this._textMode=!1,this._out(\"ET\",rt)},_requireTextMode:function(){if(!this._textMode)throw Error(\"Text mode required; call page.beginText() first\")},_requireFont:function(){if(!this._font)throw Error(\"No font selected; call page.setFont() first\")},setFont:function(t,e){this._requireTextMode(),null==t?t=this._font:t instanceof $||(t=this._pdf.getFont(t)),null==e&&(e=this._fontSize),this._fontResources[t._resourceName]=t,this._font=t,this._fontSize=e,this._out(t._resourceName,\" \",e,\" Tf\",rt)},setTextLeading:function(t){this._requireTextMode(),this._out(t,\" TL\",rt)},setTextRenderingMode:function(t){this._requireTextMode(),this._out(t,\" Tr\",rt)},showText:function(t,e){var n,r;this._requireFont(),t.length>1&&e&&this._font instanceof $&&(n=this._font.getTextWidth(this._fontSize,t),r=e/n*100,this._out(r,\" Tz \")),this._out(this._font.encodeText(t),\" Tj\",rt)},showTextNL:function(t){this._requireFont(),this._out(this._font.encodeText(t),\" '\",rt)},addLink:function(t,e){var n=this._toPage({x:e.left,y:e.bottom}),r=this._toPage({x:e.right,y:e.top});this._annotations.push(new W({Type:b(\"Annot\"),Subtype:b(\"Link\"),Rect:[n.x,n.y,r.x,r.y],Border:[0,0,0],A:new W({Type:b(\"Action\"),S:b(\"URI\"),URI:new j(t)})}))},setStrokeColor:function(t,e,n){this._out(t,\" \",e,\" \",n,\" RG\",rt)},setOpacity:function(t){this.setFillOpacity(t),this.setStrokeOpacity(t),this._opacity*=t},setStrokeOpacity:function(t){if(1>t){var e=this._pdf.getOpacityGS(this._opacity*t,!0);this._gsResources[e._resourceName]=e,this._out(e._resourceName,\" gs\",rt)}},setFillColor:function(t,e,n){this._out(t,\" \",e,\" \",n,\" rg\",rt)},setFillOpacity:function(t){if(1>t){var e=this._pdf.getOpacityGS(this._opacity*t,!1);this._gsResources[e._resourceName]=e,this._out(e._resourceName,\" gs\",rt)}},gradient:function(t,e){var n,r,i;this.save(),this.rect(e.left,e.top,e.width,e.height),this.clip(),t.userSpace||this.transform(e.width,0,0,e.height,e.left,e.top),n=O(this._pdf,t,e),r=n.shading._resourceName,this._shResources[r]=n.shading,n.hasAlpha&&(i=n.opacity._resourceName,this._gsResources[i]=n.opacity,this._out(\"/\"+i+\" gs \")),this._out(\"/\"+r+\" sh\",rt),this.restore()},setDashPattern:function(t,e){this._out(t,\" \",e,\" d\",rt)},setLineWidth:function(t){this._out(t,\" w\",rt)},setLineCap:function(t){this._out(t,\" J\",rt)},setLineJoin:function(t){this._out(t,\" j\",rt)},setMitterLimit:function(t){this._out(t,\" M\",rt)},save:function(){this._contextStack.push(this._context()),this._out(\"q\",rt)},restore:function(){this._out(\"Q\",rt),this._context(this._contextStack.pop())},moveTo:function(t,e){this._out(t,\" \",e,\" m\",rt)},lineTo:function(t,e){this._out(t,\" \",e,\" l\",rt)},bezier:function(t,e,n,r,i,o){this._out(t,\" \",e,\" \",n,\" \",r,\" \",i,\" \",o,\" c\",rt)},bezier1:function(t,e,n,r){this._out(t,\" \",e,\" \",n,\" \",r,\" y\",rt)},bezier2:function(t,e,n,r){this._out(t,\" \",e,\" \",n,\" \",r,\" v\",rt)},close:function(){this._out(\"h\",rt)},rect:function(t,e,n,r){this._out(t,\" \",e,\" \",n,\" \",r,\" re\",rt)},ellipse:function(t,e,n,r){function i(e){return t+e}function o(t){return e+t}var a=.5522847498307936;this.moveTo(i(0),o(r)),this.bezier(i(n*a),o(r),i(n),o(r*a),i(n),o(0)),this.bezier(i(n),o(-r*a),i(n*a),o(-r),i(0),o(-r)),this.bezier(i(-n*a),o(-r),i(-n),o(-r*a),i(-n),o(0)),this.bezier(i(-n),o(r*a),i(-n*a),o(r),i(0),o(r))},circle:function(t,e,n){this.ellipse(t,e,n,n)},stroke:function(){this._out(\"S\",rt)},nop:function(){this._out(\"n\",rt)},clip:function(){this._out(\"W n\",rt)},clipStroke:function(){this._out(\"W S\",rt)},closeStroke:function(){this._out(\"s\",rt)},fill:function(){this._out(\"f\",rt)},fillStroke:function(){this._out(\"B\",rt)},drawImage:function(t){var e=this._pdf.getImage(t);e&&(this._xResources[e._resourceName]=e,this._out(e._resourceName,\" Do\",rt))},comment:function(t){var e=this;t.split(/\\r?\\n/g).forEach(function(t){e._out(\"% \",t,rt)})},_context:function(t){return null==t?{opacity:this._opacity,matrix:this._matrix}:(this._opacity=t.opacity,this._matrix=t.matrix,n)},_toPage:function(t){var e=this._matrix,n=e[0],r=e[1],i=e[2],o=e[3],a=e[4],s=e[5];return{x:n*t.x+i*t.y+a,y:r*t.x+o*t.y+s}}},W),tt={serif:\"Times-Roman\",\"serif|bold\":\"Times-Bold\",\"serif|italic\":\"Times-Italic\",\"serif|bold|italic\":\"Times-BoldItalic\",\"sans-serif\":\"Helvetica\",\"sans-serif|bold\":\"Helvetica-Bold\",\"sans-serif|italic\":\"Helvetica-Oblique\",\"sans-serif|bold|italic\":\"Helvetica-BoldOblique\",monospace:\"Courier\",\"monospace|bold\":\"Courier-Bold\",\"monospace|italic\":\"Courier-Oblique\",\"monospace|bold|italic\":\"Courier-BoldOblique\",zapfdingbats:\"ZapfDingbats\",\"zapfdingbats|bold\":\"ZapfDingbats\",\"zapfdingbats|italic\":\"ZapfDingbats\",\"zapfdingbats|bold|italic\":\"ZapfDingbats\"},E(\"Times New Roman\",\"serif\"),E(\"Courier New\",\"monospace\"),E(\"Arial\",\"sans-serif\"),E(\"Helvetica\",\"sans-serif\"),E(\"Verdana\",\"sans-serif\"),E(\"Tahoma\",\"sans-serif\"),E(\"Georgia\",\"sans-serif\"),E(\"Monaco\",\"monospace\"),E(\"Andale Mono\",\"monospace\"),et.pdf={Document:a,BinaryStream:I,defineFont:G,parseFontDef:N,getFontURL:P,loadFonts:ct,loadImages:ut,getPaperOptions:o,TEXT_RENDERING_MODE:{fill:0,stroke:1,fillAndStroke:2,invisible:3,fillAndClip:4,strokeAndClip:5,fillStrokeClip:6,clip:7}}}(window,parseFloat)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"pdf/ttf.min\",[\"pdf/core.min\",\"util/main.min\"],t)}(function(){!function(t){\"use strict\";function e(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function n(t){return Object.keys(t).sort(function(t,e){return t-e}).map(parseFloat)}function r(t){var e,n,r;for(this.raw=t,this.scalerType=t.readLong(),this.tableCount=t.readShort(),this.searchRange=t.readShort(),this.entrySelector=t.readShort(),this.rangeShift=t.readShort(),e=this.tables={},n=0;this.tableCount>n;++n)r={tag:t.readString(4),checksum:t.readLong(),offset:t.readLong(),length:t.readLong()},e[r.tag]=r}function i(t){function n(t,e){this.definition=e,this.length=e.length,this.offset=e.offset,this.file=t,this.rawData=t.raw,this.parse(t.raw)}n.prototype.raw=function(){return this.rawData.slice(this.offset,this.length)};for(var r in t)e(t,r)&&(n[r]=n.prototype[r]=t[r]);return n}function o(){var t,e=\"\",n=w+\"\";for(t=0;n.length>t;++t)e+=String.fromCharCode(n.charCodeAt(t)-48+65);return++w,e}function a(t){this.font=t,this.subset={},this.unicodes={},this.ogid2ngid={0:0},this.ngid2ogid={0:0},this.ncid2ogid={},this.next=this.firstChar=1,this.nextGid=1,this.psName=o()+\"+\"+this.font.psName}function s(t,e){var n,r,i,o=this,a=o.contents=v(t);if(\"ttcf\"==a.readString(4)){if(!e)throw Error(\"Must specify a name for TTC files\");for(a.readLong(),n=a.readLong(),r=0;n>r;++r)if(i=a.readLong(),a.saveExcursion(function(){a.offset(i),o.parse()}),o.psName==e)return;throw Error(\"Font \"+e+\" not found in collection\")}a.offset(0),o.parse()}var h,c,u,f,d,l,p,g,m,S,w,y=t.kendo.pdf,v=y.BinaryStream;r.prototype={readTable:function(t,e){var n=this.tables[t];if(!n)throw Error(\"Table \"+t+\" not found in directory\");return this[t]=n.table=new e(this,n)},render:function(t){var n,r,i,o,a,s,h,c,u=Object.keys(t).length,f=Math.pow(2,Math.floor(Math.log(u)/Math.LN2)),d=16*f,l=Math.floor(Math.log(f)/Math.LN2),p=16*u-d,g=v();\ng.writeLong(this.scalerType),g.writeShort(u),g.writeShort(d),g.writeShort(l),g.writeShort(p),n=16*u,r=g.offset()+n,i=null,o=v();for(a in t)if(e(t,a))for(s=t[a],g.writeString(a),g.writeLong(this.checksum(s)),g.writeLong(r),g.writeLong(s.length),o.write(s),\"head\"==a&&(i=r),r+=s.length;r%4;)o.writeByte(0),r++;return g.write(o.get()),h=this.checksum(g.get()),c=2981146554-h,g.offset(i+8),g.writeLong(c),g.get()},checksum:function(t){t=v(t);for(var e=0;!t.eof();)e+=t.readLong();return 4294967295&e}},h=i({parse:function(t){t.offset(this.offset),this.version=t.readLong(),this.revision=t.readLong(),this.checkSumAdjustment=t.readLong(),this.magicNumber=t.readLong(),this.flags=t.readShort(),this.unitsPerEm=t.readShort(),this.created=t.read(8),this.modified=t.read(8),this.xMin=t.readShort_(),this.yMin=t.readShort_(),this.xMax=t.readShort_(),this.yMax=t.readShort_(),this.macStyle=t.readShort(),this.lowestRecPPEM=t.readShort(),this.fontDirectionHint=t.readShort_(),this.indexToLocFormat=t.readShort_(),this.glyphDataFormat=t.readShort_()},render:function(t){var e=v();return e.writeLong(this.version),e.writeLong(this.revision),e.writeLong(0),e.writeLong(this.magicNumber),e.writeShort(this.flags),e.writeShort(this.unitsPerEm),e.write(this.created),e.write(this.modified),e.writeShort_(this.xMin),e.writeShort_(this.yMin),e.writeShort_(this.xMax),e.writeShort_(this.yMax),e.writeShort(this.macStyle),e.writeShort(this.lowestRecPPEM),e.writeShort_(this.fontDirectionHint),e.writeShort_(t),e.writeShort_(this.glyphDataFormat),e.get()}}),c=i({parse:function(t){t.offset(this.offset);var e=this.file.head.indexToLocFormat;this.offsets=0===e?t.times(this.length/2,function(){return 2*t.readShort()}):t.times(this.length/4,t.readLong)},offsetOf:function(t){return this.offsets[t]},lengthOf:function(t){return this.offsets[t+1]-this.offsets[t]},render:function(t){var e,n=v(),r=t[t.length-1]>65535;for(e=0;t.length>e;++e)r?n.writeLong(t[e]):n.writeShort(t[e]/2);return{format:r?1:0,table:n.get()}}}),u=i({parse:function(t){t.offset(this.offset),this.version=t.readLong(),this.ascent=t.readShort_(),this.descent=t.readShort_(),this.lineGap=t.readShort_(),this.advanceWidthMax=t.readShort(),this.minLeftSideBearing=t.readShort_(),this.minRightSideBearing=t.readShort_(),this.xMaxExtent=t.readShort_(),this.caretSlopeRise=t.readShort_(),this.caretSlopeRun=t.readShort_(),this.caretOffset=t.readShort_(),t.skip(8),this.metricDataFormat=t.readShort_(),this.numOfLongHorMetrics=t.readShort()},render:function(t){var e=v();return e.writeLong(this.version),e.writeShort_(this.ascent),e.writeShort_(this.descent),e.writeShort_(this.lineGap),e.writeShort(this.advanceWidthMax),e.writeShort_(this.minLeftSideBearing),e.writeShort_(this.minRightSideBearing),e.writeShort_(this.xMaxExtent),e.writeShort_(this.caretSlopeRise),e.writeShort_(this.caretSlopeRun),e.writeShort_(this.caretOffset),e.write([0,0,0,0,0,0,0,0]),e.writeShort_(this.metricDataFormat),e.writeShort(t.length),e.get()}}),f=i({parse:function(t){t.offset(this.offset),this.version=t.readLong(),this.numGlyphs=t.readShort(),this.maxPoints=t.readShort(),this.maxContours=t.readShort(),this.maxComponentPoints=t.readShort(),this.maxComponentContours=t.readShort(),this.maxZones=t.readShort(),this.maxTwilightPoints=t.readShort(),this.maxStorage=t.readShort(),this.maxFunctionDefs=t.readShort(),this.maxInstructionDefs=t.readShort(),this.maxStackElements=t.readShort(),this.maxSizeOfInstructions=t.readShort(),this.maxComponentElements=t.readShort(),this.maxComponentDepth=t.readShort()},render:function(t){var e=v();return e.writeLong(this.version),e.writeShort(t.length),e.writeShort(this.maxPoints),e.writeShort(this.maxContours),e.writeShort(this.maxComponentPoints),e.writeShort(this.maxComponentContours),e.writeShort(this.maxZones),e.writeShort(this.maxTwilightPoints),e.writeShort(this.maxStorage),e.writeShort(this.maxFunctionDefs),e.writeShort(this.maxInstructionDefs),e.writeShort(this.maxStackElements),e.writeShort(this.maxSizeOfInstructions),e.writeShort(this.maxComponentElements),e.writeShort(this.maxComponentDepth),e.get()}}),d=i({parse:function(t){var e,n,r;t.offset(this.offset),e=this.file,n=e.hhea,this.metrics=t.times(n.numOfLongHorMetrics,function(){return{advance:t.readShort(),lsb:t.readShort_()}}),r=e.maxp.numGlyphs-e.hhea.numOfLongHorMetrics,this.leftSideBearings=t.times(r,t.readShort_)},forGlyph:function(t){var e=this.metrics,n=e.length;return n>t?e[t]:{advance:e[n-1].advance,lsb:this.leftSideBearings[t-n]}},render:function(t){var e,n,r=v();for(e=0;t.length>e;++e)n=this.forGlyph(t[e]),r.writeShort(n.advance),r.writeShort_(n.lsb);return r.get()}}),l=function(){function t(t){this.raw=t}function n(t){var e,n,i;for(this.raw=t,e=this.glyphIds=[],n=this.idOffsets=[];;){if(i=t.readShort(),n.push(t.offset()),e.push(t.readShort()),!(i&a))break;t.skip(i&r?4:2),i&h?t.skip(8):i&s?t.skip(4):i&o&&t.skip(2)}}var r,o,a,s,h;return t.prototype={compound:!1,render:function(){return this.raw.get()}},r=1,o=8,a=32,s=64,h=128,n.prototype={compound:!0,render:function(t){var e,n,r=v(this.raw.get());for(e=0;this.glyphIds.length>e;++e)n=this.glyphIds[e],r.offset(this.idOffsets[e]),r.writeShort(t[n]);return r.get()}},i({parse:function(){this.cache={}},glyphFor:function(r){var i,o,a,s,h,c,u,f,d,l,p,g=this.cache;return e(g,r)?g[r]:(i=this.file.loca,o=i.lengthOf(r),0===o?g[r]=null:(a=this.rawData,s=this.offset+i.offsetOf(r),h=v(a.slice(s,o)),c=h.readShort_(),u=h.readShort_(),f=h.readShort_(),d=h.readShort_(),l=h.readShort_(),p=g[r]=-1==c?new n(h):new t(h),p.numberOfContours=c,p.xMin=u,p.yMin=f,p.xMax=d,p.yMax=l,p))},render:function(t,e,n){var r,i,o,a=v(),s=[];for(r=0;e.length>r;++r)i=e[r],o=t[i],s.push(a.offset()),o&&a.write(o.render(n));return s.push(a.offset()),{table:a.get(),offsets:s}}})}(),p=function(){function t(t,e){this.text=t,this.length=t.length,this.platformID=e.platformID,this.platformSpecificID=e.platformSpecificID,this.languageID=e.languageID,this.nameID=e.nameID}return i({parse:function(e){var n,r,i,o,a,s,h;for(e.offset(this.offset),e.readShort(),n=e.readShort(),r=this.offset+e.readShort(),i=e.times(n,function(){return{platformID:e.readShort(),platformSpecificID:e.readShort(),languageID:e.readShort(),nameID:e.readShort(),length:e.readShort(),offset:e.readShort()+r}}),o=this.strings={},a=0;i.length>a;++a)s=i[a],e.offset(s.offset),h=e.readString(s.length),o[s.nameID]||(o[s.nameID]=[]),o[s.nameID].push(new t(h,s));this.postscriptEntry=o[6][0],this.postscriptName=this.postscriptEntry.text.replace(/[^\\x20-\\x7F]/g,\"\")},render:function(n){var r,i,o,a,s,h,c=this.strings,u=0;for(r in c)e(c,r)&&(u+=c[r].length);i=v(),o=v(),i.writeShort(0),i.writeShort(u),i.writeShort(6+12*u);for(r in c)if(e(c,r))for(a=6==r?[new t(n,this.postscriptEntry)]:c[r],s=0;a.length>s;++s)h=a[s],i.writeShort(h.platformID),i.writeShort(h.platformSpecificID),i.writeShort(h.languageID),i.writeShort(h.nameID),i.writeShort(h.length),i.writeShort(o.offset()),o.writeString(h.text);return i.write(o.get()),i.get()}})}(),g=function(){var t=\".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling section bullet paragraph germandbls registered copyright trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu partialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior onehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla Cacute cacute Ccaron ccaron dcroat\".split(/\\s+/g);return i({parse:function(t){var e,n;switch(t.offset(this.offset),this.format=t.readLong(),this.italicAngle=t.readFixed_(),this.underlinePosition=t.readShort_(),this.underlineThickness=t.readShort_(),this.isFixedPitch=t.readLong(),this.minMemType42=t.readLong(),this.maxMemType42=t.readLong(),this.minMemType1=t.readLong(),this.maxMemType1=t.readLong(),this.format){case 65536:case 196608:break;case 131072:for(e=t.readShort(),this.glyphNameIndex=t.times(e,t.readShort),this.names=[],n=this.offset+this.length;t.offset()<n;)this.names.push(t.readString(t.readByte()));break;case 151552:e=t.readShort(),this.offsets=t.read(e);break;case 262144:this.map=t.times(this.file.maxp.numGlyphs,t.readShort)}},glyphFor:function(e){switch(this.format){case 65536:return t[e]||\".notdef\";case 131072:var n=this.glyphNameIndex[e];return t.length>n?t[n]:this.names[n-t.length]||\".notdef\";case 151552:case 196608:return\".notdef\";case 262144:return this.map[e]||65535}},render:function(e){var n,r,i,o,a,s,h;if(196608==this.format)return this.raw();for(n=v(this.rawData.slice(this.offset,32)),n.writeLong(131072),n.offset(32),r=[],i=[],o=0;e.length>o;++o)a=e[o],s=this.glyphFor(a),h=t.indexOf(s),h>=0?r.push(h):(r.push(t.length+i.length),i.push(s));for(n.writeShort(e.length),o=0;r.length>o;++o)n.writeShort(r[o]);for(o=0;i.length>o;++o)n.writeByte(i[o].length),n.writeString(i[o]);return n.get()}})}(),m=function(){function e(e,n,r){var i=this;i.platformID=e.readShort(),i.platformSpecificID=e.readShort(),i.offset=n+e.readLong(),e.saveExcursion(function(){var n,o,a,s,h,c,u,f,d,l,p,g,m,S,w,y,v;switch(e.offset(i.offset),i.format=e.readShort()){case 0:for(i.length=e.readShort(),i.language=e.readShort(),o=0;256>o;++o)r[o]=e.readByte();break;case 4:for(i.length=e.readShort(),i.language=e.readShort(),a=e.readShort()/2,e.skip(6),s=e.times(a,e.readShort),e.skip(2),h=e.times(a,e.readShort),c=e.times(a,e.readShort_),u=e.times(a,e.readShort),f=(i.length+i.offset-e.offset())/2,d=e.times(f,e.readShort),o=0;a>o;++o)for(l=h[o],p=s[o],n=l;p>=n;++n)0===u[o]?g=n+c[o]:(m=u[o]/2-(a-o)+(n-l),g=d[m]||0,0!==g&&(g+=c[o])),r[n]=65535&g;break;case 6:for(i.length=e.readShort(),i.language=e.readShort(),n=e.readShort(),S=e.readShort();S-- >0;)r[n++]=e.readShort();break;case 12:for(e.readShort(),i.length=e.readLong(),i.language=e.readLong(),w=e.readLong();w-- >0;)for(n=e.readLong(),y=e.readLong(),v=e.readLong();y>=n;)r[n++]=v++;break;default:t.console&&t.console.error(\"Unhandled CMAP format: \"+i.format)}})}function r(t,e){function r(n){return e[t[n]]}var i,o,a,s,h,c,u,f,d,l,p,g,m,S,w,y,x,_=n(t),b=[],C=[],T=null,D=null;for(i=0;_.length>i;++i)o=_[i],a=r(o),s=a-o,null!=T&&s===D||(T&&C.push(T),b.push(o),D=s),T=o;for(T&&C.push(T),C.push(65535),b.push(65535),h=b.length,c=2*h,u=2*Math.pow(2,Math.floor(Math.log(h)/Math.LN2)),f=Math.log(u/2)/Math.LN2,d=c-u,l=[],p=[],g=[],i=0;h>i;++i){if(m=b[i],S=C[i],65535==m){l.push(0),p.push(0);break}if(w=r(m),m-w>=32768)for(l.push(0),p.push(2*(g.length+h-i)),y=m;S>=y;++y)g.push(r(y));else l.push(w-m),p.push(0)}return x=v(),x.writeShort(3),x.writeShort(1),x.writeLong(12),x.writeShort(4),x.writeShort(16+8*h+2*g.length),x.writeShort(0),x.writeShort(c),x.writeShort(u),x.writeShort(f),x.writeShort(d),C.forEach(x.writeShort),x.writeShort(0),b.forEach(x.writeShort),l.forEach(x.writeShort_),p.forEach(x.writeShort),g.forEach(x.writeShort),x.get()}return i({parse:function(t){var n,r=this,i=r.offset;t.offset(i),r.codeMap={},r.version=t.readShort(),n=t.readShort(),r.tables=t.times(n,function(){return new e(t,i,r.codeMap)})},render:function(t,e){var n=v();return n.writeShort(0),n.writeShort(1),n.write(r(t,e)),n.get()}})}(),S=i({parse:function(t){t.offset(this.offset),this.version=t.readShort(),this.averageCharWidth=t.readShort_(),this.weightClass=t.readShort(),this.widthClass=t.readShort(),this.type=t.readShort(),this.ySubscriptXSize=t.readShort_(),this.ySubscriptYSize=t.readShort_(),this.ySubscriptXOffset=t.readShort_(),this.ySubscriptYOffset=t.readShort_(),this.ySuperscriptXSize=t.readShort_(),this.ySuperscriptYSize=t.readShort_(),this.ySuperscriptXOffset=t.readShort_(),this.ySuperscriptYOffset=t.readShort_(),this.yStrikeoutSize=t.readShort_(),this.yStrikeoutPosition=t.readShort_(),this.familyClass=t.readShort_(),this.panose=t.times(10,t.readByte),this.charRange=t.times(4,t.readLong),this.vendorID=t.readString(4),this.selection=t.readShort(),this.firstCharIndex=t.readShort(),this.lastCharIndex=t.readShort(),this.version>0&&(this.ascent=t.readShort_(),this.descent=t.readShort_(),this.lineGap=t.readShort_(),this.winAscent=t.readShort(),this.winDescent=t.readShort(),this.codePageRange=t.times(2,t.readLong),this.version>1&&(this.xHeight=t.readShort(),this.capHeight=t.readShort(),this.defaultChar=t.readShort(),this.breakChar=t.readShort(),this.maxContext=t.readShort()))},render:function(){return this.raw()}}),w=1e5,a.prototype={use:function(t){var e,n,r,i=this;return\"string\"==typeof t?kendo.util.ucs2decode(t).reduce(function(t,e){return t+String.fromCharCode(i.use(e))},\"\"):(e=i.unicodes[t],e||(e=i.next++,i.subset[e]=t,i.unicodes[t]=e,n=i.font.cmap.codeMap[t],n&&(i.ncid2ogid[e]=n,null==i.ogid2ngid[n]&&(r=i.nextGid++,i.ogid2ngid[n]=r,i.ngid2ogid[r]=n))),e)},encodeText:function(t){return this.use(t)},glyphIds:function(){return n(this.ogid2ngid)},glyphsFor:function(t,e){var n,r,i;for(e||(e={}),n=0;t.length>n;++n)r=t[n],e[r]||(i=e[r]=this.font.glyf.glyphFor(r),i&&i.compound&&this.glyphsFor(i.glyphIds,e));return e},render:function(){var t,r,i,o,a,s,h,c,u=this.glyphsFor(this.glyphIds());for(t in u)e(u,t)&&(t=parseInt(t,10),null==this.ogid2ngid[t]&&(r=this.nextGid++,this.ogid2ngid[t]=r,this.ngid2ogid[r]=t));return i=n(this.ngid2ogid),o=i.map(function(t){return this.ngid2ogid[t]},this),a=this.font,s=a.glyf.render(u,o,this.ogid2ngid),h=a.loca.render(s.offsets),this.lastChar=this.next-1,c={cmap:m.render(this.ncid2ogid,this.ogid2ngid),glyf:s.table,loca:h.table,hmtx:a.hmtx.render(o),hhea:a.hhea.render(o),maxp:a.maxp.render(o),post:a.post.render(o),name:a.name.render(this.psName),head:a.head.render(h.format),\"OS/2\":a.os2.render()},this.font.directory.render(c)},cidToGidMap:function(){var t,e,n,r=v(),i=0;for(t=this.firstChar;this.next>t;++t){for(;t>i;)r.writeShort(0),i++;e=this.ncid2ogid[t],e?(n=this.ogid2ngid[e],r.writeShort(n)):r.writeShort(0),i++}return r.get()}},s.prototype={parse:function(){var t=this.directory=new r(this.contents);this.head=t.readTable(\"head\",h),this.loca=t.readTable(\"loca\",c),this.hhea=t.readTable(\"hhea\",u),this.maxp=t.readTable(\"maxp\",f),this.hmtx=t.readTable(\"hmtx\",d),this.glyf=t.readTable(\"glyf\",l),this.name=t.readTable(\"name\",p),this.post=t.readTable(\"post\",g),this.cmap=t.readTable(\"cmap\",m),this.os2=t.readTable(\"OS/2\",S),this.psName=this.name.postscriptName,this.ascent=this.os2.ascent||this.hhea.ascent,this.descent=this.os2.descent||this.hhea.descent,this.lineGap=this.os2.lineGap||this.hhea.lineGap,this.scale=1e3/this.head.unitsPerEm},widthOfGlyph:function(t){return this.hmtx.forGlyph(t).advance*this.scale},makeSubset:function(){return new a(this)}},y.TTFFont=s}(window)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"util/text-metrics.min\",[\"kendo.core.min\",\"util/main.min\"],t)}(function(){!function(t){function e(){return{width:0,height:0,baseline:0}}function n(t,e,n){return f.current.measure(t,e,n)}function r(t,e){var n=[];if(t.length>0&&document.fonts){try{n=t.map(function(t){return document.fonts.load(t)})}catch(r){o.logToConsole(r)}Promise.all(n).then(e,e)}else e()}var i=document,o=window.kendo,a=o.Class,s=o.util,h=s.defined,c=a.extend({init:function(t){this._size=t,this._length=0,this._map={}},put:function(t,e){var n=this,r=n._map,i={key:t,value:e};r[t]=i,n._head?(n._tail.newer=i,i.older=n._tail,n._tail=i):n._head=n._tail=i,n._length>=n._size?(r[n._head.key]=null,n._head=n._head.newer,n._head.older=null):n._length++},get:function(t){var e=this,n=e._map[t];return n?(n===e._head&&n!==e._tail&&(e._head=n.newer,e._head.older=null),n!==e._tail&&(n.older&&(n.older.newer=n.newer,n.newer.older=n.older),n.older=e._tail,n.newer=null,e._tail.newer=n,e._tail=n),n.value):void 0}}),u=t(\"<div style='position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;padding: 0 !important; margin: 0 !important; border: 0 !important;line-height: normal !important; visibility: hidden !important; white-space: nowrap!important;' />\")[0],f=a.extend({init:function(t){this._cache=new c(1e3),this._initOptions(t)},options:{baselineMarkerSize:1},measure:function(n,r,o){var a,c,f,d,l,p,g,m;if(!n)return e();if(a=s.objectKey(r),c=s.hashKey(n+a),f=this._cache.get(c),f)return f;d=e(),l=o?o:u,p=this._baselineMarker().cloneNode(!1);for(g in r)m=r[g],h(m)&&(l.style[g]=m);return t(l).text(n),l.appendChild(p),i.body.appendChild(l),(n+\"\").length&&(d.width=l.offsetWidth-this.options.baselineMarkerSize,d.height=l.offsetHeight,d.baseline=p.offsetTop+this.options.baselineMarkerSize),d.width>0&&d.height>0&&this._cache.put(c,d),l.parentNode.removeChild(l),d},_baselineMarker:function(){return t(\"<div class='k-baseline-marker' style='display: inline-block; vertical-align: baseline;width: \"+this.options.baselineMarkerSize+\"px; height: \"+this.options.baselineMarkerSize+\"px;overflow: hidden;' />\")[0]}});f.current=new f,o.util.TextMetrics=f,o.util.LRUCache=c,o.util.loadFonts=r,o.util.measureText=n}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"util/base64.min\",[\"util/main.min\"],t)}(function(){return function(){function t(t){var n,r,i,a,s,h,c,u=\"\",f=0;for(t=e(t);t.length>f;)n=t.charCodeAt(f++),r=t.charCodeAt(f++),i=t.charCodeAt(f++),a=n>>2,s=(3&n)<<4|r>>4,h=(15&r)<<2|i>>6,c=63&i,isNaN(r)?h=c=64:isNaN(i)&&(c=64),u=u+o.charAt(a)+o.charAt(s)+o.charAt(h)+o.charAt(c);return u}function e(t){var e,n,r=\"\";for(e=0;t.length>e;e++)n=t.charCodeAt(e),128>n?r+=i(n):2048>n?(r+=i(192|n>>>6),r+=i(128|63&n)):65536>n&&(r+=i(224|n>>>12),r+=i(128|n>>>6&63),r+=i(128|63&n));return r}var n=window.kendo,r=n.deepExtend,i=String.fromCharCode,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r(n.util,{encodeBase64:t,encodeUTF8:e})}(),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"mixins/observers.min\",[\"kendo.core.min\"],t)}(function(){return function(t){var e=Math,n=window.kendo,r=n.deepExtend,i=t.inArray,o={observers:function(){return this._observers=this._observers||[]},addObserver:function(t){return this._observers?this._observers.push(t):this._observers=[t],this},removeObserver:function(t){var e=this.observers(),n=i(t,e);return-1!=n&&e.splice(n,1),this},trigger:function(t,e){var n,r,i=this._observers;if(i&&!this._suspended)for(r=0;i.length>r;r++)n=i[r],n[t]&&n[t](e);return this},optionsChange:function(t){t=t||{},t.element=this,this.trigger(\"optionsChange\",t)},geometryChange:function(){this.trigger(\"geometryChange\",{element:this})},suspend:function(){return this._suspended=(this._suspended||0)+1,this},resume:function(){return this._suspended=e.max((this._suspended||0)-1,0),this},_observerField:function(t,e){this[t]&&this[t].removeObserver(this),this[t]=e,e.addObserver(this)}};r(n,{mixins:{ObserversMixin:o}})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"pdf/drawing.min\",[\"kendo.core.min\",\"kendo.color.min\",\"kendo.drawing.min\",\"pdf/core.min\"],t)}(function(){!function(t,e){\"use strict\";function n(e,n){function r(t,e,n){return n||(n=u),n.pdf&&null!=n.pdf[t]?n.pdf[t]:e}function i(){function i(t){var e,n,i,o,h,c=t.options,u=D(t),f=u.bbox;t=u.root,e=r(\"paperSize\",r(\"paperSize\",\"auto\"),c),n=!1,\"auto\"==e&&(f?(i=f.getSize(),e=[i.width,i.height],n=!0,o=f.getOrigin(),u=new k.Group,u.transform(new F.Matrix(1,0,0,1,-o.x,-o.y)),u.append(t),t=u):e=\"A4\"),h=a.addPage({paperSize:e,margin:r(\"margin\",r(\"margin\"),c),addMargin:n,landscape:r(\"landscape\",r(\"landscape\",!1),c)}),s(t,h,a)}if(!(--o>0)){var a=new t.pdf.Document({producer:r(\"producer\"),title:r(\"title\"),author:r(\"author\"),subject:r(\"subject\"),keywords:r(\"keywords\"),creator:r(\"creator\"),date:r(\"date\")});f?e.children.forEach(i):i(e),n(a.render(),a)}}var o,h=[],c=[],u=e.options,f=r(\"multiPage\");e.traverse(function(e){a({Image:function(t){c.indexOf(t.src())<0&&c.push(t.src())},Text:function(e){var n=t.pdf.parseFontDef(e.options.font),r=t.pdf.getFontURL(n);h.indexOf(r)<0&&h.push(r)}},e)}),o=2,t.pdf.loadFonts(h,i),t.pdf.loadImages(c,i)}function r(t,e){n(t,function(t){e(\"data:application/pdf;base64,\"+t.base64())})}function i(t,e){n(t,function(t){e(new Blob([t.get()],{type:\"application/pdf\"}))})}function o(e,n,o,a){window.Blob&&!t.support.browser.safari?i(e,function(e){t.saveAs({dataURI:e,fileName:n}),a&&a(e)}):r(e,function(e){t.saveAs({dataURI:e,fileName:n,proxyURL:o}),a&&a(e)})}function a(t,e){var n=t[e.nodeType];return n?n.call.apply(n,arguments):e}function s(t,e,n){var r,i,o;t.options._pdfDebug&&e.comment(\"BEGIN: \"+t.options._pdfDebug),r=t.transform(),i=t.opacity(),e.save(),null!=i&&1>i&&e.setOpacity(i),h(t,e,n),c(t,e,n),r&&(o=r.matrix(),e.transform(o.a,o.b,o.c,o.d,o.e,o.f)),u(t,e,n),a({Path:m,MultiPath:S,Circle:w,Arc:y,Text:v,Image:_,Group:x,Rect:b},t,e,n),e.restore(),t.options._pdfDebug&&e.comment(\"END: \"+t.options._pdfDebug)}function h(t,e){var n,r,i,o,a,s,h=t.stroke&&t.stroke();if(h){if(n=h.color){if(n=T(n),null==n)return;e.setStrokeColor(n.r,n.g,n.b),1!=n.a&&e.setStrokeOpacity(n.a)}if(r=h.width,null!=r){if(0===r)return;e.setLineWidth(r)}i=h.dashType,i&&e.setDashPattern(M[i],0),o=h.lineCap,o&&e.setLineCap(L[o]),a=h.lineJoin,a&&e.setLineJoin(O[a]),s=h.opacity,null!=s&&e.setStrokeOpacity(s)}}function c(t,e){var n,r,i=t.fill&&t.fill();if(i&&!(i instanceof k.Gradient)){if(n=i.color){if(n=T(n),null==n)return;e.setFillColor(n.r,n.g,n.b),1!=n.a&&e.setFillOpacity(n.a)}r=i.opacity,null!=r&&e.setFillOpacity(r)}}function u(t,e,n){var r=t.clip();r&&(g(r,e,n),e.clip())}function f(t){return t&&(t instanceof k.Gradient||t.color&&!/^(none|transparent)$/i.test(t.color)&&(null==t.width||t.width>0)&&(null==t.opacity||t.opacity>0))}function d(t,e,n,r){var i,o,a,s,h,c,u,f,d=t.fill();return d instanceof k.Gradient?(r?e.clipStroke():e.clip(),i=d instanceof k.RadialGradient,i?(o={x:d.center().x,y:d.center().y,r:0},a={x:d.center().x,y:d.center().y,r:d.radius()}):(o={x:d.start().x,y:d.start().y},a={x:d.end().x,y:d.end().y}),s=d.stops.elements().map(function(t){var e,n=t.offset();return n=/%$/.test(n)?parseFloat(n)/100:parseFloat(n),e=T(t.color()),e.a*=t.opacity(),{offset:n,color:e}}),s.unshift(s[0]),s.push(s[s.length-1]),h={userSpace:d.userSpace(),type:i?\"radial\":\"linear\",start:o,end:a,stops:s},c=t.rawBBox(),u=c.topLeft(),f=c.getSize(),c={left:u.x,top:u.y,width:f.width,height:f.height},e.gradient(h,c),!0):void 0}function l(t,e,n){f(t.fill())&&f(t.stroke())?d(t,e,n,!0)||e.fillStroke():f(t.fill())?d(t,e,n,!1)||e.fill():f(t.stroke())?e.stroke():e.nop()}function p(t,e){var n,r,i,o=t.segments;if(4==o.length&&t.options.closed){for(n=[],r=0;o.length>r;++r){if(o[r].controlIn())return!1;n[r]=o[r].anchor()}if(i=n[0].y==n[1].y&&n[1].x==n[2].x&&n[2].y==n[3].y&&n[3].x==n[0].x||n[0].x==n[1].x&&n[1].y==n[2].y&&n[2].x==n[3].x&&n[3].y==n[0].y)return e.rect(n[0].x,n[0].y,n[2].x-n[0].x,n[2].y-n[0].y),!0}}function g(t,e,n){var r,i,o,a,s,h,c=t.segments;if(0!==c.length&&!p(t,e,n)){for(i=0;c.length>i;++i)o=c[i],a=o.anchor(),r?(s=r.controlOut(),h=o.controlIn(),s&&h?e.bezier(s.x,s.y,h.x,h.y,a.x,a.y):e.lineTo(a.x,a.y)):e.moveTo(a.x,a.y),r=o;t.options.closed&&e.close()}}function m(t,e,n){g(t,e,n),l(t,e,n)}function S(t,e,n){var r,i=t.paths;for(r=0;i.length>r;++r)g(i[r],e,n);l(t,e,n)}function w(t,e,n){var r=t.geometry();e.circle(r.center.x,r.center.y,r.radius),l(t,e,n)}function y(t,e,n){var r,i=t.geometry().curvePoints();for(e.moveTo(i[0].x,i[0].y),r=1;i.length>r;)e.bezier(i[r].x,i[r++].y,i[r].x,i[r++].y,i[r].x,i[r++].y);l(t,e,n)}function v(e,n){var r,i=t.pdf.parseFontDef(e.options.font),o=e._position;e.fill()&&e.stroke()?r=A.fillAndStroke:e.fill()?r=A.fill:e.stroke()&&(r=A.stroke),n.transform(1,0,0,-1,o.x,o.y+i.fontSize),n.beginText(),n.setFont(t.pdf.getFontURL(i),i.fontSize),n.setTextRenderingMode(r),n.showText(e.content(),e._pdfRect?e._pdfRect.width():null),n.endText()}function x(t,e,n){var r,i;for(t._pdfLink&&e.addLink(t._pdfLink.url,t._pdfLink),r=t.children,i=0;r.length>i;++i)s(r[i],e,n)}function _(t,e){var n,r,i,o=t.src();o&&(n=t.rect(),r=n.getOrigin(),i=n.getSize(),e.transform(i.width,0,0,-i.height,r.x,r.y+i.height),e.drawImage(o))}function b(t,e,n){var r=t.geometry();e.rect(r.origin.x,r.origin.y,r.size.width,r.size.height),l(t,e,n)}function C(t,n){var r,i=e.Deferred();for(r in n)\"margin\"==r&&t.options.pdf&&t.options.pdf._ignoreMargin||t.options.set(\"pdf.\"+r,n[r]);return k.pdf.toDataURL(t,i.resolve),i.promise()}function T(e){var n=t.parseColor(e,!0);return n?n.toRGB():null}function D(t){function e(t){return h=!0,t}function n(t){return t.visible()&&t.opacity()>0&&(f(t.fill())||f(t.stroke()))}function r(t){var e,n,r=[];for(e=0;t.length>e;++e)n=s(t[e]),null!=n&&r.push(n);return r}function i(t,e){var n,r=c,i=u;t.transform()&&(u=u.multiplyCopy(t.transform().matrix())),n=t.clip(),n&&(n=n.bbox(),n&&(n=n.bbox(u),c=c?F.Rect.intersect(c,n):n));try{return e()}finally{c=r,u=i}}function o(t){if(null==c)return!1;var e=t.rawBBox().bbox(u);return c&&e&&(e=F.Rect.intersect(e,c)),e}function s(s){return i(s,function(){if(!(s instanceof k.Group||s instanceof k.MultiPath)){var i=o(s);if(!i)return e(null);d=d?F.Rect.union(d,i):i}return a({Path:function(t){return 0!==t.segments.length&&n(t)?t:e(null)},MultiPath:function(t){if(!n(t))return e(null);var i=new k.MultiPath(t.options);return i.paths=r(t.paths),0===i.paths.length?e(null):i},Circle:function(t){return n(t)?t:e(null)},Arc:function(t){return n(t)?t:e(null)},Text:function(t){return/\\S/.test(t.content())&&n(t)?t:e(null)},Image:function(t){return t.visible()&&t.opacity()>0?t:e(null)},Group:function(n){var i=new k.Group(n.options);return i.children=r(n.children),i._pdfLink=n._pdfLink,n===t||0!==i.children.length||n._pdfLink?i:e(null)},Rect:function(t){return n(t)?t:e(null)}},s)})}var h,c=!1,u=F.Matrix.unit(),d=null;do h=!1,t=s(t);while(t&&h);return{root:t,bbox:d}}var k=t.drawing,F=t.geometry,A=t.pdf.TEXT_RENDERING_MODE,M={dash:[4],dashDot:[4,2,1,2],dot:[1,2],longDash:[8,2],longDashDot:[8,2,1,2],longDashDotDot:[8,2,1,2,1,2],solid:[]},L={butt:0,round:1,square:2},O={miter:0,round:1,bevel:2};t.deepExtend(k,{exportPDF:C,pdf:{toDataURL:r,toBlob:i,saveAs:o,toStream:n}})}(window.kendo,window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"kendo.pdf.min\",[\"kendo.core.min\",\"pdf/core.min\",\"pdf/ttf.min\",\"pdf/drawing.min\",\"kendo.drawing.min\"],t)}(function(){return function(t,e){t.PDFMixin={extend:function(t){t.events.push(\"pdfExport\"),t.options.pdf=this.options,t.saveAsPDF=this.saveAsPDF,t._drawPDF=this._drawPDF,t._drawPDFShadow=this._drawPDFShadow},options:{fileName:\"Export.pdf\",proxyURL:\"\",paperSize:\"auto\",allPages:!1,landscape:!1,margin:null,title:null,author:null,subject:null,keywords:null,creator:\"Kendo UI PDF Generator v.\"+t.version,date:null},saveAsPDF:function(){var n,r=new e.Deferred,i=r.promise(),o={promise:i};if(!this.trigger(\"pdfExport\",o))return n=this.options.pdf,n.multiPage=n.multiPage||n.allPages,this._drawPDF(r).then(function(e){return t.drawing.exportPDF(e,n)}).done(function(e){t.saveAs({dataURI:e,fileName:n.fileName,proxyURL:n.proxyURL,forceProxy:n.forceProxy,proxyTarget:n.proxyTarget}),r.resolve()}).fail(function(t){r.reject(t)}),i},_drawPDF:function(n){var r=new e.Deferred;return t.drawing.drawDOM(this.wrapper).done(function(t){var e={page:t,pageNumber:1,progress:1,totalPages:1};n.notify(e),r.resolve(e.page)}).fail(function(t){r.reject(t)}),r},_drawPDFShadow:function(n,r){var i,o,a;return n=n||{},i=this.wrapper,o=e(\"<div class='k-pdf-export-shadow'>\"),n.width&&o.css({width:n.width,overflow:\"visible\"}),i.before(o),o.append(n.content||i.clone(!0,!0)),a=e.Deferred(),setTimeout(function(){var e=t.drawing.drawDOM(o,r);e.always(function(){o.remove()}).then(function(){a.resolve.apply(a,arguments)}).fail(function(){a.reject.apply(a,arguments)}).progress(function(){a.progress.apply(a,arguments)})},15),a.promise()}}}(kendo,window.kendo.jQuery),kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()});\n//# sourceMappingURL=kendo.pdf.min.js.map\n","import { TaskRecord } from \"app2/src/records/Task\";\nimport { RootState } from \"../reducers\";\n\nexport const task = (state: RootState, props: any): TaskRecord => state.getIn([\"tasks\", \"byId\", props.taskId]);\n","import * as config from \"react-global-configuration\";\nimport * as userActions from \"./user.actions\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { ActionsUnion, createAction } from \"./Utils\";\nimport { RootState } from \".\";\nimport { fetcher } from \"../helpers/Fetcher\";\nimport { RootDispatchType } from \"../store\";\n\nexport const RECEIVE_PAGE = \"@analytics/RECEIVE_PAGE\";\nexport const RESET_PAGES = \"@analytics/RESET_PAGES\";\nexport const FETCH_PAGE = \"@analytics/FETCH_PAGE\";\n\nexport const RECEIVE_USER_PAGE = \"@analytics/RECEIVE_USER_PAGE\";\nexport const RESET_USER_PAGES = \"@analytics/RESET_USER_PAGES\";\nexport const FETCH_USER_PAGE = \"@analytics/FETCH_USER_PAGE\";\n\nexport interface EventData {\n  id: number;\n  data: any;\n}\n\nexport interface IUserAnalyticsData {\n  userId: number;\n  eventCount: number;\n  lastSeen: Date;\n  firstSeen: Date;\n}\n\nexport interface Pagination {\n  total_count: number;\n  total_pages: number;\n  current_page: number;\n}\n\nexport interface Page<T> {\n  page: number;\n  data: T[];\n  pagination: Pagination;\n}\n\nexport const Actions = {\n  receivePage: (page: Page<EventData>) => createAction(RECEIVE_PAGE, page),\n  fetchPage: (page: number) => createAction(FETCH_PAGE, page),\n  resetPages: () => createAction(RESET_PAGES),\n  receiveUserPage: (page: Page<IUserAnalyticsData>) => createAction(RECEIVE_USER_PAGE, page),\n  fetchUserPage: (page: number) => createAction(FETCH_USER_PAGE, page),\n  resetUserPages: () => createAction(RESET_USER_PAGES),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, ActionsUnion<typeof Actions> | userActions.Actions>;\n\nexport const AsyncActions = {\n  getPage: (page: number): ThunkResult<Promise<Page<EventData>>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPage(page));\n\n      return fetcher\n        .get<Page<EventData>>(\"/analytics/events\", {\n          code: config.get(\"RSF_ANALYTICS_KEY\"),\n          page: page,\n        })\n        .then((data: Page<EventData>) => {\n          data.page = page;\n          dispatch(Actions.receivePage(data));\n          return data;\n        });\n    };\n  },\n  getUsersPage: (page: number): ThunkResult<Promise<Page<IUserAnalyticsData>>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchUserPage(page));\n\n      return fetcher\n        .get<Page<IUserAnalyticsData>>(\"/analytics/events/reports\", {\n          code: config.get(\"RSF_ANALYTICS_KEY\"),\n          report: \"users\",\n          page: page,\n        })\n        .then((data: Page<IUserAnalyticsData>) => {\n          data.page = page;\n\n          dispatch(Actions.receiveUserPage(data));\n          return data;\n        });\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { createSelector } from \"reselect\";\nimport { RootState } from \"app2/src/reducers\";\n\n/**\n * Returns the current metadata record for app messages\n * @param {RootState} state The RootState\n * @returns {AppMessageMetadataRecord | null} The metadata record\n */\nconst getMetadata = (state: RootState) => state.getIn([\"appMessages\", \"metadata\"]);\n\n/**\n * Returns the current UI state for app messages\n * @param state\n * @param {RootState} state The RootState\n * @returns {AppMessageUiState | null} The UI State record\n */\nconst getUIState = (state: RootState) => state.getIn([\"appMessages\", \"uiState\"]);\n\n/**\n * Gets a single app message by ID from the normalized state\n *\n * @param {RootState} state The RootState\n * @param {{messageId: string}} props The message ID to retrieve\n * @returns {AppMessageRecipientRecord | undefined} The message record or undefined if not found\n */\nexport const appMessage = (state: RootState, props: any) => state.getIn([\"appMessages\", \"byId\", props.messageId]);\n\n/**\n * Gets the app message metadata containing total counts and pagination info\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {IAppMessageMetadata | undefined} Metadata object with total, unread_total, page info\n */\nexport const getAppMessageMetadata = createSelector([getMetadata], (metadata) => metadata);\n\n/**\n * Gets the currently expanded/viewed message ID from UI state\n * Returns null if no message is currently expanded\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {string | null} The expanded message ID or null\n */\nexport const getViewMessageId = createSelector([getUIState], (uiState): string | null => {\n  return uiState ? uiState.get(\"viewMessageId\", null) : null;\n});\n\n/**\n * Gets the app message modal visibility state\n * Returns false if modal is hidden, true if visible\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {boolean} Modal visibility state\n */\nexport const getShowMessageModal = createSelector([getUIState], (uiState): boolean => {\n  return uiState ? uiState.get(\"showModal\", false) : false;\n});\n\n/**\n * Gets the WebSocket channel initialization state for app messages\n * Returns false if channel hasn't been initialized yet\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {boolean} Channel initialization state\n */\nexport const getChannelInitialized = createSelector([getUIState], (uiState): boolean => {\n  return uiState ? uiState.get(\"initialized\", false) : false;\n});\n","import { List } from \"immutable\";\nimport { RootState } from \"app2/src/reducers\";\nimport { OneLookLocationRecord } from \"app2/src/records/OneLookLocation\";\nimport { estimate } from \"app2/src/selectors/estimate.selectors\";\n\n/**\n * Returns all 1LOOK location records from the Redux state.\n *\n * Locations are fetched from the 1LOOK API and stored in Redux when the user\n * accesses finance application features. Each location contains configuration\n * for available creation methods (kiosk, email, link) and available products.\n *\n * @param state - The Redux root state\n * @returns An Immutable List of OneLookLocationRecord objects (empty List if not yet loaded)\n *\n * @example\n * const locations = useSelector(oneLookLocations);\n * if (locations.size > 0) {\n *   locations.forEach(loc => {\n *     console.log(loc.code, loc.name, loc.get(\"create\").keySeq().toArray());\n *   });\n * }\n *\n * @see OneLookLocationRecord for the structure of each location\n * @see OneLookAsyncActions.getLocations for the action that populates this state\n */\nexport const oneLookLocations = (state: RootState): List<OneLookLocationRecord> =>\n  state.getIn([\"oneLook\", \"locations\"]);\n\n// Checks if an estimate has valid 1LOOK metadata (non-empty id or friendly_id)\nexport const hasOneLookMetadata = (state: RootState, { estimateId }: { estimateId: number }): boolean => {\n  const currentEstimate = estimate(state, { estimateId });\n  if (!currentEstimate) {\n    return false;\n  }\n\n  const oneLookMetadata = currentEstimate.get(\"metadata\")?.get(\"one_look\");\n  if (!oneLookMetadata) {\n    return false;\n  }\n\n  const id = oneLookMetadata.get(\"id\");\n  const friendlyId = oneLookMetadata.get(\"friendly_id\");\n\n  return id || friendlyId ? true : false;\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { fromJSON, IImageData, ImageRecord } from \"../records/Image\";\nimport { List } from \"immutable\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport {\n  create,\n  list,\n  destroy,\n  updateOrCreate,\n  IImageOptions,\n  ImageableTypeConversion,\n  ImageableType,\n  update,\n  createDirect,\n} from \"app2/src/api/image.service\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { IPageData, QueryParamsRecord } from \"app2/src/records/Page\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport { ids, dirtyIds } from \"app2/src/selectors/pagination.selectors\";\nimport { currentJob, currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { image, imagesBooleanIds } from \"app2/src/selectors/image.selectors\";\nimport { fromJSON as imageFromJSON } from \"app2/src/records/Image\";\nimport { directUpload } from \"app2/src/api/image.service\";\nimport { toUnderscore } from \"app2/src/helpers/Format\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\n// VIEW\nexport const SET_CURRENT_IMAGE_ID = \"@images/SET_CURRENT_IMAGE_ID\";\nexport const SET_SHOW_INFO = \"@images/SET_SHOW_INFO\";\n// SINGLE\nexport const FETCH_IMAGE = \"@images/FETCH_IMAGE\";\nexport const RECEIVE_IMAGE = \"@images/RECEIVE_IMAGE\";\nexport const RESET_IMAGE = \"@images/RESET_IMAGE\";\nexport const SET_IMAGE_LOADED = \"@images/SET_IMAGE_LOADED\";\nexport const SET_IMAGE_LOADING = \"@images/SET_IMAGE_LOADING\";\nexport const DESTROY_IMAGE = \"@images/DESTROY_IMAGE\";\nexport const EDIT_IMAGE = \"@images/EDIT_IMAGE\";\nexport const EDIT_BOOLEAN = \"@images/EDIT_BOOLEAN\";\n// MULTIPLE\nexport const FETCH_IMAGES = \"@images/FETCH_IMAGES\";\nexport const RECEIVE_IMAGES = \"@images/RECEIVE_IMAGES\";\nexport const SET_IMAGES_LOADED = \"@images/SET_IMAGES_LOADED\";\nexport const BATCH_EDIT_BOOLEAN = \"@images/BATCH_EDIT_BOOLEAN\";\nexport const BATCH_EDIT_FOLDER_ID = \"@images/BATCH_EDIT_FOLDER_ID\";\nexport const BATCH_REMOVE_IDS = \"@images/BATCH_REMOVE_IDS\";\n// ESTIMATE\nexport const DUPLICATE_LINE_ITEM_IMAGES = \"@images/DUPLICATE_LINE_ITEM_IMAGES\";\n\nexport const Actions = {\n  // VIEW\n  setCurrentImageId: (id: number) => createAction(SET_CURRENT_IMAGE_ID, { id }),\n  setShowInfo: (showInfo: boolean) => createAction(SET_SHOW_INFO, { showInfo }),\n  // SINGLE\n  fetchImage: (id: number) => createAction(FETCH_IMAGE, { id }),\n  receiveImage: (image: Partial<IImageData>) => createAction(RECEIVE_IMAGE, { image }),\n  resetImage: (id: number) => createAction(RESET_IMAGE, { id }),\n  setImageLoaded: (id: number) => createAction(SET_IMAGE_LOADED, { id }),\n  setImageLoading: (loading: boolean) => createAction(SET_IMAGE_LOADING, { loading }),\n  destroyImage: (id: number) => createAction(DESTROY_IMAGE, { id }),\n  editSortOrder: (id: number, sortOrder: number) =>\n    createAction(EDIT_IMAGE, { id, name: \"sort_order\", value: sortOrder }),\n  editBoolean: (id: number, name: string, value: boolean) => createAction(EDIT_BOOLEAN, { id, name, value }),\n  editName: (id: number, name: string) => createAction(EDIT_IMAGE, { id, name: \"name\", value: name }),\n  editTitle: (id: number, name: string) => createAction(EDIT_IMAGE, { id, name: \"title\", value: name }),\n  editDescription: (id: number, name: string) => createAction(EDIT_IMAGE, { id, name: \"description\", value: name }),\n  editImportType: (id: number, importType: string) =>\n    createAction(EDIT_IMAGE, { id, name: \"import_type\", value: importType }),\n  //  MULTIPLE\n  fetchImages: (ids: List<number>) => createAction(FETCH_IMAGES, { ids }),\n  receiveImages: (images: IImageData[]) => createAction(RECEIVE_IMAGES, { images }),\n  setImagesLoaded: (ids: List<number>) => createAction(SET_IMAGES_LOADED, { ids }),\n  batchEditBoolean: (imageIds: List<number>, name: string, value: boolean) =>\n    createAction(BATCH_EDIT_BOOLEAN, { imageIds, name, value }),\n  batchEditFolderId: (imageIds: List<number>, folderId: number) =>\n    createAction(BATCH_EDIT_FOLDER_ID, { imageIds, folderId }),\n  batchRemoveIds: (imageIds: List<number>) => createAction(BATCH_REMOVE_IDS, { imageIds }),\n  // ESTIMATE\n  duplicateLineItemImages: (lineItemId: number, imageIds: List<number>) =>\n    createAction(DUPLICATE_LINE_ITEM_IMAGES, { lineItemId, imageIds }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  listImages: (options: Partial<IImageOptions>, queryParams: QueryParamsRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const mergedOptions = setOptionsId(options, getState());\n\n      if (!options.refreshLoad) {\n        dispatch(paginationActions.Actions.fetchPage(\"image\", queryParams));\n      }\n\n      try {\n        const response = await list(mergedOptions, queryParams);\n        if (options.refreshLoad) {\n          const currentIds = ids(getState(), { modelName: \"image\" });\n          const images = response.images.filter((image) => !currentIds.includes(image.id));\n          dispatch(Actions.receiveImages(images));\n        } else {\n          dispatch(Actions.receiveImages(response.images));\n        }\n        if (options.imageableType === \"job\") {\n          const imageRecords = response.images.map((image) => imageFromJSON(image));\n          const jobWithImages = currentJob(getState())?.set(\"images\", List(imageRecords));\n          dispatch(commonActions.Actions.setJob(jobWithImages));\n        }\n        const pageData: Partial<IPageData> = {\n          ids: List(response.images.map((image: IImageData) => image.id)),\n          pagination: response.meta.pagination,\n        };\n        dispatch(paginationActions.Actions.receivePage(\"image\", queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response, dispatch);\n        dispatch(paginationActions.Actions.receivePageError(\"image\", queryParams, errors));\n      }\n    };\n  },\n  destroyImage: (image: ImageRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchImage(image.id));\n\n      try {\n        await destroy(image);\n        dispatch(Actions.destroyImage(image.id));\n        if (image.imageable_type === \"Job\") {\n          dispatch(jobActions.Actions.decreaseCount(\"image\", image.imageable_id));\n        }\n        await dispatch(AsyncActions.checkPageEmpty(toUnderscore(image.imageable_type), image.folder_id));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Image successfully deleted\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setImageLoaded(image.id));\n      }\n    };\n  },\n  updateOrCreateImage: (image: ImageRecord): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchImage(image.id));\n\n      try {\n        const response = await updateOrCreate(image);\n        dispatch(Actions.receiveImage(response.image));\n        if (image.id <= 0) {\n          dispatch(AsyncActions.processImage(response.image));\n        }\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved image successfully\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setImageLoaded(image.id));\n      }\n    };\n  },\n  batchCreateImage: (files: any[], options: IImageOptions): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      options = setOptionsId(options, getState());\n      try {\n        const images: IImageData[] = [];\n        const { imageableType, imageableId } = options;\n        const fileCount = files.length;\n        const { urls } = await directUpload(fileCount, imageableType, imageableId as number);\n\n        let imageSuccesses = 0;\n        await Promise.all(\n          urls.map(async (obj, index) => {\n            try {\n              const file = files[index];\n              await fetch(obj.url, { body: file, method: \"PUT\", headers: { \"Content-Type\": file.type } });\n\n              const record = imageFromJSON({\n                name: file.name,\n                display: options.display || \"do_not_display\",\n                imageable_id: options.imageableId as number,\n                imageable_type: options.imageableType,\n                folder_id: options.folder_id,\n                uuid: obj.id,\n              });\n              const response = await createDirect(record);\n              images.push(response.image as any);\n\n              const reader = new FileReader();\n              const dataUrl = await new Promise<string>((resolve, reject) => {\n                reader.onload = () => resolve(reader.result as string);\n                reader.onerror = reject;\n                reader.readAsDataURL(file);\n              });\n\n              dispatch(\n                Actions.receiveImage({ ...response.image, file: { small: { url: dataUrl } } } as Partial<IImageData>),\n              );\n              dispatch(AsyncActions.processImage(response.image as IImageData));\n\n              imageSuccesses += 1;\n              return response;\n            } catch (response) {\n              return response;\n            }\n          }),\n        );\n\n        let flashLevel = FlashLevels.warning;\n        if (imageSuccesses === files.length) {\n          flashLevel = FlashLevels.success;\n        }\n\n        dispatch(\n          commonActions.Actions.flashAddAlert(\n            flashLevel,\n            imageSuccesses + \"/\" + files.length + \" Images successfully uploaded\",\n          ),\n        );\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  batchUpdateImage: (imageIds: List<number>, reject = false): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const promises = [];\n      dispatch(Actions.fetchImages(imageIds));\n\n      imageIds.forEach((imageId) => {\n        const updatedImage = image(getState(), { imageId });\n        promises.push(update(updatedImage));\n      });\n\n      try {\n        const responses = await Promise.all(promises);\n        const images = responses.map((response) => response.image);\n        dispatch(Actions.receiveImages(images));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved images successfully\"));\n      } catch (response) {\n        dispatch(Actions.setImagesLoaded(imageIds));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, [\"Update failed, please try again.\"]));\n        if (reject) {\n          return Promise.reject();\n        }\n      }\n    };\n  },\n  onSortEnd: (oldIndex: number, newIndex: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      await dispatch(paginationActions.AsyncActions.onSortEnd(\"image\", oldIndex, newIndex));\n\n      dispatch(AsyncActions.batchUpdateImage(dirtyIds(getState())));\n      dispatch(paginationActions.Actions.setDirtyIds(null));\n    };\n  },\n  processImage: (image: IImageData): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      if (image.imageable_type === \"Job\") {\n        dispatch(jobActions.Actions.increaseCount(\"image\", image.imageable_id));\n      }\n      dispatch(paginationActions.Actions.pushId(image.id, \"image\"));\n    };\n  },\n  moveImages: (folderId: number): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const imageIds = imagesBooleanIds(getState(), { booleanName: \"selected\" });\n      const imageRecord = image(getState(), { imageId: imageIds.first() });\n\n      dispatch(Actions.batchEditFolderId(imageIds, folderId));\n      try {\n        await dispatch(AsyncActions.batchUpdateImage(imageIds, true));\n\n        dispatch(Actions.batchRemoveIds(imageIds));\n        await dispatch(AsyncActions.checkPageEmpty(toUnderscore(imageRecord.imageable_type), imageRecord.folder_id));\n      } catch {\n        dispatch(Actions.batchEditFolderId(imageIds, imageRecord.folder_id));\n      }\n    };\n  },\n  checkPageEmpty: (kind: ImageableType, folder_id: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      return paginationActions.checkPageEmpty(getState(), \"image\", (newQueryParams) =>\n        dispatch(\n          AsyncActions.listImages(\n            {\n              imageableType: kind,\n              folder_id,\n            },\n            newQueryParams,\n          ),\n        ),\n      );\n    };\n  },\n  saveForm: (formData: any): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.editTitle(formData.id, formData.title));\n      dispatch(Actions.editDescription(formData.id, formData.description));\n\n      await dispatch(AsyncActions.updateOrCreateImage(image(getState(), { imageId: formData.id })));\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nconst setOptionsId = (options: Partial<IImageOptions>, state: RootState): IImageOptions => {\n  if (isNullOrUndefined(options.imageableId)) {\n    switch (options.imageableType) {\n      case \"job\":\n        options.imageableId = currentJobId(state);\n        break;\n      case \"org\":\n        options.imageableId = currentOrgId(state);\n        break;\n    }\n  }\n\n  return options as IImageOptions;\n};\n","import * as userActions from \"./user.actions\";\nimport { Actions as JobActions } from \"./job.actions\";\nimport { ActionsUnion, createAction } from \"./Utils\";\nimport { ILoginData } from \"app2/src/api/user.service\";\nimport { RootDispatchType } from \"../store\";\nimport { IUserData } from \"../records/UserRecord\";\nimport { StoreRegistry } from \"../storeRegistry\";\nimport { IAuthService } from \"../helpers/Auth.service\";\nimport { IRemoteStorageService } from \"app2/src/api/remoteStorage.service\";\n\nlet authService = StoreRegistry.get<IAuthService>(\"authService\");\nconst getAuthService = () => {\n  if (authService) {\n    return authService;\n  }\n\n  authService = StoreRegistry.get<IAuthService>(\"authService\");\n  return authService;\n};\n\nexport const SET_TOKENS = \"@auth/SET_TOKENS\";\nexport const SET_TOKEN = \"@auth/SET_TOKEN\";\nexport const SET_AUTHENTICATING = \"@auth/SET_AUTHENTICATING\";\nexport const SET_ACCESS_UID = \"@auth/SET_ACCESS_UID\";\nexport const SET_REFRESH_TOKEN_EXPIRED = \"@auth/SET_REFRESH_TOKEN_EXPIRED\";\n\nexport type AuthTokens = { token: string; refreshToken: string };\n\nexport const Actions = {\n  setTokens: (tokens: AuthTokens) => createAction(SET_TOKENS, tokens),\n  setToken: (token: string) => createAction(SET_TOKEN, token),\n  setAccessUid: (uid: string) => createAction(SET_ACCESS_UID, { uid }),\n  setAuthenticating: (authing: boolean) => createAction(SET_AUTHENTICATING, authing),\n  setRefreshTokenExpired: (refreshToken: boolean) => createAction(SET_REFRESH_TOKEN_EXPIRED, refreshToken),\n};\n\nexport const AsyncActions = {\n  fromData: (token: string, user: IUserData, refreshToken: string) => {\n    return (dispatch: RootDispatchType) => {\n      const tokenData: ILoginData = {\n        user,\n        token,\n        refresh_token: refreshToken,\n      };\n      dispatchAuthUpdate(dispatch, tokenData);\n\n      return tokenData;\n    };\n  },\n  changeAccessUid: (uid: string) => {\n    return async (dispatch: RootDispatchType) => {\n      const authService = getAuthService();\n      authService.setAccessUid(uid);\n      dispatch(Actions.setAccessUid(uid));\n      dispatch(JobActions.resetJobQuery());\n\n      // Reconnect to AppMessage channel with new access\n      const remoteStorage = StoreRegistry.get<IRemoteStorageService>(\"remoteStorage\");\n      if (remoteStorage && remoteStorage.initialized) {\n        try {\n          await remoteStorage.reconnectAppMessageChannel();\n        } catch (error) {\n          console.error(\"Failed to reconnect AppMessage channel:\", error);\n        }\n      }\n    };\n  },\n};\n\nconst dispatchAuthUpdate = (dispatch: RootDispatchType, tokenData: ILoginData): void => {\n  const authService = getAuthService();\n  authService.setRefreshToken(tokenData.refresh_token);\n  authService.setAccessUid(tokenData.accessUid);\n  authService.setCurrentUser(tokenData.user.id, tokenData.user.email, tokenData.token);\n\n  dispatch(Actions.setTokens({ token: tokenData.token, refreshToken: tokenData.refresh_token }));\n  dispatch(userActions.Actions.setCurrentUser(tokenData.user));\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { RootState } from \"app2/src/reducers\";\nimport { ids } from \"app2/src/selectors/pagination.selectors\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { recordChanged } from \"app2/src/helpers/Record\";\n\nexport const currentJobApplicantCount = (state: RootState) =>\n  state.getIn([\"customForms\", \"applicantCountByJobId\", currentJobId(state)]);\n\nconst byId = (state: RootState) => state.getIn([\"customForms\", \"byId\"]);\nconst lastSavedById = (state: RootState) => state.getIn([\"customForms\", \"lastSavedById\"]);\n\nexport const customForm = (state: RootState, props: { id: string }) => byId(state).get(props.id);\nexport const lastSavedCustomForm = (state: RootState, props: { id: string }) => lastSavedById(state).get(props.id);\n\n/**\n * Get the first job resulting custom form\n */\nexport const jobResultingCustomForm = (state: RootState) => {\n  const customFormIds = ids(state, { modelName: \"jobResultingForms\" }) || List();\n  const jobResultingFormId = customFormIds.first();\n  return byId(state).get(jobResultingFormId);\n};\n\n/**\n * Get the result of the job resulting custom form\n */\nexport const jobResult = createSelector([jobResultingCustomForm], (customForm) => {\n  return customForm?.getIn([\"form_data\", \"result\"]);\n});\n\n/**\n * Did the custom form change? Did not use createSelector since ID is not passed in as a prop\n *\n * @param {RootState} state The RootState\n * @returns {boolean}\n */\nexport const customFormChanged = (state: RootState, props?: any) => {\n  const customFormRecord = customForm(state, props);\n  const lastSavedCustomFormRecord = lastSavedCustomForm(state, props);\n  if (!customFormRecord || !lastSavedCustomFormRecord) {\n    return false;\n  }\n  return recordChanged(customFormRecord, lastSavedCustomFormRecord);\n};\n","import * as accessActions from \"app2/src/reducers/access.actions\";\nimport { accessFromJSON } from \"app2/src/records/UserRecord\";\nimport { fromJS, List, Map, Record, Set } from \"immutable\";\nimport { AccessRecord } from \"../records/UserRecord\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { reducer as orgReducer } from \"app2/src/reducers/org.reducer\";\nimport { Actions as OrgActions } from \"app2/src/reducers/org.actions\";\nimport { reset } from \"./Reducer\";\n\nexport const AccessStateRecord = Record({\n  byId: Map<number, AccessRecord>(),\n  lastSavedById: Map<number, AccessRecord>(),\n});\n\nexport const initialState = AccessStateRecord();\n\nexport type AccessState = typeof initialState;\n\nexport const model = \"accesses\";\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n  switch (action.type) {\n    case accessActions.SET_ACCESS: {\n      const { access, id } = action.payload;\n      const immutableAccess = accessFromJSON(access);\n\n      return state.setIn([model, \"byId\", id], immutableAccess).setIn([model, \"lastSavedById\", id], immutableAccess);\n    }\n    case accessActions.RESET_ACCESS: {\n      const { id } = action.payload;\n      return reset(state, model, id);\n    }\n    case accessActions.SET_ACCESS_ACL: {\n      const { acl, id } = action.payload;\n      return state.updateIn([model, \"byId\", id], accessFromJSON({ id } as any), (ar: AccessRecord) =>\n        ar.set(\"acl\", fromJS(acl)),\n      );\n    }\n    case accessActions.RECEIVE_ACCESSES:\n      action.payload.accesses.forEach((access) => {\n        state = reducer(state, accessActions.Actions.setAccess(access.id, access));\n        if (access.org) {\n          state = orgReducer(state, OrgActions.setOrg(access.org));\n        }\n      });\n      return state;\n\n    case accessActions.UPDATE_FORM_ACL: {\n      const { id, resource, permission, value } = action.payload;\n\n      if (value) {\n        return state.updateIn([model, \"byId\", id, \"acl\", resource], List(), (permissions: List<string>) => {\n          if (permissions.indexOf(permission) >= 0) {\n            return permissions;\n          }\n          return permissions.push(permission);\n        });\n      } else {\n        return state.updateIn([model, \"byId\", id, \"acl\", resource], List(), (permissions: List<string>) => {\n          if (permissions.indexOf(permission) >= 0) {\n            return permissions.filter((p) => p !== permission);\n          }\n          return permissions;\n        });\n      }\n    }\n    case accessActions.UPDATE_FORM_RECORD: {\n      const { id, path, value } = action.payload;\n      const parts = path.split(\".\");\n      return state.setIn([model, \"byId\", id, ...parts], value);\n    }\n    default:\n      return state;\n  }\n};\n","import {\n  CustomFormKind,\n  CustomFormRecord,\n  customFormToJSON,\n  ICustomFormData,\n} from \"app2/src/components/JobTabs/InfoTab/CustomForm/CustomFormRecord\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\n\nexport interface ICustomFormIndexResponse {\n  custom_forms: ICustomFormData[];\n}\n\nexport interface ICustomFormResponse {\n  custom_form: ICustomFormData;\n}\n\nconst url = \"api/v1/jobs/:id/custom_forms\";\n\nexport const list = (jobId: number, kind: CustomFormKind): Promise<ICustomFormIndexResponse> => {\n  const actionUrl = url.replace(\":id\", jobId.toString());\n\n  return fetcher.get<ICustomFormIndexResponse>(actionUrl, { kind });\n};\n\nexport const create = (jobId: number, customForm: CustomFormRecord): Promise<ICustomFormResponse> => {\n  const actionUrl = url.replace(\":id\", jobId.toString());\n\n  const customFormData = customFormToJSON(customForm);\n\n  return fetcher.post<ICustomFormResponse>(actionUrl, { custom_form: customFormData });\n};\n\nexport const update = (jobId: number, customForm: CustomFormRecord): Promise<ICustomFormResponse> => {\n  const actionUrl = fetcher.joinUrls(url.replace(\":id\", jobId.toString()), customForm.id);\n\n  const customFormData = customFormToJSON(customForm);\n\n  return fetcher.patch<ICustomFormResponse>(actionUrl, { custom_form: customFormData });\n};\n","import { list, create, update } from \"app2/src/api/customForm.service\";\nimport {\n  CustomFormKind,\n  CustomFormRecord,\n  ICustomFormData,\n} from \"app2/src/components/JobTabs/InfoTab/CustomForm/CustomFormRecord\";\nimport { ThunkResult } from \"app2/src/reducers\";\nimport { ActionsUnion, createAction } from \"app2/src/reducers/UtilsTypes\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { Actions as PaginationActions } from \"app2/src/reducers/pagination.actions\";\nimport { queryParamsFromJSON } from \"app2/src/records/Page\";\nimport { List } from \"immutable\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { FormUpdateEvent } from \"app2/src/reducers/rsfForm.actions\";\nimport { Actions as CommonActions } from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport const FETCH_CUSTOM_FORM = \"@customForm/FETCH_CUSTOM_FORM\";\nexport const RECEIVE_CUSTOM_FORM = \"@customForm/RECEIVE_CUSTOM_FORM\";\nexport const RECEIVE_CUSTOM_FORMS = \"@customForm/RECEIVE_CUSTOM_FORMS\";\nexport const SET_MODEL_LOADED = \"@customForm/SET_MODEL_LOADED\";\nexport const SET_APPLICANT_COUNT = \"@customForm/SET_APPLICANT_COUNT\";\nexport const UPDATE_DABELLA_FORM = \"@customForm/UPDATE_DABELLA_FORM\";\nexport const UPDATE_CUSTOM_FORM_RJSF = \"@customForm/UPDATE_CUSTOM_FORM_RJSF\";\nexport const RESET_CUSTOM_FORM = \"@customForm/RESET_CUSTOM_FORM\";\n\nexport const Actions = {\n  fetchCustomForm: (id: string) => createAction(FETCH_CUSTOM_FORM, { id }),\n  receiveCustomForm: (customForm: Partial<ICustomFormData>) => createAction(RECEIVE_CUSTOM_FORM, customForm),\n  receiveCustomForms: (customForms: Partial<ICustomFormData>[]) => createAction(RECEIVE_CUSTOM_FORMS, customForms),\n  setModelLoaded: (id: string) => createAction(SET_MODEL_LOADED, { id }),\n  setApplicantCount: (jobId: number, customForms: Partial<ICustomFormData>[]) =>\n    createAction(SET_APPLICANT_COUNT, { jobId, customForms }),\n  updateDabellaForm: (event: FormUpdateEvent) => createAction(UPDATE_DABELLA_FORM, { event }),\n  updateCustomFormRJSF: (customFormId: string, formData: any) =>\n    createAction(UPDATE_CUSTOM_FORM_RJSF, { customFormId, formData }),\n  resetCustomForm: (customFormId: string) => createAction(RESET_CUSTOM_FORM, { customFormId }),\n};\n\nexport const AsyncActions = {\n  listCustomForms: (jobId: number, kind: CustomFormKind = \"pii_form\", modelName = \"customForms\"): ThunkResult<void> => {\n    return async (dispatch: RootDispatchType) => {\n      const queryParams = queryParamsFromJSON({});\n      dispatch(PaginationActions.fetchPage(modelName, queryParams));\n\n      try {\n        const response = await list(jobId, kind);\n        dispatch(Actions.receiveCustomForms(response.custom_forms));\n        const pageData = {\n          ids: List(_.pluck(response.custom_forms, \"id\")),\n          pagination: {\n            current_page: 1,\n            total_pages: 1,\n            total_count: response.custom_forms.length,\n          },\n        };\n        dispatch(PaginationActions.receivePage(modelName, queryParams, pageData));\n        if (kind === \"pii_form\") {\n          dispatch(Actions.setApplicantCount(jobId, response.custom_forms));\n        }\n      } catch (response) {\n        const errors = handleErrors(response, dispatch);\n        dispatch(PaginationActions.receivePageError(modelName, queryParams, errors));\n      }\n    };\n  },\n  updateOrCreateCustomForm: (\n    jobId: number,\n    customForm: CustomFormRecord,\n    handleClose: () => void,\n  ): ThunkResult<void> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(Actions.fetchCustomForm(customForm.id));\n        let response;\n        if (customForm.id === \"0\") {\n          response = await create(jobId, customForm);\n          dispatch(Actions.resetCustomForm(customForm.id));\n          dispatch(PaginationActions.setPageIds(\"jobResultingForms\", List([response.custom_form.id])));\n        } else {\n          response = await update(jobId, customForm);\n        }\n        dispatch(Actions.receiveCustomForm(response.custom_form));\n\n        dispatch(CommonActions.flashAddAlert(FlashLevels.success, \"Form updated successfully\"));\n        handleClose();\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setModelLoaded(customForm.id));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { Record, List } from \"immutable\";\nimport * as moment from \"moment\";\nimport { CamelToSnakeKeys, SnakeToCamelKeys } from \"app2/src/helpers/Format\";\nimport { checkDate } from \"app2/src/records\";\nimport {\n  IFenceData,\n  FenceRecord,\n  emptyFenceRecord,\n  fromJSON as fenceFromJSON,\n  toFormData as fenceToFormData,\n} from \"./Fence\";\nimport { IFenceSegmentData, FenceSegmentRecord, emptyFenceSegmentRecord, fromJSON as segmentFromJSON } from \"./Segment\";\n\nexport { FenceRecord, emptyFenceRecord, FenceSegmentRecord, emptyFenceSegmentRecord, fenceFromJSON, segmentFromJSON };\nexport type { IFenceData, IFenceSegmentData };\n\nexport const calculateNetLinePosts = (record: FencingRecord): FencingRecord => {\n  let totalLinePost4 = 0,\n    totalLinePost6 = 0,\n    totalLinePost8 = 0,\n    totalGateCount = 0,\n    totalNetLength = 0;\n\n  record = record.update(\"fences\", (fences) => {\n    return fences.map((fence: FenceRecord) => {\n      let fenceLinePost4 = 0,\n        fenceLinePost6 = 0,\n        fenceLinePost8 = 0,\n        fenceGateCount = 0,\n        fenceNetLength = 0;\n\n      fence = fence.update(\"segments\", (segments) => {\n        return segments.map((segment: FenceSegmentRecord) => {\n          const linePosts4 = Math.ceil(segment.netLength / 4) - 1;\n          const linePosts6 = Math.ceil(segment.netLength / 6) - 1;\n          const linePosts8 = Math.ceil(segment.netLength / 8) - 1;\n\n          fenceLinePost4 += linePosts4;\n          fenceLinePost6 += linePosts6;\n          fenceLinePost8 += linePosts8;\n          fenceGateCount += segment.gateCount;\n          fenceNetLength += segment.netLength;\n\n          return segment.merge({ linePosts4, linePosts6, linePosts8 });\n        });\n      });\n\n      totalLinePost4 += fenceLinePost4;\n      totalLinePost6 += fenceLinePost6;\n      totalLinePost8 += fenceLinePost8;\n      totalGateCount += fenceGateCount;\n      totalNetLength += fenceNetLength;\n\n      return fence.merge({\n        linePosts4: fenceLinePost4,\n        linePosts6: fenceLinePost6,\n        linePosts8: fenceLinePost8,\n        gateCount: fenceGateCount,\n        netLength: fenceNetLength,\n      });\n    });\n  });\n\n  return record.merge({\n    linePosts4: totalLinePost4,\n    linePosts6: totalLinePost6,\n    linePosts8: totalLinePost8,\n    gateCount: totalGateCount,\n    netLength: totalNetLength,\n  });\n};\n\nexport const mergeGateNumbers = (previous: FencingRecord, next: FencingRecord): FencingRecord => {\n  let totalLinePost4 = 0,\n    totalLinePost6 = 0,\n    totalLinePost8 = 0,\n    totalGateCount = 0,\n    totalNetLength = 0;\n\n  next = next.update(\"fences\", (fences) => {\n    return fences.map((fence: FenceRecord, fIdx) => {\n      let fenceLinePost4 = 0,\n        fenceLinePost6 = 0,\n        fenceLinePost8 = 0,\n        fenceGateCount = 0,\n        fenceNetLength = 0;\n\n      fence = fence.update(\"segments\", (segments) => {\n        return segments.map((segment: FenceSegmentRecord, sIdx) => {\n          const prevGateCount = previous.getIn([\"fences\", fIdx, \"segments\", sIdx, \"gateCount\"]);\n          const prevGateLength = previous.getIn([\"fences\", fIdx, \"segments\", sIdx, \"gateLength\"]);\n          if (prevGateCount > 0) {\n            segment = segment.set(\"gateCount\", prevGateCount);\n          }\n          if (prevGateLength > 0) {\n            segment = segment.merge({\n              gateLength: prevGateLength,\n              netLength: segment.length - prevGateLength,\n            });\n          }\n\n          const linePosts4 = Math.ceil(segment.netLength / 4) - 1;\n          const linePosts6 = Math.ceil(segment.netLength / 6) - 1;\n          const linePosts8 = Math.ceil(segment.netLength / 8) - 1;\n\n          fenceLinePost4 += linePosts4;\n          fenceLinePost6 += linePosts6;\n          fenceLinePost8 += linePosts8;\n          fenceGateCount += segment.gateCount;\n          fenceNetLength += segment.netLength;\n\n          return segment.merge({ linePosts4, linePosts6, linePosts8 });\n        });\n      });\n\n      totalLinePost4 += fenceLinePost4;\n      totalLinePost6 += fenceLinePost6;\n      totalLinePost8 += fenceLinePost8;\n      totalGateCount += fenceGateCount;\n      totalNetLength += fenceNetLength;\n\n      return fence.merge({\n        linePosts4: fenceLinePost4,\n        linePosts6: fenceLinePost6,\n        linePosts8: fenceLinePost8,\n        gateCount: fenceGateCount,\n        netLength: fenceNetLength,\n      });\n    });\n  });\n\n  return next.merge({\n    linePosts4: totalLinePost4,\n    linePosts6: totalLinePost6,\n    linePosts8: totalLinePost8,\n    gateCount: totalGateCount,\n    netLength: totalNetLength,\n  });\n};\n\nexport const fromJSON = (data: Partial<IFencingData>): FencingRecord => {\n  const record: Partial<IFencingRecord> = SnakeToCamelKeys(data);\n\n  if (data.fences) {\n    record.fences = List(data.fences.map((s) => fenceFromJSON(s)));\n  }\n\n  if (data.geojson) {\n    record.geoJSON = data.geojson;\n  }\n\n  if (data.created_at) {\n    record.createdAt = checkDate(data.created_at);\n  }\n\n  if (data.updated_at) {\n    record.updatedAt = checkDate(data.updated_at);\n  }\n\n  return new FencingRecord(record);\n};\n\nexport const toFormData = (record: FencingRecord): IFencingData => {\n  const data: IFencingData = CamelToSnakeKeys(record.toJSON());\n\n  // CamelCaseToSnakeKeys does NOT like geoJSON\n  data.geojson = record.geoJSON;\n  delete (data as any).geo_j_s_o_n;\n\n  delete (data as any).fence_ids;\n\n  if (record.fences.size > 0) {\n    data.fences = record.fences.map((r) => fenceToFormData(r)).toArray();\n  } else {\n    data.fences = [];\n  }\n\n  data.updated_at = moment(record.updatedAt).format(\"YYYY-MM-DDTHH:mm:ss.SSS\");\n  data.created_at = moment(record.createdAt).format(\"YYYY-MM-DDTHH:mm:ss.SSS\");\n\n  return data;\n};\n\nexport const dummyData = (): FencingRecord => {\n  const segments = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }];\n\n  const fence = { id: 1, segments: segments };\n\n  return fromJSON({\n    id: 1,\n    fences: [fence],\n    line_posts_4: 52,\n    line_posts_6: 34,\n    line_posts_8: 26,\n    gate_count: 1,\n    gate_length: 6,\n    terminal_posts: 4,\n    corner_posts: 4,\n    net_length: 220,\n  });\n};\n\nexport interface IFencingData {\n  id: number;\n  measurement_id: number;\n  fences: Array<Partial<IFenceData>>;\n  total_length: number;\n  net_length: number;\n  corner_posts: number;\n  terminal_posts: number;\n  gate_count: number;\n  gate_length: number;\n  line_posts_4: number;\n  line_posts_6: number;\n  line_posts_8: number;\n  geojson: any;\n  created_at: string;\n  updated_at: string;\n}\n\nexport interface IFencingRecord {\n  id: number;\n  measurementId: number;\n  fences: List<FenceRecord>;\n  fenceIds: List<number>;\n  totalLength: number;\n  netLength: number;\n  cornerPosts: number;\n  terminalPosts: number;\n  gateCount: number;\n  gateLength: number;\n  linePosts4: number;\n  linePosts6: number;\n  linePosts8: number;\n  geoJSON: any;\n  createdAt: Date;\n  updatedAt: Date;\n}\n\nexport const defaultFencingProps = {\n  id: 0,\n  measurementId: 0,\n  fences: List(),\n  fenceIds: List(),\n  totalLength: 0,\n  netLength: 0,\n  cornerPosts: 0,\n  terminalPosts: 0,\n  gateCount: 0,\n  gateLength: 0,\n  linePosts4: 0,\n  linePosts6: 0,\n  linePosts8: 0,\n  geoJSON: null,\n  createdAt: new Date(),\n  updatedAt: new Date(),\n};\n\nexport class FencingRecord extends Record<IFencingRecord>(defaultFencingProps) implements IFencingRecord {}\n\nexport const emptyFencingRecord = new FencingRecord();\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IDynamicPresentationLinkData>): DynamicPresentationLinkRecord => {\n  const data: IDynamicPresentationLinkRecord = { ...(json as any) };\n\n  return new DynamicPresentationLinkRecord(data);\n};\n\nexport const toJSON = (record: DynamicPresentationLinkRecord): IDynamicPresentationLinkData => {\n  const json = record.toJSON();\n\n  if (json.id <= 0) {\n    delete json.id;\n  }\n\n  if (json._destroy === false) {\n    delete json._destroy;\n  }\n\n  return json;\n};\n\nexport interface IDynamicPresentationLinkData {\n  id: number;\n  presentation_id: number;\n  sort_order: number;\n  kind: DynamicPresentationLinkKind;\n  presentable_id: number;\n  presentable_type: string;\n  _destroy?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IDynamicPresentationLinkRecord {\n  id: number;\n  presentation_id: Nullable<number>;\n  kind: DynamicPresentationLinkKind;\n  presentable_id: Nullable<number>;\n  presentable_type: Nullable<string>;\n  sort_order: number;\n  _destroy: Nullable<boolean>;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nconst defaultDynamicPresentationLinkProps: IDynamicPresentationLinkRecord = {\n  id: 0,\n  presentation_id: null,\n  presentable_id: null,\n  presentable_type: null,\n  kind: \"default\",\n  sort_order: 0,\n  _destroy: false,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class DynamicPresentationLinkRecord\n  extends Record(defaultDynamicPresentationLinkProps)\n  implements IDynamicPresentationLinkRecord\n{\n  public readonly id!: number;\n  public readonly presentation_id!: Nullable<number>;\n  public readonly kind!: DynamicPresentationLinkKind;\n  public readonly presentable_id!: Nullable<number>;\n  public readonly presentable_type!: Nullable<string>;\n  public readonly sort_order!: number;\n  public readonly _destroy: Nullable<boolean>;\n\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public constructor(values?: Partial<IDynamicPresentationLinkRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n\nexport type DynamicPresentationLinkKind = \"default\" | \"inspection\";\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.validator.min\",[\"kendo.core.min\"],t)}(function(){return function(t,e){function a(e){var a,r=s.ui.validator.ruleResolvers||{},n={};for(a in r)t.extend(!0,n,r[a].resolve(e));return n}function r(t){return t.replace(/&amp/g,\"&amp;\").replace(/&quot;/g,'\"').replace(/&#39;/g,\"'\").replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\")}function n(t){return t=(t+\"\").split(\".\"),t.length>1?t[1].length:0}function i(e){return t(t.parseHTML?t.parseHTML(e):e)}function u(e,a){var r,n,i,u,l=t();for(i=0,u=e.length;u>i;i++)r=e[i],c.test(r.className)&&(n=r.getAttribute(s.attr(\"for\")),n===a&&(l=l.add(r)));return l}var l,s=window.kendo,o=s.ui.Widget,d=\".kendoValidator\",F=\"k-invalid-msg\",c=RegExp(F,\"i\"),f=\"k-invalid\",p=\"k-valid\",h=/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i,m=/^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,v=\":input:not(:button,[type=submit],[type=reset],[disabled],[readonly])\",g=\":checkbox:not([disabled],[readonly])\",D=\"[type=number],[type=range]\",_=\"blur\",y=\"name\",k=\"form\",E=\"novalidate\",A=t.proxy,b=function(t,e){return\"string\"==typeof e&&(e=RegExp(\"^(?:\"+e+\")$\")),e.test(t)},C=function(t,e,a){var r=t.val();return t.filter(e).length&&\"\"!==r?b(r,a):!0},x=function(t,e){return t.length?null!=t[0].attributes[e]:!1};s.ui.validator||(s.ui.validator={rules:{},messages:{}}),l=o.extend({init:function(e,r){var n=this,i=a(e),u=\"[\"+s.attr(\"validate\")+\"!=false]\";r=r||{},r.rules=t.extend({},s.ui.validator.rules,i.rules,r.rules),r.messages=t.extend({},s.ui.validator.messages,i.messages,r.messages),o.fn.init.call(n,e,r),n._errorTemplate=s.template(n.options.errorTemplate),n.element.is(k)&&n.element.attr(E,E),n._inputSelector=v+u,n._checkboxSelector=g+u,n._errors={},n._attachEvents(),n._isValidated=!1},events:[\"validate\",\"change\"],options:{name:\"Validator\",errorTemplate:'<span class=\"k-widget k-tooltip k-tooltip-validation\"><span class=\"k-icon k-i-warning\"> </span> #=message#</span>',messages:{required:\"{0} is required\",pattern:\"{0} is not valid\",min:\"{0} should be greater than or equal to {1}\",max:\"{0} should be smaller than or equal to {1}\",step:\"{0} is not valid\",email:\"{0} is not valid email\",url:\"{0} is not valid URL\",date:\"{0} is not valid date\",dateCompare:\"End date should be greater than or equal to the start date\"},rules:{required:function(t){var e=t.filter(\"[type=checkbox]\").length&&!t.is(\":checked\"),a=t.val();return!(x(t,\"required\")&&(\"\"===a||!a||e))},pattern:function(t){return t.filter(\"[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]\").filter(\"[pattern]\").length&&\"\"!==t.val()?b(t.val(),t.attr(\"pattern\")):!0},min:function(t){if(t.filter(D+\",[\"+s.attr(\"type\")+\"=number]\").filter(\"[min]\").length&&\"\"!==t.val()){var e=parseFloat(t.attr(\"min\"))||0,a=s.parseFloat(t.val());return a>=e}return!0},max:function(t){if(t.filter(D+\",[\"+s.attr(\"type\")+\"=number]\").filter(\"[max]\").length&&\"\"!==t.val()){var e=parseFloat(t.attr(\"max\"))||0,a=s.parseFloat(t.val());return e>=a}return!0},step:function(t){if(t.filter(D+\",[\"+s.attr(\"type\")+\"=number]\").filter(\"[step]\").length&&\"\"!==t.val()){var e,a=parseFloat(t.attr(\"min\"))||0,r=parseFloat(t.attr(\"step\"))||1,i=parseFloat(t.val()),u=n(r);return u?(e=Math.pow(10,u),Math.floor((i-a)*e)%(r*e)/Math.pow(100,u)===0):(i-a)%r===0}return!0},email:function(t){return C(t,\"[type=email],[\"+s.attr(\"type\")+\"=email]\",h)},url:function(t){return C(t,\"[type=url],[\"+s.attr(\"type\")+\"=url]\",m)},date:function(t){return t.filter(\"[type^=date],[\"+s.attr(\"type\")+\"=date]\").length&&\"\"!==t.val()?null!==s.parseDate(t.val(),t.attr(s.attr(\"format\"))):!0}},validateOnBlur:!0},destroy:function(){o.fn.destroy.call(this),this.element.off(d)},value:function(){return this._isValidated?0===this.errors().length:!1},_submit:function(t){return this.validate()?!0:(t.stopPropagation(),t.stopImmediatePropagation(),t.preventDefault(),!1)},_checkElement:function(t){var e=this.value();this.validateInput(t),this.value()!==e&&this.trigger(\"change\")},_attachEvents:function(){var e=this;e.element.is(k)&&e.element.on(\"submit\"+d,A(e._submit,e)),e.options.validateOnBlur&&(e.element.is(v)?(e.element.on(_+d,function(){e._checkElement(e.element)}),e.element.is(g)&&e.element.on(\"click\"+d,function(){e._checkElement(e.element)})):(e.element.on(_+d,e._inputSelector,function(){e._checkElement(t(this))}),e.element.on(\"click\"+d,e._checkboxSelector,function(){e._checkElement(t(this))})))},validate:function(){var t,e,a,r,n=!1,i=this.value();if(this._errors={},this.element.is(v))n=this.validateInput(this.element);else{for(r=!1,t=this.element.find(this._inputSelector),e=0,a=t.length;a>e;e++)this.validateInput(t.eq(e))||(r=!0);n=!r}return this.trigger(\"validate\",{valid:n}),i!==n&&this.trigger(\"change\"),n},validateInput:function(e){var a,n,u,l,o,d,c,h,m,v;return e=t(e),this._isValidated=!0,a=this,n=a._errorTemplate,u=a._checkValidity(e),l=u.valid,o=\".\"+F,d=e.attr(y)||\"\",c=a._findMessageContainer(d).add(e.next(o).filter(function(){var e=t(this);return e.filter(\"[\"+s.attr(\"for\")+\"]\").length?e.attr(s.attr(\"for\"))===d:!0})).hide(),e.removeAttr(\"aria-invalid\"),l?delete a._errors[d]:(h=a._extractMessage(e,u.key),a._errors[d]=h,m=i(n({message:r(h)})),v=c.attr(\"id\"),a._decorateMessageContainer(m,d),v&&m.attr(\"id\",v),c.replaceWith(m).length||m.insertAfter(e),m.show(),e.attr(\"aria-invalid\",!0)),e.toggleClass(f,!l),e.toggleClass(p,l),l},hideMessages:function(){var t=this,e=\".\"+F,a=t.element;a.is(v)?a.next(e).hide():a.find(e).hide()},_findMessageContainer:function(e){var a,r,n,i=s.ui.validator.messageLocators,l=t();for(r=0,n=this.element.length;n>r;r++)l=l.add(u(this.element[r].getElementsByTagName(\"*\"),e));for(a in i)l=l.add(i[a].locate(this.element,e));return l},_decorateMessageContainer:function(t,e){var a,r=s.ui.validator.messageLocators;t.addClass(F).attr(s.attr(\"for\"),e||\"\");for(a in r)r[a].decorate(t,e);t.attr(\"role\",\"alert\")},_extractMessage:function(t,e){var a=this,r=a.options.messages[e],n=t.attr(y);return r=s.isFunction(r)?r(t):r,s.format(t.attr(s.attr(e+\"-msg\"))||t.attr(\"validationMessage\")||t.attr(\"title\")||r||\"\",n,t.attr(e)||t.attr(s.attr(e)))},_checkValidity:function(t){var e,a=this.options.rules;for(e in a)if(!a[e].call(this,t))return{valid:!1,key:e};return{valid:!0}},errors:function(){var t,e=[],a=this._errors;for(t in a)e.push(a[t]);return e}}),s.ui.plugin(l)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,a){(a||e)()});\n//# sourceMappingURL=kendo.validator.min.js.map\n","import { Record } from \"immutable\";\n\nexport interface ILocationState {\n  pathname: string;\n  search: string;\n  hash: string;\n}\n\nexport const defaultLocationStateProps = {\n  pathname: \"\",\n  search: \"\",\n  hash: \"\",\n};\n\nexport class LocationStateRecord extends Record<ILocationState>(defaultLocationStateProps) implements ILocationState {}\nexport const emptyLocationStateValue = new LocationStateRecord();\n","import { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { DoorRecord } from \"app2/src/records/Door\";\nimport { recordChanged } from \"app2/src/helpers/Record\";\nimport { currentLastSavedMeasurement, currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\n\nexport const rootKey = \"doors\";\n\nexport const door = (state: RootState, props: any) => state.getIn([rootKey, \"byId\", props.doorId.toString()]);\nexport const lastSavedDoor = (state: RootState, props: any) =>\n  state.getIn([rootKey, \"lastSavedById\", props.doorId.toString()]);\n\nexport const doors = createSelector([(state, props) => ({ state, props })], (stateProps: any): List<DoorRecord> => {\n  const { state, props } = stateProps;\n  const { doorIds } = props;\n  return doorIds.map((id: number) => door(state, { doorId: id }));\n});\n\nexport const lastSavedDoors = createSelector(\n  [(state, props) => ({ state, props })],\n  (stateProps: any): List<DoorRecord> => {\n    const { state, props } = stateProps;\n    const { doorIds } = props;\n    return doorIds.map((id: number) => lastSavedDoor(state, { doorId: id }));\n  },\n);\n\n/**\n * Looks to the currentJob in redux to get the measurement_id then loads that measurement from the store\n *\n * @params {RootState} state RootState\n * @params {{}} options NONE\n * @returns {MeasurementRecord} measurement\n */\nexport const doorsChanged = (state: RootState, props: any): boolean => {\n  const measurement = currentMeasurement(state, props);\n  const lastSavedMeasurement = currentLastSavedMeasurement(state, props);\n  return recordChanged(\n    doors(state, { doorIds: measurement?.get(\"door_ids\") || List() }),\n    lastSavedDoors(state, { doorIds: lastSavedMeasurement?.get(\"door_ids\") || List() }),\n  );\n};\n","import { baseCleanProps } from \"app2/src/api/Api\";\nimport { ICalculatedFinancingResponse } from \"app2/src/api/estimate.service\";\nimport { fetcher } from \"../helpers/Fetcher\";\nimport { IFinanceOptionData, FinanceOptionRecord, FinanceOptionProvider } from \"../records/FinanceOption\";\n\nexport interface IFinanceOptionIndexResponse {\n  finance_options: IFinanceOptionData[];\n}\n\ninterface IFinanceOptionResponse {\n  finance_option: IFinanceOptionData;\n}\n\nexport interface FinanceOptionIndexOptions {\n  provider?: FinanceOptionProvider;\n  remove_provider?: FinanceOptionProvider[];\n}\n\nclass FinanceOptionService {\n  public orgUrl = \"api/v1/orgs/:id/finance_options\";\n  public url = \"api/v1/finance_options\";\n\n  public loadByOrg(orgId: number, options: FinanceOptionIndexOptions): Promise<IFinanceOptionIndexResponse> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n\n    return fetcher.get<IFinanceOptionIndexResponse>(actionUrl, options);\n  }\n\n  public create(orgId: number, financeOption: Partial<IFinanceOptionData>): Promise<IFinanceOptionData> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n\n    return fetcher.post<IFinanceOptionResponse>(actionUrl, { finance_option: this.cleanProps(financeOption) }).then(\n      (response) => response.finance_option,\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public update(orgId: number, financeOption: Partial<IFinanceOptionData>): Promise<IFinanceOptionData> {\n    let actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n    actionUrl = fetcher.joinUrls(actionUrl, financeOption.id.toString());\n\n    return fetcher.patch<IFinanceOptionResponse>(actionUrl, { finance_option: this.cleanProps(financeOption) }).then(\n      (response) => response.finance_option,\n      (response) => {\n        if (response.status === 500) {\n          return Promise.reject([\"Internal Server Error\"]);\n        }\n\n        if (_.isArray(response.data.errors)) {\n          return Promise.reject(response.data.errors);\n        }\n\n        return Promise.reject([\"Unknown Error\"]);\n      },\n    );\n  }\n\n  public archive(orgId: number, financeOption: FinanceOptionRecord): Promise<IFinanceOptionData> {\n    let actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n    actionUrl = fetcher.joinUrls(actionUrl, financeOption.id.toString());\n\n    return fetcher.delete<any>(actionUrl).then(\n      () => {\n        return financeOption.set(\"archived\", true);\n      },\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public calculate(\n    orgId: number,\n    financeOptionIds: number[],\n    financedAmount: number,\n  ): Promise<ICalculatedFinancingResponse> {\n    const actionUrl = fetcher.joinUrls(this.url, \"calculate\");\n\n    return fetcher.get<ICalculatedFinancingResponse>(actionUrl, {\n      org_id: orgId,\n      \"finance_option_ids[]\": financeOptionIds,\n      financed_amount: financedAmount,\n    });\n  }\n\n  public cleanProps(financeOption: Partial<IFinanceOptionData>): Partial<IFinanceOptionData> {\n    financeOption = baseCleanProps(financeOption as IFinanceOptionData);\n\n    return financeOption;\n  }\n}\n\nexport const financeOptionService = new FinanceOptionService();\n","import { Record, List } from \"immutable\";\nimport { PaymentTermItemRecord, IPaymentTermItemData, paymentTermItemFromJSON } from \"./PaymentTermTemplate\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\nimport _ from \"underscore\";\n\nexport const fromJSON = (json: Partial<IPaymentTermData>): PaymentTermRecord => {\n  const record: IPaymentTermRecord = { ...(json as any) };\n\n  if (json.payment_term_items) {\n    record.payment_term_items = List(json.payment_term_items.map((pti) => paymentTermItemFromJSON(pti)));\n  }\n\n  return new PaymentTermRecord(record);\n};\n\nexport const toJSON = (pt: PaymentTermRecord): IPaymentTermData => {\n  return pt.toJS();\n};\n\n/**\n * Memoized version of calculatePaymentTerms that is based on the hashCode of the PaymentTermRecord\n * and the total value passed in.\n */\nexport const memoizedCalculatePaymentTerms = _.memoize(\n  (pt: PaymentTermRecord, value: number) => {\n    return calculatePaymentTerms(pt, value);\n  },\n  (pt: PaymentTermRecord, value: number) => {\n    return pt.hashCode() + value.toString();\n  },\n);\n\n/**\n * Updates the calculated value on all the PaymentTermItemRecords.\n * 'amount' records are handled first, then 'percent'.\n * Finally, any 'discrepency' in total of items vs total passed in is reconciled in the last item.\n *\n * @param pt  PaymentTermRecord to update calculated values on\n * @param value  Total of Estimate to use in the calculations\n *\n * @returns PaymentTermRecord  The updated, immutable, record.\n */\nexport const calculatePaymentTerms = (pt: PaymentTermRecord, value: number): PaymentTermRecord => {\n  const initialValue: number = value;\n  let runningValue: number = value;\n\n  const grouped = pt.payment_term_items.groupBy((pti) => pti.type);\n\n  if (grouped.has(\"amount\")) {\n    grouped.get(\"amount\").forEach((pti: PaymentTermItemRecord) => {\n      pt = pt.update(\"payment_term_items\", (value) => {\n        const idx = value.findIndex((record) => record.uuid === pti.uuid);\n        const newPti = calculatePaymentTermItem(pti, initialValue);\n        runningValue = runningValue - newPti.calculated;\n        return value.set(idx, newPti);\n      });\n    });\n  }\n  const amountValue: number = runningValue;\n  if (grouped.has(\"percent\")) {\n    grouped.get(\"percent\").forEach((pti: PaymentTermItemRecord) => {\n      pt = pt.update(\"payment_term_items\", (value) => {\n        const idx = value.findIndex((record) => record.uuid === pti.uuid);\n        const newPti = calculatePaymentTermItem(pti, amountValue);\n        runningValue = runningValue - newPti.calculated;\n        return value.set(idx, newPti);\n      });\n    });\n  }\n\n  const sum: number = pt.payment_term_items.reduce((memo: number, item: PaymentTermItemRecord) => {\n    return memo + item.calculated;\n  }, 0);\n\n  const diff = value - sum;\n\n  if (pt.payment_term_items.count() > 0) {\n    const pti = pt.payment_term_items.last(new PaymentTermItemRecord());\n    pt = pt.update(\"payment_term_items\", (value) => {\n      return value.set(value.count() - 1, pti.set(\"calculated\", pti.calculated + diff));\n    });\n  }\n\n  pt = pt.set(\"financed_amount\", calculateFinancingAmount(pt, value));\n\n  return pt;\n};\n\nexport const calculateFinancingAmount = (pt: PaymentTermRecord, value: number) => {\n  let financedTotal = 0;\n  if (pt !== null) {\n    pt.payment_term_items.forEach((term) => {\n      if (term.paymentMethod === \"financed\") {\n        financedTotal += term.calculated;\n      }\n    });\n  }\n  if (financedTotal === 0) {\n    financedTotal = value;\n  }\n  return financedTotal;\n};\n\nexport const calculatePaymentTermItem = (pti: PaymentTermItemRecord, value: number): PaymentTermItemRecord => {\n  if (pti.type === \"percent\") {\n    return pti.set(\"calculated\", roundToDecimals(value * (pti.amount / 100), -2));\n  } else {\n    return pti.set(\"calculated\", pti.amount);\n  }\n};\n\nexport interface IPaymentTermData {\n  id: number;\n  name: string;\n  description: string;\n  financed_amount: number;\n  payment_term_items: IPaymentTermItemData[];\n}\n\nexport interface IPaymentTermRecord {\n  id: number;\n  name: string;\n  description: string;\n  financed_amount: number;\n  payment_term_items: List<PaymentTermItemRecord>;\n}\n\nconst defaultPaymentTermProps: IPaymentTermRecord = {\n  id: 0,\n  name: \"\",\n  description: \"\",\n  financed_amount: 0,\n  payment_term_items: List<PaymentTermItemRecord>(),\n};\n\nexport class PaymentTermRecord extends Record(defaultPaymentTermProps) implements IPaymentTermRecord {\n  public readonly id!: number;\n  public readonly name!: string;\n  public readonly description!: string;\n  public readonly financed_amount!: number;\n  public readonly payment_term_items!: List<PaymentTermItemRecord>;\n\n  public constructor(values?: Partial<IPaymentTermRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IRoofFaceData } from \"../records/RoofFace\";\n\nexport const RECEIVE_ROOF_FACE = \"@roofFaces/RECEIVE_ROOF_FACE\";\n\nexport const Actions = {\n  receiveRoofFace: (roofFace: Partial<IRoofFaceData>) => createAction(RECEIVE_ROOF_FACE, { roofFace }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { Nullable } from \"app2/src/records\";\nimport { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IRoomEstimationData>): RoomEstimationRecord => {\n  const recordData: IRoomEstimationRecord = { ...(json as any) };\n\n  return new RoomEstimationRecord(recordData);\n};\n\nexport interface IRoomEstimationData {\n  id: number;\n  room_id: number;\n  estimate_group_id: number;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IRoomEstimationRecord {\n  id: number;\n  room_id: number;\n  estimate_group_id: number;\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nconst defaultSkuProps: IRoomEstimationRecord = {\n  id: 0,\n  room_id: 0,\n  estimate_group_id: 0,\n\n  created_at: null,\n  updated_at: null,\n};\n\nexport class RoomEstimationRecord extends Record(defaultSkuProps) implements IRoomEstimationRecord {}\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { Map, List } from \"immutable\";\nimport { PageRecord, QueryParamsRecord } from \"../records/Page\";\nimport { MetaPaginationRecord } from \"../records/MetaPagination\";\n\nexport const byId = (state: RootState, props: any): Map<number, any> => state.getIn(props.path);\nexport const ids = (state: RootState, props: any) =>\n  state.getIn([\n    \"pagination\",\n    \"byModel\",\n    props.modelName,\n    \"pages\",\n    currentPage(state, { modelName: props.modelName }),\n    \"ids\",\n  ]);\nexport const currentPage = (state: RootState, props: any) =>\n  state.getIn([\"pagination\", \"byModel\", props.modelName, \"queryParams\", \"page\"]);\nexport const dirtyIds = (state: RootState, _props?: any) => state.getIn([\"pagination\", \"dirtyIds\"]);\nexport const queryParams = (state: RootState, props: any) =>\n  state.getIn([\"pagination\", \"byModel\", props.modelName, \"queryParams\"], new QueryParamsRecord());\nexport const pagination = (state: RootState, props: any) =>\n  state.getIn([\"pagination\", \"byModel\", props.modelName, \"pages\", props.page, \"pagination\"]);\nexport const pageRecord = (state: RootState, props: any) =>\n  state.getIn([\"pagination\", \"byModel\", props.modelName, \"pages\", props.page]);\n\n/**\n * Fetches the current page record\n * @param {RootState} state The RootState\n * @param {{modelName}} options\n * @returns {boolean} loading\n */\nexport const currentPageRecord = createSelector(\n  [\n    currentPage,\n    (state, props) => ({\n      state,\n      props,\n    }),\n  ],\n  (currentPage: number, { state, props }) => {\n    return pageRecord(state, { modelName: props.modelName, page: currentPage });\n  },\n);\n\n/**\n * Fetches the metadata of the current page\n *\n * @param {RootState} state The RootState\n * @param {{ modelName }} options\n * @returns {PagingMetadataRecord} PagingMetadataRecord\n */\nexport const pageControlData = (state: RootState, props: any): MetaPaginationRecord =>\n  state.getIn([\"pagination\", \"byModel\", props.modelName, \"pages\", currentPage(state, props), \"pagination\"]);\n\n/**\n * Fetches the data records of the current page\n *\n * @param {RootState} state The RootState\n * @param {{ modelName, path }} options\n * @returns {List<any>} List of records\n */\nexport const getPaginationByModel = createSelector([byId, ids], (modelById: Map<number, any>, ids: any) => {\n  if (!ids) {\n    return List();\n  }\n\n  const interim = ids\n    .map((id) => modelById.get(id))\n    .filter((object: any) => {\n      if (object?.archived) {\n        return !object.archived;\n      } else {\n        return true;\n      }\n    });\n  return interim;\n});\n\n/**\n * Fetches the ids of all pages for the given model\n *\n * @param {RootState} state The RootState\n * @param {{ modelName, path }} options\n * @returns {List<any>} List of records\n */\nexport const allIds = (state: RootState, props: any) => {\n  const pages: Map<number, PageRecord> = state.getIn([\"pagination\", \"byModel\", props.modelName, \"pages\"]);\n  let ids = List();\n  pages?.toList()?.forEach((page) => {\n    if (page?.ids.size) {\n      ids = ids.concat(page.ids);\n    }\n  });\n  return ids;\n};\n\n/**\n * Fetches the data records of all pages\n *\n * @param {RootState} state The RootState\n * @param {{ modelName, path }} options\n * @returns {List<any>} List of records\n */\nexport const getAllPaginationByModel = createSelector([byId, allIds], (modelById: Map<number, any>, ids: any) => {\n  if (!ids) {\n    return List();\n  }\n\n  const interim = ids\n    .map((id) => modelById.get(id))\n    .filter((object: any) => {\n      if (object?.archived) {\n        return !object.archived;\n      } else {\n        return true;\n      }\n    });\n  return interim;\n});\n\nexport const viewPagination = createSelector(\n  [getPaginationByModel, queryParams, (state, props) => ({ state, props })],\n  (objects: List<any>, queryParams: QueryParamsRecord, stateProps: any) => {\n    const { state, props } = stateProps;\n    const { modelName } = props;\n    const { page } = queryParams;\n    return { objects, page: pageRecord(state, { modelName, page }), queryParams };\n  },\n);\n\n/**\n * Gets current page record and returns loading\n * @param {RootState} state The RootState\n * @param {{modelName}} options\n * @returns {boolean} loading\n */\nexport const isCurrentPageLoading = createSelector(currentPageRecord, (currentPageRecord: PageRecord) => {\n  return Boolean(currentPageRecord?.loading);\n});\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.datepicker.min\",[\"kendo.calendar.min\",\"kendo.popup.min\"],e)}(function(){return function(e,t){function a(t){var a=t.parseFormats,n=t.format;F.normalize(t),a=e.isArray(a)?a:[a],a.length||a.push(\"yyyy-MM-dd\"),-1===e.inArray(n,a)&&a.splice(0,0,t.format),t.parseFormats=a}function n(e){e.preventDefault()}var i,o=window.kendo,r=o.ui,l=r.Widget,s=o.parseDate,d=o.keys,u=o.template,c=o._activeElement,p=\"<div />\",f=\"<span />\",m=\".kendoDatePicker\",_=\"click\"+m,v=\"open\",h=\"close\",g=\"change\",w=\"disabled\",k=\"readonly\",y=\"k-state-default\",b=\"k-state-focused\",x=\"k-state-selected\",D=\"k-state-disabled\",A=\"k-state-hover\",V=\"mouseenter\"+m+\" mouseleave\"+m,C=\"mousedown\"+m,T=\"id\",O=\"min\",I=\"max\",R=\"month\",E=\"aria-disabled\",W=\"aria-expanded\",N=\"aria-hidden\",F=o.calendar,P=F.isInRange,H=F.restrictValue,S=F.isEqualDatePart,q=e.extend,z=e.proxy,K=Date,M=function(t){var a,n=this,i=document.body,l=e(p).attr(N,\"true\").addClass(\"k-calendar-container\").appendTo(i);n.options=t=t||{},a=t.id,a&&(a+=\"_dateview\",l.attr(T,a),n._dateViewID=a),n.popup=new r.Popup(l,q(t.popup,t,{name:\"Popup\",isRtl:o.support.isRtl(t.anchor)})),n.div=l,n.value(t.value)};M.prototype={_calendar:function(){var t,a=this,i=a.calendar,l=a.options;i||(t=e(p).attr(T,o.guid()).appendTo(a.popup.element).on(C,n).on(_,\"td:has(.k-link)\",z(a._click,a)),a.calendar=i=new r.Calendar(t),a._setOptions(l),o.calendar.makeUnselectable(i.element),i.navigate(a._value||a._current,l.start),a.value(a._value))},_setOptions:function(e){this.calendar.setOptions({focusOnNav:!1,change:e.change,culture:e.culture,dates:e.dates,depth:e.depth,footer:e.footer,format:e.format,max:e.max,min:e.min,month:e.month,start:e.start,disableDates:e.disableDates})},setOptions:function(e){var t=this.options,a=e.disableDates;a&&(e.disableDates=F.disabled(a)),this.options=q(t,e,{change:t.change,close:t.close,open:t.open}),this.calendar&&this._setOptions(this.options)},destroy:function(){this.popup.destroy()},open:function(){var e=this;e._calendar(),e.popup.open()},close:function(){this.popup.close()},min:function(e){this._option(O,e)},max:function(e){this._option(I,e)},toggle:function(){var e=this;e[e.popup.visible()?h:v]()},move:function(e){var t=this,a=e.keyCode,n=t.calendar,i=e.ctrlKey&&a==d.DOWN||a==d.ENTER,o=!1;if(e.altKey)a==d.DOWN?(t.open(),e.preventDefault(),o=!0):a==d.UP&&(t.close(),e.preventDefault(),o=!0);else if(t.popup.visible()){if(a==d.ESC||i&&n._cell.hasClass(x))return t.close(),e.preventDefault(),!0;t._current=n._move(e),o=!0}return o},current:function(e){this._current=e,this.calendar._focus(e)},value:function(e){var t=this,a=t.calendar,n=t.options,i=n.disableDates;i&&i(e)&&(e=null),t._value=e,t._current=new K(+H(e,n.min,n.max)),a&&a.value(e)},_click:function(e){-1!==e.currentTarget.className.indexOf(x)&&this.close()},_option:function(e,t){var a=this,n=a.calendar;a.options[e]=t,n&&n[e](t)}},M.normalize=a,o.DateView=M,i=l.extend({init:function(t,n){var i,r,d=this;l.fn.init.call(d,t,n),t=d.element,n=d.options,n.disableDates=o.calendar.disabled(n.disableDates),n.min=s(t.attr(\"min\"))||s(n.min),n.max=s(t.attr(\"max\"))||s(n.max),a(n),d._initialOptions=q({},n),d._wrapper(),d.dateView=new M(q({},n,{id:t.attr(T),anchor:d.wrapper,change:function(){d._change(this.value()),d.close()},close:function(e){d.trigger(h)?e.preventDefault():(t.attr(W,!1),r.attr(N,!0))},open:function(e){var a,n=d.options;d.trigger(v)?e.preventDefault():(d.element.val()!==d._oldText&&(a=s(t.val(),n.parseFormats,n.culture),d.dateView[a?\"current\":\"value\"](a)),t.attr(W,!0),r.attr(N,!1),d._updateARIA(a))}})),r=d.dateView.div,d._icon();try{t[0].setAttribute(\"type\",\"text\")}catch(u){t[0].type=\"text\"}t.addClass(\"k-input\").attr({role:\"combobox\",\"aria-expanded\":!1,\"aria-owns\":d.dateView._dateViewID}),d._reset(),d._template(),i=t.is(\"[disabled]\")||e(d.element).parents(\"fieldset\").is(\":disabled\"),i?d.enable(!1):d.readonly(t.is(\"[readonly]\")),d._old=d._update(n.value||d.element.val()),d._oldText=t.val(),o.notify(d)},events:[v,h,g],options:{name:\"DatePicker\",value:null,footer:\"\",format:\"\",culture:\"\",parseFormats:[],min:new Date(1900,0,1),max:new Date(2099,11,31),start:R,depth:R,animation:{},month:{},dates:[],ARIATemplate:'Current focused date is #=kendo.toString(data.current, \"D\")#'},setOptions:function(e){var t=this,n=t._value;l.fn.setOptions.call(t,e),e=t.options,e.min=s(e.min),e.max=s(e.max),a(e),t.dateView.setOptions(e),n&&(t.element.val(o.toString(n,e.format,e.culture)),t._updateARIA(n))},_editable:function(e){var t=this,a=t._dateIcon.off(m),i=t.element.off(m),o=t._inputWrapper.off(m),r=e.readonly,l=e.disable;r||l?(o.addClass(l?D:y).removeClass(l?y:D),i.attr(w,l).attr(k,r).attr(E,l)):(o.addClass(y).removeClass(D).on(V,t._toggleHover),i.removeAttr(w).removeAttr(k).attr(E,!1).on(\"keydown\"+m,z(t._keydown,t)).on(\"focusout\"+m,z(t._blur,t)).on(\"focus\"+m,function(){t._inputWrapper.addClass(b)}),a.on(_,z(t._click,t)).on(C,n))},readonly:function(e){this._editable({readonly:e===t?!0:e,disable:!1})},enable:function(e){this._editable({readonly:!1,disable:!(e=e===t?!0:e)})},destroy:function(){var e=this;l.fn.destroy.call(e),e.dateView.destroy(),e.element.off(m),e._dateIcon.off(m),e._inputWrapper.off(m),e._form&&e._form.off(\"reset\",e._resetHandler)},open:function(){this.dateView.open()},close:function(){this.dateView.close()},min:function(e){return this._option(O,e)},max:function(e){return this._option(I,e)},value:function(e){var a=this;return e===t?a._value:(a._old=a._update(e),null===a._old&&a.element.val(\"\"),a._oldText=a.element.val(),t)},_toggleHover:function(t){e(t.currentTarget).toggleClass(A,\"mouseenter\"===t.type)},_blur:function(){var e=this,t=e.element.val();e.close(),t!==e._oldText&&e._change(t),e._inputWrapper.removeClass(b)},_click:function(){var e=this,t=e.element;e.dateView.toggle(),o.support.touch||t[0]===c()||t.focus()},_change:function(e){var t,a,n,i=this,r=i.element.val();e=i._update(e),t=!o.calendar.isEqualDate(i._old,e),a=t&&!i._typing,n=r!==i.element.val(),(a||n)&&i.element.trigger(g),t&&(i._old=e,i._oldText=i.element.val(),i.trigger(g)),i._typing=!1},_keydown:function(e){var t=this,a=t.dateView,n=t.element.val(),i=!1;a.popup.visible()||e.keyCode!=d.ENTER||n===t._oldText?(i=a.move(e),t._updateARIA(a._current),i||(t._typing=!0)):t._change(n)},_icon:function(){var t,a=this,n=a.element;t=n.next(\"span.k-select\"),t[0]||(t=e('<span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-calendar\"></span></span>').insertAfter(n)),a._dateIcon=t.attr({role:\"button\",\"aria-controls\":a.dateView._dateViewID})},_option:function(e,a){var n=this,i=n.options;return a===t?i[e]:(a=s(a,i.parseFormats,i.culture),a&&(i[e]=new K(+a),n.dateView[e](a)),t)},_update:function(e){var t,a=this,n=a.options,i=n.min,r=n.max,l=a._value,d=s(e,n.parseFormats,n.culture),u=null===d&&null===l||d instanceof Date&&l instanceof Date;return n.disableDates(d)&&(d=null,a._old||a.element.val()||(e=null)),+d===+l&&u?(t=o.toString(d,n.format,n.culture),t!==e&&a.element.val(null===d?e:t),d):(null!==d&&S(d,i)?d=H(d,i,r):P(d,i,r)||(d=null),a._value=d,a.dateView.value(d),a.element.val(o.toString(d||e,n.format,n.culture)),a._updateARIA(d),d)},_wrapper:function(){var t,a=this,n=a.element;t=n.parents(\".k-datepicker\"),t[0]||(t=n.wrap(f).parent().addClass(\"k-picker-wrap k-state-default\"),t=t.wrap(f).parent()),t[0].style.cssText=n[0].style.cssText,n.css({width:\"100%\",height:n[0].style.height}),a.wrapper=t.addClass(\"k-widget k-datepicker k-header\").addClass(n[0].className),a._inputWrapper=e(t[0].firstChild)},_reset:function(){var t=this,a=t.element,n=a.attr(\"form\"),i=n?e(\"#\"+n):a.closest(\"form\");i[0]&&(t._resetHandler=function(){t.value(a[0].defaultValue),t.max(t._initialOptions.max),t.min(t._initialOptions.min)},t._form=i.on(\"reset\",t._resetHandler))},_template:function(){this._ariaTemplate=u(this.options.ARIATemplate)},_updateARIA:function(e){var t,a=this,n=a.dateView.calendar;a.element.removeAttr(\"aria-activedescendant\"),n&&(t=n._cell,t.attr(\"aria-label\",a._ariaTemplate({current:e||n.current()})),a.element.attr(\"aria-activedescendant\",t.attr(\"id\")))}}),r.plugin(i)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,a){(a||t)()});\n//# sourceMappingURL=kendo.datepicker.min.js.map\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IOpeningEstimationData>): OpeningEstimationRecord => {\n  const record: IOpeningEstimationRecord = { ...(json as any) };\n\n  return new OpeningEstimationRecord(record);\n};\nexport interface IOpeningEstimationData {\n  id: number;\n  openable_type: string;\n  openable_id: number;\n  estimate_line_item_id: number;\n  created_at: Date;\n  updated_at: Date;\n  _destroy?: boolean;\n}\n\nexport interface IOpeningEstimationRecord {\n  id: number;\n  openable_type: string;\n  openable_id: number;\n  estimate_line_item_id: number;\n  created_at: Date;\n  updated_at: Date;\n  _destroy: Nullable<boolean>;\n}\n\nconst defaultOpeningEstimationProps: IOpeningEstimationRecord = {\n  id: 0,\n  openable_type: \"\",\n  openable_id: 0,\n  estimate_line_item_id: 0,\n  created_at: null,\n  updated_at: null,\n  _destroy: null,\n};\n\nexport class OpeningEstimationRecord\n  extends Record(defaultOpeningEstimationProps)\n  implements IOpeningEstimationRecord {}\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { Map, List, getIn, Set } from \"immutable\";\nimport { AccessRecord, emptyAccessValue, UserRecord } from \"app2/src/records/UserRecord\";\nimport { OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { byId as orgsById, currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { dirtyUserAccesses, byId as accessesById } from \"app2/src/selectors/access.selectors\";\nimport { model } from \"app2/src/reducers/user.reducer\";\nimport { user, currentUser } from \"./userCommon.selectors\";\n\n// legacy code expects these here\nexport { user, currentUser };\n\nexport const byId = (state: RootState) => state.getIn([model, \"usersById\"]);\n\n/**\n * Loads the users access_count from byID\n *\n * @param {RootState} state The RootState\n * @param {{userId: number}} options\n * @returns {number} accesses_count\n */\nexport const userAccessCount = (state: RootState, props: { userId: number }): number =>\n  getIn(state, [model, \"usersById\", props.userId, \"accesses_count\"], 1);\n\n/**\n * Loads the current logged in user id\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {number} number\n */\nexport const currentUserId = (state: RootState): number => state.getIn([\"users\", \"currentUser\", \"id\"]);\n\n/**\n * Loads the current logged in user org id\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {UserRecord} UserRecord\n */\nexport const currentUserOrgId = (state: RootState) => currentUser(state)?.get(\"org_id\");\n\n/**\n * Loads the current user's org\n *\n * The original attempt of using the current accessUid used a reselect memoized selector.  But, for some reason\n * that selector wasn't updating quickly enough when the accessUid changed.  In this selector, the memoized\n * version would show the old but using state.getIn directly showed the new value.  So, we're using state.getIn.\n *\n * Additionally, the users list of accesses isn't normalized and when the reloading of the user happens, the\n * list of accesses is reset to just 1.  So we're iterating over all byId to find the access by Uid.\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {OrgRecord} OrgRecord\n */\nexport const currentUserOrg = createSelector(\n  [accessesById, orgsById, (state) => ({ state })],\n  (allAccesses: Map<number, AccessRecord>, orgsById: Map<number, OrgRecord>, stateProps): OrgRecord => {\n    const { state } = stateProps;\n    const currentAccessUid = state.getIn([\"auth\", \"accessUid\"]);\n    const currentAccess = allAccesses.find((access) => access.get(\"uid\") === currentAccessUid);\n\n    if (!currentAccess) {\n      return null;\n    }\n\n    const currentUserOrg = orgsById.get(currentAccess.org_id);\n    return currentUserOrg;\n  },\n);\n\n/**\n * Loads the current user's access based on the current accessUid\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {AccessRecord | null} AccessRecord\n */\nexport const currentUserAccess = createSelector(\n  [accessesById, (state) => ({ state })],\n  (allAccesses: Map<number, AccessRecord>, stateProps): AccessRecord | null => {\n    const { state } = stateProps;\n    const currentAccessUid = state.getIn([\"auth\", \"accessUid\"]);\n    const currentAccess = allAccesses.find((access) => access.get(\"uid\") === currentAccessUid);\n\n    return currentAccess || null;\n  },\n);\n\n/**\n * Loads the current user's org lead sources\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {List<string>} List<string>\n */\nexport const leadSources = createSelector(\n  [currentUser, orgsById],\n  (currentUser: UserRecord, orgsById: Map<number, OrgRecord>): List<string> => {\n    if (!currentUser) {\n      return List();\n    }\n\n    const currentUserOrg = orgsById.get(currentUser.org_id);\n    if (!currentUserOrg) {\n      return List();\n    }\n    return currentUserOrg.get(\"lead_sources\");\n  },\n);\n\n/**\n * this selector should only be used for old code that expects\n * denormalized redux state. no new code (components) should be using this.\n * new code should instead access redux state in a normalized fashion\n * using selectors\n */\nexport const denormalizedReduxUser = createSelector(\n  [currentUser, orgsById],\n  (currentUser: UserRecord, orgsById: Map<number, OrgRecord>): UserRecord => {\n    if (!currentUser) {\n      return new UserRecord();\n    }\n\n    const currentUserOrg = orgsById.get(currentUser.org_id);\n    currentUser = currentUser.set(\"org\", currentUserOrg);\n    return currentUser;\n  },\n);\n\n/**\n * Loads the crm user check for the current user\n *\n * @param {RootState} state The RootState\n * @param {{ crmUserType: CrmUserType }} options\n * @returns {boolean} boolean\n */\nexport const crmUserCheck = (state: RootState, props: any): boolean =>\n  state.getIn([\"users\", \"crmUserCheckByOrgId\", currentOrgId(state), props.crmUserType], false);\n\n/**\n * Returns the access that is for the given user at the given org.\n * Will ALWAYS return an AccessRecord, it will be empty if no access is found.\n *\n * @param {RootState} state The RootState\n * @param {{userId: number, orgId: number}} options\n * @returns {AccessRecord} access\n */\nexport const usersAccessAtOrgId = createSelector(\n  [accessesById, user, (_, props: any) => ({ props })],\n  (byId, user, stateProps) => {\n    if (!user || user.accesses.size === 0) {\n      return emptyAccessValue;\n    }\n    const { props } = stateProps;\n\n    const id = user.accesses.find((accessId) => {\n      const access = byId.get(accessId, emptyAccessValue);\n\n      return access.org_id === props.orgId;\n    }, 0);\n\n    return byId.get(id, emptyAccessValue) || emptyAccessValue;\n  },\n);\n\nexport const userHydratedForSave = createSelector(\n  [user, dirtyUserAccesses],\n  (user: UserRecord, accesses: List<AccessRecord>) => {\n    return user.set(\"accesses\", accesses as any);\n  },\n);\n\n/**\n * Takes a list of ids and returns a list of the records matching the ids\n *\n * @param {RootState} state The RootState\n * @param {{userIds: List<number>}} options\n * @returns {List<UserRecord>}\n */\nexport const users = createSelector([byId, (state, props) => ({ state, props })], (byId, { props }) => {\n  return props.userIds.map((id) => byId.get(id));\n});\n","import * as Ajv from \"ajv\";\nimport * as schema from \"../schemas/event_base.json\";\n\nlet validateFunction;\n\nif (PRODUCTION) {\n  validateFunction = function () {};\n}\n\nif (!PRODUCTION) {\n  const ajv = new Ajv();\n  const validator = ajv.compile(schema);\n\n  validateFunction = function (data) {\n    if (!validator(data)) {\n      /* eslint-disable no-console */\n      console.info(validate.errors);\n      /* eslint-enable no-console */\n    }\n  };\n}\n\nexport const validate = validateFunction;\n","import { validate } from \"./Validator\";\nimport { isObject } from \"underscore\";\nimport ReactGA from \"react-ga4\";\nimport * as config from \"react-global-configuration\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport class Dispatch {\n  public static analytics: angulartics.IAnalyticsService = null;\n\n  public static dispatch(data: any): boolean {\n    if (Dispatch.analytics) {\n      /* eslint-disable prefer-const */\n      let { action, ...props } = data;\n      /* eslint-enable prefer-const */\n\n      if (!action) {\n        action = \"\";\n      }\n      validate(props);\n      Dispatch.analytics.eventTrack(action, props);\n      return true;\n    }\n    return false;\n  }\n}\n\nexport interface TrackingData {\n  category: string;\n  action: string;\n  job: number;\n  org: number;\n  user: number;\n  estimate?: number;\n  tool?: number;\n}\n\nif (config.get(\"GA_KEY\")) {\n  ReactGA.initialize(config.get(\"GA_KEY\"), {\n    testMode: process.env.NODE_ENV === \"test\" ? true : false,\n  });\n}\n\nconst localStorageKey = \"rsf-analytics-queue\";\nconst lastExceptionAction = {},\n  counters = {},\n  exceptionTimeout = 2000;\n\nexport const settings: any = {\n  userId: null,\n  orgId: null,\n  appVersion: null,\n};\n\nlet pagePathCache: string;\n\nexport const setUserProperties = (props: { userId: number; orgId: number; appVersion: string }) => {\n  settings.userId = props.userId;\n\n  if (props.orgId) {\n    settings.orgId = props.orgId;\n  }\n\n  if (props.appVersion) {\n    settings.appVersion = props.appVersion;\n  }\n};\n\nexport const dispatchException = (error: Error) => {\n  console.error(error);\n  // @ts-ignore\n  newrelic?.noticeError(error);\n  const properties: any = {};\n\n  if (window.location.search.indexOf(\"mobile\") >= 0) {\n    properties.mobile = true;\n  }\n\n  if (window.location.search.indexOf(\"embedded\") >= 0) {\n    properties.embedded = true;\n  }\n\n  const action = error.toString();\n  if (_.keys(lastExceptionAction).includes(action)) {\n    if (isNullOrUndefined(counters[action])) {\n      counters[action] = 0;\n    }\n    counters[action] += 1;\n    if (!isNullOrUndefined(lastExceptionAction[action])) {\n      clearTimeout(lastExceptionAction[action]);\n    }\n    lastExceptionAction[action] = setTimeout(() => {\n      delete lastExceptionAction[action];\n      dispatchToRsf({\n        hitType: \"event\",\n        category: \"Duplicate Exceptions\",\n        count: counters[action],\n        module: config.get(\"ENVIRONMENT\"),\n        action,\n        label: error.stack,\n        page: getPage_({}),\n        isException: true,\n        ...properties,\n      });\n      delete counters[action];\n    }, exceptionTimeout);\n    return;\n  }\n  lastExceptionAction[action] = setTimeout(() => {\n    delete lastExceptionAction[action];\n  }, exceptionTimeout);\n\n  dispatchToRsf({\n    hitType: \"event\",\n    category: \"Exceptions\",\n    module: config.get(\"ENVIRONMENT\"),\n    action,\n    label: error.stack,\n    page: getPage_({}),\n    isException: true,\n    ...properties,\n  });\n};\n\nconst getPage_ = (properties: any) => {\n  return properties.page || pagePathCache || window.location.hash.substring(1) || window.location.pathname;\n};\n\nexport const dispatchToRsf = async (obj: any) => {\n  if (settings.userId && isObject(obj)) {\n    obj.userId = settings.userId;\n  }\n\n  if (settings.orgId && isObject(obj)) {\n    obj.orgId = settings.orgId;\n  }\n\n  if (settings.appVersion && isObject(obj)) {\n    obj.appVersion = settings.appVersion;\n  }\n\n  obj.appModule = config.get(\"ENVIRONMENT\");\n\n  const actionUrl = `${config.get(\"RSF_ANALYTICS_URL\")}/api/v1/events`;\n  const code = config.get(\"RSF_ANALYTICS_KEY\") || \"test123 \";\n  const body = { code, event: { data: obj } };\n\n  try {\n    const response = await fetch(actionUrl, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(body),\n    });\n\n    if (!response.ok) {\n      // Don't save offline logs in development\n      if (code !== \"test123\") {\n        enqueueWithEventTime(obj);\n      }\n      return;\n    }\n\n    const chunk = dequeueAnalyticsChunk();\n    if (!chunk.length) {\n      return;\n    }\n\n    // Attempt to send any events generated without connectivity with\n    // the analytics server.\n    try {\n      const response2 = await fetch(actionUrl, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({ code, events: chunk }),\n      });\n\n      if (!response2.ok) {\n        enqueueAnalyticsData(chunk);\n      }\n    } catch (e) {\n      enqueueAnalyticsData(chunk);\n    }\n  } catch (e) {\n    // Don't save offline logs in development\n    if (code !== \"test123\") {\n      enqueueWithEventTime(obj);\n    }\n  }\n};\n\n/**\n * Call enqueueAnalyticsData with new Date()\n */\nconst enqueueWithEventTime = (obj: any | any[]) => {\n  // Set the event time locally to preserve accuracy when posting\n  // the events when connectivity has been restored.\n  const eventTime = new Date().toISOString();\n  enqueueAnalyticsData({ data: obj, inserted_at: eventTime });\n};\n\n/**\n * Adds element(s) to the RSF-Analytics queue and updates `localStorage`\n */\nconst enqueueAnalyticsData = (data: any | any[]) => {\n  // Queue the record to be POSTED later\n  const queue = getAnalyticsQueue();\n  if (Array.isArray(data)) {\n    queue.push(...data);\n  } else {\n    queue.push(data);\n  }\n  setAnalyticsQueue(queue);\n};\n\n/**\n * Dequeue a batch of records that matches `chunkSize` (or 5,000 when\n * omitted). The remaining items are returned to `localStorage`.\n */\nconst dequeueAnalyticsChunk = (chunkSize?: number) => {\n  if (chunkSize === undefined) {\n    chunkSize = 5_000;\n  }\n\n  const queue = getAnalyticsQueue();\n  const chunk = queue.splice(0, chunkSize);\n  setAnalyticsQueue(queue);\n\n  return chunk;\n};\n\n/**\n * Returns an array representing RSF-Analytics data that exists in\n * `localStorage`\n */\nconst getAnalyticsQueue = (): any[] => {\n  const queueJSON = localStorage.getItem(localStorageKey) || \"[]\";\n  return JSON.parse(queueJSON);\n};\n\n/**\n * Overwrites the RSF-Analytics queue in `localStorage` with the value in\n * `queue`\n */\nconst setAnalyticsQueue = (queue: any[]) => {\n  localStorage.setItem(localStorageKey, JSON.stringify(queue));\n};\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { EventResultRecord } from \"../records/EventResult\";\n\nexport interface IEventResultResponse {\n  results: EventResultRecord[];\n}\n\nexport const getEventResults = async (orgId: number): Promise<IEventResultResponse> => {\n  return await fetcher.get<IEventResultResponse>(`/api/v1/orgs/${orgId}/events/results`);\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState, RootActions } from \"./index\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { RootDispatchType } from \"../store\";\nimport { getEventResults } from \"app2/src/api/eventResult.service\";\nimport { IEventResultData } from \"../records/EventResult\";\n\nexport const RECEIVE_EVENT_RESULT = \"@eventResults/RECEIVE_EVENT_RESULT\";\nexport const RECEIVE_EVENT_RESULTS = \"@eventResults/RECEIVE_EVENT_RESULTS\";\n\nexport const Actions = {\n  receiveEventResult: (orgId: number, result: IEventResultData) =>\n    createAction(RECEIVE_EVENT_RESULT, { orgId, result }),\n  receiveEventResults: (orgId: number, results: IEventResultData[]) =>\n    createAction(RECEIVE_EVENT_RESULTS, { orgId, results }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, RootActions>;\n\nexport const AsyncActions = {\n  getEventResults: (orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const result = await getEventResults(orgId);\n        dispatch(Actions.receiveEventResults(orgId, result.results));\n      } catch (response) {\n        const err_msg = handleErrors(response)[0];\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, err_msg));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { List } from \"immutable\";\nimport {\n  IPresentationTemplateData,\n  PresentationTemplateRecord,\n  toJSON,\n  fromJSON,\n} from \"../records/PresentationTemplate\";\nimport { baseCleanProps } from \"app2/src/api/Api\";\n\ninterface IPresentationTemplateIndexResponse {\n  presentation_templates: IPresentationTemplateData[];\n}\n\ninterface IPresentationTemplateResponse {\n  presentation_template: IPresentationTemplateData;\n}\n\nclass PresentationTemplateService {\n  public orgUrl = \"api/v1/orgs/:id/presentation_templates\";\n\n  public loadAll(orgId: number): Promise<List<PresentationTemplateRecord>> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n\n    return fetcher\n      .get<IPresentationTemplateIndexResponse>(actionUrl)\n      .then((response) => List(response.presentation_templates.map((p) => fromJSON(p))));\n  }\n\n  public create(\n    orgId: number,\n    presentationTemplate: PresentationTemplateRecord,\n    kind: \"org\" | \"job\" = \"org\",\n  ): Promise<PresentationTemplateRecord> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n\n    const data: Partial<IPresentationTemplateData> = this.cleanProps(toJSON(presentationTemplate));\n\n    return fetcher.post<IPresentationTemplateResponse>(actionUrl, { presentation_template: data }).then(\n      (response) => fromJSON(response.presentation_template),\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public update(presentationTemplate: PresentationTemplateRecord): Promise<PresentationTemplateRecord> {\n    const actionUrl = fetcher.joinUrls(\n      this.orgUrl.replace(\":id\", presentationTemplate.org_id.toString()),\n      presentationTemplate.id.toString(),\n    );\n\n    const data: Partial<IPresentationTemplateData> = this.cleanProps(toJSON(presentationTemplate));\n\n    return fetcher.patch<IPresentationTemplateResponse>(actionUrl, { presentation_template: data }).then(\n      (response) => fromJSON(response.presentation_template),\n      (response) => {\n        if (response.status === 500) {\n          return Promise.reject([\"Internal Server Error\"]);\n        }\n\n        if (_.isArray(response.data.errors)) {\n          return Promise.reject(response.data.errors);\n        }\n\n        return Promise.reject([\"Unknown Error\"]);\n      },\n    );\n  }\n\n  public delete(presentationTemplate: PresentationTemplateRecord): Promise<boolean> {\n    const actionUrl = fetcher.joinUrls(\n      this.orgUrl.replace(\":id\", presentationTemplate.org_id.toString()),\n      presentationTemplate.id.toString(),\n    );\n\n    return fetcher.delete(actionUrl).then(\n      (_response) => true,\n      (response) => {\n        if (response.status === 500) {\n          return Promise.reject([\"Internal Server Error\"]);\n        }\n\n        if (_.isArray(response.data.errors)) {\n          return Promise.reject(response.data.errors);\n        }\n\n        return Promise.reject([\"Unknown Error\"]);\n      },\n    );\n  }\n\n  public cleanProps(presentationTemplate: Partial<IPresentationTemplateData>): Partial<IPresentationTemplateData> {\n    presentationTemplate = baseCleanProps(JSON.parse(JSON.stringify(presentationTemplate)));\n\n    return presentationTemplate;\n  }\n}\n\nexport const presentationTemplateService = new PresentationTemplateService();\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { List } from \"immutable\";\nimport { PresentationTemplateRecord, fromJSON } from \"app2/src/records/PresentationTemplate\";\nimport { SlideRecord } from \"app2/src/records/Slide\";\nimport { presentationTemplateService } from \"app2/src/api/presentationTemplate.service\";\nimport { RootDispatchType } from \"../store\";\n\n// ORG\nexport const FETCH_PRESENTATION_TEMPLATES = \"@presentationTemplates/FETCH_PRESENTATION_TEMPLATES\";\nexport const FETCH_PRESENTATION_TEMPLATE = \"@presentationTemplates/FETCH_PRESENTATION_TEMPLATE\";\nexport const RECEIVE_PRESENTATION_TEMPLATES = \"@presentationTemplates/RECEIVE_PRESENTATION_TEMPLATES\";\nexport const RECEIVE_PRESENTATION_TEMPLATES_ERROR = \"@presentationTemplates/RECEIVE_PRESENTATION_TEMPLATES_ERROR\";\nexport const RECEIVE_PRESENTATION_TEMPLATE = \"@presentationTemplates/RECEIVE_PRESENTATION_TEMPLATE\";\nexport const RECEIVE_PRESENTATION_TEMPLATE_ERROR = \"@presentationTemplates/RECEIVE_PRESENTATION_TEMPLATE_ERROR\";\nexport const CREATE_PRESENTATION_TEMPLATE = \"@presentationTemplates/CREATE_PRESENTATION_TEMPLATE\";\nexport const SAVE_PRESENTATION_TEMPLATE = \"@presentationTemplates/SAVE_PRESENTATION_TEMPLATE\";\nexport const REMOVE_PRESENTATION_TEMPLATE = \"@presentationTemplates/REMOVE_PRESENTATION_TEMPLATE\";\n\nexport const Actions = {\n  fetchPresentationTemplates: (orgId: number) => createAction(FETCH_PRESENTATION_TEMPLATES, { orgId }),\n  fetchPresentationTemplate: (id: number) => createAction(FETCH_PRESENTATION_TEMPLATE, { id }),\n  receivePresentationTemplates: (orgId: number, presentationTemplates: List<PresentationTemplateRecord>) =>\n    createAction(RECEIVE_PRESENTATION_TEMPLATES, { orgId, presentationTemplates }),\n  receivePresentationTemplate: (orgId: number, presentationTemplate: PresentationTemplateRecord) =>\n    createAction(RECEIVE_PRESENTATION_TEMPLATE, { orgId, presentationTemplate }),\n  createPresentationTemplate: (orgId: number, presentationTemplate: PresentationTemplateRecord) =>\n    createAction(CREATE_PRESENTATION_TEMPLATE, { orgId, presentationTemplate }),\n  receivePresentationTemplateError: (presentationTemplateId: number, errors: string[]) =>\n    createAction(RECEIVE_PRESENTATION_TEMPLATE_ERROR, { presentationTemplateId, errors }),\n  receivePresentationTemplatesError: (orgId, errors: string[]) =>\n    createAction(RECEIVE_PRESENTATION_TEMPLATES_ERROR, { orgId, errors }),\n  removePresentationTemplate: (presentationTemplate: PresentationTemplateRecord) =>\n    createAction(REMOVE_PRESENTATION_TEMPLATE, { presentationTemplate }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  addPresentationTemplate: (\n    orgId: number,\n    presentationTemplate: PresentationTemplateRecord,\n  ): ThunkResult<Promise<PresentationTemplateRecord>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.createPresentationTemplate(orgId, presentationTemplate));\n      return presentationTemplateService.create(orgId, presentationTemplate, \"org\").then(\n        (result) => {\n          dispatch(Actions.receivePresentationTemplate(orgId, result));\n\n          return result;\n        },\n        (errors) => {\n          dispatch(Actions.receivePresentationTemplateError(presentationTemplate.id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  updatePresentationTemplate: (\n    presentationTemplate: PresentationTemplateRecord,\n  ): ThunkResult<Promise<PresentationTemplateRecord>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPresentationTemplate(presentationTemplate.id));\n      return presentationTemplateService.update(presentationTemplate).then(\n        (presentationTemplate: PresentationTemplateRecord) => {\n          dispatch(Actions.receivePresentationTemplate(presentationTemplate.org_id, presentationTemplate));\n          return presentationTemplate;\n        },\n        (errors) => {\n          dispatch(Actions.receivePresentationTemplateError(presentationTemplate.id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  listPresentationTemplates: (orgId: number): ThunkResult<any> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPresentationTemplates(orgId));\n\n      return presentationTemplateService.loadAll(orgId).then(\n        (presentationTemplates: List<PresentationTemplateRecord>) => {\n          dispatch(Actions.receivePresentationTemplates(orgId, presentationTemplates));\n          return presentationTemplates;\n        },\n        (errors) => {\n          dispatch(Actions.receivePresentationTemplatesError(orgId, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  deletePresentation: (presentationTemplate: PresentationTemplateRecord): ThunkResult<Promise<boolean>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPresentationTemplate(presentationTemplate.id));\n      return presentationTemplateService.delete(presentationTemplate).then(\n        () => {\n          dispatch(Actions.removePresentationTemplate(presentationTemplate));\n          return true;\n        },\n        (errors) => {\n          dispatch(Actions.receivePresentationTemplateError(presentationTemplate.id, errors));\n          return false;\n        },\n      );\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { Record, List } from \"immutable\";\n\nexport function fromJSON(json: Partial<IPaymentAuthorizationData>) {\n  return new PaymentAuthorizationRecord(json);\n}\n\nexport const paymentProviders = List([\"occ_pay\", \"pay_simple\", \"card_connect\"]);\n\nexport interface IPaymentAuthorizationData {\n  orgId: number;\n  pay_simple: boolean;\n  card_connect: boolean;\n  occ_pay: boolean;\n}\n\nexport interface IPaymentAuthorizationRecord extends IPaymentAuthorizationData {\n  loading: boolean;\n  errors: List<string>;\n}\n\nconst defaultPaymentAuthProps: IPaymentAuthorizationRecord = {\n  orgId: -1,\n  pay_simple: false,\n  card_connect: false,\n  occ_pay: false,\n\n  loading: false,\n  errors: List<string>(),\n};\n\nexport class PaymentAuthorizationRecord\n  extends Record(defaultPaymentAuthProps)\n  implements IPaymentAuthorizationRecord {}\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.mobile.view.min\",[\"kendo.core.min\",\"kendo.fx.min\",\"kendo.mobile.scroller.min\",\"kendo.view.min\"],e)}(function(){return function(e,t){function i(e){var t,i,o=e.find(x(\"popover\")),n=s.roles;for(t=0,i=o.length;i>t;t++)r.initWidget(o[t],{},n)}function o(e){r.triggeredByInput(e)||e.preventDefault()}function n(t){t.each(function(){r.initWidget(e(this),{},s.roles)})}var r=window.kendo,a=r.mobile,s=a.ui,l=r.attr,h=s.Widget,d=r.ViewClone,c=\"init\",u='<div style=\"height: 100%; width: 100%; position: absolute; top: 0; left: 0; z-index: 20000; display: none\" />',p=\"beforeShow\",f=\"show\",g=\"afterShow\",m=\"beforeHide\",v=\"transitionEnd\",w=\"transitionStart\",y=\"hide\",_=\"destroy\",b=r.attrValue,x=r.roleSelector,S=r.directiveSelector,k=r.compileMobileDirective,V=h.extend({init:function(t,i){h.fn.init.call(this,t,i),this.params={},e.extend(this,i),this.transition=this.transition||this.defaultTransition,this._id(),this.options.$angular?this._overlay():(this._layout(),this._overlay(),this._scroller(),this._model())},events:[c,p,f,g,m,y,_,w,v],options:{name:\"View\",title:\"\",layout:null,getLayout:e.noop,reload:!1,transition:\"\",defaultTransition:\"\",useNativeScrolling:!1,stretch:!1,zoom:!1,model:null,modelScope:window,scroller:{},initWidgets:!0},enable:function(e){t===e&&(e=!0),e?this.overlay.hide():this.overlay.show()},destroy:function(){this.layout&&this.layout.detach(this),this.trigger(_),h.fn.destroy.call(this),this.scroller&&this.scroller.destroy(),this.options.$angular&&this.element.scope().$destroy(),r.destroy(this.element)},purge:function(){this.destroy(),this.element.remove()},triggerBeforeShow:function(){return!this.trigger(p,{view:this})},triggerBeforeHide:function(){return!this.trigger(m,{view:this})},showStart:function(){var e=this.element;e.css(\"display\",\"\"),this.inited?this._invokeNgController():(this.inited=!0,this.trigger(c,{view:this})),this.layout&&this.layout.attach(this),this._padIfNativeScrolling(),this.trigger(f,{view:this}),r.resize(e)},showEnd:function(){this.trigger(g,{view:this}),this._padIfNativeScrolling()},hideEnd:function(){var e=this;e.element.hide(),e.trigger(y,{view:e}),e.layout&&e.layout.trigger(y,{view:e,layout:e.layout})},beforeTransition:function(e){this.trigger(w,{type:e})},afterTransition:function(e){this.trigger(v,{type:e})},_padIfNativeScrolling:function(){if(a.appLevelNativeScrolling()){var e=r.support.mobileOS&&r.support.mobileOS.android,t=a.application.skin()||\"\",i=a.application.os.android||t.indexOf(\"android\")>-1,o=\"flat\"===t||t.indexOf(\"material\")>-1,n=!e&&!i||o?\"header\":\"footer\",s=!e&&!i||o?\"footer\":\"header\";this.content.css({paddingTop:this[n].height(),paddingBottom:this[s].height()})}},contentElement:function(){var e=this;return e.options.stretch?e.content:e.scrollerContent},clone:function(){return new d(this)},_scroller:function(){var t=this;a.appLevelNativeScrolling()||(t.options.stretch?t.content.addClass(\"km-stretched-view\"):(t.content.kendoMobileScroller(e.extend(t.options.scroller,{zoom:t.options.zoom,useNative:t.options.useNativeScrolling})),t.scroller=t.content.data(\"kendoMobileScroller\"),t.scrollerContent=t.scroller.scrollElement),r.support.kineticScrollNeeded&&(e(t.element).on(\"touchmove\",\".km-header\",o),t.options.useNativeScrolling||t.options.stretch||e(t.element).on(\"touchmove\",\".km-content\",o)))},_model:function(){var e=this,t=e.element,o=e.options.model;\"string\"==typeof o&&(o=r.getter(o)(e.options.modelScope)),e.model=o,i(t),e.element.css(\"display\",\"\"),e.options.initWidgets&&(o?r.bind(t,o,s,r.ui,r.dataviz.ui):a.init(t.children())),e.element.css(\"display\",\"none\")},_id:function(){var e=this.element,t=e.attr(\"id\")||\"\";this.id=b(e,\"url\")||\"#\"+t,\"#\"==this.id&&(this.id=r.guid(),e.attr(\"id\",this.id))},_layout:function(){var e=x(\"content\"),t=this.element;t.addClass(\"km-view\"),this.header=t.children(x(\"header\")).addClass(\"km-header\"),this.footer=t.children(x(\"footer\")).addClass(\"km-footer\"),t.children(e)[0]||t.wrapInner(\"<div \"+l(\"role\")+'=\"content\"></div>'),this.content=t.children(x(\"content\")).addClass(\"km-content\"),this.element.prepend(this.header).append(this.footer),this.layout=this.options.getLayout(this.layout),this.layout&&this.layout.setup(this)},_overlay:function(){this.overlay=e(u).appendTo(this.element)},_invokeNgController:function(){var t,i,o;this.options.$angular&&(t=this.element.controller(),i=this.options.$angular[0],t&&(o=e.proxy(this,\"_callController\",t,i),/^\\$(digest|apply)$/.test(i.$$phase)?o():i.$apply(o)))},_callController:function(e,t){this.element.injector().invoke(e.constructor,e,{$scope:t})}}),C=h.extend({init:function(e,t){h.fn.init.call(this,e,t),e=this.element,this.header=e.children(this._locate(\"header\")).addClass(\"km-header\"),this.footer=e.children(this._locate(\"footer\")).addClass(\"km-footer\"),this.elements=this.header.add(this.footer),i(e),this.options.$angular||r.mobile.init(this.element.children()),this.element.detach(),this.trigger(c,{layout:this})},_locate:function(e){return this.options.$angular?S(e):x(e)},options:{name:\"Layout\",id:null,platform:null},events:[c,f,y],setup:function(e){e.header[0]||(e.header=this.header),e.footer[0]||(e.footer=this.footer)},detach:function(e){var t=this;e.header===t.header&&t.header[0]&&e.element.prepend(t.header.detach()[0].cloneNode(!0)),e.footer===t.footer&&t.footer.length&&e.element.append(t.footer.detach()[0].cloneNode(!0))},attach:function(e){var t=this,i=t.currentView;i&&t.detach(i),e.header===t.header&&(t.header.detach(),e.element.children(x(\"header\")).remove(),e.element.prepend(t.header)),e.footer===t.footer&&(t.footer.detach(),e.element.children(x(\"footer\")).remove(),e.element.append(t.footer)),t.trigger(f,{layout:t,view:e}),t.currentView=e}}),$=r.Observable,L=/<body[^>]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i,N=\"loadStart\",T=\"loadComplete\",E=\"showStart\",I=\"sameViewRequested\",O=\"viewShow\",R=\"viewTypeDetermined\",W=\"after\",z=$.extend({init:function(t){var i,o,a,s,l=this;if($.fn.init.call(l),e.extend(l,t),l.sandbox=e(\"<div />\"),a=l.container,i=l._hideViews(a),l.rootView=i.first(),!l.rootView[0]&&t.rootNeeded)throw o=a[0]==r.mobile.application.element[0]?'Your kendo mobile application element does not contain any direct child elements with data-role=\"view\" attribute set. Make sure that you instantiate the mobile application using the correct container.':'Your pane element does not contain any direct child elements with data-role=\"view\" attribute set.',Error(o);l.layouts={},l.viewContainer=new r.ViewContainer(l.container),l.viewContainer.bind(\"accepted\",function(e){e.view.params=l.params}),l.viewContainer.bind(\"complete\",function(e){l.trigger(O,{view:e.view})}),l.viewContainer.bind(W,function(){l.trigger(W)}),this.getLayoutProxy=e.proxy(this,\"_getLayout\"),l._setupLayouts(a),s=a.children(l._locate(\"modalview drawer\")),l.$angular?(l.$angular[0].viewOptions={defaultTransition:l.transition,loader:l.loader,container:l.container,getLayout:l.getLayoutProxy},s.each(function(i,o){k(e(o),t.$angular[0])})):n(s),this.bind(this.events,t)},events:[E,W,O,N,T,I,R],destroy:function(){r.destroy(this.container);for(var e in this.layouts)this.layouts[e].destroy()},view:function(){return this.viewContainer.view},showView:function(e,t,i){if(e=e.replace(RegExp(\"^\"+this.remoteViewURLPrefix),\"\"),\"\"===e&&this.remoteViewURLPrefix&&(e=\"/\"),e.replace(/^#/,\"\")===this.url)return this.trigger(I),!1;this.trigger(E);var o=this,n=function(i){return o.viewContainer.show(i,t,e)},a=o._findViewElement(e),s=r.widgetInstance(a);return o.url=e.replace(/^#/,\"\"),o.params=i,s&&s.reload&&(s.purge(),a=[]),this.trigger(R,{remote:0===a.length,url:e}),a[0]?(s||(s=o._createView(a)),n(s)):(this.serverNavigation?location.href=e:o._loadView(e,n),!0)},append:function(e,t){var i,o,r,a=this.sandbox,s=(t||\"\").split(\"?\")[0],h=this.container;return L.test(e)&&(e=RegExp.$1),a[0].innerHTML=e,h.append(a.children(\"script, style\")),i=this._hideViews(a),r=i.first(),r.length||(i=r=a.wrapInner(\"<div data-role=view />\").children()),s&&r.hide().attr(l(\"url\"),s),this._setupLayouts(a),o=a.children(this._locate(\"modalview drawer\")),h.append(a.children(this._locate(\"layout modalview drawer\")).add(i)),n(o),this._createView(r)},_locate:function(e){return this.$angular?S(e):x(e)},_findViewElement:function(e){var t,i=e.split(\"?\")[0];return i?(t=this.container.children(\"[\"+l(\"url\")+\"='\"+i+\"']\"),t[0]||-1!==i.indexOf(\"/\")||(t=this.container.children(\"#\"===i.charAt(0)?i:\"#\"+i)),t):this.rootView},_createView:function(e){return this.$angular?k(e,this.$angular[0]):r.initWidget(e,{defaultTransition:this.transition,loader:this.loader,container:this.container,getLayout:this.getLayoutProxy,modelScope:this.modelScope,reload:b(e,\"reload\")},s.roles)},_getLayout:function(e){return\"\"===e?null:e?this.layouts[e]:this.layouts[this.layout]},_loadView:function(t,i){this._xhr&&this._xhr.abort(),this.trigger(N),this._xhr=e.get(r.absoluteURL(t,this.remoteViewURLPrefix),\"html\").always(e.proxy(this,\"_xhrComplete\",i,t))},_xhrComplete:function(e,t,i){var o=!0;if(\"object\"==typeof i&&0===i.status){if(!(i.responseText&&i.responseText.length>0))return;o=!0,i=i.responseText}this.trigger(T),o&&e(this.append(i,t))},_hideViews:function(e){return e.children(this._locate(\"view splitview\")).hide()},_setupLayouts:function(t){var i,o=this;t.children(o._locate(\"layout\")).each(function(){i=o.$angular?k(e(this),o.$angular[0]):r.initWidget(e(this),{},s.roles);var t=i.options.platform;t&&t!==a.application.os.name?i.destroy():o.layouts[i.options.id]=i})}});r.mobile.ViewEngine=z,s.plugin(V),s.plugin(C)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,i){(i||t)()});\n//# sourceMappingURL=kendo.mobile.view.min.js.map\n","import { baseCleanProps } from \"app2/src/api/Api\";\nimport { fetcher } from \"../helpers/Fetcher\";\nimport { IDiscountData, DiscountRecord } from \"../records/DiscountRecord\";\n\ninterface IDiscountIndexResponse {\n  discounts: IDiscountData[];\n}\n\ninterface IDiscountResponse {\n  discount: IDiscountData;\n}\n\nclass DiscountService {\n  public orgUrl = \"api/v1/orgs/:id/discounts\";\n  public url = \"api/v1/discounts\";\n\n  public loadByOrg(orgId: number): Promise<IDiscountData[]> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n\n    return fetcher.get<IDiscountIndexResponse>(actionUrl).then((response) => response.discounts);\n  }\n\n  public create(orgId: number, discount: Partial<IDiscountData>): Promise<IDiscountData> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n\n    discount = this.cleanProps(discount);\n\n    return fetcher.post<IDiscountResponse>(actionUrl, { discount: discount }).then(\n      (response) => response.discount,\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public update(discount: Partial<IDiscountData>): Promise<IDiscountData> {\n    const actionUrl = fetcher.joinUrls(this.url, discount.id.toString());\n\n    discount = this.cleanProps(discount);\n\n    return fetcher.patch<IDiscountResponse>(actionUrl, { discount: discount }).then(\n      (response) => response.discount,\n      (response) => {\n        if (response.status === 500) {\n          return Promise.reject([\"Internal Server Error\"]);\n        }\n\n        if (_.isArray(response.data.errors)) {\n          return Promise.reject(response.data.errors);\n        }\n\n        return Promise.reject([\"Unknown Error\"]);\n      },\n    );\n  }\n\n  public archive(discount: DiscountRecord): Promise<DiscountRecord> {\n    const actionUrl = fetcher.joinUrls(this.url, discount.id.toString());\n\n    return fetcher.delete<any>(actionUrl).then(() => {\n      return discount.set(\"archived\", true);\n    });\n  }\n\n  private cleanProps(discount: Partial<IDiscountData>): Partial<IDiscountData> {\n    discount = baseCleanProps(JSON.parse(JSON.stringify(discount)));\n\n    return discount;\n  }\n}\n\nexport const discountService = new DiscountService();\n","import { DiscountRecord, IDiscountData } from \"app2/src/records/DiscountRecord\";\nimport { discountService } from \"app2/src/api/discount.service\";\nimport { RootDispatchType } from \"../store\";\nimport { ThunkResult } from \"./index\";\nimport { ActionsUnion, createAction } from \"./Utils\";\n\nexport const FETCH_ORG_DISCOUNTS = \"@discounts/FETCH_ORG_DISCOUNTS\";\nexport const FETCH_DISCOUNT = \"@discounts/FETCH_DISCOUNT\";\nexport const RECEIVE_ORG_DISCOUNTS = \"@discounts/RECEIVE_ORG_DISCOUNTS\";\nexport const RECEIVE_DISCOUNT = \"@discounts/RECEIVE_DISCOUNT\";\nexport const REMOVE_ORG_DISCOUNT = \"@discounts/REMOVE_ORG_DISCOUNT\";\nexport const REMOVE_DISCOUNT = \"@discounts/REMOVE_DISCOUNT\";\nexport const RECEIVE_ORG_ERRORS = \"@discounts/RECEIVE_ORG_ERRORS\";\nexport const RECEIVE_DISCOUNT_ERROR = \"@discounts/RECEIVE_DISCOUNT_ERROR\";\n\nexport const Actions = {\n  fetchDiscount: (orgId: number, discountId: number) =>\n    createAction(FETCH_DISCOUNT, { orgId: orgId, discountId: discountId }),\n  receiveDiscountError: (orgId, discountId: number, errors: string[]) =>\n    createAction(RECEIVE_DISCOUNT_ERROR, { orgId: orgId, discountId: discountId, errors: errors }),\n  receiveDiscount: (discount: Partial<IDiscountData>) => createAction(RECEIVE_DISCOUNT, discount),\n  fetchDiscounts: (orgId: number) => createAction(FETCH_ORG_DISCOUNTS, orgId),\n  receiveErrors: (orgId, errors: string[]) => createAction(RECEIVE_ORG_ERRORS, { orgId: orgId, errors: errors }),\n  receiveDiscounts: (orgId: number, discounts: Partial<IDiscountData>[]) =>\n    createAction(RECEIVE_ORG_DISCOUNTS, { orgId: orgId, discounts: discounts }),\n  removeOrgDiscount: (orgId: number, discountId: number) =>\n    createAction(REMOVE_ORG_DISCOUNT, { orgId: orgId, discountId: discountId }),\n  removeDiscount: (discountId: number) => createAction(REMOVE_DISCOUNT, discountId),\n};\n\nexport const AsyncActions = {\n  addDiscount: (orgId: number, discount: Partial<IDiscountData>): ThunkResult<Promise<IDiscountData>> => {\n    return (dispatch: RootDispatchType) => {\n      const id = discount.id;\n      dispatch(Actions.fetchDiscount(orgId, discount.id));\n\n      return discountService.create(orgId, discount).then(\n        (result) => {\n          dispatch(Actions.removeOrgDiscount(orgId, id));\n          dispatch(Actions.removeDiscount(id));\n          dispatch(Actions.receiveDiscount(result));\n\n          return result;\n        },\n        (errors) => {\n          dispatch(Actions.receiveDiscountError(orgId, id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  updateDiscount: (discount: Partial<IDiscountData>): ThunkResult<Promise<IDiscountData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchDiscount(discount.org_id, discount.id));\n\n      return discountService.update(discount).then(\n        (discount) => {\n          dispatch(Actions.receiveDiscount(discount));\n          return discount;\n        },\n        (errors) => {\n          dispatch(Actions.receiveDiscountError(discount.org_id, discount.id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  archiveDiscount: (discount: DiscountRecord): ThunkResult<Promise<DiscountRecord>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchDiscount(discount.org_id, discount.id));\n\n      return discountService.archive(discount).then(\n        (archived) => {\n          dispatch(Actions.removeOrgDiscount(archived.org_id, archived.id));\n          dispatch(Actions.removeDiscount(archived.id));\n          return archived;\n        },\n        (errors) => {\n          dispatch(Actions.receiveDiscountError(discount.org_id, discount.id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  listDiscounts: (orgId: number): ThunkResult<any> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchDiscounts(orgId));\n\n      return discountService.loadByOrg(orgId).then(\n        (discounts) => {\n          dispatch(Actions.receiveDiscounts(orgId, discounts));\n          return discounts;\n        },\n        (errors) => {\n          dispatch(Actions.receiveErrors(orgId, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { INoteData, NoteRecord } from \"../records/Note\";\nimport { baseCleanProps } from \"./Api\";\nimport { QueryParamsRecord } from \"../records/Page\";\nimport { IMetaPaginationData } from \"../records/MetaPagination\";\n\nexport interface INoteIndexResponse {\n  notes: INoteData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nexport interface INoteResponse {\n  note: INoteData;\n}\n\nexport const updateOrCreate = (note: NoteRecord): Promise<INoteResponse> => {\n  if (note.id <= 0) {\n    return create(note);\n  }\n  return update(note);\n};\n\nexport const load = async (id: number, queryParams: QueryParamsRecord): Promise<INoteIndexResponse> => {\n  return await fetcher.get<INoteIndexResponse>(`api/v1/jobs/${id}/notes`, queryParams.toJS());\n};\n\nexport const create = async (note: NoteRecord): Promise<INoteResponse> => {\n  return await fetcher.post<INoteResponse>(`api/v1/jobs/${note.noteable_id}/notes`, { note: cleanProps(note) });\n};\n\nexport const update = async (note: NoteRecord): Promise<INoteResponse> => {\n  return await fetcher.patch<INoteResponse>(`api/v1/jobs/${note.noteable_id}/notes/${note.id}`, {\n    note: cleanProps(note),\n  });\n};\n\nexport const destroy = async (note: NoteRecord): Promise<INoteResponse> => {\n  return await fetcher.delete<INoteResponse>(`api/v1/jobs/${note.noteable_id}/notes/${note.id}`);\n};\n\nexport const cleanProps = (note: NoteRecord): INoteData => {\n  let noteParams = note.toJS();\n  noteParams = baseCleanProps(noteParams);\n  return noteParams as any as INoteData;\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { INoteData, NoteRecord } from \"app2/src/records/Note\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { load, updateOrCreate, destroy } from \"../api/note.service\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { QueryParamsRecord, IPageData } from \"../records/Page\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { List } from \"immutable\";\nimport { UserRecord } from \"../records/UserRecord\";\n\nexport const RECEIVE_NOTE = \"@notes/RECEIVE_NOTE\";\nexport const RECEIVE_NOTES = \"@notes/RECEIVE_NOTES\";\nexport const REMOVE_NOTE = \"@notes/REMOVE_NOTE\";\nexport const RESET_NOTE = \"@notes/RESET_NOTE\";\nexport const EDIT_NOTE = \"@notes/EDIT_NOTE\";\nexport const SET_UP_NEW_NOTE = \"@notes/SET_UP_NEW_NOTE\";\n\nexport const Actions = {\n  receiveNote: (note: Partial<INoteData>) => createAction(RECEIVE_NOTE, { note }),\n  receiveNotes: (notes: Partial<INoteData>[]) => createAction(RECEIVE_NOTES, { notes }),\n  removeNote: (noteId: number) => createAction(REMOVE_NOTE, { noteId }),\n  resetNote: (noteId: number) => createAction(RESET_NOTE, { noteId }),\n  editNote: (noteId: number, note: string) => createAction(EDIT_NOTE, { noteId, note }),\n  setUpNewNote: (jobId: number, user: UserRecord) => createAction(SET_UP_NEW_NOTE, { jobId, user }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  loadNotes: (jobId: number, queryParams: QueryParamsRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(paginationActions.Actions.fetchPage(\"note\", queryParams));\n      try {\n        const response = await load(jobId, queryParams);\n        dispatch(Actions.receiveNotes(response.notes));\n        const pageData: Partial<IPageData> = {\n          ids: List(response.notes.map((note: INoteData) => note.id)),\n          pagination: response.meta.pagination,\n        };\n        dispatch(paginationActions.Actions.receivePage(\"note\", queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response, dispatch);\n        dispatch(paginationActions.Actions.receivePageError(\"note\", queryParams, errors));\n      }\n    };\n  },\n  updateOrCreateNote: (note: NoteRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const response = await updateOrCreate(note);\n        if (note.id > 0) {\n          dispatch(paginationActions.Actions.removeId(note.id, \"note\"));\n        }\n        dispatch(Actions.receiveNote(response.note));\n        dispatch(paginationActions.Actions.prependId(response.note.id, \"note\"));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved note successfully!\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  destroyNote: (note: NoteRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        await destroy(note);\n        dispatch(Actions.removeNote(note.id));\n        await dispatch(AsyncActions.checkPageEmpty(note.noteable_id));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Note deleted successfully!\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  checkPageEmpty: (jobId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      return paginationActions.checkPageEmpty(getState(), \"note\", (newQueryParams) =>\n        dispatch(AsyncActions.loadNotes(jobId, newQueryParams)),\n      );\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { DiscountRecord } from \"app2/src/records/DiscountRecord\";\nimport { Map, List } from \"immutable\";\n\nconst discountsById = (state: RootState) => state.getIn([\"discounts\", \"discountsById\"]);\nconst orgDiscountIds = (state: RootState, props: any) =>\n  state.getIn([\"discounts\", \"discountsByOrgId\", parseInt(props.orgId), \"discounts\"]);\n\nexport const getOrgDiscounts = createSelector(\n  [discountsById, orgDiscountIds],\n  (byId: Map<number, DiscountRecord>, discounts: List<number>) => {\n    if (!discounts) {\n      return List();\n    }\n\n    const interim = discounts.map((id) => byId.get(id)).sortBy((d) => d.sort_order);\n    return interim;\n  },\n);\n\nexport const discounts = (state: RootState, props: any) => props.discountIds.map((id) => discountsById(state).get(id));\n","import { RootState } from \"app2/src/reducers\";\n\n/**\n * Returns the navDisplay state\n *\n * @param {RootState} state\n * @returns boolean\n */\nexport const navDisplay = (state: RootState, props?: any) => state.getIn([\"components\", \"common\", \"navDisplay\"]);\n\n/**\n * Returns the sendInviteModal state\n *\n * @param {RootState} state\n * @returns boolean\n */\nexport const sendInviteModal = (state: RootState, props?: any) =>\n  state.getIn([\"components\", \"common\", \"sendInvite\", \"modal\"]);\n\n/**\n * Returns the sendInviteType state\n *\n * @param {RootState} state\n * @returns string as \"screenshare\" || \"image_uploader\"\n */\nexport const sendInviteType = (state: RootState, props?: any) =>\n  state.getIn([\"components\", \"common\", \"sendInvite\", \"type\"]);\n\n/**\n * Returns the sendInviteOptions state, additional options for image_uploader\n *\n * @param {RootState} state\n * @returns options\n */\nexport const sendInviteOptions = (state: RootState, props?: any) =>\n  state.getIn([\"components\", \"common\", \"sendInvite\", \"options\"]);\n\n/**\n * Returns the sendInviteSent state, an invite has been sent each time it's incremented\n *\n * @param {RootState} state\n * @returns number\n */\nexport const sendInviteSent = (state: RootState, props?: any) =>\n  state.getIn([\"components\", \"common\", \"sendInvite\", \"sent\"]);\n\n/**\n * Returns the `pageTitle` state\n *\n * @param {RootState} state\n * @returns {string} the Page title\n */\nexport const pageTitle = (state: RootState, props?: any) => state.getIn([\"components\", \"common\", \"pageTitle\"]);\n","import { baseCleanProps, listParams } from \"app2/src/api/Api\";\nimport { IMetaPaginationData } from \"app2/src/records/MetaPagination\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { List } from \"immutable\";\nimport { fetcher } from \"../helpers/Fetcher\";\nimport { IPresentationData, PresentationRecord, toFormData, toJSON } from \"../records/Presentation\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport interface IPresentationIndexResponse {\n  presentations: IPresentationData[];\n  meta?: { pagination: IMetaPaginationData };\n}\n\nexport interface IPresentationResponse {\n  presentation: IPresentationData;\n}\n\nexport interface IPresentationListOptions {\n  id: number;\n  kind: \"org\" | \"job\";\n  folderId?: number;\n  presentationIds?: List<number>;\n}\n\nclass PresentationService {\n  public orgUrl = \"api/v1/orgs/:id/presentations\";\n  public jobUrl = \"api/v1/jobs/:id/presentations\";\n  public url = \"api/v1/presentations\";\n\n  public load(id: number, kind: \"org\" | \"job\" = \"org\", include: string[] = []): Promise<IPresentationIndexResponse> {\n    let actionUrl = this[`${kind}Url`].replace(\":id\", id.toString());\n\n    if (include.length > 0) {\n      actionUrl = fetcher.urlOptions(actionUrl, {\n        \"include[]\": include,\n      });\n    }\n    return fetcher.get<IPresentationIndexResponse>(actionUrl);\n  }\n\n  public list(\n    options: IPresentationListOptions,\n    queryParams: QueryParamsRecord = new QueryParamsRecord(),\n  ): Promise<IPresentationIndexResponse> {\n    const actionUrl = this[`${options.kind}Url`].replace(\":id\", options.id.toString());\n    const params = listParams(queryParams);\n\n    if (options.folderId && options.folderId !== 0) {\n      params.folder_id = options.folderId;\n    }\n\n    if (options.presentationIds) {\n      params[\"presentation_ids[]\"] = options.presentationIds.toArray();\n    }\n\n    return fetcher.get<IPresentationIndexResponse>(actionUrl, params);\n  }\n\n  public create(\n    id: number,\n    presentation: PresentationRecord,\n    kind: \"org\" | \"job\" = \"org\",\n  ): Promise<IPresentationResponse> {\n    const actionUrl = this[`${kind}Url`].replace(\":id\", id.toString());\n\n    const data: Partial<IPresentationData> = this.cleanProps(toJSON(presentation));\n\n    return fetcher.post<IPresentationResponse>(actionUrl, { presentation: data });\n  }\n\n  public upload(presentation: PresentationRecord): Promise<IPresentationResponse> {\n    const actionUrl = this.orgUrl.replace(\":id\", presentation.org_id.toString());\n    return fetcher.post<IPresentationResponse>(actionUrl, toFormData(presentation), { formData: true });\n  }\n\n  public update(presentation: PresentationRecord): Promise<IPresentationResponse> {\n    const actionUrl = fetcher.joinUrls(this.url, presentation.id.toString());\n\n    const data: Partial<IPresentationData> = this.cleanProps(toJSON(presentation));\n\n    return fetcher.patch<IPresentationResponse>(actionUrl, { presentation: data });\n  }\n\n  public destroy(presentation: PresentationRecord): Promise<IPresentationResponse> {\n    const actionUrl = fetcher.joinUrls(\n      this.orgUrl.replace(\":id\", presentation.org_id.toString()),\n      presentation.id.toString(),\n    );\n    return fetcher.delete(actionUrl);\n  }\n\n  public coverImage(presentation: PresentationRecord): Promise<IPresentationResponse> {\n    const actionUrl = fetcher.joinUrls(\n      this.orgUrl.replace(\":id\", presentation.org_id.toString()),\n      presentation.id.toString(),\n      \"cover_image\",\n    );\n    return fetcher.post(actionUrl, toFormData(presentation), { formData: true });\n  }\n\n  public cleanProps(presentation: Partial<IPresentationData>): Partial<IPresentationData> {\n    presentation = baseCleanProps(JSON.parse(JSON.stringify(presentation)));\n\n    if (isNullOrUndefined(presentation.folder_id) || presentation.folder_id === 0) {\n      delete presentation.folder_id;\n    }\n\n    if (isNullOrUndefined(presentation.file)) {\n      delete presentation.file;\n    }\n\n    if (presentation.dynamic_links) {\n      if (presentation.dynamic_links.length > 0) {\n        (presentation as any).dynamic_presentation_links_attributes = presentation.dynamic_links;\n        delete presentation.slides;\n      }\n      delete presentation.dynamic_links;\n    }\n\n    if (presentation.slides) {\n      (presentation as any).slides_attributes = presentation.slides;\n      delete presentation.slides;\n    }\n\n    delete presentation.dynamic_slides;\n\n    return presentation;\n  }\n}\n\nexport const presentationService = new PresentationService();\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { List } from \"immutable\";\nimport {\n  PresentationRecord,\n  fromJSON,\n  IPresentationOptions,\n  IPresentationData,\n  PresentationTarget,\n} from \"app2/src/records/Presentation\";\nimport { SlideRecord } from \"app2/src/records/Slide\";\nimport { IPresentationListOptions, presentationService } from \"app2/src/api/presentation.service\";\nimport { RootDispatchType } from \"../store\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as taskActions from \"app2/src/reducers/task.actions\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { IPageData, QueryParamsRecord } from \"app2/src/records/Page\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { presentation, presentationsSelectedIds } from \"app2/src/selectors/presentation.selectors\";\nimport { getBase64 } from \"app2/src/records/File\";\nimport { dirtyIds } from \"app2/src/selectors/pagination.selectors\";\nimport { ITaskContext, ITaskData } from \"app2/src/records/Task\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\n// VIEW\nexport const SET_CURRENT_PRESENTATION_ID = \"@presentations/SET_CURRENT_PRESENTATION_ID\";\n// ORG\nexport const FETCH_ORG_PRESENTATIONS = \"@presentations/FETCH_ORG_PRESENTATIONS\";\nexport const RECEIVE_ORG_PRESENTATIONS = \"@presentations/RECEIVE_ORG_PRESENTATIONS\";\nexport const RECEIVE_ORG_ERRORS = \"@presentations/RECEIVE_ORG_ERRORS\";\nexport const CREATE_ORG_PRESENTATION = \"@presentations/CREATE_ORG_PRESENTATION\";\nexport const CREATE_ORG_ERRORS = \"@presentations/CREATE_ORG_ERRORS\";\nexport const ADD_ORG_PRESENTATION = \"@presentations/ADD_ORG_PRESENTATION\";\n// JOB\nexport const FETCH_JOB_PRESENTATIONS = \"@presentations/FETCH_JOB_PRESENTATIONS\";\nexport const RECEIVE_JOB_PRESENTATIONS = \"@presentations/RECEIVE_JOB_PRESENTATIONS\";\nexport const RECEIVE_JOB_ERRORS = \"@presentations/RECEIVE_JOB_ERRORS\";\nexport const CREATE_JOB_PRESENTATION = \"@presentations/CREATE_JOB_PRESENTATION\";\nexport const CREATE_JOB_ERRORS = \"@presentations/CREATE_JOB_ERRORS\";\nexport const ADD_JOB_PRESENTATION = \"@presentations/ADD_JOB_PRESENTATION\";\nexport const REMOVE_JOB_PRESENTATION = \"@presentations/REMOVE_JOB_PRESENTATION\";\n// SINGLE\nexport const FETCH_PRESENTATION = \"@presentations/FETCH_PRESENTATION\";\nexport const RECEIVE_PRESENTATION = \"@presentations/RECEIVE_PRESENTATION\";\nexport const RECEIVE_SLIDE = \"@presentations/RECEIVE_SLIDE\";\nexport const RECEIVE_PRESENTATION_ERROR = \"@presentations/RECEIVE_PRESENTATION_ERROR\";\nexport const REMOVE_PRESENTATION = \"@presentations/REMOVE_PRESENTATION\";\nexport const EDIT_COVER_IMAGE = \"@presentations/EDIT_COVER_IMAGE\";\nexport const EDIT_SORT_ORDER = \"@presentations/EDIT_SORT_ORDER\";\nexport const EDIT_SELECTED = \"@presentations/EDIT_SELECTED\";\nexport const EDIT_NAME = \"@presentation/EDIT_NAME\";\nexport const EDIT_LINK = \"@presentation/EDIT_LINK\";\nexport const EDIT_PRESENTATION = \"@presentation/EDIT_PRESENTATION\";\nexport const RESET_PRESENTATION = \"@presentation/RESET_PRESENTATION\";\n// MULTIPLE\nexport const FETCH_PRESENTATIONS = \"@presentations/FETCH_PRESENTATIONS\";\nexport const RECEIVE_PRESENTATIONS = \"@presentations/RECEIVE_PRESENTATIONS\";\nexport const SET_PRESENTATIONS_LOADED = \"@presentations/SET_PRESENTATIONS_LOADED\";\nexport const BATCH_EDIT_FOLDER_ID = \"@presentations/BATCH_EDIT_FOLDER_ID\";\nexport const BATCH_REMOVE_IDS = \"@presentations/BATCH_REMOVE_IDS\";\nexport const BATCH_EDIT_SELECTED = \"@presentations/BATCH_EDIT_SELECTED\";\n\nexport const Actions = {\n  // VIEW\n  setCurrentPresentationId: (id: number) => createAction(SET_CURRENT_PRESENTATION_ID, { id }),\n  // SINGLE\n  fetchPresentation: (presentationId: number) => createAction(FETCH_PRESENTATION, { presentationId }),\n  receivePresentation: (presentation: PresentationRecord) => createAction(RECEIVE_PRESENTATION, { presentation }),\n  receiveSlide: (slide: SlideRecord) => createAction(RECEIVE_SLIDE, { slide }),\n  receivePresentationError: (presentationId: number, errors: string[]) =>\n    createAction(RECEIVE_PRESENTATION_ERROR, { presentationId, errors }),\n  removePresentation: (presentationId: number) => createAction(REMOVE_PRESENTATION, { presentationId }),\n  editSortOrder: (presentationId: number, sortOrder: number) =>\n    createAction(EDIT_SORT_ORDER, { presentationId, sortOrder }),\n  editSelected: (presentationId: number, value: boolean) => createAction(EDIT_SELECTED, { presentationId, value }),\n  editName: (presentationId: number, name: string) => createAction(EDIT_NAME, { presentationId, name }),\n  editLink: (presentationId: number, link: string) => createAction(EDIT_LINK, { presentationId, link }),\n  editCoverImage: (presentationId: number, coverImage: any) =>\n    createAction(EDIT_COVER_IMAGE, { presentationId, coverImage }),\n  editTarget: (presentationId: number, target: PresentationTarget) =>\n    createAction(EDIT_PRESENTATION, { presentationId, name: \"target\", value: target }),\n  resetPresentation: (presentationId: number) => createAction(RESET_PRESENTATION, { presentationId }),\n  // ORG\n  fetchOrgPresentations: (orgId: number) => createAction(FETCH_ORG_PRESENTATIONS, { orgId }),\n  receiveOrgErrors: (orgId, errors: string[]) => createAction(RECEIVE_ORG_ERRORS, { orgId, errors }),\n  receiveOrgPresentations: (orgId: number, presentations: List<PresentationRecord>) =>\n    createAction(RECEIVE_ORG_PRESENTATIONS, { orgId, presentations }),\n  createOrgPresentation: (orgId: number, presentation: PresentationRecord) =>\n    createAction(CREATE_ORG_PRESENTATION, { orgId, presentation }),\n  createOrgPresentationErrors: (orgId: number, errors: string[]) =>\n    createAction(CREATE_ORG_PRESENTATION, { orgId, errors }),\n  // JOB\n  fetchJobPresentations: (jobId: number) => createAction(FETCH_JOB_PRESENTATIONS, { jobId }),\n  receiveJobErrors: (jobId, errors: string[]) => createAction(RECEIVE_JOB_ERRORS, { jobId, errors }),\n  receiveJobPresentations: (jobId: number, presentations: List<PresentationRecord>) =>\n    createAction(RECEIVE_JOB_PRESENTATIONS, { jobId, presentations }),\n  createJobPresentation: (jobId: number, presentation: PresentationRecord) =>\n    createAction(CREATE_JOB_PRESENTATION, { jobId, presentation }),\n  createJobPresentationErrors: (jobId: number, errors: string[]) => createAction(CREATE_JOB_ERRORS, { jobId, errors }),\n  removeJobPresentation: (jobId: number, presentationId: number) =>\n    createAction(REMOVE_JOB_PRESENTATION, { jobId, presentationId }),\n  // MULTIPLE\n  fetchPresentations: (presentationIds: List<number>) => createAction(FETCH_PRESENTATIONS, { presentationIds }),\n  receivePresentations: (presentations: IPresentationData[]) => createAction(RECEIVE_PRESENTATIONS, { presentations }),\n  setPresentationsLoaded: (presentationIds: List<number>) =>\n    createAction(SET_PRESENTATIONS_LOADED, { presentationIds }),\n  batchEditFolderId: (presentationIds: List<number>, folderId: number) =>\n    createAction(BATCH_EDIT_FOLDER_ID, { presentationIds, folderId }),\n  batchRemoveIds: (presentationIds: List<number>) => createAction(BATCH_REMOVE_IDS, { presentationIds }),\n  batchEditSelected: (presentationIds: List<number>, value: boolean) =>\n    createAction(BATCH_EDIT_SELECTED, { presentationIds, value }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  addJobPresentation: (jobId: number, presentation: PresentationRecord): ThunkResult<Promise<PresentationRecord>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.createJobPresentation(jobId, presentation));\n\n      try {\n        const response = await presentationService.create(jobId, presentation, \"job\");\n        const presentationRecord = fromJSON(response.presentation);\n        dispatch(Actions.receivePresentation(presentationRecord));\n        return presentationRecord;\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(Actions.createJobPresentationErrors(jobId, errors));\n        return Promise.reject(errors);\n      }\n    };\n  },\n  batchCreatePresentation: (files: any[], options: IPresentationOptions): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      let presentationSuccess = 0;\n      await Promise.all(\n        files.map(async (file) => {\n          const record = fromJSON({\n            name: file.name,\n            kind: options.kind,\n            data: file,\n            org_id: currentOrgId(getState()),\n            folder_id: options.folderId,\n          });\n          try {\n            const response = await presentationService.upload(record);\n\n            dispatch(Actions.receivePresentation(fromJSON(response.presentation)));\n            dispatch(AsyncActions.processPresentation(response.presentation));\n            presentationSuccess += 1;\n            return response;\n          } catch (response) {\n            return response;\n          }\n        }),\n      );\n\n      let flashLevel = FlashLevels.warning;\n      if (presentationSuccess === files.length) {\n        flashLevel = FlashLevels.success;\n      }\n\n      dispatch(\n        commonActions.Actions.flashAddAlert(\n          flashLevel,\n          presentationSuccess + \"/\" + files.length + \" Presentations successfully uploaded\",\n        ),\n      );\n    };\n  },\n  createPresentation: (\n    presentation: PresentationRecord,\n    kind: \"org\" | \"job\",\n  ): ThunkResult<Promise<PresentationRecord>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const id = setOptionsId({ kind: kind }, getState()).id;\n      try {\n        const response = await presentationService.create(id, presentation, kind);\n        const presentationRecord = fromJSON(response.presentation);\n        dispatch(Actions.receivePresentation(presentationRecord));\n        dispatch(AsyncActions.processPresentation(response.presentation));\n        return presentationRecord;\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(Actions.receivePresentationError(presentation.id, errors));\n        return Promise.reject(errors);\n      }\n    };\n  },\n  updatePresentation: (presentation: PresentationRecord): ThunkResult<Promise<PresentationRecord>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPresentation(presentation.id));\n\n      try {\n        const response = await presentationService.update(presentation);\n        const presentationRecord = fromJSON(response.presentation);\n        dispatch(Actions.receivePresentation(presentationRecord));\n        return presentationRecord;\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(Actions.receivePresentationError(presentation.id, errors));\n        return Promise.reject(errors);\n      }\n    };\n  },\n  createCoverImage: (file: any, presentationId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      let record = presentation(getState(), { presentationId });\n      try {\n        const result = await getBase64(file);\n        record = record.set(\"cover_image\", result);\n        dispatch(Actions.fetchPresentation(presentationId));\n\n        const response = await presentationService.coverImage(record);\n        const presentationRecord = fromJSON(response.presentation);\n        dispatch(Actions.receivePresentation(presentationRecord));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Cover image successfully added\"));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.receivePresentationError(presentationId, errors));\n      }\n    };\n  },\n  // used in gaf-app - keeping for backwards compatibility\n  listJobPresentations: (jobId: number, include: string[] = []): ThunkResult<any> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchJobPresentations(jobId));\n\n      try {\n        const response = await presentationService.load(jobId, \"job\", include);\n        const presentationRecords = List(response.presentations.map((p) => fromJSON(p)));\n        dispatch(Actions.receiveJobPresentations(jobId, presentationRecords));\n        return presentationRecords;\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(Actions.receiveJobErrors(jobId, errors));\n        return Promise.reject(errors);\n      }\n    };\n  },\n  // used in gaf-app - keeping for backwards compatibility\n  listOrgPresentations: (orgId: number, include: string[] = []): ThunkResult<any> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchOrgPresentations(orgId));\n\n      try {\n        const response = await presentationService.load(orgId, \"org\", include);\n        const presentationRecords = List(response.presentations.map((p) => fromJSON(p)));\n        dispatch(Actions.receiveOrgPresentations(orgId, presentationRecords));\n        return presentationRecords;\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(Actions.receiveOrgErrors(orgId, errors));\n        return Promise.reject(errors);\n      }\n    };\n  },\n  listPresentations: (\n    options: Partial<IPresentationListOptions>,\n    queryParams: QueryParamsRecord,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const mergedOptions = setOptionsId(options, getState());\n      dispatch(paginationActions.Actions.fetchPage(\"presentation\", queryParams));\n\n      try {\n        const response = await presentationService.list(mergedOptions, queryParams);\n        dispatch(Actions.receivePresentations(response.presentations));\n        const pageData: Partial<IPageData> = {\n          ids: List(response.presentations.map((presentation: IPresentationData) => presentation.id)),\n          pagination: response.meta.pagination,\n        };\n        dispatch(paginationActions.Actions.receivePage(\"presentation\", queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(paginationActions.Actions.receivePageError(\"presentation\", queryParams, errors));\n      }\n    };\n  },\n  destroyPresentation: (presentation: PresentationRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPresentation(presentation.id));\n\n      try {\n        await presentationService.destroy(presentation);\n        dispatch(paginationActions.Actions.removeId(presentation.id, \"presentation\"));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Presentation successfully deleted\"));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.receivePresentationError(presentation.id, errors));\n      }\n    };\n  },\n  batchUpdatePresentation: (presentationIds: List<number>, reject = false): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const promises = [];\n      dispatch(Actions.fetchPresentations(presentationIds));\n\n      presentationIds.forEach((presentationId) => {\n        const updatedPresentation = presentation(getState(), { presentationId });\n        promises.push(presentationService.update(updatedPresentation));\n      });\n\n      try {\n        const responses = await Promise.all(promises);\n        const presentations = responses.map((response) => response.presentation);\n        dispatch(Actions.receivePresentations(presentations));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved presentations successfully\"));\n      } catch (response) {\n        dispatch(Actions.setPresentationsLoaded(presentationIds));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, [\"Update failed, please try again.\"]));\n        if (reject) {\n          return Promise.reject();\n        }\n      }\n    };\n  },\n  onSortEnd: (oldIndex: number, newIndex: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      await dispatch(paginationActions.AsyncActions.onSortEnd(\"presentation\", oldIndex, newIndex));\n\n      dispatch(AsyncActions.batchUpdatePresentation(dirtyIds(getState())));\n      dispatch(paginationActions.Actions.setDirtyIds(null));\n    };\n  },\n  processPresentation: (presentation: IPresentationData): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(paginationActions.Actions.pushId(presentation.id, \"presentation\"));\n\n      const { task } = presentation;\n      if (task) {\n        if (task) {\n          const contextObj: ITaskContext = {\n            model: \"presentation\",\n            action: \"taskHandler\",\n            action_payload: { presentationId: presentation.id },\n            error_action: \"errorTaskHandler\",\n          };\n          task.context = contextObj;\n          dispatch(taskActions.Actions.receiveTask(task));\n        }\n      }\n    };\n  },\n  taskHandler: (task: ITaskData, payload: any = {}): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.editCoverImage(payload.presentationId, task.results.cover_image));\n    };\n  },\n  movePresentations: (folderId: number): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const presentationIds = presentationsSelectedIds(getState(), {});\n      const pres = presentation(getState(), { presentationId: presentationIds.first() });\n\n      dispatch(Actions.batchEditFolderId(presentationIds, folderId));\n      try {\n        await dispatch(AsyncActions.batchUpdatePresentation(presentationIds, true));\n\n        dispatch(Actions.batchRemoveIds(presentationIds));\n        await dispatch(AsyncActions.checkPageEmpty(pres.folder_id));\n      } catch {\n        dispatch(Actions.batchEditFolderId(presentationIds, pres.folder_id));\n      }\n    };\n  },\n  checkPageEmpty: (folderId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      return paginationActions.checkPageEmpty(getState(), \"presentation\", (newQueryParams) =>\n        dispatch(\n          AsyncActions.listPresentations(\n            {\n              kind: \"org\",\n              folderId,\n            },\n            newQueryParams,\n          ),\n        ),\n      );\n    };\n  },\n  errorTaskHandler: (task: ITaskData, payload: any = {}): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      const errorMessage =\n        task?.results?.error_message ||\n        \"There were problems processing your task. Please try again. If the problem persists contact support.\";\n      dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errorMessage));\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nexport const setOptionsId = (\n  options: Partial<IPresentationListOptions>,\n  state: RootState,\n): IPresentationListOptions => {\n  if (isNullOrUndefined(options.id)) {\n    switch (options.kind) {\n      case \"job\":\n        options.id = currentJobId(state);\n        break;\n      case \"org\":\n        options.id = currentOrgId(state);\n        break;\n    }\n  }\n\n  return options as IPresentationListOptions;\n};\n","/*\n cycle.js\n 2016-05-01\n\n Public Domain.\n\n NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n This code should be minified before deployment.\n See http://javascript.crockford.com/jsmin.html\n\n USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n NOT CONTROL.\n */\n\n/*jslint eval, for */\n\n/*property\n $ref, decycle, forEach, isArray, keys, length, push, retrocycle, stringify,\n test\n */\n\nif (typeof JSON.decycle !== \"function\") {\n  JSON.decycle = function decycle(object, replacer) {\n    \"use strict\";\n\n// Make a deep copy of an object or array, assuring that there is at most\n// one instance of each object or array in the resulting structure. The\n// duplicate references (which might be forming cycles) are replaced with\n// an object of the form\n\n//      {\"$ref\": PATH}\n\n// where the PATH is a JSONPath string that locates the first occurance.\n\n// So,\n\n//      var a = [];\n//      a[0] = a;\n//      return JSON.stringify(JSON.decycle(a));\n\n// produces the string '[{\"$ref\":\"$\"}]'.\n\n// If a replacer function is provided, then it will be called for each value.\n// A replacer function receives a value and returns a replacement value.\n\n// JSONPath is used to locate the unique object. $ indicates the top level of\n// the object or array. [NUMBER] or [STRING] indicates a child element or\n// property.\n\n    var objects = [];   // Keep a reference to each unique object or array\n    var paths = [];     // Keep the path to each unique object or array\n\n    return (function derez(value, path) {\n\n// The derez function recurses through the object, producing the deep copy.\n\n      var i;          // The loop counter\n      var nu;         // The new object or array\n\n// If a replacer function was provided, then call it to get a replacement value.\n\n      if (replacer !== undefined) {\n        value = replacer(value);\n      }\n\n// typeof null === \"object\", so go on if this value is really an object but not\n// one of the weird builtin objects.\n\n      if (\n        typeof value === \"object\" && value !== null &&\n        !(value instanceof Boolean) &&\n        !(value instanceof Date) &&\n        !(value instanceof Number) &&\n        !(value instanceof RegExp) &&\n        !(value instanceof String)\n      ) {\n\n// If the value is an object or array, look to see if we have already\n// encountered it. If so, return a {\"$ref\":PATH} object. This is a hard\n// linear search that will get slower as the number of unique objects grows.\n// Someday, this should be replaced with an ES6 WeakMap.\n\n        i = objects.indexOf(value);\n        if (i >= 0) {\n          return {$ref: paths[i]};\n        }\n\n// Otherwise, accumulate the unique value and its path.\n\n        objects.push(value);\n        paths.push(path);\n\n// If it is an array, replicate the array.\n\n        if (Array.isArray(value)) {\n          nu = [];\n          value.forEach(function (element, i) {\n            nu[i] = derez(element, path + \"[\" + i + \"]\");\n          });\n        } else {\n\n// If it is an object, replicate the object.\n\n          nu = {};\n          Object.keys(value).forEach(function (name) {\n            if (name.indexOf('$') === 0) {\n              return;\n            }\n            nu[name] = derez(\n              value[name],\n              path + \"[\" + JSON.stringify(name) + \"]\"\n            );\n          });\n        }\n        return nu;\n      }\n      return value;\n    }(object, \"$\"));\n  };\n}\n\n\nif (typeof JSON.retrocycle !== \"function\") {\n  JSON.retrocycle = function retrocycle($) {\n    \"use strict\";\n\n// Restore an object that was reduced by decycle. Members whose values are\n// objects of the form\n//      {$ref: PATH}\n// are replaced with references to the value found by the PATH. This will\n// restore cycles. The object will be mutated.\n\n// The eval function is used to locate the values described by a PATH. The\n// root object is kept in a $ variable. A regular expression is used to\n// assure that the PATH is extremely well formed. The regexp contains nested\n// * quantifiers. That has been known to have extremely bad performance\n// problems on some browsers for very long strings. A PATH is expected to be\n// reasonably short. A PATH is allowed to belong to a very restricted subset of\n// Goessner's JSONPath.\n\n// So,\n//      var s = '[{\"$ref\":\"$\"}]';\n//      return JSON.retrocycle(JSON.parse(s));\n// produces an array containing a single element which is the array itself.\n\n    var px = /^\\$(?:\\[(?:\\d+|\\\"(?:[^\\\\\\\"\\u0000-\\u001f]|\\\\([\\\\\\\"\\/bfnrt]|u[0-9a-zA-Z]{4}))*\\\")\\])*$/;\n\n    (function rez(value) {\n\n// The rez function walks recursively through the object looking for $ref\n// properties. When it finds one that has a value that is a path, then it\n// replaces the $ref object with a reference to the value that is found by\n// the path.\n\n      if (value && typeof value === \"object\") {\n        if (Array.isArray(value)) {\n          value.forEach(function (element, i) {\n            if (typeof element === \"object\" && element !== null) {\n              var path = element.$ref;\n              if (typeof path === \"string\" && px.test(path)) {\n                value[i] = eval(path);\n              } else {\n                rez(element);\n              }\n            }\n          });\n        } else {\n          Object.keys(value).forEach(function (name) {\n            var item = value[name];\n            if (typeof item === \"object\" && item !== null) {\n              var path = item.$ref;\n              if (typeof path === \"string\" && px.test(path)) {\n                value[name] = eval(path);\n              } else {\n                rez(item);\n              }\n            }\n          });\n        }\n      }\n    }($));\n    return $;\n  };\n}","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.scheduler.view.min\",[\"kendo.core.min\"],t)}(function(){return kendo.ui.scheduler={},function(t){function e(t,e){function n(t,i){var s,r;if(i=i[e])for(s=o[t]=o[t]||[],r=0;i.length>r;r++)s.push(i[r]),n(t+1,i[r])}var o=[];return n(0,t),o}function n(){return D.support.cssBorderSpacing?\"\":'cellspacing=\"0\"'}function o(e,o){return e.length?\"<table \"+n()+' class=\"'+t.trim(\"k-scheduler-table \"+(o||\"\"))+'\"><tr>'+e.join(\"</tr><tr>\")+\"</tr></table>\":\"\"}function i(t,e){return t.length?\"<div style='position:relative'>\"+o(t,e)+\"</div>\":\"\"}function s(e,n,i){var s,r=[];if(i>0)for(s=0;e>s;s++)r.push(\"<th>&nbsp;</th>\");return n&&r.push('<th class=\"k-scheduler-times-all-day\">'+n.text+\"</th>\"),1>i?t():t('<div class=\"k-scheduler-times\">'+o(r)+\"</div>\")}function r(e,n,s){var r,l,a,u,c,h,f,d,g,p,_=[];for(l=0;e.length>l;l++){for(a=e[l],u=[],c=n/a.length,r=0;a.length>r;r++)h=a[r],u.push('<th colspan=\"'+(h.colspan||c)+'\" class=\"'+(h.className||\"\")+'\">'+h.text+\"</th>\");_.push(u.join(\"\"))}if(f=[],s){for(d=e[e.length-1],g=[],p=s.cellContent,r=0;d.length>r;r++)g.push('<td class=\"'+(d[r].className||\"\")+'\">'+(p?p(r):\"&nbsp;\")+\"</td>\");f.push(g.join(\"\"))}return t('<div class=\"k-scheduler-header k-state-default\"><div class=\"k-scheduler-header-wrap\">'+o(_)+i(f,\"k-scheduler-header-all-day\")+\"</div></div>\")}function l(e,n){var i,s,r,l,a,u=Array(n).join().split(\",\"),c=[];for(s=0;e.length>s;s++)for(r=e[s],l=n/r.length,i=0;r.length>i;i++)a=r[i].className||\"\",r[i].allDay&&(a=\"k-scheduler-times-all-day\"),u[l*i]+='<th class=\"'+a+'\" rowspan=\"'+l+'\">'+r[i].text+\"</th>\";for(i=0;n>i;i++)c.push(u[i]);return 1>n?t():t('<div class=\"k-scheduler-times\">'+o(c)+\"</div>\")}function a(){return t('<div class=\"k-scheduler-content\"><table '+n()+' class=\"k-scheduler-table\"/></div>')}function u(){return y=y?y:D.support.scrollbar()}function c(t,e,n){var o,i,s,r,l;for(o=t.length-1;o>=0;o--)i=h(t[o]),s=i.start,l=i.end,r=e>=s&&l>=e,(r||s>=e&&n>=l||s>=e&&n>=s)&&(e>s&&(e=s),l>n&&(n=l));return f(t,e,n)}function h(t){return{start:t.start,end:t.end}}function f(t,e,n){var o,i,s=[];for(o=0;t.length>o;o++)i=h(t[o]),(e>i.start&&i.end>e||i.start>=e&&n>=i.end)&&s.push(t[o]);return s}function d(t){return p(t)}function g(t){return p(t)}function p(t){var e,n,o,i,s,r,l,a=[];for(e=0;t.length>e;e++){for(n=t[e],o=h(n),i=null,s=0,r=a.length;r>s;s++)if(l=o.start>a[s].end,a[s].start>o.start||l){i=a[s],o.end>i.end&&(i.end=o.end);break}i||(i={start:o.start,end:o.end,events:[]},a.push(i)),i.events.push(n)}return a}function _(e,n,o,i){var s=[];return t.each(n,function(t,n){var r=n.className?\"k-slot-cell \"+n.className:\"k-slot-cell\",l={text:n.text,className:r};l[e]=i&&!n.minorTicks?_(e,n.columns,o,i):o,s.push(l)}),s}function v(e,n,o,i,s,r){var l,a,u,c=n[0],h=[];if(c){if(s&&o)t.each(s,function(t,o){o[e]=r&&!o.minorTicks?v(e,n,o.columns,i,o.columns,r):v(e,n,null,i)}),h=s;else for(l=c.dataSource.view(),a=0;l.length>a;a++)u={text:i({text:D.htmlEncode(D.getter(c.dataTextField)(l[a])),color:D.getter(c.dataColorField)(l[a]),field:c.field,title:c.title,name:c.name,value:D.getter(c.dataValueField)(l[a])}),className:\"k-slot-cell\"},u[e]=v(e,n.slice(1),o,i),h.push(u);return h}return o}function m(e){return function(n){if(t.isArray(n)||n instanceof D.data.ObservableArray){for(var o=0;n.length>o;o++)if(n[o]==e)return!0;return!1}return n==e}}function S(t){t.className=t.className.replace(x,\"\")+\" k-state-selected\"}var y,C,x,D=window.kendo,b=D.ui,I=b.Widget,k=D.keys,w=\".kendoSchedulerView\",H=Math,R='<div class=\"k-marquee k-scheduler-marquee\"><div class=\"k-marquee-color\"></div><div class=\"k-marquee-text\"><div class=\"k-label-top\"></div><div class=\"k-label-bottom\"></div></div></div>',T=D.Class.extend({init:function(t,e){this._index=t,this._timeSlotCollections=[],this._daySlotCollections=[],this._isRtl=e},addTimeSlotCollection:function(t,e){return this._addCollection(t,e,this._timeSlotCollections)},addDaySlotCollection:function(t,e){return this._addCollection(t,e,this._daySlotCollections)},_addCollection:function(t,e,n){var o=new G(t,e,this._index,n.length);return n.push(o),o},timeSlotCollectionCount:function(){return this._timeSlotCollections.length},daySlotCollectionCount:function(){return this._daySlotCollections.length},daySlotByPosition:function(t,e,n){return this._slotByPosition(t,e,this._daySlotCollections,n)},timeSlotByPosition:function(t,e,n){return this._slotByPosition(t,e,this._timeSlotCollections,n)},_slotByPosition:function(t,e,n,o){var i,s,r,l,a,u,c,h,f;for(i=0;n.length>i;i++)for(s=n[i],r=0;r<s.count();r++)if(l=s.at(r),a=l.offsetWidth,u=l.offsetHeight,h=l.offsetLeft+a,f=l.offsetTop+u,o||(c=s.at(r+1)),c&&(c.offsetLeft!=l.offsetLeft?h=this._isRtl?l.offsetLeft+(l.offsetLeft-c.offsetLeft):c.offsetLeft:f=c.offsetTop),t>=l.offsetLeft&&h>t&&e>=l.offsetTop&&f>e)return l},refresh:function(){var t;for(t=0;this._daySlotCollections.length>t;t++)this._daySlotCollections[t].refresh();for(t=0;this._timeSlotCollections.length>t;t++)this._timeSlotCollections[t].refresh()},timeSlotRanges:function(t,e){var n,o=this._timeSlotCollections,i=this._startSlot(t,o);return!i.inRange&&t>=i.slot.end&&(i=null),n=i,e>t&&(n=this._endSlot(e,o)),n&&!n.inRange&&n.slot.start>=e&&(n=null),null===i&&null===n?[]:(null===i&&(i={inRange:!0,slot:o[n.slot.collectionIndex].first()}),null===n&&(n={inRange:!0,slot:o[i.slot.collectionIndex].last()}),this._continuousRange(z,o,i,n))},daySlotRanges:function(t,e,n){var o,i=this._daySlotCollections,s=this._startSlot(t,i,n);if(!s.inRange&&t>=s.slot.end&&(s=null),o=s,e>t&&(o=this._endSlot(e,i,n)),o&&!o.inRange&&o.slot.start>=e&&(o=null),null===s&&null===o)return[];if(null===s)do t+=D.date.MS_PER_DAY,s=this._startSlot(t,i,n);while(!s.inRange&&t>=s.slot.end);if(null===o)do e-=D.date.MS_PER_DAY,o=this._endSlot(e,i,n);while(!o.inRange&&o.slot.start>=e);return this._continuousRange(E,i,s,o)},_continuousRange:function(t,e,n,o){var i,s,r,l,a,u,c=n.slot,h=o.slot,f=c.collectionIndex,d=h.collectionIndex,g=[];for(i=f;d>=i;i++)s=e[i],r=s.first(),l=s.last(),a=!1,u=!1,i==f&&(u=!n.inRange),i==d&&(a=!o.inRange),c.start>r.start&&(r=c),l.start>h.start&&(l=h),d>f&&(i==f?a=!0:i==d?u=!0:a=u=!0),g.push(new t({start:r,end:l,collection:s,head:a,tail:u}));return g},slotRanges:function(t,e){var n=t._startTime||D.date.toUtcTime(t.start),o=t._endTime||D.date.toUtcTime(t.end);return void 0===e&&(e=t.isMultiDay()),e?this.daySlotRanges(n,o,t.isAllDay):this.timeSlotRanges(n,o)},ranges:function(t,e,n,o){return\"number\"!=typeof t&&(t=D.date.toUtcTime(t)),\"number\"!=typeof e&&(e=D.date.toUtcTime(e)),n?this.daySlotRanges(t,e,o):this.timeSlotRanges(t,e)},_startCollection:function(t,e){var n,o;for(n=0;e.length>n;n++)if(o=e[n],o.startInRange(t))return o;return null},_endCollection:function(t,e,n){var o,i;for(o=0;e.length>o;o++)if(i=e[o],i.endInRange(t,n))return i;return null},_getCollections:function(t){return t?this._daySlotCollections:this._timeSlotCollections},continuousSlot:function(t,e){var n=e?-1:1,o=this._getCollections(t.isDaySlot),i=o[t.collectionIndex+n];return i?i[e?\"last\":\"first\"]():void 0},firstSlot:function(){var t=this._getCollections(this.daySlotCollectionCount());return t[0].first()},lastSlot:function(){var t=this._getCollections(this.daySlotCollectionCount());return t[t.length-1].last()},upSlot:function(t,e,n){var o=this,i=function(t,n,i){var s=0===i;return!e&&!t&&s&&o.daySlotCollectionCount()?o._daySlotCollections[0].at(n):void 0};return this.timeSlotCollectionCount()||(e=!0),this._verticalSlot(t,-1,i,n)},downSlot:function(t,e,n){var o=this,i=function(t,n,i){return!e&&t&&o.timeSlotCollectionCount()?o._timeSlotCollections[i].at(0):void 0};return this.timeSlotCollectionCount()||(e=!0),this._verticalSlot(t,1,i,n)},leftSlot:function(t,e){return this._horizontalSlot(t,-1,e)},rightSlot:function(t,e){return this._horizontalSlot(t,1,e)},_horizontalSlot:function(t,e,n){var o,i=t.index,s=t.isDaySlot,r=t.collectionIndex,l=this._getCollections(s);return s=n?!1:s,s?i+=e:r+=e,o=l[r],o?o.at(i):void 0},_verticalSlot:function(t,e,n,o){var i,s=t.index,r=t.isDaySlot,l=t.collectionIndex,a=this._getCollections(r);return(t=n(r,l,s))?t:(r=o?!1:r,r?l+=e:s+=e,i=a[l],i?i.at(s):void 0)},_collection:function(t,e){var n=e?this._daySlotCollections:this._timeSlotCollections;return n[t]},_startSlot:function(t,e,n){var o,i=this._startCollection(t,e),s=!0;return i||(i=e[0],s=!1),o=i.slotByStartDate(t,n),o||(o=i.first(),s=!1),{slot:o,inRange:s}},_endSlot:function(t,e,n){var o,i=this._endCollection(t,e,n),s=!0;return i||(i=e[e.length-1],s=!1),o=i.slotByEndDate(t,n),o||(o=i.last(),s=!1),{slot:o,inRange:s}},getSlotCollection:function(t,e){return this[e?\"getDaySlotCollection\":\"getTimeSlotCollection\"](t)},getTimeSlotCollection:function(t){return this._timeSlotCollections[t]},getDaySlotCollection:function(t){return this._daySlotCollections[t]}}),L=D.Class.extend({init:function(e){t.extend(this,e)},innerHeight:function(){var t,e=this.collection,n=this.start.index,o=this.end.index,i=0;for(t=n;o>=t;t++)i+=e.at(t).offsetHeight;return i},events:function(){return this.collection.events()},addEvent:function(t){this.events().push(t)},startSlot:function(){return this.start.offsetLeft>this.end.offsetLeft?this.end:this.start},endSlot:function(){return this.start.offsetLeft>this.end.offsetLeft?this.start:this.end}}),z=L.extend({innerHeight:function(){var t,e=this.collection,n=this.start.index,o=this.end.index,i=0;for(t=n;o>=t;t++)i+=e.at(t).offsetHeight;return i},outerRect:function(t,e,n){return this._rect(\"offset\",t,e,n)},_rect:function(t,e,n,o){var i,s,r,l,a,u,c,h,f=this.start,d=this.end,g=D.support.isRtl(f.element);return\"number\"!=typeof e&&(e=D.date.toUtcTime(e)),\"number\"!=typeof n&&(n=D.date.toUtcTime(n)),o?(i=f.offsetTop,s=d.offsetTop+d[t+\"Height\"],g?(r=d.offsetLeft,l=f.offsetLeft+f[t+\"Width\"]):(r=f.offsetLeft,l=d.offsetLeft+d[t+\"Width\"])):(a=e-f.start,0>a&&(a=0),u=f.end-f.start,i=f.offsetTop+f[t+\"Height\"]*a/u,c=d.end-n,0>c&&(c=0),h=d.end-d.start,s=d.offsetTop+d[t+\"Height\"]-d[t+\"Height\"]*c/h,g?(r=Math.round(d.offsetLeft+d[t+\"Width\"]*c/h),l=Math.round(f.offsetLeft+f[t+\"Width\"]-f[t+\"Width\"]*a/u)):(r=Math.round(f.offsetLeft+f[t+\"Width\"]*a/u),l=Math.round(d.offsetLeft+d[t+\"Width\"]-d[t+\"Width\"]*c/h))),{top:i,bottom:s,left:0===r?r:r+1,right:l}},innerRect:function(t,e,n){return this._rect(\"client\",t,e,n)}}),E=L.extend({innerWidth:function(){var t,e=this.collection,n=this.start.index,o=this.end.index,i=0,s=n!==o?\"offsetWidth\":\"clientWidth\";for(t=n;o>=t;t++)i+=e.at(t)[s];return i}}),G=D.Class.extend({init:function(t,e,n,o){this._slots=[],this._events=[],this._start=D.date.toUtcTime(t),this._end=D.date.toUtcTime(e),this._groupIndex=n,this._collectionIndex=o},refresh:function(){for(var t=0;this._slots.length>t;t++)this._slots[t].refresh()},startInRange:function(t){return t>=this._start&&this._end>t},endInRange:function(t,e){var n=e?this._end>t:this._end>=t;return t>=this._start&&n},slotByStartDate:function(t){var e,n,o=t;for(\"number\"!=typeof o&&(o=D.date.toUtcTime(t)),e=0;this._slots.length>e;e++)if(n=this._slots[e],n.startInRange(o))return n;return null},slotByEndDate:function(t,e){var n,o,i=t;if(\"number\"!=typeof i&&(i=D.date.toUtcTime(t)),e)return this.slotByStartDate(t,!1);for(n=0;this._slots.length>n;n++)if(o=this._slots[n],o.endInRange(i))return o;return null},count:function(){return this._slots.length},events:function(){return this._events},addTimeSlot:function(t,e,n,o){var i=new W(t,e,n,this._groupIndex,this._collectionIndex,this._slots.length,o);this._slots.push(i)},addDaySlot:function(t,e,n,o){var i=new V(t,e,n,this._groupIndex,this._collectionIndex,this._slots.length,o);this._slots.push(i)},first:function(){return this._slots[0]},last:function(){return this._slots[this._slots.length-1]},at:function(t){return this._slots[t]}}),B=D.Class.extend({init:function(t,e,n,o,i,s){this.element=t,this.clientWidth=t.clientWidth,this.clientHeight=t.clientHeight,this.offsetWidth=t.offsetWidth,this.offsetHeight=t.offsetHeight,this.offsetTop=t.offsetTop,this.offsetLeft=t.offsetLeft,this.start=e,this.end=n,this.element=t,this.groupIndex=o,this.collectionIndex=i,this.index=s,this.isDaySlot=!1},refresh:function(){var t=this.element;this.clientWidth=t.clientWidth,this.clientHeight=t.clientHeight,this.offsetWidth=t.offsetWidth,this.offsetHeight=t.offsetHeight,this.offsetTop=t.offsetTop,this.offsetLeft=t.offsetLeft},startDate:function(){return D.timezone.toLocalDate(this.start)},endDate:function(){return D.timezone.toLocalDate(this.end)},startInRange:function(t){return t>=this.start&&this.end>t},endInRange:function(t){return t>this.start&&this.end>=t},startOffset:function(){return this.start},endOffset:function(){return this.end}}),W=B.extend({init:function(t,e,n,o,i,s,r){B.fn.init.apply(this,arguments),this.isHorizontal=!!r},offsetX:function(t,e){return t?this.offsetLeft+e:this.offsetLeft+e},startInRange:function(t){return t>=this.start&&this.end>t},endInRange:function(t){return t>this.start&&this.end>=t},startOffset:function(e,n,o){var i,s,r,l,a;if(o)return this.start;if(i=t(this.element).offset(),s=this.end-this.start,this.isHorizontal){if(a=D.support.isRtl(this.element),r=e-i.left,l=Math.floor(s*(r/this.offsetWidth)),a)return this.start+s-l}else r=n-i.top,l=Math.floor(s*(r/this.offsetHeight));return this.start+l},endOffset:function(e,n,o){var i,s,r,l,a;if(o)return this.end;if(i=t(this.element).offset(),s=this.end-this.start,this.isHorizontal){if(a=D.support.isRtl(this.element),r=e-i.left,l=Math.floor(s*(r/this.offsetWidth)),a)return this.start+s-l}else r=n-i.top,l=Math.floor(s*(r/this.offsetHeight));return this.start+l}}),V=B.extend({init:function(t,e,n,o,i,s,r){B.fn.init.apply(this,arguments),this.eventCount=r,this.isDaySlot=!0,this.element.children.length?(this.firstChildHeight=this.element.children[0].offsetHeight+3,this.firstChildTop=this.element.children[0].offsetTop):(this.firstChildHeight=3,this.firstChildTop=0)},startDate:function(){var t=new Date(this.start);return D.timezone.apply(t,\"Etc/UTC\")},endDate:function(){var t=new Date(this.end);return D.timezone.apply(t,\"Etc/UTC\")},startInRange:function(t){return t>=this.start&&this.end>t},endInRange:function(t){return t>this.start&&this.end>=t}});D.ui.SchedulerView=I.extend({init:function(e,n){I.fn.init.call(this,e,n),this._normalizeOptions(),this._scrollbar=u(),this._isRtl=D.support.isRtl(e),this._resizeHint=t(),this._moveHint=t(),this._cellId=D.guid(),this._resourcesForGroups(),this._selectedSlots=[]},_normalizeOptions:function(){var t=this.options;t.startTime&&t.startTime.setMilliseconds(0),t.endTime&&t.endTime.setMilliseconds(0),t.workDayStart&&t.workDayStart.setMilliseconds(0),t.workDayEnd&&t.workDayEnd.setMilliseconds(0)},_isMobile:function(){var t=this.options;return t.mobile===!0&&D.support.mobileOS||\"phone\"===t.mobile||\"tablet\"===t.mobile},_isMobilePhoneView:function(){var t=this.options;return t.mobile===!0&&D.support.mobileOS&&!D.support.mobileOS.tablet||\"phone\"===t.mobile},_addResourceView:function(){var t=new T(this.groups.length,this._isRtl);return this.groups.push(t),t},dateForTitle:function(){return D.format(this.options.selectedDateFormat,this.startDate(),this.endDate())},shortDateForTitle:function(){return D.format(this.options.selectedShortDateFormat,this.startDate(),this.endDate())},_changeGroup:function(t,e){var n=e?\"prevGroupSlot\":\"nextGroupSlot\",o=this[n](t.start,t.groupIndex,t.isAllDay);return o&&(t.groupIndex+=e?-1:1),this._isGroupedByDate()&&!o&&(t.groupIndex=e?this.groups.length-1:0),o},_changeDate:function(t,e,n){var o,i,s,r=this.groups[t.groupIndex];if(n){if(o=r._getCollections(!1),i=r.daySlotCollectionCount()?e.index-1:e.collectionIndex-1,i>=0)return o[i]._slots[o[i]._slots.length-1]}else if(o=r._getCollections(r.daySlotCollectionCount()),i=r.daySlotCollectionCount()?0:e.collectionIndex+1,s=r.daySlotCollectionCount()?e.collectionIndex+1:0,o[i]&&o[i]._slots[s])return o[i]._slots[s]},_changeGroupContinuously:function(){return null},_changeViewPeriod:function(){return!1},_horizontalSlots:function(t,e,n,o){var i,s,r,l=o?\"leftSlot\":\"rightSlot\",a={startSlot:e[0].start,endSlot:e[e.length-1].end},u=this.groups[t.groupIndex],c=this._isVerticallyGrouped();return n||(i=this._normalizeHorizontalSelection(t,e,o),i&&(a.startSlot=a.endSlot=i)),this._isGroupedByDate()&&!n?(s=this._changeGroup(t,o),s?a.startSlot=a.endSlot=s:a=this._getNextHorizontalRange(u,l,a)):(a.startSlot=u[l](a.startSlot),a.endSlot=u[l](a.endSlot),n||c||a.startSlot&&a.endSlot||(a.startSlot=a.endSlot=this._changeGroup(t,o))),a.startSlot&&a.endSlot||this._isGroupedByDate()||(r=this._continuousSlot(t,e,o),r=this._changeGroupContinuously(t,r,n,o),r&&(a.startSlot=a.endSlot=r)),a},_getNextHorizontalRange:function(t,e,n){return this._isVerticallyGrouped()||(n.startSlot=t[e](n.startSlot),n.endSlot=t[e](n.endSlot)),n},_verticalSlots:function(t,e,n,o){var i,s,r=this.groups[t.groupIndex],l={startSlot:e[0].start,endSlot:e[e.length-1].end};return n||(i=this._normalizeVerticalSelection(t,e,o),i&&(l.startSlot=l.endSlot=i)),s=o?\"upSlot\":\"downSlot\",l=this._getNextVerticalRange(r,s,l,n),n||!this._isVerticallyGrouped()||l.startSlot&&l.endSlot||(l.startSlot=l.endSlot=this._isGroupedByDate()?this._changeDate(t,i,o):this._changeGroup(t,o)),l},_getNextVerticalRange:function(t,e,n,o){return n.startSlot=t[e](n.startSlot,o),n.endSlot=t[e](n.endSlot,o),n},_normalizeHorizontalSelection:function(){return null},_normalizeVerticalSelection:function(t,e,n){var o;return o=n?e[0].start:e[e.length-1].end},_continuousSlot:function(){return null},constrainSelection:function(t){var e,n=this.groups[0];this.inRange(t)?n.daySlotCollectionCount()?n.timeSlotCollectionCount()||(t.isAllDay=!0):t.isAllDay=!1:(e=n.firstSlot(),t.isAllDay=e.isDaySlot,t.start=e.startDate(),t.end=e.endDate()),this.groups[t.groupIndex]||(t.groupIndex=0)},move:function(t,e,n){var o,i,s,r,l,a,u=!1,c=this.groups[t.groupIndex],h=this._isGroupedByDate()&&this._isVerticallyGrouped();if(c.timeSlotCollectionCount()||(t.isAllDay=!0),o=c.ranges(t.start,t.end,t.isAllDay,!1),e===k.DOWN||e===k.UP){if(u=!0,r=e===k.UP,this._updateDirection(t,o,n,r,!0),l=this._verticalSlots(t,o,n,r),!l.startSlot&&!n&&this._changeViewPeriod(t,r,!h))return u}else if((e===k.LEFT||e===k.RIGHT)&&(u=!0,r=e===k.LEFT,this._updateDirection(t,o,n,r,!1),l=this._horizontalSlots(t,o,n,r),!l.startSlot&&!n&&this._changeViewPeriod(t,r,h)))return u;return u&&(i=l.startSlot,s=l.endSlot,n?(a=t.backward,a&&i?t.start=i.startDate():!a&&s&&(t.end=s.endDate())):i&&s&&(t.isAllDay=i.isDaySlot,t.start=i.startDate(),t.end=s.endDate()),t.events=[]),u},moveToEventInGroup:function(e,n,o,i){for(var s,r,l=e._continuousEvents||[],a=i?-1:1,u=l.length,c=i?u-1:0;u>c&&c>-1;){if(r=l[c],(!i&&r.start.startDate()>=n.startDate()||i&&r.start.startDate()<=n.startDate())&&(o.length&&(r=l[c+a]),r&&-1===t.inArray(r.uid,o))){s=!!r;break}c+=a}return r},moveToEvent:function(t,e){var n,o,i,s,r,l,a=t.groupIndex,u=this.groups[a],c=u.ranges(t.start,t.end,t.isAllDay,!1)[0].start,h=this.groups.length,f=e?-1:1,d=t.events;if(this._isGroupedByDate())if(o=this._getAllEvents(),i=this._getUniqueEvents(o),s=this._getSortedEvents(i),0===d.length)r=this._getNextEventIndexBySlot(c,s,a),e&&r--,n=s[r];else for(l=this._getStartIdx(d,s);s.length>l&&l>-1&&(d.length>0&&(c=this._getSelectedSlot(c,s,n,l,f,e)),c);){if((!e&&s[l].start.startDate()>=c.startDate()||e&&s[l].start.startDate()<=c.startDate())&&d[0]!=s[l].uid){n=s[l];break}l+=f}else for(;h>a&&a>-1&&(n=this.moveToEventInGroup(u,c,d,e),a+=f,u=this.groups[a],u&&!n);)d=[],c=e?u.lastSlot():u.firstSlot(!0);return n&&(t.events=[n.uid],t.start=n.start.startDate(),t.end=n.end.endDate(),t.isAllDay=n.start.isDaySlot,t.groupIndex=n.start.groupIndex),!!n},current:function(t){return void 0===t?this._current:(this._current=t,void(this.content.has(t)&&this._scrollTo(t,this.content[0])))},select:function(t){this.clearSelection(),this._selectEvents(t)||this._selectSlots(t)},_getNextEventIndexBySlot:function(t,e,n){var o,i,s=0,r=D.date.getDate(t.startDate());for(o=0;e.length>o;o++)if(i=D.date.getDate(e[o].start.startDate()),r>i)s++;else if(r.getTime()===i.getTime()&&n>e[o].start.groupIndex)s++;else{if(!(r.getTime()===i.getTime()&&n>=e[o].start.groupIndex&&t.startDate()>e[o].start.startDate()))break;s++}return s},_getSelectedSlot:function(t,e,n,o,i,s){var r,l;return e[o+i]&&e[o].start.groupIndex!==e[o+i].start.groupIndex&&(r=e[o+i].start.groupIndex,l=this.groups[r],l&&!n||(t=null),t=s?l.lastSlot():l.firstSlot(!0)),t},_getStartIdx:function(e,n){var o=0;return t.each(n,function(){return this.uid===e[0]?!1:void o++}),o},_getAllEvents:function(){var t,e=[],n=this.groups;for(t=0;n.length>t;t++)n[t]._continuousEvents&&(e=e.concat(n[t]._continuousEvents));return e},_getUniqueEvents:function(t){var e,n,o,i=[];for(e=0;t.length>e;e++){for(n=!1,o=0;i.length>o;o++)if(t[e].uid===i[o].uid){n=!0;break}n||i.push(t[e])}return i},_getSortedEvents:function(e){return e.sort(function(e,n){var o=e.start.startDate(),i=n.start.startDate(),s=D.date.getDate(o)-D.date.getDate(i);return 0===s&&(s=e.start.groupIndex-n.start.groupIndex),0===s&&(s=o.getTime()-i.getTime()),0===s&&(e.start.isDaySlot&&!n.start.isDaySlot&&(s=-1),!e.start.isDaySlot&&n.start.isDaySlot&&(s=1)),0===s&&(s=t(e.element).index()-t(n.element).index()),s})},_selectSlots:function(t){var e,n,o,i,s,r,l,a=t.isAllDay,u=this.groups[t.groupIndex];for(u.timeSlotCollectionCount()||(a=!0),this._selectedSlots=[],e=u.ranges(t.start,t.end,a,!1),i=0;e.length>i;i++)for(s=e[i],r=s.collection,l=s.start.index;s.end.index>=l;l++)o=r.at(l),n=o.element,n.setAttribute(\"aria-selected\",!0),S(n),this._selectedSlots.push({start:o.startDate(),end:o.endDate(),element:n});t.backward&&(n=e[0].start.element),this.current(n)},_selectEvents:function(e){var n,o,i=!1,s=e.events,r=this.groups[e.groupIndex]._continuousEvents||[],l=r.length;if(!s[0]||!r[0])return i;for(o=t(),e.events=[],n=0;l>n;n++)t.inArray(r[n].uid,s)>-1&&(o=o.add(r[n].element),e.events.push(r[n].uid));return o[0]&&(o.addClass(\"k-state-selected\").attr(\"aria-selected\",!0),this.current(o.last()[0]),this._selectedSlots=[],i=!0),i},inRange:function(t){var e=this.startDate(),n=D.date.addDays(this.endDate(),1),o=t.start,i=t.end;return o>=e&&n>o&&i>e&&n>=i},_resourceValue:function(t,e){return t.valuePrimitive&&(e=D.getter(t.dataValueField)(e)),e},_resourceBySlot:function(t){var e,n,o,i,s,r=this.groupedResources,l={};if(r.length)for(e=t.groupIndex,n=r.length-1;n>=0;n--)o=r[n],i=this._resourceValue(o,o.dataSource.view()[e%o.dataSource.total()]),o.multiple&&(i=[i]),s=D.setter(o.field),s(l,i),e=Math.floor(e/o.dataSource.total());return l},_createResizeHint:function(e,n,o,i){return t(R).css({left:e,top:n,width:o,height:i})},_removeResizeHint:function(){this._resizeHint.remove(),this._resizeHint=t()},_removeMoveHint:function(){this._moveHint.remove(),this._moveHint=t()},_scrollTo:function(t,e){var n=t.offsetTop,o=t.offsetHeight,i=e.scrollTop,s=e.clientHeight,r=n+o,l=0;l=i>n?n:r>i+s?s>=o?r-s:n:i,e.scrollTop=l},_shouldInverseResourceColor:function(t){var e=new C(t.color).isDark(),n=this.element.css(\"color\"),o=new C(n).isDark();return e==o},_eventTmpl:function(e,n){var o,i=this.options,s=t.extend({},D.Template,i.templateSettings),r=s.paramName,l=\"\",a=typeof e,u={storage:{},count:0};return\"function\"===a?(u.storage[\"tmpl\"+u.count]=e,l+=\"#=this.tmpl\"+u.count+\"(\"+r+\")#\",u.count++):\"string\"===a&&(l+=e),o=D.template(D.format(n,l),s),u.count>0&&(o=t.proxy(o,u.storage)),o},eventResources:function(t){var e,n,o,i,s,r,l,a,u,c,h=[],f=this.options;if(!f.resources)return h;for(e=0;f.resources.length>e;e++)if(n=f.resources[e],o=n.field,i=D.getter(o)(t),null!=i)for(n.multiple||(i=[i]),s=n.dataSource.view(),r=0;i.length>r;r++){for(l=null,a=i[r],n.valuePrimitive||(a=D.getter(n.dataValueField)(a)),u=0;s.length>u;u++)if(s[u].get(n.dataValueField)==a){l=s[u];break}null!==l&&(c=D.getter(n.dataColorField)(l),h.push({field:n.field,title:n.title,name:n.name,text:D.getter(n.dataTextField)(l),value:a,color:c}))}return h},createLayout:function(o){var i,s,r,l,a,u=-1;for(o.rows||(o.rows=[]),i=0;o.rows.length>i;i++)if(o.rows[i].allDay){u=i;break}s=o.rows[u],u>=0&&o.rows.splice(u,1),r=this.columnLevels=e(o,\"columns\"),l=this.rowLevels=e(o,\"rows\"),this.table=t(\"<table \"+n()+' class=\"k-scheduler-layout k-scheduler-'+this.name+'view\"/>'),a=l[l.length-1].length,this.table.append(this._topSection(r,s,a)),this.table.append(this._bottomSection(r,l,a)),this.element.append(this.table),this._scroller()},refreshLayout:function(){var e,n,o,i,s,r,l=this,a=l.element.find(\">.k-scheduler-toolbar\"),u=l.element.innerHeight(),c=this._scrollbar,h=0,f=this._isRtl?\"left\":\"right\";for(e=0;a.length>e;e++)u-=a.eq(e).outerHeight();l.datesHeader&&(h=l.datesHeader.outerHeight()),l.timesHeader&&l.timesHeader.outerHeight()>h&&(h=l.timesHeader.outerHeight()),l.datesHeader&&l.timesHeader&&(n=l.datesHeader.find(\"table:first tr\"),l.timesHeader.find(\"tr\").height(function(e){t(this).height(n.eq(e).height())})),h&&(u-=h),l.footer&&(u-=l.footer.outerHeight()),o=function(t){var e,n;return t[0].style.height?!0:(e=t.height(),t.height(\"auto\"),n=t.height(),e!=n?(t.height(\"\"),!0):(t.height(\"\"),!1))},i=l.content[0],s=D.support.kineticScrollNeeded?0:c,o(l.element)&&(l.content.height(u>2*c?u:2*c+1),l.times.height(i.clientHeight),r=l.times.find(\"table\"),r.length&&r.height(l.content.find(\"table\")[0].clientHeight)),i.offsetWidth-i.clientWidth>0?(l.table.addClass(\"k-scrollbar-v\"),l.datesHeader.css(\"padding-\"+f,s-parseInt(l.datesHeader.children().css(\"border-\"+f+\"-width\"),10))):l.datesHeader.css(\"padding-\"+f,\"\"),i.offsetHeight-i.clientHeight>0||i.clientHeight>l.content.children(\".k-scheduler-table\").height()?l.table.addClass(\"k-scrollbar-h\"):l.table.removeClass(\"k-scrollbar-h\")},_topSection:function(e,n,o){this.timesHeader=s(e.length,n,o);var i=e[e.length-1].length;return this.datesHeader=r(e,i,n),t(\"<tr>\").append(this.timesHeader.add(this.datesHeader).wrap(\"<td>\").parent())},_bottomSection:function(e,n,o){return this.times=l(n,o),this.content=a(e[e.length-1],n[n.length-1]),t(\"<tr>\").append(this.times.add(this.content).wrap(\"<td>\").parent())},_scroller:function(){var e,n=this;this.content.bind(\"scroll\"+w,function(){n.datesHeader.find(\">.k-scheduler-header-wrap\").scrollLeft(this.scrollLeft),n.times.scrollTop(this.scrollTop)}),e=D.touchScroller(this.content,{avoidScrolling:function(e){return t(e.event.target).closest(\".k-event.k-event-active\").length>0}}),e&&e.movable&&(this._touchScroller=e,this.content=e.scrollElement,e.movable.bind(\"change\",function(t){n.datesHeader.find(\">.k-scheduler-header-wrap\").scrollLeft(-t.sender.x),n.times.scrollTop(-t.sender.y)}))},_resourcesForGroups:function(){var t,e,n,o,i=[],s=this.options.group,r=this.options.resources;if(s=s&&s.resources?s.resources:[],r&&s.length)for(t=0,e=r.length;e>t;t++)for(n=0,o=s.length;o>n;n++)r[t].name===s[n]&&i.push(r[t]);this.groupedResources=i},_createDateLayout:function(t,e,n){return _(\"rows\",t,e,n)},_createColumnsLayout:function(t,e,n,o,i){return v(\"columns\",t,e,n,o,i)},_groupOrientation:function(){var t=this.options.group;return t&&t.resources?t.orientation:\"horizontal\"},_isGroupedByDate:function(){return this.options.group&&this.options.group.date},_isVerticallyGrouped:function(){return this.groupedResources.length&&\"vertical\"===this._groupOrientation()},_createRowsLayout:function(t,e,n,o){return v(\"rows\",t,e,n,o)},selectionByElement:function(){return null},clearSelection:function(){this.content.find(\".k-state-selected\").removeAttr(\"id\").attr(\"aria-selected\",!1).removeClass(\"k-state-selected\")},destroy:function(){var t=this;I.fn.destroy.call(this),t.table&&(D.destroy(t.table),t.table.remove()),t.groups=null,t.table=null,t.content=null,t.times=null,t.datesHeader=null,t.timesHeader=null,t.footer=null,t._resizeHint=null,t._moveHint=null},calendarInfo:function(){return D.getCulture().calendars.standard},prevGroupSlot:function(t,e,n){var o,i=this.groups[e],s=i.ranges(t,t,n,!1)[0].start;if(!(0>=e))return this._isGroupedByDate()?s:this._isVerticallyGrouped()?i.timeSlotCollectionCount()?(o=i._collection(n?s.index:s.collectionIndex,!1),o.last()):(o=i._collection(i.daySlotCollectionCount()-1,!0),o.at(s.index)):i.timeSlotCollectionCount()?(o=i._collection(n?0:i.timeSlotCollectionCount()-1,n),n?o.last():o.at(s.index)):(o=i._collection(s.collectionIndex,!0),o.last())},nextGroupSlot:function(t,e,n){var o,i,s=this.groups[e],r=s.ranges(t,t,n,!1)[0].start;if(!(e>=this.groups.length-1))return this._isGroupedByDate()?r:this._isVerticallyGrouped()?s.timeSlotCollectionCount()?(i=s.daySlotCollectionCount(),o=s._collection(i?0:r.collectionIndex,i),n?o.first():o.at(r.collectionIndex)):(o=s._collection(0,!0),o.at(r.index)):s.timeSlotCollectionCount()?(o=s._collection(0,n),n?o.first():o.at(r.index)):(o=s._collection(r.collectionIndex,!0),o.first())},_eventOptionsForMove:function(){return{}},_updateEventForResize:function(){},_updateEventForSelection:function(t){return t}}),C=function(t){var e,n,o,i,s,r=this,l=C.formats;if(1===arguments.length)for(t=r.resolveColor(t),i=0;l.length>i;i++)e=l[i].re,n=l[i].process,o=e.exec(t),o&&(s=n(o),r.r=s[0],r.g=s[1],r.b=s[2]);else r.r=arguments[0],r.g=arguments[1],r.b=arguments[2];r.r=r.normalizeByte(r.r),r.g=r.normalizeByte(r.g),r.b=r.normalizeByte(r.b)},C.prototype={resolveColor:function(t){return t=t||\"#000\",\"#\"==t.charAt(0)&&(t=t.substr(1,6)),t=t.replace(/ /g,\"\"),t=t.toLowerCase(),t=C.namedColors[t]||t},normalizeByte:function(t){return 0>t||isNaN(t)?0:t>255?255:t},percBrightness:function(){var t=this;return H.sqrt(.241*t.r*t.r+.691*t.g*t.g+.068*t.b*t.b)},isDark:function(){var t=this,e=t.percBrightness();return 180>e}},C.formats=[{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,process:function(t){return[parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3],10)]}},{re:/^(\\w{2})(\\w{2})(\\w{2})$/,process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\\w{1})(\\w{1})(\\w{1})$/,process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],C.namedColors={aqua:\"00ffff\",azure:\"f0ffff\",beige:\"f5f5dc\",black:\"000000\",blue:\"0000ff\",brown:\"a52a2a\",coral:\"ff7f50\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkorange:\"ff8c00\",darkred:\"8b0000\",dimgray:\"696969\",fuchsia:\"ff00ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lightblue:\"add8e6\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumblue:\"0000cd\",navy:\"000080\",olive:\"808000\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",pink:\"ffc0cb\",plum:\"dda0dd\",purple:\"800080\",red:\"ff0000\",royalblue:\"4169e1\",salmon:\"fa8072\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"},x=/\\s*k-state-selected/,t.extend(b.SchedulerView,{createColumns:d,createRows:g,rangeIndex:h,collidingEvents:c,groupEqFilter:m})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()});\n//# sourceMappingURL=kendo.scheduler.view.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.calendar.min\",[\"kendo.core.min\"],t)}(function(){return function(t,e){function n(t,e,n,a){var r,i=t.getFullYear(),o=e.getFullYear(),s=n.getFullYear();return i-=i%a,r=i+(a-1),o>i&&(i=o),r>s&&(r=s),i+\"-\"+r}function a(t){for(var e,n=0,a=t.min,r=t.max,i=t.start,o=t.setter,l=t.build,u=t.cells||12,c=t.perRow||4,f=t.content||H,d=t.empty||E,g=t.html||'<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><tbody><tr role=\"row\">';u>n;n++)n>0&&n%c===0&&(g+='</tr><tr role=\"row\">'),i=new pt(i.getFullYear(),i.getMonth(),i.getDate(),0,0,0),T(i,0),e=l(i,n,t.disableDates),g+=s(i,a,r)?f(e):d(e),o(i,1);return g+\"</tr></tbody></table>\"}function r(t,e,n){var a=t.getFullYear(),r=e.getFullYear(),i=r,o=0;return n&&(r-=r%n,i=r-r%n+n-1),a>i?o=1:r>a&&(o=-1),o}function i(){var t=new pt;return new pt(t.getFullYear(),t.getMonth(),t.getDate())}function o(t,e,n){var a=i();return t&&(a=new pt(+t)),e>a?a=new pt(+e):a>n&&(a=new pt(+n)),a}function s(t,e,n){return+t>=+e&&+n>=+t}function l(t,e){return t.slice(e).concat(t.slice(0,e))}function u(t,e,n){e=e instanceof pt?e.getFullYear():t.getFullYear()+n*e,t.setFullYear(e)}function c(e){var n=t(this).hasClass(\"k-state-disabled\");n||t(this).toggleClass(J,st.indexOf(e.type)>-1||e.type==it)}function f(t){t.preventDefault()}function d(t){return A(t).calendars.standard}function g(t){var n=wt[t.start],a=wt[t.depth],r=A(t.culture);t.format=S(t.format||r.calendars.standard.patterns.d),isNaN(n)&&(n=0,t.start=q),(a===e||a>n)&&(t.depth=q),null===t.dates&&(t.dates=[])}function v(t){z&&t.find(\"*\").attr(\"unselectable\",\"on\")}function h(t,e){for(var n=0,a=e.length;a>n;n++)if(t===+e[n])return!0;return!1}function _(t,e){return t?t.getFullYear()===e.getFullYear()&&t.getMonth()===e.getMonth()&&t.getDate()===e.getDate():!1}function m(t,e){return t?t.getFullYear()===e.getFullYear()&&t.getMonth()===e.getMonth():!1}function p(e){return F.isFunction(e)?e:t.isArray(e)?D(e):t.noop}function w(t){var e,n=[];for(e=0;t.length>e;e++)n.push(t[e].setHours(0,0,0,0));return n}function D(e){var n,a,r,i,o,s=[],l=[\"su\",\"mo\",\"tu\",\"we\",\"th\",\"fr\",\"sa\"],u=\"if (found) { return true } else {return false}\";if(e[0]instanceof pt)s=w(e),n=\"var found = date && $.inArray(date.setHours(0, 0, 0, 0),[\"+s+\"]) > -1;\"+u;else{for(r=0;e.length>r;r++)i=e[r].slice(0,2).toLowerCase(),o=t.inArray(i,l),o>-1&&s.push(o);n=\"var found = date && $.inArray(date.getDay(),[\"+s+\"]) > -1;\"+u}return a=Function(\"date\",n)}function k(t,e){return t instanceof Date&&e instanceof Date&&(t=t.getTime(),e=e.getTime()),t===e}var b,F=window.kendo,y=F.support,x=F.ui,Y=x.Widget,C=F.keys,M=F.parseDate,T=F.date.adjustDST,S=F._extractFormat,O=F.template,A=F.getCulture,V=F.support.transitions,N=V?V.css+\"transform-origin\":\"\",H=O('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link\" href=\"\\\\#\" data-#=data.ns#value=\"#=data.dateString#\">#=data.value#</a></td>',{useWithBlock:!1}),E=O('<td role=\"gridcell\">&nbsp;</td>',{useWithBlock:!1}),P=F.support.browser,z=P.msie&&9>P.version,I=\".kendoCalendar\",B=\"click\"+I,W=\"keydown\"+I,R=\"id\",U=\"min\",j=\"left\",G=\"slideIn\",q=\"month\",L=\"century\",$=\"change\",K=\"navigate\",Q=\"value\",J=\"k-state-hover\",X=\"k-state-disabled\",Z=\"k-state-focused\",tt=\"k-other-month\",et=' class=\"'+tt+'\"',nt=\"k-nav-today\",at=\"td:has(.k-link)\",rt=\"blur\"+I,it=\"focus\",ot=it+I,st=y.touch?\"touchstart\":\"mouseenter\",lt=y.touch?\"touchstart\"+I:\"mouseenter\"+I,ut=y.touch?\"touchend\"+I+\" touchmove\"+I:\"mouseleave\"+I,ct=6e4,ft=864e5,dt=\"_prevArrow\",gt=\"_nextArrow\",vt=\"aria-disabled\",ht=\"aria-selected\",_t=t.proxy,mt=t.extend,pt=Date,wt={month:0,year:1,decade:2,century:3},Dt=Y.extend({init:function(e,n){var a,r,s=this;Y.fn.init.call(s,e,n),e=s.wrapper=s.element,n=s.options,n.url=window.unescape(n.url),s.options.disableDates=p(s.options.disableDates),s._templates(),s._header(),s._footer(s.footer),r=e.addClass(\"k-widget k-calendar\").on(lt+\" \"+ut,at,c).on(W,\"table.k-content\",_t(s._move,s)).on(B,at,function(e){var n=e.currentTarget.firstChild,a=s._toDateObject(n);-1!=n.href.indexOf(\"#\")&&e.preventDefault(),s.options.disableDates(a)&&\"month\"==s._view.name||s._click(t(n))}).on(\"mouseup\"+I,\"table.k-content, .k-footer\",function(){s._focusView(s.options.focusOnNav!==!1)}).attr(R),r&&(s._cellID=r+\"_cell_selected\"),g(n),a=M(n.value,n.format,n.culture),s._index=wt[n.start],s._current=new pt(+o(a,n.min,n.max)),s._addClassProxy=function(){if(s._active=!0,s._cell.hasClass(X)){var t=s._view.toDateString(i());s._cell=s._cellByDate(t)}s._cell.addClass(Z)},s._removeClassProxy=function(){s._active=!1,s._cell.removeClass(Z)},s.value(a),F.notify(s)},options:{name:\"Calendar\",value:null,min:new pt(1900,0,1),max:new pt(2099,11,31),dates:[],url:\"\",culture:\"\",footer:\"\",format:\"\",month:{},start:q,depth:q,animation:{horizontal:{effects:G,reverse:!0,duration:500,divisor:2},vertical:{effects:\"zoomIn\",duration:400}}},events:[$,K],setOptions:function(t){var e=this;g(t),t.disableDates=p(t.disableDates),Y.fn.setOptions.call(e,t),e._templates(),e._footer(e.footer),e._index=wt[e.options.start],e.navigate()},destroy:function(){var t=this,e=t._today;t.element.off(I),t._title.off(I),t[dt].off(I),t[gt].off(I),F.destroy(t._table),e&&F.destroy(e.off(I)),Y.fn.destroy.call(t)},current:function(){return this._current},view:function(){return this._view},focus:function(t){t=t||this._table,this._bindTable(t),t.focus()},min:function(t){return this._option(U,t)},max:function(t){return this._option(\"max\",t)},navigateToPast:function(){this._navigate(dt,-1)},navigateToFuture:function(){this._navigate(gt,1)},navigateUp:function(){var t=this,e=t._index;t._title.hasClass(X)||t.navigate(t._current,++e)},navigateDown:function(t){var n=this,a=n._index,r=n.options.depth;if(t)return a===wt[r]?(k(n._value,n._current)&&k(n._value,t)||(n.value(t),n.trigger($)),e):(n.navigate(t,--a),e)},navigate:function(n,a){var r,i,s,l,u,c,f,d,g,h,_,m,p,w,D,k,F;a=isNaN(a)?wt[a]:a,r=this,i=r.options,s=i.culture,l=i.min,u=i.max,c=r._title,f=r._table,d=r._oldTable,g=r._value,h=r._current,_=n&&+n>+h,m=a!==e&&a!==r._index,n||(n=h),r._current=n=new pt(+o(n,l,u)),a===e?a=r._index:r._index=a,r._view=w=b.views[a],D=w.compare,k=a===wt[L],c.toggleClass(X,k).attr(vt,k),k=D(n,l)<1,r[dt].toggleClass(X,k).attr(vt,k),k=D(n,u)>-1,r[gt].toggleClass(X,k).attr(vt,k),f&&d&&d.data(\"animating\")&&(d.kendoStop(!0,!0),f.kendoStop(!0,!0)),r._oldTable=f,f&&!r._changeView||(c.html(w.title(n,l,u,s)),r._table=p=t(w.content(mt({min:l,max:u,date:n,url:i.url,dates:i.dates,format:i.format,culture:s,disableDates:i.disableDates},r[w.name]))),v(p),F=f&&f.data(\"start\")===p.data(\"start\"),r._animate({from:f,to:p,vertical:m,future:_,replace:F}),r.trigger(K),r._focus(n)),a===wt[i.depth]&&g&&!r.options.disableDates(g)&&r._class(\"k-state-selected\",g),r._class(Z,n),!f&&r._cell&&r._cell.removeClass(Z),r._changeView=!0},value:function(t){var n=this,a=n._view,r=n.options,i=n._view,o=r.min,l=r.max;return t===e?n._value:(null===t&&(n._current=new Date(n._current.getFullYear(),n._current.getMonth(),n._current.getDate())),t=M(t,r.format,r.culture),null!==t&&(t=new pt(+t),s(t,o,l)||(t=null)),null!==t&&n.options.disableDates(t)?n._value===e&&(n._value=null):n._value=t,i&&null===t&&n._cell?n._cell.removeClass(\"k-state-selected\"):(n._changeView=!t||a&&0!==a.compare(t,n._current),n.navigate(t)),e)},_move:function(e){var n,a,r,i,l=this,u=l.options,c=e.keyCode,f=l._view,d=l._index,g=l.options.min,v=l.options.max,h=new pt(+l._current),_=F.support.isRtl(l.wrapper),m=l.options.disableDates;return e.target===l._table[0]&&(l._active=!0),e.ctrlKey?c==C.RIGHT&&!_||c==C.LEFT&&_?(l.navigateToFuture(),a=!0):c==C.LEFT&&!_||c==C.RIGHT&&_?(l.navigateToPast(),a=!0):c==C.UP?(l.navigateUp(),a=!0):c==C.DOWN&&(l._click(t(l._cell[0].firstChild)),a=!0):(c==C.RIGHT&&!_||c==C.LEFT&&_?(n=1,a=!0):c==C.LEFT&&!_||c==C.RIGHT&&_?(n=-1,a=!0):c==C.UP?(n=0===d?-7:-4,a=!0):c==C.DOWN?(n=0===d?7:4,a=!0):c==C.ENTER?(l._click(t(l._cell[0].firstChild)),a=!0):c==C.HOME||c==C.END?(r=c==C.HOME?\"first\":\"last\",i=f[r](h),h=new pt(i.getFullYear(),i.getMonth(),i.getDate(),h.getHours(),h.getMinutes(),h.getSeconds(),h.getMilliseconds()),a=!0):c==C.PAGEUP?(a=!0,l.navigateToPast()):c==C.PAGEDOWN&&(a=!0,l.navigateToFuture()),(n||r)&&(r||f.setDate(h,n),m(h)&&(h=l._nextNavigatable(h,n)),s(h,g,v)&&l._focus(o(h,u.min,u.max)))),a&&e.preventDefault(),l._current},_nextNavigatable:function(t,e){var n=this,a=!0,r=n._view,i=n.options.min,o=n.options.max,l=n.options.disableDates,u=new Date(t.getTime());for(r.setDate(u,-e);a;){if(r.setDate(t,e),!s(t,i,o)){t=u;break}a=l(t)}return t},_animate:function(t){var e=this,n=t.from,a=t.to,r=e._active;n?n.parent().data(\"animating\")?(n.off(I),n.parent().kendoStop(!0,!0).remove(),n.remove(),a.insertAfter(e.element[0].firstChild),e._focusView(r)):!n.is(\":visible\")||e.options.animation===!1||t.replace?(a.insertAfter(n),n.off(I).remove(),e._focusView(r)):e[t.vertical?\"_vertical\":\"_horizontal\"](n,a,t.future):(a.insertAfter(e.element[0].firstChild),e._bindTable(a))},_horizontal:function(t,e,n){var a=this,r=a._active,i=a.options.animation.horizontal,o=i.effects,s=t.outerWidth();o&&-1!=o.indexOf(G)&&(t.add(e).css({width:s}),t.wrap(\"<div/>\"),a._focusView(r,t),t.parent().css({position:\"relative\",width:2*s,\"float\":j,\"margin-left\":n?0:-s}),e[n?\"insertAfter\":\"insertBefore\"](t),mt(i,{effects:G+\":\"+(n?\"right\":j),complete:function(){t.off(I).remove(),a._oldTable=null,e.unwrap(),a._focusView(r)}}),t.parent().kendoStop(!0,!0).kendoAnimate(i))},_vertical:function(t,e){var n,a,r=this,i=r.options.animation.vertical,o=i.effects,s=r._active;o&&-1!=o.indexOf(\"zoom\")&&(e.css({position:\"absolute\",top:t.prev().outerHeight(),left:0}).insertBefore(t),N&&(n=r._cellByDate(r._view.toDateString(r._current)),a=n.position(),a=a.left+parseInt(n.width()/2,10)+\"px \"+(a.top+parseInt(n.height()/2,10)+\"px\"),e.css(N,a)),t.kendoStop(!0,!0).kendoAnimate({effects:\"fadeOut\",duration:600,complete:function(){t.off(I).remove(),r._oldTable=null,e.css({position:\"static\",top:0,left:0}),r._focusView(s)}}),e.kendoStop(!0,!0).kendoAnimate(i))},_cellByDate:function(e){return this._table.find(\"td:not(.\"+tt+\")\").filter(function(){return t(this.firstChild).attr(F.attr(Q))===e})},_class:function(e,n){var a,r=this,i=r._cellID,o=r._cell,s=r._view.toDateString(n);o&&o.removeAttr(ht).removeAttr(\"aria-label\").removeAttr(R),n&&(a=r.options.disableDates(n)),o=r._table.find(\"td:not(.\"+tt+\")\").removeClass(e).filter(function(){return t(this.firstChild).attr(F.attr(Q))===s}).attr(ht,!0),(e===Z&&!r._active&&r.options.focusOnNav!==!1||a)&&(e=\"\"),o.addClass(e),o[0]&&(r._cell=o),i&&(o.attr(R,i),r._table.removeAttr(\"aria-activedescendant\").attr(\"aria-activedescendant\",i))},_bindTable:function(t){t.on(ot,this._addClassProxy).on(rt,this._removeClassProxy)},_click:function(t){var e=this,n=e.options,a=new Date(+e._current),r=e._toDateObject(t);T(r,0),e.options.disableDates(r)&&\"month\"==e._view.name&&(r=e._value),e._view.setDate(a,r),e.navigateDown(o(a,n.min,n.max))},_focus:function(t){var e=this,n=e._view;0!==n.compare(t,e._current)?e.navigate(t):(e._current=t,e._class(Z,t))},_focusView:function(t,e){t&&this.focus(e)},_footer:function(n){var a=this,r=i(),o=a.element,s=o.find(\".k-footer\");return n?(s[0]||(s=t('<div class=\"k-footer\"><a href=\"#\" class=\"k-link k-nav-today\"></a></div>').appendTo(o)),a._today=s.show().find(\".k-link\").html(n(r)).attr(\"title\",F.toString(r,\"D\",a.options.culture)),a._toggle(),e):(a._toggle(!1),s.hide(),e)},_header:function(){var t,e=this,n=e.element;n.find(\".k-header\")[0]||n.html('<div class=\"k-header\"><a href=\"#\" role=\"button\" class=\"k-link k-nav-prev\"><span class=\"k-icon k-i-arrow-w\"></span></a><a href=\"#\" role=\"button\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"k-link k-nav-fast\"></a><a href=\"#\" role=\"button\" class=\"k-link k-nav-next\"><span class=\"k-icon k-i-arrow-e\"></span></a></div>'),t=n.find(\".k-link\").on(lt+\" \"+ut+\" \"+ot+\" \"+rt,c).click(!1),e._title=t.eq(1).on(B,function(){e._active=e.options.focusOnNav!==!1,e.navigateUp()}),e[dt]=t.eq(0).on(B,function(){e._active=e.options.focusOnNav!==!1,e.navigateToPast()}),e[gt]=t.eq(2).on(B,function(){e._active=e.options.focusOnNav!==!1,e.navigateToFuture()})},_navigate:function(t,e){var n=this,a=n._index+1,r=new pt(+n._current);t=n[t],t.hasClass(X)||(a>3?r.setFullYear(r.getFullYear()+100*e):b.views[a].setDate(r,e),n.navigate(r))},_option:function(t,n){var a,r=this,i=r.options,o=r._value||r._current;return n===e?i[t]:(n=M(n,i.format,i.culture),n&&(i[t]=new pt(+n),a=t===U?n>o:o>n,(a||m(o,n))&&(a&&(r._value=null),r._changeView=!0),r._changeView||(r._changeView=!(!i.month.content&&!i.month.empty)),r.navigate(r._value),r._toggle()),e)},_toggle:function(t){var n=this,a=n.options,r=n.options.disableDates(i()),o=n._today;t===e&&(t=s(i(),a.min,a.max)),o&&(o.off(B),t&&!r?o.addClass(nt).removeClass(X).on(B,_t(n._todayClick,n)):o.removeClass(nt).addClass(X).on(B,f))},_todayClick:function(t){var e=this,n=wt[e.options.depth],a=e.options.disableDates,r=i();t.preventDefault(),a(r)||(0===e._view.compare(e._current,r)&&e._index==n&&(e._changeView=!1),e._value=r,e.navigate(r,n),e.trigger($))},_toDateObject:function(e){var n=t(e).attr(F.attr(Q)).split(\"/\");return n=new pt(n[0],n[1],n[2])},_templates:function(){var t=this,e=t.options,n=e.footer,a=e.month,r=a.content,i=a.empty;t.month={content:O('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link#=data.linkClass#\" href=\"#=data.url#\" '+F.attr(\"value\")+'=\"#=data.dateString#\" title=\"#=data.title#\">'+(r||\"#=data.value#\")+\"</a></td>\",{useWithBlock:!!r}),empty:O('<td role=\"gridcell\">'+(i||\"&nbsp;\")+\"</td>\",{useWithBlock:!!i})},t.footer=n!==!1?O(n||'#= kendo.toString(data,\"D\",\"'+e.culture+'\") #',{useWithBlock:!1}):null}});x.plugin(Dt),b={firstDayOfMonth:function(t){return new pt(t.getFullYear(),t.getMonth(),1)},firstVisibleDay:function(t,e){e=e||F.culture().calendar;for(var n=e.firstDay,a=new pt(t.getFullYear(),t.getMonth(),0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds());a.getDay()!=n;)b.setTime(a,-1*ft);return a},setTime:function(t,e){var n=t.getTimezoneOffset(),a=new pt(t.getTime()+e),r=a.getTimezoneOffset()-n;t.setTime(a.getTime()+r*ct)},views:[{name:q,title:function(t,e,n,a){return d(a).months.names[t.getMonth()]+\" \"+t.getFullYear()},content:function(t){for(var e=this,n=0,r=t.min,i=t.max,o=t.date,s=t.dates,u=t.format,c=t.culture,f=t.url,g=f&&s[0],v=d(c),_=v.firstDay,m=v.days,p=l(m.names,_),w=l(m.namesShort,_),D=b.firstVisibleDay(o,v),k=e.first(o),y=e.last(o),x=e.toDateString,Y=new pt,C='<table tabindex=\"0\" role=\"grid\" class=\"k-content\" cellspacing=\"0\" data-start=\"'+x(D)+'\"><thead><tr role=\"row\">';7>n;n++)C+='<th scope=\"col\" title=\"'+p[n]+'\">'+w[n]+\"</th>\";return Y=new pt(Y.getFullYear(),Y.getMonth(),Y.getDate()),T(Y,0),Y=+Y,a({cells:42,perRow:7,html:C+='</tr></thead><tbody><tr role=\"row\">',start:D,min:new pt(r.getFullYear(),r.getMonth(),r.getDate()),max:new pt(i.getFullYear(),i.getMonth(),i.getDate()),content:t.content,empty:t.empty,setter:e.setDate,disableDates:t.disableDates,build:function(t,e,n){var a=[],r=t.getDay(),i=\"\",o=\"#\";return(k>t||t>y)&&a.push(tt),n(t)&&a.push(X),+t===Y&&a.push(\"k-today\"),0!==r&&6!==r||a.push(\"k-weekend\"),g&&h(+t,s)&&(o=f.replace(\"{0}\",F.toString(t,u,c)),i=\" k-action-link\"),{date:t,dates:s,ns:F.ns,title:F.toString(t,\"D\",c),value:t.getDate(),dateString:x(t),cssClass:a[0]?' class=\"'+a.join(\" \")+'\"':\"\",linkClass:i,url:o}}})},first:function(t){return b.firstDayOfMonth(t)},last:function(t){var e=new pt(t.getFullYear(),t.getMonth()+1,0),n=b.firstDayOfMonth(t),a=Math.abs(e.getTimezoneOffset()-n.getTimezoneOffset());return a&&e.setHours(n.getHours()+a/60),e},compare:function(t,e){var n,a=t.getMonth(),r=t.getFullYear(),i=e.getMonth(),o=e.getFullYear();return n=r>o?1:o>r?-1:a==i?0:a>i?1:-1},setDate:function(t,e){var n=t.getHours();e instanceof pt?t.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()):b.setTime(t,e*ft),T(t,n)},toDateString:function(t){return t.getFullYear()+\"/\"+t.getMonth()+\"/\"+t.getDate()}},{name:\"year\",title:function(t){return t.getFullYear()},content:function(t){var e=d(t.culture).months.namesAbbr,n=this.toDateString,r=t.min,i=t.max;return a({min:new pt(r.getFullYear(),r.getMonth(),1),max:new pt(i.getFullYear(),i.getMonth(),1),start:new pt(t.date.getFullYear(),0,1),setter:this.setDate,build:function(t){return{value:e[t.getMonth()],ns:F.ns,dateString:n(t),cssClass:\"\"}}})},first:function(t){return new pt(t.getFullYear(),0,t.getDate())},last:function(t){return new pt(t.getFullYear(),11,t.getDate())},compare:function(t,e){return r(t,e)},setDate:function(t,e){var n,a=t.getHours();e instanceof pt?(n=e.getMonth(),t.setFullYear(e.getFullYear(),n,t.getDate()),n!==t.getMonth()&&t.setDate(0)):(n=t.getMonth()+e,t.setMonth(n),n>11&&(n-=12),n>0&&t.getMonth()!=n&&t.setDate(0)),T(t,a)},toDateString:function(t){return t.getFullYear()+\"/\"+t.getMonth()+\"/1\"}},{name:\"decade\",title:function(t,e,a){return n(t,e,a,10)},content:function(t){var e=t.date.getFullYear(),n=this.toDateString;return a({start:new pt(e-e%10-1,0,1),min:new pt(t.min.getFullYear(),0,1),max:new pt(t.max.getFullYear(),0,1),setter:this.setDate,build:function(t,e){return{value:t.getFullYear(),ns:F.ns,dateString:n(t),cssClass:0===e||11==e?et:\"\"}}})},first:function(t){var e=t.getFullYear();return new pt(e-e%10,t.getMonth(),t.getDate())},last:function(t){var e=t.getFullYear();return new pt(e-e%10+9,t.getMonth(),t.getDate())},compare:function(t,e){return r(t,e,10)},setDate:function(t,e){u(t,e,1)},toDateString:function(t){return t.getFullYear()+\"/0/1\"}},{name:L,title:function(t,e,a){return n(t,e,a,100)},content:function(t){var e=t.date.getFullYear(),n=t.min.getFullYear(),r=t.max.getFullYear(),i=this.toDateString,o=n,s=r;return o-=o%10,s-=s%10,10>s-o&&(s=o+9),a({start:new pt(e-e%100-10,0,1),min:new pt(o,0,1),max:new pt(s,0,1),setter:this.setDate,build:function(t,e){var a=t.getFullYear(),o=a+9;return n>a&&(a=n),o>r&&(o=r),{ns:F.ns,value:a+\" - \"+o,dateString:i(t),cssClass:0===e||11==e?et:\"\"}}})},first:function(t){var e=t.getFullYear();return new pt(e-e%100,t.getMonth(),t.getDate())},last:function(t){var e=t.getFullYear();return new pt(e-e%100+99,t.getMonth(),t.getDate())},compare:function(t,e){return r(t,e,100)},setDate:function(t,e){u(t,e,10)},toDateString:function(t){var e=t.getFullYear();return e-e%10+\"/0/1\"}}]},b.isEqualDatePart=_,b.isEqualDate=k,b.makeUnselectable=v,b.restrictValue=o,b.isInRange=s,b.normalize=g,b.viewsEnum=wt,b.disabled=p,F.calendar=b}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()});\n//# sourceMappingURL=kendo.calendar.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.data.odata.min\",[\"kendo.core.min\"],t)}(function(){return function(t,e){function n(a,r){var d,p,c,l,u,f,y,j,m=[],T=a.logic||\"and\",g=a.filters;for(d=0,p=g.length;p>d;d++)a=g[d],c=a.field,y=a.value,f=a.operator,a.filters?a=n(a,r):(j=a.ignoreCase,c=c.replace(/\\./g,\"/\"),a=i[f],r&&(a=s[f]),\"isnull\"===f||\"isnotnull\"===f?a=o.format(\"{0} {1} null\",c,a):\"isempty\"===f||\"isnotempty\"===f?a=o.format(\"{0} {1} ''\",c,a):a&&y!==e&&(l=t.type(y),\"string\"===l?(u=\"'{1}'\",y=y.replace(/'/g,\"''\"),j===!0&&(c=\"tolower(\"+c+\")\")):\"date\"===l?r?(u=\"{1:yyyy-MM-ddTHH:mm:ss+00:00}\",y=o.timezone.apply(y,\"Etc/UTC\")):u=\"datetime'{1:yyyy-MM-ddTHH:mm:ss}'\":u=\"{1}\",a.length>3?\"substringof\"!==a?u=\"{0}({2},\"+u+\")\":(u=\"{0}(\"+u+\",{2})\",\"doesnotcontain\"===f&&(r?(u=\"{0}({2},'{1}') eq -1\",a=\"indexof\"):u+=\" eq false\")):u=\"{2} {0} \"+u,a=o.format(u,a,y,c))),m.push(a);return a=m.join(\" \"+T+\" \"),m.length>1&&(a=\"(\"+a+\")\"),a}function a(t){for(var e in t)0===e.indexOf(\"@odata\")&&delete t[e]}var o=window.kendo,r=t.extend,i={eq:\"eq\",neq:\"ne\",gt:\"gt\",gte:\"ge\",lt:\"lt\",lte:\"le\",contains:\"substringof\",doesnotcontain:\"substringof\",endswith:\"endswith\",startswith:\"startswith\",isnull:\"eq\",isnotnull:\"ne\",isempty:\"eq\",isnotempty:\"ne\"},s=r({},i,{contains:\"contains\"}),d={pageSize:t.noop,page:t.noop,filter:function(t,e,a){e&&(e=n(e,a),e&&(t.$filter=e))},sort:function(e,n){var a=t.map(n,function(t){var e=t.field.replace(/\\./g,\"/\");return\"desc\"===t.dir&&(e+=\" desc\"),e}).join(\",\");a&&(e.$orderby=a)},skip:function(t,e){e&&(t.$skip=e)},take:function(t,e){e&&(t.$top=e)}},p={read:{dataType:\"jsonp\"}};r(!0,o.data,{schemas:{odata:{type:\"json\",data:function(t){return t.d.results||[t.d]},total:\"d.__count\"}},transports:{odata:{read:{cache:!0,dataType:\"jsonp\",jsonp:\"$callback\"},update:{cache:!0,dataType:\"json\",contentType:\"application/json\",type:\"PUT\"},create:{cache:!0,dataType:\"json\",contentType:\"application/json\",type:\"POST\"},destroy:{cache:!0,dataType:\"json\",type:\"DELETE\"},parameterMap:function(t,e,n){var a,r,i,s;if(t=t||{},e=e||\"read\",s=(this.options||p)[e],s=s?s.dataType:\"json\",\"read\"===e){a={$inlinecount:\"allpages\"},\"json\"!=s&&(a.$format=\"json\");for(i in t)d[i]?d[i](a,t[i],n):a[i]=t[i]}else{if(\"json\"!==s)throw Error(\"Only json dataType can be used for \"+e+\" operation.\");if(\"destroy\"!==e){for(i in t)r=t[i],\"number\"==typeof r&&(t[i]=r+\"\");a=o.stringify(t)}}return a}}}}),r(!0,o.data,{schemas:{\"odata-v4\":{type:\"json\",data:function(e){return e=t.extend({},e),a(e),e.value?e.value:[e]},total:function(t){return t[\"@odata.count\"]}}},transports:{\"odata-v4\":{read:{cache:!0,dataType:\"json\"},update:{cache:!0,dataType:\"json\",contentType:\"application/json;IEEE754Compatible=true\",type:\"PUT\"},create:{cache:!0,dataType:\"json\",contentType:\"application/json;IEEE754Compatible=true\",type:\"POST\"},destroy:{cache:!0,dataType:\"json\",type:\"DELETE\"},parameterMap:function(t,e){var n=o.data.transports.odata.parameterMap(t,e,!0);return\"read\"==e&&(n.$count=!0,delete n.$inlinecount),n}}}})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()});\n//# sourceMappingURL=kendo.data.odata.min.js.map\n","import { Nullable } from \"app2/src/records\";\nimport { Record, List, Map, fromJS } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IGeoJsonData>): GeoJsonRecord => {\n  const data: IGeoJsonRecord = { ...(json as any) };\n\n  if (json.leaflet) {\n    data.leaflet = List(fromJS(json.leaflet));\n  }\n\n  if (json.rapid_area) {\n    data.rapid_area = List(fromJS(json.rapid_area));\n  }\n\n  return new GeoJsonRecord(data);\n};\n\nexport interface IGeoJsonData {\n  leaflet: any[];\n  leafletZoom: number;\n  rapid_area: any[];\n}\n\nexport interface IGeoJsonRecord {\n  leaflet: List<Map<any, any>>;\n  leafletZoom: Nullable<number>;\n  rapid_area: List<Map<any, any>>;\n}\n\nconst defaultGeoJsonProps: IGeoJsonRecord = {\n  leaflet: List(),\n  leafletZoom: null,\n  rapid_area: List(),\n};\n\nexport class GeoJsonRecord extends Record(defaultGeoJsonProps) implements IGeoJsonRecord {}\n","import { IOrg } from \"app/src/Models/Org\";\nimport { DeckRecord, IDeckData } from \"app2/src/records/Deck\";\nimport { DoorRecord, IDoorData } from \"app2/src/records/Door\";\nimport { ElevationRecord, IElevationData } from \"app2/src/records/Elevation\";\nimport { IPoolData, PoolRecord } from \"app2/src/records/Pool\";\nimport { IRoofFaceData, RoofFaceRecord } from \"app2/src/records/RoofFace\";\nimport { IRoomData, RoomRecord } from \"app2/src/records/Room\";\nimport { IWallFacadeData, WallFacadeRecord } from \"app2/src/records/WallFacade\";\nimport { IWindowData, WindowRecord } from \"app2/src/records/Window\";\nimport { Record, List } from \"immutable\";\nimport { Nullable } from \".\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\nimport { IMeasurement } from \"app/src/Models/Measurement\";\nimport { fromJSON as geoJsonFromJSON } from \"app2/src/records/GeoJson\";\nimport { Parser } from \"hot-formula-parser\";\nimport { imperial_uom, metric_uom } from \"app/src/Common/Constants\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { measurementIdFullFencing } from \"app2/src/selectors/measurements/fencing.selectors\";\nimport { FencingRecord } from \"./measurements/Fencing\";\n\nexport const fromJSON = (json: Partial<IMeasurementData>): MeasurementRecord => {\n  const recordData: IMeasurementRecord = { ...(json as any) };\n\n  if (json.roof_faces) {\n    recordData.roof_face_ids = List(json.roof_faces.map((pog) => pog.id));\n  }\n\n  if (json.wall_facades) {\n    recordData.wall_facade_ids = List(json.wall_facades.map((pog) => pog.id));\n  }\n\n  if (json.windows) {\n    recordData.window_ids = List(json.windows.map((pog) => pog.id));\n  }\n\n  if (json.doors) {\n    recordData.door_ids = List(json.doors.map((pog) => pog.id));\n  }\n\n  if (json.rooms) {\n    recordData.room_ids = List(json.rooms.map((pog) => pog.id));\n  }\n\n  if (json.elevations) {\n    recordData.elevation_ids = List(json.elevations.map((pog) => pog.id));\n  }\n\n  if (json.decks) {\n    recordData.deck_ids = List(json.decks.map((pog) => pog.id));\n  }\n\n  if (json.pools) {\n    recordData.pool_ids = List(json.pools.map((pog) => pog.id));\n  }\n\n  if (json.geojson) {\n    recordData.geojson = geoJsonFromJSON(json.geojson);\n  }\n\n  if (json.locations) {\n    recordData.locations = List(json.locations);\n  }\n\n  if (json.levels) {\n    recordData.levels = List(json.levels);\n  }\n\n  const record = new MeasurementRecord(recordData);\n\n  return record;\n};\n\nexport const objects = List([\"roof_face\", \"wall_facade\", \"window\", \"door\", \"room\", \"deck\", \"pool\"]);\nexport const properties = List([\"roofing\", \"siding\", \"sunroom\"]);\nexport const propertiesMapping = List([\"roof\", \"siding\", \"sunroom\"]);\nexport const exteriorMeasurements = List([\n  \"roofing\",\n  \"siding\",\n  \"sunroom\",\n  \"walls\",\n  \"windows\",\n  \"doors\",\n  \"decks\",\n  \"pools\",\n  \"fencing\",\n]);\nexport const lineMeasurementUpdate = List([\n  \"roof_ridge\",\n  \"roof_hip\",\n  \"roof_valley\",\n  \"roof_eave\",\n  \"roof_rake\",\n  \"roof_step_flashing\",\n  \"roof_headwall_flashing\",\n]);\nexport const sunroomUpdate = List([\n  \"sunroom_a_wall_length\",\n  \"sunroom_a_wall_height\",\n  \"sunroom_b_wall_length\",\n  \"sunroom_b_wall_height\",\n  \"sunroom_c_wall_length\",\n  \"sunroom_c_wall_height\",\n  \"sunroom_wall_perimeter\",\n  \"sunroom_wall_total_area\",\n]);\nexport const sunroomKneeWallUpdate = List([\n  \"sunroom_kw_a_length\",\n  \"sunroom_kw_a_height\",\n  \"sunroom_kw_b_length\",\n  \"sunroom_kw_b_height\",\n  \"sunroom_kw_c_length\",\n  \"sunroom_kw_c_height\",\n]);\n\nexport const hasMeasurements = (measurement: MeasurementRecord, org: IOrg, location: string) => {\n  if (!measurement) {\n    return false;\n  }\n\n  const prop = properties.find((mp, index) => {\n    return (\n      hasMeasurementProperties(measurement, propertiesMapping.get(index)) && org.showMeasurementSection(mp, location)\n    );\n  });\n\n  if (prop) {\n    return true;\n  }\n\n  const object = objects.find((obj) => {\n    return measurement.get(`${obj}_ids` as any).size > 0 && org.showMeasurementSection(`${obj}s`, location);\n  });\n\n  if (object) {\n    return true;\n  }\n\n  return false;\n};\n\nexport const hasMeasurementProperties = (measurement: MeasurementRecord, searchString: string): boolean => {\n  const regexPattern = new RegExp(\"^\" + searchString + \".*\");\n\n  let prop: string;\n  for (prop in measurement.toJS()) {\n    if (_.isFunction(prop) || !regexPattern.test(prop)) {\n      continue;\n    }\n\n    if (measurement.get(prop as any) > 0) {\n      return true;\n    }\n  }\n  return false;\n};\n\nexport const setupForumulaParser = (measurement: IMeasurement, addtl?: AdditionalMeasurements) => {\n  const parser = new Parser();\n  _.each(columnKeys(measurement), (k) => {\n    parser.setVariable(k, measurement[k]);\n  });\n  setupFencingMeasurements(parser, measurement.id, addtl?.fencing);\n  return parser;\n};\n\nconst setupFencingMeasurements = (parser: any, measurementId: number, fencingRecord?: FencingRecord) => {\n  let fencing: FencingRecord;\n\n  if (fencingRecord) {\n    fencing = fencingRecord;\n  } else {\n    fencing = useSelector((state) => measurementIdFullFencing(state, { measurementId }));\n  }\n\n  if (!fencing) {\n    parser.setVariable(\"fencing_netLength\", 0);\n    parser.setVariable(\"fencing_totalLength\", 0);\n    parser.setVariable(\"fencing_linePosts4\", 0);\n    parser.setVariable(\"fencing_linePosts6\", 0);\n    parser.setVariable(\"fencing_linePosts8\", 0);\n    parser.setVariable(\"fencing_panels4\", 0);\n    parser.setVariable(\"fencing_panels6\", 0);\n    parser.setVariable(\"fencing_panels8\", 0);\n    parser.setVariable(\"fencing_gateCount\", 0);\n    parser.setVariable(\"fencing_gateLength\", 0);\n    parser.setVariable(\"fencing_terminalPosts\", 0);\n    parser.setVariable(\"fencing_cornerPosts\", 0);\n    return;\n  }\n\n  const segmentCount = fencing.fences.reduce((sum, f) => f.segmentIds.size + sum, 0);\n\n  parser.setVariable(\"fencing_netLength\", fencing.netLength);\n  parser.setVariable(\"fencing_totalLength\", fencing.totalLength);\n  parser.setVariable(\"fencing_linePosts4\", fencing.linePosts4);\n  parser.setVariable(\"fencing_linePosts6\", fencing.linePosts6);\n  parser.setVariable(\"fencing_linePosts8\", fencing.linePosts8);\n  parser.setVariable(\"fencing_panels4\", fencing.linePosts4 + segmentCount);\n  parser.setVariable(\"fencing_panels6\", fencing.linePosts6 + segmentCount);\n  parser.setVariable(\"fencing_panels8\", fencing.linePosts8 + segmentCount);\n  parser.setVariable(\"fencing_gateCount\", fencing.gateCount);\n  parser.setVariable(\"fencing_gateLength\", fencing.gateLength);\n  parser.setVariable(\"fencing_terminalPosts\", fencing.terminalPosts + fencing.gateCount * 2);\n  parser.setVariable(\"fencing_cornerPosts\", fencing.cornerPosts);\n};\n\nexport interface AdditionalMeasurements {\n  fencing?: FencingRecord;\n}\n\nexport const calculateFormula = (\n  formula: string,\n  measurement: IMeasurement,\n  addtl?: AdditionalMeasurements,\n): { result: number; error: string } => {\n  if (!formula) {\n    return { result: 1, error: null };\n  }\n\n  try {\n    const parser = setupForumulaParser(measurement, addtl);\n    const { error } = parser.parse(formula);\n    let { result } = parser.parse(formula);\n    if (result) {\n      result = roundToDecimals(result, -2);\n    }\n    return { result, error };\n  } catch {\n    return { result: null, error: \"ERROR!\" };\n  }\n};\n\nexport const columnKeys = (\n  measurement: MeasurementRecord | IMeasurement,\n  types: string[] = propertiesMapping.toArray(),\n) => {\n  let keys: string[];\n  if (Record.isRecord(measurement)) {\n    keys = Object.keys(measurement.toJS());\n  } else {\n    keys = Object.keys(measurement);\n  }\n\n  const columnKeys = [];\n  keys.map((key) => {\n    if (key === \"roof_faces\" || key === \"roof_face_ids\") return;\n\n    const found = types.find((prop) => {\n      return key.indexOf(prop) === 0;\n    });\n    if (found) {\n      columnKeys.push(key);\n    }\n  });\n\n  return columnKeys;\n};\n\nexport const keysWithValues = (measurement: MeasurementRecord, type: string) => {\n  const keys = columnKeys(measurement, [type]);\n  const returnKeys = [];\n  keys.map((k) => {\n    if (measurement.get(k as any) > 0) {\n      returnKeys.push(k);\n    }\n  });\n  return returnKeys;\n};\n\nexport const getUoM = (measurement: MeasurementRecord) => {\n  if (!measurement || measurement.system === \"imperial\") {\n    return imperial_uom;\n  } else {\n    return metric_uom;\n  }\n};\n\nexport const calculateArea = (height: number, length: number, uom: string): number => {\n  if (!height || !length) {\n    return 0;\n  }\n  if (uom === \"in\") {\n    return roundToDecimals((height / 12) * length, -2);\n  } else if (uom === \"cm\") {\n    return roundToDecimals((height / 100) * length, -2);\n  } else {\n    return roundToDecimals(height * length, -2);\n  }\n};\n\nexport interface IMeasurementData {\n  id: number;\n  geojson: any;\n  job_id: number;\n  system: string;\n  roof_1012_area: number;\n  roof_10pw_sloped_area: number;\n  roof_10pw_total_area: number;\n  roof_12pw_total_area: number;\n  roof_13p_area: number;\n  roof_0_area: number;\n  roof_1_area: number;\n  roof_2_area: number;\n  roof_3_area: number;\n  roof_4_area: number;\n  roof_5_area: number;\n  roof_6_area: number;\n  roof_7_area: number;\n  roof_8_area: number;\n  roof_9_area: number;\n  roof_10_area: number;\n  roof_11_area: number;\n  roof_12_area: number;\n  roof_13_area: number;\n  roof_14_area: number;\n  roof_15_area: number;\n  roof_16_area: number;\n  roof_17_area: number;\n  roof_18_area: number;\n  roof_19_area: number;\n  roof_20_area: number;\n  roof_21_area: number;\n  roof_22_area: number;\n  roof_23_area: number;\n  roof_24_area: number;\n  roof_25_area: number;\n  roof_26p_area: number;\n  roof_15pw_total_area: number;\n  roof_20pw_total_area: number;\n  roof_5pw_total_area: number;\n  roof_79_area: number;\n  roof_average_slope_area: number;\n  roof_downspout_elbows: number;\n  roof_downspouts: number;\n  roof_eave: number;\n  roof_flat_area: number;\n  roof_flat_shallow_area: number;\n  roof_gutter_miters: number;\n  roof_headwall_flashing: number;\n  roof_high_roof_area: number;\n  roof_hip: number;\n  roof_low_slope_area: number;\n  roof_perimeter: number;\n  roof_rake: number;\n  roof_ridge: number;\n  roof_ridge_hip: number;\n  roof_sloped_area: number;\n  roof_steep_slope_area: number;\n  roof_step_flashing: number;\n  roof_total_area: number;\n  roof_total_flashing: number;\n  roof_ultra_steep_slope_area: number;\n  roof_valley: number;\n  roof_valley_eave: number;\n  roof_valley_eave_rake: number;\n  siding_10pw_total_area: number;\n  siding_15pw_total_area: number;\n  siding_18pw_total_area: number;\n  siding_5pw_total_area: number;\n  siding_doors_qty: number;\n  siding_frieze_board: number;\n  siding_garage_doors_qty: number;\n  siding_inside_corner_length: number;\n  siding_inside_corner_qty: number;\n  siding_level_frieze_board: number;\n  siding_level_starter: number;\n  siding_opening_qty: number;\n  siding_opening_sides_length: number;\n  siding_opening_sills_length: number;\n  siding_opening_tops_length: number;\n  siding_outside_corner_length: number;\n  siding_outside_corner_qty: number;\n  siding_shutter_area: number;\n  siding_shutter_qty: number;\n  siding_sloped_frieze_board: number;\n  siding_sloped_trim: number;\n  siding_soffit_eaves: number;\n  siding_soffit_level_frieze: number;\n  siding_soffit_rakes: number;\n  siding_soffit_sloped_frieze: number;\n  siding_soffit_total: number;\n  siding_total_area: number;\n  siding_vents_area: number;\n  siding_vents_qty: number;\n  siding_vertical_trim: number;\n  siding_windows_qty: number;\n  sunroom_a_wall_area: number;\n  sunroom_a_wall_height: number;\n  sunroom_a_wall_length: number;\n  sunroom_b_wall_area: number;\n  sunroom_b_wall_height: number;\n  sunroom_b_wall_length: number;\n  sunroom_c_wall_area: number;\n  sunroom_c_wall_height: number;\n  sunroom_c_wall_length: number;\n  sunroom_cathedral_roof_area: number;\n  sunroom_ceiling_area: number;\n  sunroom_deck_total_area: number;\n  sunroom_kw_a_area: number;\n  sunroom_kw_a_height: number;\n  sunroom_kw_a_length: number;\n  sunroom_kw_b_area: number;\n  sunroom_kw_b_height: number;\n  sunroom_kw_b_length: number;\n  sunroom_kw_c_area: number;\n  sunroom_kw_c_height: number;\n  sunroom_kw_c_length: number;\n  sunroom_kw_total_area: number;\n  sunroom_kw_total_length: number;\n  sunroom_studio_roof_area: number;\n  sunroom_wall_perimeter: number;\n  sunroom_wall_total_area: number;\n\n  roof_faces: IRoofFaceData[];\n  wall_facades: IWallFacadeData[];\n  windows: IWindowData[];\n  doors: IDoorData[];\n  rooms: IRoomData[];\n  elevations: IElevationData[];\n  decks: IDeckData[];\n  pools: IPoolData[];\n  locations: string[];\n  levels: string[];\n\n  loading: boolean;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IMeasurementRecord {\n  id: number;\n  geojson: any;\n  job_id: number;\n  system: string;\n  roof_1012_area: number;\n  roof_10pw_sloped_area: number;\n  roof_10pw_total_area: number;\n  roof_12pw_total_area: number;\n  roof_13p_area: number;\n  roof_0_area: number;\n  roof_1_area: number;\n  roof_2_area: number;\n  roof_3_area: number;\n  roof_4_area: number;\n  roof_5_area: number;\n  roof_6_area: number;\n  roof_7_area: number;\n  roof_8_area: number;\n  roof_9_area: number;\n  roof_10_area: number;\n  roof_11_area: number;\n  roof_12_area: number;\n  roof_13_area: number;\n  roof_14_area: number;\n  roof_15_area: number;\n  roof_16_area: number;\n  roof_17_area: number;\n  roof_18_area: number;\n  roof_19_area: number;\n  roof_20_area: number;\n  roof_21_area: number;\n  roof_22_area: number;\n  roof_23_area: number;\n  roof_24_area: number;\n  roof_25_area: number;\n  roof_26p_area: number;\n  roof_15pw_total_area: number;\n  roof_20pw_total_area: number;\n  roof_5pw_total_area: number;\n  roof_79_area: number;\n  roof_average_slope_area: number;\n  roof_downspout_elbows: number;\n  roof_downspouts: number;\n  roof_eave: number;\n  roof_flat_area: number;\n  roof_flat_shallow_area: number;\n  roof_gutter_miters: number;\n  roof_headwall_flashing: number;\n  roof_high_roof_area: number;\n  roof_hip: number;\n  roof_low_slope_area: number;\n  roof_perimeter: number;\n  roof_rake: number;\n  roof_ridge: number;\n  roof_ridge_hip: number;\n  roof_sloped_area: number;\n  roof_steep_slope_area: number;\n  roof_step_flashing: number;\n  roof_total_area: number;\n  roof_total_flashing: number;\n  roof_ultra_steep_slope_area: number;\n  roof_valley: number;\n  roof_valley_eave: number;\n  roof_valley_eave_rake: number;\n  siding_10pw_total_area: number;\n  siding_15pw_total_area: number;\n  siding_18pw_total_area: number;\n  siding_5pw_total_area: number;\n  siding_doors_qty: number;\n  siding_frieze_board: number;\n  siding_garage_doors_qty: number;\n  siding_inside_corner_length: number;\n  siding_inside_corner_qty: number;\n  siding_level_frieze_board: number;\n  siding_level_starter: number;\n  siding_opening_qty: number;\n  siding_opening_sides_length: number;\n  siding_opening_sills_length: number;\n  siding_opening_tops_length: number;\n  siding_outside_corner_length: number;\n  siding_outside_corner_qty: number;\n  siding_shutter_area: number;\n  siding_shutter_qty: number;\n  siding_sloped_frieze_board: number;\n  siding_sloped_trim: number;\n  siding_soffit_eaves: number;\n  siding_soffit_level_frieze: number;\n  siding_soffit_rakes: number;\n  siding_soffit_sloped_frieze: number;\n  siding_soffit_total: number;\n  siding_total_area: number;\n  siding_vents_area: number;\n  siding_vents_qty: number;\n  siding_vertical_trim: number;\n  siding_windows_qty: number;\n  sunroom_a_wall_area: number;\n  sunroom_a_wall_height: number;\n  sunroom_a_wall_length: number;\n  sunroom_b_wall_area: number;\n  sunroom_b_wall_height: number;\n  sunroom_b_wall_length: number;\n  sunroom_c_wall_area: number;\n  sunroom_c_wall_height: number;\n  sunroom_c_wall_length: number;\n  sunroom_cathedral_roof_area: number;\n  sunroom_ceiling_area: number;\n  sunroom_deck_total_area: number;\n  sunroom_kw_a_area: number;\n  sunroom_kw_a_height: number;\n  sunroom_kw_a_length: number;\n  sunroom_kw_b_area: number;\n  sunroom_kw_b_height: number;\n  sunroom_kw_b_length: number;\n  sunroom_kw_c_area: number;\n  sunroom_kw_c_height: number;\n  sunroom_kw_c_length: number;\n  sunroom_kw_total_area: number;\n  sunroom_kw_total_length: number;\n  sunroom_studio_roof_area: number;\n  sunroom_wall_perimeter: number;\n  sunroom_wall_total_area: number;\n\n  roof_face_ids: List<number>;\n  wall_facade_ids: List<number>;\n  window_ids: List<number>;\n  door_ids: List<number>;\n  room_ids: List<number>;\n  elevation_ids: List<number>;\n  deck_ids: List<number>;\n  pool_ids: List<number>;\n  locations: List<string>;\n  levels: List<string>;\n\n  _destroy: Nullable<boolean>;\n  loading: boolean;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IMeasurementHydratedRecord extends IMeasurementRecord {\n  roof_faces: List<RoofFaceRecord>;\n  wall_facades: List<WallFacadeRecord>;\n  windows: List<WindowRecord>;\n  doors: List<DoorRecord>;\n  rooms: List<RoomRecord>;\n  elevations: List<ElevationRecord>;\n  decks: List<DeckRecord>;\n  pools: List<PoolRecord>;\n}\n\nexport const defaultMeasurementProps: IMeasurementRecord = {\n  id: 0,\n  geojson: geoJsonFromJSON({}),\n  job_id: 0,\n  system: \"imperial\",\n  roof_1012_area: 0,\n  roof_10pw_sloped_area: 0,\n  roof_10pw_total_area: 0,\n  roof_12pw_total_area: 0,\n  roof_13p_area: 0,\n  roof_0_area: 0,\n  roof_1_area: 0,\n  roof_2_area: 0,\n  roof_3_area: 0,\n  roof_4_area: 0,\n  roof_5_area: 0,\n  roof_6_area: 0,\n  roof_7_area: 0,\n  roof_8_area: 0,\n  roof_9_area: 0,\n  roof_10_area: 0,\n  roof_11_area: 0,\n  roof_12_area: 0,\n  roof_13_area: 0,\n  roof_14_area: 0,\n  roof_15_area: 0,\n  roof_16_area: 0,\n  roof_17_area: 0,\n  roof_18_area: 0,\n  roof_19_area: 0,\n  roof_20_area: 0,\n  roof_21_area: 0,\n  roof_22_area: 0,\n  roof_23_area: 0,\n  roof_24_area: 0,\n  roof_25_area: 0,\n  roof_26p_area: 0,\n  roof_15pw_total_area: 0,\n  roof_20pw_total_area: 0,\n  roof_5pw_total_area: 0,\n  roof_79_area: 0,\n  roof_average_slope_area: 0,\n  roof_downspout_elbows: 0,\n  roof_downspouts: 0,\n  roof_eave: 0,\n  roof_flat_area: 0,\n  roof_flat_shallow_area: 0,\n  roof_gutter_miters: 0,\n  roof_headwall_flashing: 0,\n  roof_high_roof_area: 0,\n  roof_hip: 0,\n  roof_low_slope_area: 0,\n  roof_perimeter: 0,\n  roof_rake: 0,\n  roof_ridge: 0,\n  roof_ridge_hip: 0,\n  roof_sloped_area: 0,\n  roof_steep_slope_area: 0,\n  roof_step_flashing: 0,\n  roof_total_area: 0,\n  roof_total_flashing: 0,\n  roof_ultra_steep_slope_area: 0,\n  roof_valley: 0,\n  roof_valley_eave: 0,\n  roof_valley_eave_rake: 0,\n  siding_10pw_total_area: 0,\n  siding_15pw_total_area: 0,\n  siding_18pw_total_area: 0,\n  siding_5pw_total_area: 0,\n  siding_doors_qty: 0,\n  siding_frieze_board: 0,\n  siding_garage_doors_qty: 0,\n  siding_inside_corner_length: 0,\n  siding_inside_corner_qty: 0,\n  siding_level_frieze_board: 0,\n  siding_level_starter: 0,\n  siding_opening_qty: 0,\n  siding_opening_sides_length: 0,\n  siding_opening_sills_length: 0,\n  siding_opening_tops_length: 0,\n  siding_outside_corner_length: 0,\n  siding_outside_corner_qty: 0,\n  siding_shutter_area: 0,\n  siding_shutter_qty: 0,\n  siding_sloped_frieze_board: 0,\n  siding_sloped_trim: 0,\n  siding_soffit_eaves: 0,\n  siding_soffit_level_frieze: 0,\n  siding_soffit_rakes: 0,\n  siding_soffit_sloped_frieze: 0,\n  siding_soffit_total: 0,\n  siding_total_area: 0,\n  siding_vents_area: 0,\n  siding_vents_qty: 0,\n  siding_vertical_trim: 0,\n  siding_windows_qty: 0,\n  sunroom_a_wall_area: 0,\n  sunroom_a_wall_height: 0,\n  sunroom_a_wall_length: 0,\n  sunroom_b_wall_area: 0,\n  sunroom_b_wall_height: 0,\n  sunroom_b_wall_length: 0,\n  sunroom_c_wall_area: 0,\n  sunroom_c_wall_height: 0,\n  sunroom_c_wall_length: 0,\n  sunroom_cathedral_roof_area: 0,\n  sunroom_ceiling_area: 0,\n  sunroom_deck_total_area: 0,\n  sunroom_kw_a_area: 0,\n  sunroom_kw_a_height: 0,\n  sunroom_kw_a_length: 0,\n  sunroom_kw_b_area: 0,\n  sunroom_kw_b_height: 0,\n  sunroom_kw_b_length: 0,\n  sunroom_kw_c_area: 0,\n  sunroom_kw_c_height: 0,\n  sunroom_kw_c_length: 0,\n  sunroom_kw_total_area: 0,\n  sunroom_kw_total_length: 0,\n  sunroom_studio_roof_area: 0,\n  sunroom_wall_perimeter: 0,\n  sunroom_wall_total_area: 0,\n\n  roof_face_ids: List<number>(),\n  wall_facade_ids: List<number>(),\n  window_ids: List<number>(),\n  door_ids: List<number>(),\n  room_ids: List<number>(),\n  elevation_ids: List<number>(),\n  deck_ids: List<number>(),\n  pool_ids: List<number>(),\n  locations: List<string>(),\n  levels: List<string>(),\n\n  _destroy: null,\n  loading: false,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nconst defaultMeasurementHydrateProps = {\n  ...defaultMeasurementProps,\n  roof_faces: List<RoofFaceRecord>(),\n  wall_facades: List<WallFacadeRecord>(),\n  windows: List<WindowRecord>(),\n  doors: List<DoorRecord>(),\n  rooms: List<RoomRecord>(),\n  elevations: List<ElevationRecord>(),\n  decks: List<DeckRecord>(),\n  pools: List<PoolRecord>(),\n};\n\nexport class MeasurementRecord extends Record(defaultMeasurementProps) implements IMeasurementRecord {}\n\nexport class MeasurementHydratedRecord\n  extends Record(defaultMeasurementHydrateProps)\n  implements IMeasurementHydratedRecord {}\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport {\n  load,\n  list,\n  update,\n  create,\n  loadByEmail,\n  crmUserCheck,\n  includes as userIncludes,\n  IUserResponse,\n  revokeAccess,\n  sendInvitation,\n  loadAclValues,\n  IAclResponse,\n} from \"app2/src/api/user.service\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \".\";\nimport { IUserData, UserRecord } from \"../records/UserRecord\";\nimport * as orgActions from \"./org.actions\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { IPageData, QueryParamsRecord } from \"app2/src/records/Page\";\nimport { List } from \"immutable\";\nimport { Actions as PagingActions } from \"app2/src/reducers/pagination.actions\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as accessActions from \"app2/src/reducers/access.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { currentUserId, user, userHydratedForSave } from \"app2/src/selectors/user.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\nimport { CrmUserType } from \"app2/src/records/integrations/CrmUser\";\nimport { fromJSON } from \"../records/UserRecord\";\n\nexport const SET_USER = \"@user/SET_USER\";\nexport const SET_CURRENT_USER = \"@user/SET_CURRENT_USER\";\nexport const RESET_USER = \"@user/RESET_USER\";\nexport const FETCH_USER = \"@user/FETCH_USER\";\nexport const SET_USER_LOADED = \"@user/SET_USER_LOADED\";\nexport const RECEIVE_USERS = \"@user/RECEIVE_USERS\";\nexport const SET_CRM_USER_CHECK = \"@user/SET_CRM_USER_CHECK\";\nexport const UPDATE_FORM = \"@user/UPDATE_FORM\";\nexport const FETCH_ALLOWED_ACL = \"@user/FETCH_ALLOWED_ACL\";\nexport const RECEIVE_ALLOWED_ACL = \"@user/RECEIVE_ALLOWED_ACL\";\nexport const ADD_ACCESSES = \"@user/ADD_ACCESSES\";\n\nexport const Actions = {\n  setUser: (user: IUserData) => createAction(SET_USER, user),\n  setUserLoaded: (userId: number) => createAction(SET_USER_LOADED, { userId }),\n  resetUser: (userId: number) => createAction(RESET_USER, { userId }),\n  setCurrentUser: (user: Partial<IUserData>) => createAction(SET_CURRENT_USER, user),\n  fetchUser: (id: number) => createAction(FETCH_USER, id),\n  receiveUsers: (users: IUserData[]) => createAction(RECEIVE_USERS, { users }),\n  updateForm: (event: { rootPath: (string | number)[]; name: string; value: string }) =>\n    createAction(UPDATE_FORM, { event }),\n  setCrmUserCheck: (orgId: number, crmUserType: CrmUserType, result: boolean) =>\n    createAction(SET_CRM_USER_CHECK, { orgId, crmUserType, result }),\n  fetchAllowedAcl: (userId: number, accessUid: string, template: string) =>\n    createAction(FETCH_ALLOWED_ACL, { userId, accessUid, template }),\n  receiveAllowedAcl: (userId: number, accessUid: string, template: string, acl: IAclResponse) =>\n    createAction(RECEIVE_ALLOWED_ACL, { userId, accessUid, template, acl }),\n  addAccesses: (userId: number, accessIds: number[]) => createAction(ADD_ACCESSES, { userId, accessIds }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions | orgActions.Actions>;\n\nexport const AsyncActions = {\n  getUser: (id: number, includes: string[] = [], force = false): ThunkResult<Promise<IUserData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchUser(id));\n\n      return load(id, includes)\n        .then(\n          (user) => {\n            dispatch(Actions.setUser(user));\n            return user;\n          },\n          (errors) => {\n            handleErrors(errors);\n            return {} as IUserData;\n          },\n        )\n        .catch((errors) => {\n          handleErrors(errors);\n          return {} as IUserData;\n        });\n    };\n  },\n  save: (userId: number, includes: string[] = userIncludes, sendInvitation = false): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.fetchUser(userId));\n\n      const user = userHydratedForSave(getState(), { userId });\n      try {\n        let result: IUserResponse;\n        if (user.id <= 0) {\n          result = await create(user, includes);\n          dispatch(Actions.setUser(result.user));\n          dispatch(paginationActions.Actions.pushId(result.user.id, \"user\"));\n        } else {\n          result = await update(user, includes);\n          dispatch(Actions.setUser(result.user));\n        }\n\n        if (sendInvitation) {\n          dispatch(AsyncActions.sendInvitation(result.user.id, result.user.email));\n        }\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, `User saved: ${user.email}`));\n      } catch (err) {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, handleErrors(err)));\n        dispatch(Actions.setUserLoaded(user.id));\n      }\n    };\n  },\n  revokeAccess: (userId: number, accessId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.fetchUser(userId));\n\n      const userRecord = user(getState(), { userId });\n      try {\n        await revokeAccess(userId, accessId);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, `Access revoked for ${userRecord.email}`));\n      } catch (err) {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, handleErrors(err)));\n      }\n      dispatch(Actions.setUserLoaded(userId));\n    };\n  },\n  sendInvitation: (userId: number, email: string): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.fetchUser(userId));\n\n      try {\n        await sendInvitation(email);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, `Invitation sent for ${email}`));\n      } catch (err) {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, handleErrors(err)));\n      }\n      dispatch(Actions.setUserLoaded(userId));\n    };\n  },\n  getCurrentUserByEmail: (email: string, token?: string): ThunkResult<Promise<IUserData>> => {\n    return (dispatch: RootDispatchType) => {\n      return loadByEmail(email, userIncludes, token).then((user: IUserData) => {\n        if (user.org) {\n          dispatch(orgActions.Actions.setOrg(user.org));\n        }\n        dispatch(Actions.setCurrentUser(user));\n        return user;\n      });\n    };\n  },\n  listUsers: (\n    queryParams: QueryParamsRecord = new QueryParamsRecord(),\n    modelName = \"user\",\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(PagingActions.fetchPage(modelName, queryParams));\n      try {\n        const response = await list(queryParams);\n        dispatch(Actions.receiveUsers(response.users));\n\n        const pageData: Partial<IPageData> = {\n          ids: List(response.users.map((user: IUserData) => user.id)),\n          pagination: (response as any).meta.pagination,\n        };\n\n        dispatch(PagingActions.receivePage(modelName, queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(PagingActions.receivePageError(modelName, queryParams, errors));\n      }\n    };\n  },\n  crmUserCheck: (crmUserType: CrmUserType): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const orgId = currentOrgId(getState());\n      if (!isNullOrUndefined(getState().getIn([\"users\", \"crmUserCheckByOrgId\", orgId, \"FmUser\"]))) {\n        return;\n      }\n\n      const userId = currentUserId(getState());\n      try {\n        await crmUserCheck(orgId, userId, crmUserType);\n        dispatch(Actions.setCrmUserCheck(orgId, crmUserType, true));\n      } catch (response) {\n        if (response?.status === 404) {\n          dispatch(Actions.setCrmUserCheck(orgId, crmUserType, false));\n        }\n        handleErrors(response);\n      }\n    };\n  },\n  loadAllowedAcl: (userId: number, accessUid: string, template: string): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchAllowedAcl(userId, accessUid, template));\n\n      try {\n        const response = await loadAclValues(userId, accessUid, template);\n        dispatch(Actions.receiveAllowedAcl(userId, accessUid, template, response));\n      } catch (err) {\n        dispatch(Actions.receiveAllowedAcl(userId, accessUid, template, { acl: {}, templates: [] }));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, handleErrors(err)));\n      }\n    };\n  },\n  loadAndSetAccessAcl: (\n    accessId: number,\n    userId: number,\n    accessUid: string,\n    template: string,\n    loadUserId?: number,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.fetchAllowedAcl(userId, accessUid, template));\n      const loadId = loadUserId ? loadUserId : userId;\n      try {\n        const response = await loadAclValues(loadId, accessUid, template);\n        dispatch(Actions.receiveAllowedAcl(loadId, accessUid, template, response));\n\n        dispatch(\n          accessActions.Actions.setAccessAcl(\n            accessId,\n            getState().getIn([\"users\", \"allowedAclByUserAccess\", \"acl\", `${loadId}:${accessUid}`, template]),\n          ),\n        );\n      } catch (err) {\n        dispatch(Actions.receiveAllowedAcl(userId, accessUid, template, { acl: {}, templates: [] }));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, handleErrors(err)));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"../../helpers/Fetcher\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { ActionsUnion, createAction, handleErrors } from \"../Utils\";\nimport { RootState } from \"..\";\nimport { RootDispatchType } from \"../../store\";\n\nexport const SET_AUTHORIZING = \"@integrations/quickMeasure/SET_AUTHORIZING\";\nexport const SET_AUTHORIZED = \"@integrations/quickMeasure/SET_AUTHORIZED\";\nexport const SET_ERRORS = \"@integrations/quickMeasure/SET_ERRORS\";\n\nexport const Actions = {\n  setAuthorizing: (authorizing: boolean) => createAction(SET_AUTHORIZING, authorizing),\n  setAuthorized: (authorized: boolean) => createAction(SET_AUTHORIZED, authorized),\n  setErrors: (errors: string[]) => createAction(SET_ERRORS, errors),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, ActionsUnion<typeof Actions>>;\n\nexport const AsyncActions = {\n  getAuthorization: (code: string): ThunkResult<Promise<boolean>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.setAuthorizing(true));\n      return fetcher.post(\"/integrations/quick_measure/callback\", { code: code }).then(\n        () => {\n          dispatch(Actions.setAuthorizing(false));\n          dispatch(Actions.setAuthorized(true));\n          return true;\n        },\n        (errors) => {\n          handleErrors(errors);\n          dispatch(Actions.setErrors([\"There was a problem with your authorization code.  Please try again.\"]));\n          dispatch(Actions.setAuthorizing(false));\n          return false;\n        },\n      );\n    };\n  },\n  getAuthorized: (): ThunkResult<Promise<{ authorized: boolean }>> => {\n    return (dispatch: RootDispatchType) => {\n      return fetcher.get<{ authorized: boolean }>(\"/integrations/quick_measure/authorized\").then((result) => {\n        dispatch(Actions.setAuthorized(result.authorized));\n        return result;\n      });\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.fx.min\",[\"kendo.core.min\"],t)}(function(){return function(t,e){function i(t){return parseInt(t,10)}function r(t,e){return i(t.css(e))}function n(t){var e,i=[];for(e in t)i.push(e);return i}function s(t){for(var e in t)-1!=L.indexOf(e)&&-1==Q.indexOf(e)&&delete t[e];return t}function o(t,e){var i,r,n,s,o=[],a={};for(r in e)i=r.toLowerCase(),s=H&&-1!=L.indexOf(i),!E.hasHW3D&&s&&-1==Q.indexOf(i)?delete e[r]:(n=e[r],s?o.push(r+\"(\"+n+\")\"):a[r]=n);return o.length&&(a[at]=o.join(\" \")),a}function a(t,e){var r,n,s;return H?(r=t.css(at),r==J?\"scale\"==e?1:0:(n=r.match(RegExp(e+\"\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)\")),s=0,n?s=i(n[1]):(n=r.match(S)||[0,0,0,0,0],e=e.toLowerCase(),V.test(e)?s=parseFloat(n[3]/n[2]):\"translatey\"==e?s=parseFloat(n[4]/n[2]):\"scale\"==e?s=parseFloat(n[2]):\"rotate\"==e&&(s=parseFloat(Math.atan2(n[2],n[1])))),s)):parseFloat(t.css(e))}function c(t){return t.charAt(0).toUpperCase()+t.substring(1)}function l(t,e){var i=h.extend(e),r=i.prototype.directions;T[c(t)]=i,T.Element.prototype[t]=function(t,e,r,n){return new i(this.element,t,e,r,n)},N(r,function(e,r){T.Element.prototype[t+c(r)]=function(t,e,n){return new i(this.element,r,t,e,n)}})}function d(t,i,r,n){l(t,{directions:v,startValue:function(t){return this._startValue=t,this},endValue:function(t){return this._endValue=t,this},shouldHide:function(){return this._shouldHide},prepare:function(t,s){var o,a,c=this,l=\"out\"===this._direction,d=c.element.data(i),u=!(isNaN(d)||d==r);o=u?d:e!==this._startValue?this._startValue:l?r:n,a=e!==this._endValue?this._endValue:l?n:r,this._reverse?(t[i]=a,s[i]=o):(t[i]=o,s[i]=a),c._shouldHide=s[i]===n}})}function u(t,e){var i=C.directions[e].vertical,r=t[i?Y:X]()/2+\"px\";return _[e].replace(\"$size\",r)}var f,p,h,m,v,x,_,g,y,k,b,w,C=window.kendo,T=C.effects,N=t.each,P=t.extend,z=t.proxy,E=C.support,R=E.browser,H=E.transforms,D=E.transitions,O={scale:0,scalex:0,scaley:0,scale3d:0},F={translate:0,translatex:0,translatey:0,translate3d:0},I=e!==document.documentElement.style.zoom&&!H,S=/matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i,A=/^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i,V=/translatex?$/i,q=/(zoom|fade|expand)(\\w+)/,M=/(zoom|fade|expand)/,$=/[xy]$/i,L=[\"perspective\",\"rotate\",\"rotatex\",\"rotatey\",\"rotatez\",\"rotate3d\",\"scale\",\"scalex\",\"scaley\",\"scalez\",\"scale3d\",\"skew\",\"skewx\",\"skewy\",\"translate\",\"translatex\",\"translatey\",\"translatez\",\"translate3d\",\"matrix\",\"matrix3d\"],Q=[\"rotate\",\"scale\",\"scalex\",\"scaley\",\"skew\",\"skewx\",\"skewy\",\"translate\",\"translatex\",\"translatey\",\"matrix\"],W={rotate:\"deg\",scale:\"\",skew:\"px\",translate:\"px\"},j=H.css,B=Math.round,U=\"\",G=\"px\",J=\"none\",K=\"auto\",X=\"width\",Y=\"height\",Z=\"hidden\",tt=\"origin\",et=\"abortId\",it=\"overflow\",rt=\"translate\",nt=\"position\",st=\"completeCallback\",ot=j+\"transition\",at=j+\"transform\",ct=j+\"backface-visibility\",lt=j+\"perspective\",dt=\"1500px\",ut=\"perspective(\"+dt+\")\",ft={left:{reverse:\"right\",property:\"left\",transition:\"translatex\",vertical:!1,modifier:-1},right:{reverse:\"left\",property:\"left\",transition:\"translatex\",vertical:!1,modifier:1},down:{reverse:\"up\",property:\"top\",transition:\"translatey\",vertical:!0,modifier:1},up:{reverse:\"down\",property:\"top\",transition:\"translatey\",vertical:!0,modifier:-1},top:{reverse:\"bottom\"},bottom:{reverse:\"top\"},\"in\":{reverse:\"out\",modifier:-1},out:{reverse:\"in\",modifier:1},vertical:{reverse:\"vertical\"},horizontal:{reverse:\"horizontal\"}};C.directions=ft,P(t.fn,{kendoStop:function(t,e){return D?T.stopQueue(this,t||!1,e||!1):this.stop(t,e)}}),H&&!D&&(N(Q,function(i,r){t.fn[r]=function(i){if(e===i)return a(this,r);var n=t(this)[0],s=r+\"(\"+i+W[r.replace($,\"\")]+\")\";return-1==n.style.cssText.indexOf(at)?t(this).css(at,s):n.style.cssText=n.style.cssText.replace(RegExp(r+\"\\\\(.*?\\\\)\",\"i\"),s),this},t.fx.step[r]=function(e){t(e.elem)[r](e.now)}}),f=t.fx.prototype.cur,t.fx.prototype.cur=function(){return-1!=Q.indexOf(this.prop)?parseFloat(t(this.elem)[this.prop]()):f.apply(this,arguments)}),C.toggleClass=function(t,e,i,r){return e&&(e=e.split(\" \"),D&&(i=P({exclusive:\"all\",duration:400,ease:\"ease-out\"},i),t.css(ot,i.exclusive+\" \"+i.duration+\"ms \"+i.ease),setTimeout(function(){t.css(ot,\"\").css(Y)},i.duration)),N(e,function(e,i){t.toggleClass(i,r)})),t},C.parseEffects=function(t,e){var i={};return\"string\"==typeof t?N(t.split(\" \"),function(t,r){var n=!M.test(r),s=r.replace(q,function(t,e,i){return e+\":\"+i.toLowerCase()}),o=s.split(\":\"),a=o[1],c={};o.length>1&&(c.direction=e&&n?ft[a].reverse:a),i[o[0]]=c}):N(t,function(t){var r=this.direction;r&&e&&!M.test(t)&&(this.direction=ft[r].reverse),i[t]=this}),i},D&&P(T,{transition:function(e,i,r){var s,a,c,l,d=0,u=e.data(\"keys\")||[];r=P({duration:200,ease:\"ease-out\",complete:null,exclusive:\"all\"},r),c=!1,l=function(){c||(c=!0,a&&(clearTimeout(a),a=null),e.removeData(et).dequeue().css(ot,\"\").css(ot),r.complete.call(e))},r.duration=t.fx?t.fx.speeds[r.duration]||r.duration:r.duration,s=o(e,i),t.merge(u,n(s)),e.data(\"keys\",t.unique(u)).height(),e.css(ot,r.exclusive+\" \"+r.duration+\"ms \"+r.ease).css(ot),e.css(s).css(at),D.event&&(e.one(D.event,l),0!==r.duration&&(d=500)),a=setTimeout(l,r.duration+d),e.data(et,a),e.data(st,l)},stopQueue:function(t,e,i){var r,n=t.data(\"keys\"),s=!i&&n,o=t.data(st);return s&&(r=C.getComputedStyles(t[0],n)),o&&o(),s&&t.css(r),t.removeData(\"keys\").stop(e)}}),p=C.Class.extend({init:function(t,e){var i=this;i.element=t,i.effects=[],i.options=e,i.restore=[]},run:function(e){var i,r,n,a,c,l,d,u=this,f=e.length,p=u.element,h=u.options,m=t.Deferred(),v={},x={};for(u.effects=e,m.then(t.proxy(u,\"complete\")),p.data(\"animating\",!0),r=0;f>r;r++)for(i=e[r],i.setReverse(h.reverse),i.setOptions(h),u.addRestoreProperties(i.restore),i.prepare(v,x),c=i.children(),n=0,l=c.length;l>n;n++)c[n].duration(h.duration).run();for(d in h.effects)P(x,h.effects[d].properties);for(p.is(\":visible\")||P(v,{display:p.data(\"olddisplay\")||\"block\"}),H&&!h.reset&&(a=p.data(\"targetTransform\"),a&&(v=P(a,v))),v=o(p,v),H&&!D&&(v=s(v)),p.css(v).css(at),r=0;f>r;r++)e[r].setup();return h.init&&h.init(),p.data(\"targetTransform\",x),T.animate(p,x,P({},h,{complete:m.resolve})),m.promise()},stop:function(){t(this.element).kendoStop(!0,!0)},addRestoreProperties:function(t){for(var e,i=this.element,r=0,n=t.length;n>r;r++)e=t[r],this.restore.push(e),i.data(e)||i.data(e,i.css(e))},restoreCallback:function(){var t,e,i,r=this.element;for(t=0,e=this.restore.length;e>t;t++)i=this.restore[t],r.css(i,r.data(i))},complete:function(){var e=this,i=0,r=e.element,n=e.options,s=e.effects,o=s.length;for(r.removeData(\"animating\").dequeue(),n.hide&&r.data(\"olddisplay\",r.css(\"display\")).hide(),this.restoreCallback(),I&&!H&&setTimeout(t.proxy(this,\"restoreCallback\"),0);o>i;i++)s[i].teardown();n.completeCallback&&n.completeCallback(r)}}),T.promise=function(t,e){var i,r,n,s=[],o=new p(t,e),a=C.parseEffects(e.effects);e.effects=a;for(n in a)i=T[c(n)],i&&(r=new i(t,a[n].direction),s.push(r));s[0]?o.run(s):(t.is(\":visible\")||t.css({display:t.data(\"olddisplay\")||\"block\"}).css(\"display\"),e.init&&e.init(),t.dequeue(),o.complete())},P(T,{animate:function(i,n,o){var a=o.transition!==!1;delete o.transition,D&&\"transition\"in T&&a?T.transition(i,n,o):H?i.animate(s(n),{queue:!1,show:!1,hide:!1,duration:o.duration,complete:o.complete}):i.each(function(){var i=t(this),s={};N(L,function(t,o){var a,c,l,d,u,f,p,h=n?n[o]+\" \":null;h&&(c=n,o in O&&n[o]!==e?(a=h.match(A),H&&P(c,{scale:+a[0]})):o in F&&n[o]!==e&&(l=i.css(nt),d=\"absolute\"==l||\"fixed\"==l,i.data(rt)||(d?i.data(rt,{top:r(i,\"top\")||0,left:r(i,\"left\")||0,bottom:r(i,\"bottom\"),right:r(i,\"right\")}):i.data(rt,{top:r(i,\"marginTop\")||0,left:r(i,\"marginLeft\")||0})),u=i.data(rt),a=h.match(A),a&&(f=o==rt+\"y\"?0:+a[1],p=o==rt+\"y\"?+a[1]:+a[2],d?(isNaN(u.right)?isNaN(f)||P(c,{left:u.left+f}):isNaN(f)||P(c,{right:u.right-f}),isNaN(u.bottom)?isNaN(p)||P(c,{top:u.top+p}):isNaN(p)||P(c,{bottom:u.bottom-p})):(isNaN(f)||P(c,{marginLeft:u.left+f}),isNaN(p)||P(c,{marginTop:u.top+p})))),!H&&\"scale\"!=o&&o in c&&delete c[o],c&&P(s,c))}),R.msie&&delete s.scale,i.animate(s,{queue:!1,show:!1,hide:!1,duration:o.duration,complete:o.complete})})}}),T.animatedPromise=T.promise,h=C.Class.extend({init:function(t,e){var i=this;i.element=t,i._direction=e,i.options={},i._additionalEffects=[],i.restore||(i.restore=[])},reverse:function(){return this._reverse=!0,this.run()},play:function(){return this._reverse=!1,this.run()},add:function(t){return this._additionalEffects.push(t),this},direction:function(t){return this._direction=t,this},duration:function(t){return this._duration=t,this},compositeRun:function(){var t=this,e=new p(t.element,{reverse:t._reverse,duration:t._duration}),i=t._additionalEffects.concat([t]);return e.run(i)},run:function(){if(this._additionalEffects&&this._additionalEffects[0])return this.compositeRun();var e,i,r=this,n=r.element,a=0,c=r.restore,l=c.length,d=t.Deferred(),u={},f={},p=r.children(),h=p.length;for(d.then(t.proxy(r,\"_complete\")),n.data(\"animating\",!0),a=0;l>a;a++)e=c[a],n.data(e)||n.data(e,n.css(e));for(a=0;h>a;a++)p[a].duration(r._duration).run();return r.prepare(u,f),n.is(\":visible\")||P(u,{display:n.data(\"olddisplay\")||\"block\"}),H&&(i=n.data(\"targetTransform\"),i&&(u=P(i,u))),u=o(n,u),H&&!D&&(u=s(u)),n.css(u).css(at),r.setup(),n.data(\"targetTransform\",f),T.animate(n,f,{duration:r._duration,complete:d.resolve}),d.promise()},stop:function(){var e=0,i=this.children(),r=i.length;for(e=0;r>e;e++)i[e].stop();return t(this.element).kendoStop(!0,!0),this},restoreCallback:function(){var t,e,i,r=this.element;for(t=0,e=this.restore.length;e>t;t++)i=this.restore[t],r.css(i,r.data(i))},_complete:function(){var e=this,i=e.element;i.removeData(\"animating\").dequeue(),e.restoreCallback(),e.shouldHide()&&i.data(\"olddisplay\",i.css(\"display\")).hide(),I&&!H&&setTimeout(t.proxy(e,\"restoreCallback\"),0),e.teardown()},setOptions:function(t){P(!0,this.options,t)},children:function(){return[]},shouldHide:t.noop,setup:t.noop,prepare:t.noop,teardown:t.noop,directions:[],setReverse:function(t){return this._reverse=t,this}}),m=[\"left\",\"right\",\"up\",\"down\"],v=[\"in\",\"out\"],l(\"slideIn\",{directions:m,divisor:function(t){return this.options.divisor=t,this},prepare:function(t,e){var i,r=this,n=r.element,s=ft[r._direction],o=-s.modifier*(s.vertical?n.outerHeight():n.outerWidth()),a=o/(r.options&&r.options.divisor||1)+G,c=\"0px\";r._reverse&&(i=t,t=e,e=i),H?(t[s.transition]=a,e[s.transition]=c):(t[s.property]=a,e[s.property]=c)}}),l(\"tile\",{directions:m,init:function(t,e,i){h.prototype.init.call(this,t,e),this.options={previous:i}},previousDivisor:function(t){return this.options.previousDivisor=t,this},children:function(){var t=this,e=t._reverse,i=t.options.previous,r=t.options.previousDivisor||1,n=t._direction,s=[C.fx(t.element).slideIn(n).setReverse(e)];return i&&s.push(C.fx(i).slideIn(ft[n].reverse).divisor(r).setReverse(!e)),s}}),d(\"fade\",\"opacity\",1,0),d(\"zoom\",\"scale\",1,.01),l(\"slideMargin\",{prepare:function(t,e){var i,r=this,n=r.element,s=r.options,o=n.data(tt),a=s.offset,c=r._reverse;c||null!==o||n.data(tt,parseFloat(n.css(\"margin-\"+s.axis))),i=n.data(tt)||0,e[\"margin-\"+s.axis]=c?i:i+a}}),l(\"slideTo\",{prepare:function(t,e){var i=this,r=i.element,n=i.options,s=n.offset.split(\",\"),o=i._reverse;H?(e.translatex=o?0:s[0],e.translatey=o?0:s[1]):(e.left=o?0:s[0],e.top=o?0:s[1]),r.css(\"left\")}}),l(\"expand\",{directions:[\"horizontal\",\"vertical\"],restore:[it],prepare:function(t,i){var r=this,n=r.element,s=r.options,o=r._reverse,a=\"vertical\"===r._direction?Y:X,c=n[0].style[a],l=n.data(a),d=parseFloat(l||c),u=B(n.css(a,K)[a]());t.overflow=Z,d=s&&s.reset?u||d:d||u,i[a]=(o?0:d)+G,t[a]=(o?d:0)+G,l===e&&n.data(a,c)},shouldHide:function(){return this._reverse},teardown:function(){var t=this,e=t.element,i=\"vertical\"===t._direction?Y:X,r=e.data(i);r!=K&&r!==U||setTimeout(function(){e.css(i,K).css(i)},0)}}),x={position:\"absolute\",marginLeft:0,marginTop:0,scale:1},l(\"transfer\",{init:function(t,e){this.element=t,this.options={target:e},this.restore=[]},setup:function(){this.element.appendTo(document.body)},prepare:function(t,e){var i=this,r=i.element,n=T.box(r),s=T.box(i.options.target),o=a(r,\"scale\"),c=T.fillScale(s,n),l=T.transformOrigin(s,n);P(t,x),e.scale=1,r.css(at,\"scale(1)\").css(at),r.css(at,\"scale(\"+o+\")\"),t.top=n.top,t.left=n.left,t.transformOrigin=l.x+G+\" \"+l.y+G,i._reverse?t.scale=c:e.scale=c}}),_={top:\"rect(auto auto $size auto)\",bottom:\"rect($size auto auto auto)\",left:\"rect(auto $size auto auto)\",right:\"rect(auto auto auto $size)\"},g={top:{start:\"rotatex(0deg)\",end:\"rotatex(180deg)\"},bottom:{start:\"rotatex(-180deg)\",end:\"rotatex(0deg)\"},left:{start:\"rotatey(0deg)\",end:\"rotatey(-180deg)\"},right:{start:\"rotatey(180deg)\",end:\"rotatey(0deg)\"}},l(\"turningPage\",{directions:m,init:function(t,e,i){h.prototype.init.call(this,t,e),this._container=i},prepare:function(t,e){var i=this,r=i._reverse,n=r?ft[i._direction].reverse:i._direction,s=g[n];t.zIndex=1,i._clipInHalf&&(t.clip=u(i._container,C.directions[n].reverse)),t[ct]=Z,e[at]=ut+(r?s.start:s.end),t[at]=ut+(r?s.end:s.start)},setup:function(){this._container.append(this.element)},face:function(t){return this._face=t,this},shouldHide:function(){var t=this,e=t._reverse,i=t._face;return e&&!i||!e&&i},clipInHalf:function(t){return this._clipInHalf=t,this},temporary:function(){return this.element.addClass(\"temp-page\"),this}}),l(\"staticPage\",{directions:m,init:function(t,e,i){h.prototype.init.call(this,t,e),this._container=i},restore:[\"clip\"],prepare:function(t,e){var i=this,r=i._reverse?ft[i._direction].reverse:i._direction;t.clip=u(i._container,r),t.opacity=.999,e.opacity=1},shouldHide:function(){var t=this,e=t._reverse,i=t._face;return e&&!i||!e&&i},face:function(t){return this._face=t,this}}),l(\"pageturn\",{directions:[\"horizontal\",\"vertical\"],init:function(t,e,i,r){h.prototype.init.call(this,t,e),this.options={},this.options.face=i,this.options.back=r},children:function(){var t,e=this,i=e.options,r=\"horizontal\"===e._direction?\"left\":\"top\",n=C.directions[r].reverse,s=e._reverse,o=i.face.clone(!0).removeAttr(\"id\"),a=i.back.clone(!0).removeAttr(\"id\"),c=e.element;return s&&(t=r,r=n,n=t),[C.fx(i.face).staticPage(r,c).face(!0).setReverse(s),C.fx(i.back).staticPage(n,c).setReverse(s),C.fx(o).turningPage(r,c).face(!0).clipInHalf(!0).temporary().setReverse(s),C.fx(a).turningPage(n,c).clipInHalf(!0).temporary().setReverse(s)]},prepare:function(t,e){t[lt]=dt,t.transformStyle=\"preserve-3d\",t.opacity=.999,e.opacity=1},teardown:function(){this.element.find(\".temp-page\").remove()}}),l(\"flip\",{directions:[\"horizontal\",\"vertical\"],init:function(t,e,i,r){h.prototype.init.call(this,t,e),this.options={},this.options.face=i,this.options.back=r},children:function(){var t,e=this,i=e.options,r=\"horizontal\"===e._direction?\"left\":\"top\",n=C.directions[r].reverse,s=e._reverse,o=e.element;return s&&(t=r,r=n,n=t),[C.fx(i.face).turningPage(r,o).face(!0).setReverse(s),C.fx(i.back).turningPage(n,o).setReverse(s)]},prepare:function(t){t[lt]=dt,t.transformStyle=\"preserve-3d\"}}),y=!E.mobileOS.android,k=\".km-touch-scrollbar, .km-actionsheet-wrapper\",l(\"replace\",{_before:t.noop,_after:t.noop,init:function(e,i,r){h.prototype.init.call(this,e),this._previous=t(i),this._transitionClass=r},duration:function(){throw Error(\"The replace effect does not support duration setting; the effect duration may be customized through the transition class rule\")},beforeTransition:function(t){return this._before=t,this},afterTransition:function(t){return this._after=t,this},_both:function(){return t().add(this._element).add(this._previous)},_containerClass:function(){var t=this._direction,e=\"k-fx k-fx-start k-fx-\"+this._transitionClass;return t&&(e+=\" k-fx-\"+t),this._reverse&&(e+=\" k-fx-reverse\"),e},complete:function(e){if(!(!this.deferred||e&&t(e.target).is(k))){var i=this.container;i.removeClass(\"k-fx-end\").removeClass(this._containerClass()).off(D.event,this.completeProxy),this._previous.hide().removeClass(\"k-fx-current\"),this.element.removeClass(\"k-fx-next\"),y&&i.css(it,\"\"),this.isAbsolute||this._both().css(nt,\"\"),this.deferred.resolve(),delete this.deferred}},run:function(){if(this._additionalEffects&&this._additionalEffects[0])return this.compositeRun();var e,i=this,r=i.element,n=i._previous,s=r.parents().filter(n.parents()).first(),o=i._both(),a=t.Deferred(),c=r.css(nt);return s.length||(s=r.parent()),this.container=s,this.deferred=a,this.isAbsolute=\"absolute\"==c,this.isAbsolute||o.css(nt,\"absolute\"),y&&(e=s.css(it),s.css(it,\"hidden\")),D?(r.addClass(\"k-fx-hidden\"),s.addClass(this._containerClass()),this.completeProxy=t.proxy(this,\"complete\"),s.on(D.event,this.completeProxy),C.animationFrame(function(){r.removeClass(\"k-fx-hidden\").addClass(\"k-fx-next\"),n.css(\"display\",\"\").addClass(\"k-fx-current\"),i._before(n,r),C.animationFrame(function(){s.removeClass(\"k-fx-start\").addClass(\"k-fx-end\"),i._after(n,r)})})):this.complete(),a.promise()},stop:function(){this.complete()}}),b=C.Class.extend({init:function(){var t=this;t._tickProxy=z(t._tick,t),t._started=!1},tick:t.noop,done:t.noop,onEnd:t.noop,onCancel:t.noop,start:function(){this.enabled()&&(this.done()?this.onEnd():(this._started=!0,C.animationFrame(this._tickProxy)))},enabled:function(){return!0},cancel:function(){this._started=!1,this.onCancel()},_tick:function(){var t=this;t._started&&(t.tick(),t.done()?(t._started=!1,t.onEnd()):C.animationFrame(t._tickProxy))}}),w=b.extend({init:function(t){var e=this;P(e,t),b.fn.init.call(e)},done:function(){return this.timePassed()>=this.duration},timePassed:function(){return Math.min(this.duration,new Date-this.startDate)},moveTo:function(t){var e=this,i=e.movable;e.initial=i[e.axis],e.delta=t.location-e.initial,e.duration=\"number\"==typeof t.duration?t.duration:300,e.tick=e._easeProxy(t.ease),e.startDate=new Date,e.start()},_easeProxy:function(t){var e=this;return function(){e.movable.moveAxis(e.axis,t(e.timePassed(),e.initial,e.delta,e.duration))}}}),P(w,{easeOutExpo:function(t,e,i,r){return t==r?e+i:i*(-Math.pow(2,-10*t/r)+1)+e},easeOutBack:function(t,e,i,r,n){return n=1.70158,i*((t=t/r-1)*t*((n+1)*t+n)+1)+e}}),T.Animation=b,T.Transition=w,T.createEffect=l,T.box=function(e){e=t(e);var i=e.offset();return i.width=e.outerWidth(),i.height=e.outerHeight(),i},T.transformOrigin=function(t,e){var i=(t.left-e.left)*e.width/(e.width-t.width),r=(t.top-e.top)*e.height/(e.height-t.height);return{x:isNaN(i)?0:i,y:isNaN(r)?0:r}},T.fillScale=function(t,e){return Math.min(t.width/e.width,t.height/e.height)},T.fitScale=function(t,e){return Math.max(t.width/e.width,t.height/e.height)}}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,i){(i||e)()});\n//# sourceMappingURL=kendo.fx.min.js.map\n","import { analyticsFetcher } from \"app2/src/helpers/Fetcher\";\nimport {\n  CardConnectAuthorizationRecord,\n  ICardConnectAuthorizationData,\n} from \"app2/src/records/CardConnectAuthorization\";\nimport { IMakePaymentData } from \"app2/src/records/PaymentRecord\";\n\nexport interface AuthorizationResponse {\n  authorized: boolean;\n  error?: string;\n}\n\nconst baseUrl = \"payments/v1/cardconnect\";\n\nexport const getAuthorization = (orgId: number): Promise<ICardConnectAuthorizationData> => {\n  const url = analyticsFetcher.joinUrls(baseUrl, orgId.toString(), \"authorization\");\n  return analyticsFetcher.get<ICardConnectAuthorizationData>(url);\n};\n\nexport const authorize = (\n  authorizationRecord: CardConnectAuthorizationRecord,\n  orgId: number,\n): Promise<AuthorizationResponse> => {\n  const url = analyticsFetcher.joinUrls(baseUrl, orgId.toString(), \"authorization\");\n  return analyticsFetcher.post<AuthorizationResponse>(url, {\n    payload: {\n      ...authorizationRecord.toJS(),\n    },\n  });\n};\n\nexport const makePayment = (\n  orgId: number,\n  token: string,\n  accountInfo: any,\n  payment: IMakePaymentData,\n): Promise<any> => {\n  const url = analyticsFetcher.joinUrls(baseUrl, orgId.toString(), \"payment\");\n  return analyticsFetcher.post<any>(url, {\n    payment,\n    token,\n    customer: accountInfo,\n  });\n};\n","import { ThunkAction } from \"redux-thunk\";\nimport { ActionsUnion, createAction } from \"../Utils\";\nimport { RootState, RootActions } from \"..\";\nimport { fromJSON, IMakePaymentData, PaymentRecord } from \"app2/src/records/PaymentRecord\";\nimport * as paymentActions from \"app2/src/reducers/payment.actions\";\nimport { Nullable } from \"app2/src/records\";\nimport { RootDispatchType } from \"../../store\";\nimport { authorize, getAuthorization, makePayment } from \"app2/src/api/integrations/cardconnect.service\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { authorizationRecord } from \"app2/src/selectors/cardconnect.selectors\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\n\nexport const SET_AUTHORIZED = \"@integrations/cardconnect/SET_AUTHORIZED\";\nexport const FETCH_AUTHORIZATION = \"@integrations/cardconnect/FETCH_AUTHORIZATION\";\nexport const SET_AUTHORIZATION = \"@integrations/cardconnect/SET_AUTHORIZATION\";\nexport const UPDATE_FORM = \"@integrations/cardconnect/UPDATE_FORM\";\nexport const RESET = \"@integrations/cardconnect/RESET\";\n\nexport const Actions = {\n  fetchAuthorization: (orgId: number) => createAction(FETCH_AUTHORIZATION, orgId),\n  setAuthorization: (orgId: number, authorization: any) =>\n    createAction(SET_AUTHORIZATION, { orgId: orgId, authorization: authorization }),\n  update: (event: any) => createAction(UPDATE_FORM, { event }),\n  reset: (id: number) => createAction(RESET, { id }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, RootActions>;\n\nexport const AsyncActions = {\n  makePayment: (\n    orgId: number,\n    token: string,\n    accountInfo: any,\n    payment: IMakePaymentData,\n  ): ThunkResult<Promise<Nullable<PaymentRecord>>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(paymentActions.Actions.makePayment());\n      try {\n        const result = await makePayment(orgId, token, accountInfo, payment);\n        const record = fromJSON(result.payment);\n        dispatch(paymentActions.Actions.receivePayment(record));\n        return record;\n      } catch (error) {\n        let msg = \"\";\n        if (error.status && error.status === 500) {\n          msg = \"Server Error: Internal Server Error\";\n        } else if (error.status && error.status === 422 && error.data && error.data.error === \"no valid token\") {\n          msg =\n            \"No valid authorization.  Please check the organization's configuration.  If this persists please contact support.\";\n        } else if (\n          error.status &&\n          error.status === 422 &&\n          error.data &&\n          error.data.status_code &&\n          error.data.status_code === 401\n        ) {\n          msg =\n            \"Invalid credentials.  Please check the organization's integration configuration.  If this persists please contact support.\";\n        } else if (error.status && error.status === 422 && error.data && error.data.error) {\n          msg = error.data.error;\n        } else {\n          msg = error.message || \"Unknown Error\";\n        }\n\n        dispatch(paymentActions.Actions.paymentError(msg));\n        return error;\n      }\n    };\n  },\n  getAuthorization: (orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchAuthorization(orgId));\n\n      try {\n        const result = await getAuthorization(orgId);\n        dispatch(Actions.setAuthorization(orgId, result));\n      } catch (error) {\n        handleErrors(error, dispatch);\n      }\n    };\n  },\n  authorize: (orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const record = authorizationRecord(getState(), orgId);\n      dispatch(Actions.fetchAuthorization(orgId));\n\n      try {\n        const result = await authorize(record, orgId);\n        dispatch(Actions.setAuthorization(orgId, result));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Authorized successfully\"));\n      } catch (error) {\n        handleErrors(error, dispatch);\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import * as userActions from \"./user.actions\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { ActionsUnion, createAction } from \"./Utils\";\nimport { RootState } from \".\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { normalize, arrayOf, Schema } from \"normalizr-immutable\";\nimport { RootDispatchType } from \"../store\";\n\nexport const RECEIVE_PAGE = \"@leads/RECEIVE_PAGE\";\nexport const RESET_PAGES = \"@leads/RESET_PAGES\";\nexport const FETCH_PAGE = \"@leads/FETCH_PAGE\";\nexport const POST_JOB = \"@leads/POST_JOB\";\nexport const RECEIVE_LEAD = \"@leads/RECEIVE_LEAD\";\n\nexport interface ILeadData {\n  id: number;\n  first_name: string;\n  last_name: string;\n  email_address: string;\n  lead_source: string;\n  form_data: any;\n  job_id: number;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IPagination {\n  pagination: {\n    total_count: number;\n    total_pages: number;\n    current_page: number;\n  };\n}\n\nexport interface ILeadPageData {\n  page: number;\n  leads: ILeadData[];\n  meta: IPagination;\n}\n\nexport interface ILeadQueryParams {\n  page: number;\n  query: string;\n  filter: string;\n}\n\nexport const Actions = {\n  receivePage: (page: ILeadPageData) => createAction(RECEIVE_PAGE, page),\n  fetchPage: (params: ILeadQueryParams) => createAction(FETCH_PAGE, params),\n  resetPages: () => createAction(RESET_PAGES),\n  createJob: (lead_id: number) => createAction(POST_JOB, lead_id),\n  receiveLead: (lead: ILeadData) => createAction(RECEIVE_LEAD, lead),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, ActionsUnion<typeof Actions> | userActions.Actions>;\n\nexport const AsyncActions = {\n  getPage: (params: ILeadQueryParams): ThunkResult<Promise<ILeadPageData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPage(params));\n      const actionUrl = \"/api/v1/leads\";\n\n      return fetcher.get(actionUrl, params).then((data: ILeadPageData) => {\n        data.page = params.page;\n        dispatch(Actions.receivePage(data));\n        return data;\n      });\n    };\n  },\n  createJob: (lead_id: number): ThunkResult<Promise<void>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.createJob(lead_id));\n      const actionUrl = \"api/v1/leads/\" + lead_id + \"/job\";\n\n      return fetcher.patch(actionUrl).then((data: any) => {\n        dispatch(Actions.receiveLead(data.lead));\n        return data.lead;\n      });\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"util/main.min\",[\"kendo.core.min\"],e)}(function(){return function(){function e(e){return typeof e!==F}function t(e,t){var n=i(t);return B.round(e*n)/n}function i(e){return e?B.pow(10,e):1}function n(e,t,i){return B.max(B.min(e,i),t)}function a(e){return e*V}function r(e){return e/V}function o(e){return\"number\"==typeof e&&!isNaN(e)}function s(t,i){return e(t)?t:i}function d(e){return e*e}function l(e){var t,i=[];for(t in e)i.push(t+e[t]);return i.sort().join(\"\")}function c(e){var t,i=2166136261;for(t=0;e.length>t;++t)i+=(i<<1)+(i<<4)+(i<<7)+(i<<8)+(i<<24),i^=e.charCodeAt(t);return i>>>0}function u(e){return c(l(e))}function h(e){var t,i=e.length,n=P,a=H;for(t=0;i>t;t++)a=B.max(a,e[t]),n=B.min(n,e[t]);return{min:n,max:a}}function p(e){return h(e).min}function f(e){return h(e).max}function m(e){return g(e).min}function v(e){return g(e).max}function g(e){var t,i,n,a=P,r=H;for(t=0,i=e.length;i>t;t++)n=e[t],null!==n&&isFinite(n)&&(a=B.min(a,n),r=B.max(r,n));return{min:a===P?void 0:a,max:r===H?void 0:r}}function _(e){return e?e[e.length-1]:void 0}function k(e,t){return e.push.apply(e,t),e}function w(e){return I.template(e,{useWithBlock:!1,paramName:\"d\"})}function b(t,i){return e(i)&&null!==i?\" \"+t+\"='\"+i+\"' \":\"\"}function y(e){var t,i=\"\";for(t=0;e.length>t;t++)i+=b(e[t][0],e[t][1]);return i}function z(t){var i,n,a=\"\";for(i=0;t.length>i;i++)n=t[i][1],e(n)&&(a+=t[i][0]+\":\"+n+\";\");return\"\"!==a?a:void 0}function T(e){return\"string\"!=typeof e&&(e+=\"px\"),e}function D(e){var t,i,n=[];if(e)for(t=I.toHyphens(e).split(\"-\"),i=0;t.length>i;i++)n.push(\"k-pos-\"+t[i]);return n.join(\" \")}function x(t){return\"\"===t||null===t||\"none\"===t||\"transparent\"===t||!e(t)}function S(e){for(var t={1:\"i\",10:\"x\",100:\"c\",2:\"ii\",20:\"xx\",200:\"cc\",3:\"iii\",30:\"xxx\",300:\"ccc\",4:\"iv\",40:\"xl\",400:\"cd\",5:\"v\",50:\"l\",500:\"d\",6:\"vi\",60:\"lx\",600:\"dc\",7:\"vii\",70:\"lxx\",700:\"dcc\",8:\"viii\",80:\"lxxx\",800:\"dccc\",9:\"ix\",90:\"xc\",900:\"cm\",1e3:\"m\"},i=[1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],n=\"\";e>0;)i[0]>e?i.shift():(n+=t[i[0]],e-=i[0]);return n}function E(e){var t,i,n,a,r;for(e=e.toLowerCase(),t={i:1,v:5,x:10,l:50,c:100,d:500,m:1e3},i=0,n=0,a=0;e.length>a;++a){if(r=t[e.charAt(a)],!r)return null;i+=r,r>n&&(i-=2*n),n=r}return i}function C(e){var t=Object.create(null);return function(){var i,n=\"\";for(i=arguments.length;--i>=0;)n+=\":\"+arguments[i];return n in t?t[n]:e.apply(this,arguments)}}function A(e){for(var t,i,n=[],a=0,r=e.length;r>a;)t=e.charCodeAt(a++),t>=55296&&56319>=t&&r>a?(i=e.charCodeAt(a++),56320==(64512&i)?n.push(((1023&t)<<10)+(1023&i)+65536):(n.push(t),a--)):n.push(t);return n}function M(e){return e.map(function(e){var t=\"\";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e)}).join(\"\")}function R(e,t){function i(e,i){for(var n=[],a=0,r=0,o=0;e.length>a&&i.length>r;)t(e[a],i[r])<=0?n[o++]=e[a++]:n[o++]=i[r++];return e.length>a&&n.push.apply(n,e.slice(a)),i.length>r&&n.push.apply(n,i.slice(r)),n}return 2>e.length?e.slice():function n(e){var t,a,r;return 1>=e.length?e:(t=Math.floor(e.length/2),a=e.slice(0,t),r=e.slice(t),a=n(a),r=n(r),i(a,r))}(e)}var B=Math,I=window.kendo,O=I.deepExtend,V=B.PI/180,P=Number.MAX_VALUE,H=-Number.MAX_VALUE,F=\"undefined\",W=Date.now;W||(W=function(){return(new Date).getTime()}),O(I,{util:{MAX_NUM:P,MIN_NUM:H,append:k,arrayLimits:h,arrayMin:p,arrayMax:f,defined:e,deg:r,hashKey:c,hashObject:u,isNumber:o,isTransparent:x,last:_,limitValue:n,now:W,objectKey:l,round:t,rad:a,renderAttr:b,renderAllAttr:y,renderPos:D,renderSize:T,renderStyle:z,renderTemplate:w,sparseArrayLimits:g,sparseArrayMin:m,sparseArrayMax:v,sqr:d,valueOrDefault:s,romanToArabic:E,arabicToRoman:S,memoize:C,ucs2encode:M,ucs2decode:A,mergeSort:R}}),I.drawing.util=I.util,I.dataviz.util=I.util}(),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,i){(i||t)()}),function(e,define){define(\"util/text-metrics.min\",[\"kendo.core.min\",\"util/main.min\"],e)}(function(){!function(e){function t(){return{width:0,height:0,baseline:0}}function i(e,t,i){return u.current.measure(e,t,i)}function n(e,t){var i=[];if(e.length>0&&document.fonts){try{i=e.map(function(e){return document.fonts.load(e)})}catch(n){r.logToConsole(n)}Promise.all(i).then(t,t)}else t()}var a=document,r=window.kendo,o=r.Class,s=r.util,d=s.defined,l=o.extend({init:function(e){this._size=e,this._length=0,this._map={}},put:function(e,t){var i=this,n=i._map,a={key:e,value:t};n[e]=a,i._head?(i._tail.newer=a,a.older=i._tail,i._tail=a):i._head=i._tail=a,i._length>=i._size?(n[i._head.key]=null,i._head=i._head.newer,i._head.older=null):i._length++},get:function(e){var t=this,i=t._map[e];return i?(i===t._head&&i!==t._tail&&(t._head=i.newer,t._head.older=null),i!==t._tail&&(i.older&&(i.older.newer=i.newer,i.newer.older=i.older),i.older=t._tail,i.newer=null,t._tail.newer=i,t._tail=i),i.value):void 0}}),c=e(\"<div style='position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;padding: 0 !important; margin: 0 !important; border: 0 !important;line-height: normal !important; visibility: hidden !important; white-space: nowrap!important;' />\")[0],u=o.extend({init:function(e){this._cache=new l(1e3),this._initOptions(e)},options:{baselineMarkerSize:1},measure:function(i,n,r){var o,l,u,h,p,f,m,v;if(!i)return t();if(o=s.objectKey(n),l=s.hashKey(i+o),u=this._cache.get(l),u)return u;h=t(),p=r?r:c,f=this._baselineMarker().cloneNode(!1);for(m in n)v=n[m],d(v)&&(p.style[m]=v);return e(p).text(i),p.appendChild(f),a.body.appendChild(p),(i+\"\").length&&(h.width=p.offsetWidth-this.options.baselineMarkerSize,h.height=p.offsetHeight,h.baseline=f.offsetTop+this.options.baselineMarkerSize),h.width>0&&h.height>0&&this._cache.put(l,h),p.parentNode.removeChild(p),h},_baselineMarker:function(){return e(\"<div class='k-baseline-marker' style='display: inline-block; vertical-align: baseline;width: \"+this.options.baselineMarkerSize+\"px; height: \"+this.options.baselineMarkerSize+\"px;overflow: hidden;' />\")[0]}});u.current=new u,r.util.TextMetrics=u,r.util.LRUCache=l,r.util.loadFonts=n,r.util.measureText=i}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(e,t,i){(i||t)()}),function(e,define){define(\"util/base64.min\",[\"util/main.min\"],e)}(function(){return function(){function e(e){var i,n,a,o,s,d,l,c=\"\",u=0;for(e=t(e);e.length>u;)i=e.charCodeAt(u++),n=e.charCodeAt(u++),a=e.charCodeAt(u++),o=i>>2,s=(3&i)<<4|n>>4,d=(15&n)<<2|a>>6,l=63&a,isNaN(n)?d=l=64:isNaN(a)&&(l=64),c=c+r.charAt(o)+r.charAt(s)+r.charAt(d)+r.charAt(l);return c}function t(e){var t,i,n=\"\";for(t=0;e.length>t;t++)i=e.charCodeAt(t),128>i?n+=a(i):2048>i?(n+=a(192|i>>>6),n+=a(128|63&i)):65536>i&&(n+=a(224|i>>>12),n+=a(128|i>>>6&63),n+=a(128|63&i));return n}var i=window.kendo,n=i.deepExtend,a=String.fromCharCode,r=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";n(i.util,{encodeBase64:e,encodeUTF8:t})}(),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,i){(i||t)()}),function(e,define){define(\"mixins/observers.min\",[\"kendo.core.min\"],e)}(function(){return function(e){var t=Math,i=window.kendo,n=i.deepExtend,a=e.inArray,r={observers:function(){return this._observers=this._observers||[]},addObserver:function(e){return this._observers?this._observers.push(e):this._observers=[e],this},removeObserver:function(e){var t=this.observers(),i=a(e,t);return-1!=i&&t.splice(i,1),this},trigger:function(e,t){var i,n,a=this._observers;if(a&&!this._suspended)for(n=0;a.length>n;n++)i=a[n],i[e]&&i[e](t);return this},optionsChange:function(e){e=e||{},e.element=this,this.trigger(\"optionsChange\",e)},geometryChange:function(){this.trigger(\"geometryChange\",{element:this})},suspend:function(){return this._suspended=(this._suspended||0)+1,this},resume:function(){return this._suspended=t.max((this._suspended||0)-1,0),this},_observerField:function(e,t){this[e]&&this[e].removeObserver(this),this[e]=t,t.addObserver(this)}};n(i,{mixins:{ObserversMixin:r}})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,i){(i||t)()}),function(e,define){define(\"kendo.scheduler.min\",[\"kendo.dropdownlist.min\",\"kendo.editable.min\",\"kendo.multiselect.min\",\"kendo.window.min\",\"kendo.datetimepicker.min\",\"kendo.scheduler.recurrence.min\",\"kendo.scheduler.view.min\",\"kendo.scheduler.dayview.min\",\"kendo.scheduler.agendaview.min\",\"kendo.scheduler.monthview.min\",\"kendo.scheduler.timelineview.min\",\"kendo.mobile.actionsheet.min\",\"kendo.mobile.pane.min\",\"kendo.pdf.min\"],e)}(function(){return function(e,t){function i(e,t){return t=t||\"\",e.startTimezone&&(t=e.startTimezone,e.endTimezone&&(t+=\" | \"+e.endTimezone)),t}function n(e,t){var i=t.timezone;i&&(e[M.attr(\"timezone\")]=i)}function a(e,t){var i,n=t.model.fields[t.field].validation;n&&(i=n.dateCompare,i&&q(i)&&i.message&&(e[M.attr(\"dateCompare-msg\")]=i.message))}function r(e,t){return function(i){return i=e(i),s(i,\"apply\",t),i||[]}}function o(e,t){return function(i){return i&&(\"[object Array]\"===J.call(i)||i instanceof M.data.ObservableArray||(i=[i])),s(i,\"remove\",t,!0),i=e(i),i||[]}}function s(e,t,i,n){var a,r,o;for(e=e||[],r=0,o=e.length;o>r;r++)a=e[r],n?a.startTimezone||a.endTimezone?i?(a.start=M.timezone.convert(a.start,a.startTimezone||a.endTimezone,i),a.end=M.timezone.convert(a.end,a.endTimezone||a.startTimezone,i),a.start=M.timezone[t](a.start,i),a.end=M.timezone[t](a.end,i)):(a.start=M.timezone[t](a.start,a.startTimezone||a.endTimezone),a.end=M.timezone[t](a.end,a.endTimezone||a.startTimezone)):i&&(a.start=M.timezone[t](a.start,i),a.end=M.timezone[t](a.end,i)):a.startTimezone||a.endTimezone?(a.start=M.timezone[t](a.start,a.startTimezone||a.endTimezone),a.end=M.timezone[t](a.end,a.endTimezone||a.startTimezone),i&&(a.start=M.timezone.convert(a.start,a.startTimezone||a.endTimezone,i),a.end=M.timezone.convert(a.end,a.endTimezone||a.startTimezone,i))):i&&(a.start=M.timezone[t](a.start,i),a.end=M.timezone[t](a.end,i)),n&&delete a.uid;return e}function d(e,t){for(var i,n=e.length,a=0;n>a;a++)if(i=e[a],i.uid===t)return i}function l(e,t,i){return e=i?M.timezone.convert(e,t,i):M.timezone.remove(e,t)}function c(e){var t,i,n,a,r,o,s,d,c,u,h,p;return e.filter(\"[name=end]\").length&&(t=e.closest(\".k-scheduler-edit-form\"),i=t.find(\"[name=start]:visible\"),n=t.find(\"[name=end]:visible\"),n[0]&&i[0]&&(o=M.widgetInstance(i,M.ui),s=M.widgetInstance(n,M.ui),d=t.data(\"kendoEditable\"),c=d?d.options.model:null,o&&s?(a=o.value(),r=s.value()):(a=M.parseDate(i.val()),r=M.parseDate(n.val())),a&&r))?(c&&(u=i.attr(M.attr(\"timezone\")),h=c.startTimezone,p=c.endTimezone,h=h||p,p=p||h,h&&(a=l(a,h,u),r=l(r,p,u))),r>=a):!0}function u(e,t,i,n){for(var a=e.length,r=[],o=0;a>o;o++)r=r.concat(e[o].expand(t,i,n));return r}function h(e){return delete e.name,delete e.prefix,delete e.remove,delete e.edit,delete e.add,delete e.navigate,e}function p(t,i){var n,a,r=(t.fields||t)[i],o=[\"url\",\"email\",\"number\",\"date\",\"boolean\"],s=r?r.validation:{},d=M.attr(\"type\"),l=e.inArray,c={};for(n in s)a=s[n],l(n,o)>=0?c[d]=n:M.isFunction(a)||(c[n]=q(a)?a.value||n:a),c[M.attr(n+\"-msg\")]=a.message;return c}function f(t,i){var n=p(i,t.field);return function(i){e(M.format('<select data-{0}bind=\"value:{1}\">',M.ns,t.field)).appendTo(i).attr(n).kendoDropDownList({dataTextField:t.dataTextField,dataValueField:t.dataValueField,dataSource:t.dataSource,valuePrimitive:t.valuePrimitive,optionLabel:\"None\",template:M.format('<span class=\"k-scheduler-mark\" style=\"background-color:#= data.{0}?{0}:\"none\" #\"></span>#={1}#',t.dataColorField,t.dataTextField)})}}function m(t){var i=p(t.model,t.field);return function(t){e('<textarea name=\"description\" class=\"k-textbox\"/>').attr(i).appendTo(t)}}function v(t,i){var n=p(i,t.field);return function(i){e(M.format('<select data-{0}bind=\"value:{1}\">',M.ns,t.field)).appendTo(i).attr(n).kendoMultiSelect({dataTextField:t.dataTextField,dataValueField:t.dataValueField,dataSource:t.dataSource,valuePrimitive:t.valuePrimitive,itemTemplate:M.format('<span class=\"k-scheduler-mark\" style=\"background-color:#= data.{0}?{0}:\"none\" #\"></span>#={1}#',t.dataColorField,t.dataTextField),tagTemplate:M.format('<span class=\"k-scheduler-mark\" style=\"background-color:#= data.{0}?{0}:\"none\" #\"></span>#={1}#',t.dataColorField,t.dataTextField)})}}function g(t,i){var n=p(i,t.field);return function(i){var a,r,o=\"\",s=t.dataSource.view();for(a=0,r=s.length;r>a;a++)o+=M.format('<option value=\"{0}\">{1}</option>',M.getter(t.dataValueField)(s[a]),M.getter(t.dataTextField)(s[a]));e(M.format('<select data-{0}bind=\"value:{1}\" multiple=\"multiple\" data-{0}value-primitive=\"{3}\">{2}</select>',M.ns,t.field,o,t.valuePrimitive)).appendTo(i).attr(n)}}function _(e,t){var i,n=e.end.getTime()-e.start.getTime(),a=new Date(e.start.getTime());return M.date.setTime(a,t),i=new Date(a.getTime()),M.date.setTime(i,n,!0),{start:a,end:i}}var k,w,b,y,z,T,D,x,S,E,C,A,M=window.kendo,R=M.date,B=M.support.input,I=R.MS_PER_DAY,O=R.getDate,V=M.date.getMilliseconds,P=M.recurrence,H=M.keys,F=M.ui,W=F.Widget,N=F.DataBoundWidget,L=\"string\",U=F.Popup,j=F.Calendar,K=M.data.DataSource,q=e.isPlainObject,Q=e.extend,$=e.proxy,J=Object.prototype.toString,Y=e.isArray,Z=\".kendoScheduler\",X=\"click\",G=\"change\",ee=\"cancel\",te=\"remove\",ie=\"save\",ne=\"add\",ae=\"edit\",re=/(?:value:start|value:end)(?:,|$)/,oe=O(new Date),se=\",\",de=/\\;/g,le=\"recurrenceException\",ce=\"Are you sure you want to delete this event?\",ue=\"Do you want to delete only this event occurrence or the whole series?\",he=\"Do you want to edit only this event occurrence or the whole series?\",pe=\"Are you sure you want to delete this event occurrence?\",fe=\"Are you sure you want to delete the whole series?\",me='<a class=\"k-button #=className#\" #=attr# href=\"\\\\#\">#=text#</a>',ve=M.template('<li class=\"k-current-view\" data-#=ns#name=\"#=view#\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${views[view].title}</a></li>'),ge=M.template('<div class=\"k-floatwrap k-header k-scheduler-toolbar\"># if (pdf) { #<ul class=\"k-reset k-scheduler-tools\"><li><a role=\"button\" href=\"\\\\#\" class=\"k-button k-pdf\"><span class=\"k-icon k-i-pdf\"></span>${messages.pdf}</a></li></ul># } #<ul class=\"k-reset k-scheduler-navigation\"><li class=\"k-state-default k-header k-nav-today\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${messages.today}</a></li><li class=\"k-state-default k-header k-nav-prev\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-w\"></span></a></li><li class=\"k-state-default k-header k-nav-next\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-e\"></span></a></li><li class=\"k-state-default k-nav-current\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-calendar\"></span><span class=\"k-sm-date-format\" data-#=ns#bind=\"text: formattedShortDate\"></span><span class=\"k-lg-date-format\" data-#=ns#bind=\"text: formattedDate\"></span></a></li></ul>#if(viewsCount === 1){#<a role=\"button\" data-#=ns#name=\"#=view#\" href=\"\\\\#\" class=\"k-link k-scheduler-refresh\"><span class=\"k-icon k-i-refresh\"></span></a>#}else{#<ul class=\"k-reset k-header k-scheduler-views\">#for(var view in views){#<li class=\"k-state-default k-view-#= view.toLowerCase() #\" data-#=ns#name=\"#=view#\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${views[view].title}</a></li>#}#</ul>#}#</div>'),_e=M.template('<div class=\"k-floatwrap k-header k-scheduler-toolbar\"><ul class=\"k-reset k-header k-scheduler-navigation\"><li class=\"k-state-default k-nav-today\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${messages.today}</a></li></ul>#if(viewsCount === 1){#<a role=\"button\" data-#=ns#name=\"#=view#\" href=\"\\\\#\" class=\"k-link k-scheduler-refresh\"><span class=\"k-icon k-i-refresh\"></span></a>#}else{#<ul class=\"k-reset k-header k-scheduler-views\">#for(var view in views){#<li class=\"k-state-default k-view-#= view.toLowerCase() #\" data-#=ns#name=\"#=view#\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${views[view].title}</a></li>#}#</ul>#}#</div><div class=\"k-floatwrap k-header k-scheduler-toolbar\"><ul class=\"k-reset k-header k-scheduler-navigation\"><li class=\"k-state-default k-nav-prev\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-w\"></span></a></li><li class=\"k-state-default k-nav-current\"><span class=\"k-sm-date-format\" data-#=ns#bind=\"text: formattedShortDate\"></span><span class=\"k-lg-date-format\" data-#=ns#bind=\"text: formattedDate\"></span></li><li class=\"k-state-default k-nav-next\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-e\"></span></a></li></ul></div>'),ke=function(t,i){var r={name:i.field},o=B.date?\"\":M.attr(\"role\")+'=\"datepicker\" ',s=M.attr(\"role\")+'=\"datetimepicker\" ',d=i.model.isAllDay,l=M.attr(\"validate\")+\"='\"+!d+\"'\",c=M.attr(\"validate\")+\"='\"+d+\"'\";n(r,i),a(r,i),e('<input type=\"datetime-local\" required '+M.attr(\"type\")+'=\"date\" '+s+M.attr(\"bind\")+'=\"value:'+i.field+',invisible:isAllDay\" '+l+\"/>\").attr(r).appendTo(t),e('<input type=\"date\" required '+M.attr(\"type\")+'=\"date\" '+o+M.attr(\"bind\")+'=\"value:'+i.field+',visible:isAllDay\" '+c+\"/>\").attr(r).appendTo(t),e(\"<span \"+M.attr(\"for\")+'=\"'+i.field+'\" class=\"k-invalid-msg\"/>').hide().appendTo(t)},we=function(t,i){var r={name:i.field},o=i.model.isAllDay,s=M.attr(\"validate\")+\"='\"+!o+\"' \",d=M.attr(\"validate\")+\"='\"+o+\"' \";n(r,i),a(r,i),e('<input type=\"text\" required '+M.attr(\"type\")+'=\"date\" '+M.attr(\"role\")+'=\"datetimepicker\" '+M.attr(\"bind\")+'=\"value:'+i.field+',invisible:isAllDay\" '+s+\"/>\").attr(r).appendTo(t),e('<input type=\"text\" required '+M.attr(\"type\")+'=\"date\" '+M.attr(\"role\")+'=\"datepicker\" '+M.attr(\"bind\")+'=\"value:'+i.field+',visible:isAllDay\" '+d+\"/>\").attr(r).appendTo(t),e(\"<span \"+M.attr(\"bind\")+'=\"text: '+i.field+'Timezone\"></span>').appendTo(t),\"end\"===i.field&&e(\"<span \"+M.attr(\"bind\")+'=\"text: startTimezone, invisible: endTimezone\"></span>').appendTo(t),e(\"<span \"+M.attr(\"for\")+'=\"'+i.field+'\" class=\"k-invalid-msg\"/>').hide().appendTo(t)},be=function(t,i){e(\"<div \"+M.attr(\"bind\")+'=\"value:'+i.field+'\" />').attr({name:i.field}).appendTo(t).kendoRecurrenceEditor({start:i.model.start,timezone:i.timezone,messages:i.messages})},ye=function(t,i){e(\"<div \"+M.attr(\"bind\")+'=\"value:'+i.field+'\" />').attr({name:i.field}).appendTo(t).kendoMobileRecurrenceEditor({start:i.model.start,timezone:i.timezone,messages:i.messages,pane:i.pane,value:i.model[i.field]})},ze=function(t,n){var a=i(n.model,n.messages.noTimezone);e('<a href=\"#\" class=\"k-button k-timezone-button\" data-bind=\"invisible:isAllDay\">'+a+\"</a>\").click(n.click).appendTo(t)},Te=function(t,i){e('<a href=\"#\" class=\"k-button\" data-bind=\"invisible:isAllDay\">'+i.messages.timezoneEditorButton+\"</a>\").click(i.click).appendTo(t)},De=function(t,i){e(\"<div \"+M.attr(\"bind\")+'=\"value:'+i.field+'\" />').attr({name:i.field}).toggle(i.visible).appendTo(t).kendoMobileTimezoneEditor({optionLabel:i.noTimezone})},xe=function(t,i){e(\"<div \"+M.attr(\"bind\")+'=\"value:'+i.field+'\" />').attr({name:i.field}).toggle(i.visible).appendTo(t).kendoTimezoneEditor({optionLabel:i.noTimezone})},Se=M.Class.extend({init:function(t,i){var n=t.timezone;this.reader=i,i.model&&(this.model=i.model),this.timezone=n,this.data=r(e.proxy(this.data,this),n),this.serialize=o(e.proxy(this.serialize,this),n)},errors:function(e){return this.reader.errors(e)},parse:function(e){return this.reader.parse(e)},data:function(e){return this.reader.data(e)},total:function(e){return this.reader.total(e)},groups:function(e){return this.reader.groups(e)},aggregates:function(e){return this.reader.aggregates(e)},serialize:function(e){return this.reader.serialize(e)}}),Ee=M.data.Model.define({init:function(e){var t=this;M.data.Model.fn.init.call(t,e),t._defaultId=t.defaults[t.idField]},_time:function(e){var t=this[e],i=\"_\"+e+\"Time\";return this[i]?this[i]-M.date.toUtcTime(M.date.getDate(t)):V(t)},_date:function(e){var t=\"_\"+e+\"Time\";return this[t]?this[t]-this._time(e):M.date.getDate(this[e])},clone:function(t,i){var n=this.uid,a=new this.constructor(e.extend({},this.toJSON(),t));return i||(a.uid=n),a},duration:function(){var e=this.end,t=this.start,i=(e.getTimezoneOffset()-t.getTimezoneOffset())*M.date.MS_PER_MINUTE;return e-t-i},expand:function(e,t,i){return P?P.expand(this,e,t,i):[this]},update:function(e){for(var t in e)this.set(t,e[t]);this._startTime&&this.set(\"_startTime\",M.date.toUtcTime(this.start)),this._endTime&&this.set(\"_endTime\",M.date.toUtcTime(this.end))},isMultiDay:function(){return this.isAllDay||this.duration()>=M.date.MS_PER_DAY},isException:function(){return!this.isNew()&&this.recurrenceId},isOccurrence:function(){return this.isNew()&&this.recurrenceId},isRecurring:function(){return!(!this.recurrenceRule&&!this.recurrenceId)},isRecurrenceHead:function(){return!(!this.id||!this.recurrenceRule)},toOccurrence:function(t){return t=e.extend(t,{recurrenceException:null,recurrenceRule:null,recurrenceId:this.id||this.recurrenceId}),t[this.idField]=this.defaults[this.idField],this.clone(t,!0)},toJSON:function(){var e=M.data.Model.fn.toJSON.call(this);return e.uid=this.uid,delete e._startTime,delete e._endTime,e},shouldSerialize:function(e){return M.data.Model.fn.shouldSerialize.call(this,e)&&\"_defaultId\"!==e},set:function(e,t){var i,n,a,r=this.isAllDay||!1;M.data.Model.fn.set.call(this,e,t),\"isAllDay\"==e&&t!=r&&(i=M.date.getDate(this.start),n=new Date(this.end),a=M.date.getMilliseconds(n),0===a&&t&&(a=I),this.set(\"start\",i),t===!0?(M.date.setTime(n,-a),i>n&&(n=i)):M.date.setTime(n,I-a),this.set(\"end\",n))},id:\"id\",fields:{id:{type:\"number\"},title:{defaultValue:\"\",type:\"string\"},start:{type:\"date\",validation:{required:!0}},startTimezone:{type:\"string\"},end:{type:\"date\",validation:{required:!0,dateCompare:{value:c}}},endTimezone:{type:\"string\"},recurrenceRule:{defaultValue:\"\",type:\"string\"},recurrenceException:{defaultValue:\"\",type:\"string\"},isAllDay:{type:\"boolean\",defaultValue:!1},description:{type:\"string\"}}}),Ce=K.extend({init:function(e){K.fn.init.call(this,Q(!0,{},{schema:{modelBase:Ee,model:Ee}},e)),this.reader=new Se(this.options.schema,this.reader)},expand:function(e,t){var i=this.view(),n={};return e&&t&&(t=new Date(t.getTime()+I-1),n={logic:\"or\",filters:[{logic:\"and\",filters:[{field:\"start\",operator:\"gte\",value:e},{field:\"end\",operator:\"gte\",value:e},{field:\"start\",operator:\"lte\",value:t}]},{logic:\"and\",filters:[{field:\"start\",operator:\"lte\",value:new Date(e.getTime()+I-1)},{field:\"end\",operator:\"gte\",value:e}]}]},i=new M.data.Query(u(i,e,t,this.reader.timezone)).filter(n).toArray()),i},cancelChanges:function(e){e&&e.isOccurrence()&&this._removeExceptionDate(e),K.fn.cancelChanges.call(this,e)},insert:function(e,t){if(t){if(!(t instanceof Ee)){var i=t;t=this._createNewModel(),t.accept(i)}return(!this._pushCreated&&t.isRecurrenceHead()||t.recurrenceId)&&(t=t.recurrenceId?t:t.toOccurrence(),this._addExceptionDate(t)),K.fn.insert.call(this,e,t)}},pushCreate:function(e){this._pushCreated=!0,K.fn.pushCreate.call(this,e),this._pushCreated=!1},remove:function(e){return e.isRecurrenceHead()?this._removeExceptions(e):e.isRecurring()&&this._addExceptionDate(e),K.fn.remove.call(this,e)},_removeExceptions:function(e){for(var t=this.data().slice(0),i=t.shift(),n=e.id;i;)i.recurrenceId===n&&K.fn.remove.call(this,i),i=t.shift();e.set(le,\"\")},_removeExceptionDate:function(e){var t,i,n,a;e.recurrenceId&&(t=this.get(e.recurrenceId),t&&(i=e.start,n=RegExp(\"(\\\\\"+se+\"?)\"+P.toExceptionString(i,this.reader.timezone)),a=(t.recurrenceException||\"\").replace(de,se).replace(/\\,$/,\"\"),t.set(le,a.replace(n,\"\"))))},_addExceptionDate:function(e){var t,i=e.start,n=this.reader.timezone,a=this.get(e.recurrenceId),r=(a.recurrenceException||\"\").replace(de,se).replace(/\\,$/,\"\");P.isException(r,i,n)||(t=P.toExceptionString(i,n),a.set(le,r+(r&&t?se:\"\")+t))}});Ce.create=function(e){(Y(e)||e instanceof M.data.ObservableArray)&&(e={data:e});var t=e||{},i=t.data;if(t.data=i,!(t instanceof Ce)&&t instanceof M.data.DataSource)throw Error(\"Incorrect DataSource type. Only SchedulerDataSource instances are supported\");return t instanceof Ce?t:new Ce(t)},Q(!0,M.data,{SchedulerDataSource:Ce,SchedulerDataReader:Se,SchedulerEvent:Ee}),k={update:{text:\"Save\",className:\"k-primary k-scheduler-update\"},canceledit:{text:\"Cancel\",className:\"k-scheduler-cancel\"},destroy:{text:\"Delete\",imageClass:\"k-i-delete\",className:\"k-primary k-scheduler-delete\",iconClass:\"k-icon\"}},w={mobile:{dateRange:ke,timezonePopUp:ze,timezone:De,recurrence:ye,description:m,multipleResources:g,resources:f},desktop:{dateRange:we,timezonePopUp:Te,timezone:xe,recurrence:be,description:m,multipleResources:v,resources:f}},b=M.Observable.extend({init:function(e,t){M.Observable.fn.init.call(this),this.element=e,this.options=Q(!0,{},this.options,t),this.createButton=this.options.createButton,this.toggleDateValidationHandler=$(this._toggleDateValidation,this)},_toggleDateValidation:function(t){if(\"isAllDay\"==t.field){var i,n,a,r=this.container,o=this.editable.options.model.isAllDay,s=M.attr(\"bind\");r.find(\"[\"+s+\"*=end],[\"+s+\"*=start]\").each(function(){i=e(this),re.test(i.attr(s))&&(n=i.is(\"[\"+M.attr(\"role\")+\"=datetimepicker],[type*=datetime]\"),a=o!==n,i.attr(M.attr(\"validate\"),a))})}},fields:function(e,t){var i,n,a=this,r=a.options.messages,o=a.options.timezone,s=function(e){e.preventDefault(),a._initTimezoneEditor(t,this)},d=[{field:\"title\",title:r.editor.title},{field:\"start\",title:r.editor.start,editor:e.dateRange,timezone:o},{field:\"end\",title:r.editor.end,editor:e.dateRange,timezone:o},{field:\"isAllDay\",title:r.editor.allDayEvent}];M.timezone.windows_zones&&(d.push({field:\"timezone\",title:r.editor.timezone,editor:e.timezonePopUp,click:s,messages:r.editor,model:t}),d.push({field:\"startTimezone\",title:r.editor.startTimezone,editor:e.timezone,noTimezone:r.editor.noTimezone}),d.push({field:\"endTimezone\",title:r.editor.endTimezone,editor:e.timezone,noTimezone:r.editor.noTimezone})),t.recurrenceId||d.push({field:\"recurrenceRule\",title:r.editor.repeat,editor:e.recurrence,timezone:o,messages:r.recurrenceEditor,pane:this.pane}),\"description\"in t&&d.push({field:\"description\",title:r.editor.description,editor:e.description({model:t,field:\"description\"})});for(i=0;this.options.resources.length>i;i++)n=this.options.resources[i],d.push({field:n.field,title:n.title,editor:n.multiple?e.multipleResources(n,t):e.resources(n,t)});return d},end:function(){return this.editable.end()},_buildEditTemplate:function(e,t,i){var n,a,r,o,s=this.options.messages,d=Q({},M.Template,this.options.templateSettings),l=d.paramName,c=this.options.editable.template,u=\"\";if(c)typeof c===L&&(c=window.unescape(c)),u+=M.template(c,d)(e);else for(n=0,a=t.length;a>n;n++)r=t[n],\"startTimezone\"===r.field&&(u+='<div class=\"k-popup-edit-form k-scheduler-edit-form k-scheduler-timezones\" style=\"display:none\">',u+='<div class=\"k-edit-form-container\">',u+='<div class=\"k-edit-label\"></div>',u+='<div class=\"k-edit-field\"><label class=\"k-check\"><input class=\"k-timezone-toggle\" type=\"checkbox\" />'+s.editor.separateTimezones+\"</label></div>\"),u+='<div class=\"k-edit-label\"><label for=\"'+r.field+'\">'+(r.title||r.field||\"\")+\"</label></div>\",!e.editable||e.editable(r.field)?(i.push(r),u+=\"<div \"+M.attr(\"container-for\")+'=\"'+r.field+'\" class=\"k-edit-field\"></div>'):(o=\"#:\",r.field?(r=M.expr(r.field,l),o+=r+\"==null?'':\"+r):o+=\"''\",o+=\"#\",o=M.template(o,d),u+='<div class=\"k-edit-field\">'+o(e)+\"</div>\"),\"endTimezone\"===r.field&&(u+=this._createEndTimezoneButton());return u},_createEndTimezoneButton:function(){return\"</div></div>\"},_revertTimezones:function(e){e.set(\"startTimezone\",this._startTimezone),e.set(\"endTimezone\",this._endTimezone),delete this._startTimezone,delete this._endTimezone}}),y=b.extend({init:function(){b.fn.init.apply(this,arguments),this.pane=M.mobile.ui.Pane.wrap(this.element),this.pane.element.parent().css(\"height\",this.options.height),this.view=this.pane.view(),this._actionSheetButtonTemplate=M.template('<li><a #=attr# class=\"k-button #=className#\" href=\"\\\\#\">#:text#</a></li>'),this._actionSheetPopupOptions=e(document.documentElement).hasClass(\"km-root\")?{modal:!1}:{align:\"bottom center\",position:\"bottom center\",effect:\"slideIn:up\"}},options:{animations:{left:\"slide\",right:\"slide:right\"}},destroy:function(){this.close(),this.unbind(),this.pane.destroy()},_initTimezoneEditor:function(t){var n,a=this,r=a.pane,o=a.options.messages,s=a.timezoneView,d=a.container.find(\".k-scheduler-timezones\"),l=d.find(\".k-timezone-toggle\"),c=d.find(\".k-edit-label:last\").add(d.find(\".k-edit-field:last\")),u=function(e){if(\"startTimezone\"===e.field){var i=t.startTimezone;l.prop(\"disabled\",!i),i||(c.hide(),t.set(\"endTimezone\",\"\"),l.prop(\"checked\",!1))}};a._startTimezone=t.startTimezone||\"\",a._endTimezone=t.endTimezone||\"\",s||(n='<div data-role=\"view\" class=\"k-popup-edit-form k-scheduler-edit-form k-mobile-list\"><div data-role=\"header\" class=\"k-header\"><a href=\"#\" class=\"k-button k-scheduler-cancel\">'+o.cancel+\"</a>\"+o.editor.timezoneTitle+'<a href=\"#\" class=\"k-button k-scheduler-update\">'+o.save+\"</a></div></div>\",this.timezoneView=s=r.append(n),s.contentElement().append(d.show()),s.element.on(X+Z,\".k-scheduler-cancel, .k-scheduler-update\",function(n){var s,d;n.preventDefault(),n.stopPropagation(),e(this).hasClass(\"k-scheduler-cancel\")&&a._revertTimezones(t),t.unbind(\"change\",u),s=r.element.find(\"#edit\").data(\"kendoMobileView\"),d=i(t,o.editor.noTimezone),s.contentElement().find(\".k-timezone-button\").text(d),r.navigate(s,a.options.animations.right)}),l.click(function(){c.toggle(l.prop(\"checked\")),t.set(\"endTimezone\",\"\")}),t.bind(\"change\",u)),l.prop(\"checked\",t.endTimezone).prop(\"disabled\",!t.startTimezone),t.endTimezone?c.show():c.hide(),r.navigate(s,a.options.animations.left)},_createActionSheetButton:function(e){return e.template=this._actionSheetButtonTemplate,this.createButton(e)},showDialog:function(t){var i,n,a=\"\",r='<ul><li class=\"km-actionsheet-title\">'+t.title+\"</li>\",o=this.element.find(\".k-event[\"+M.attr(\"uid\")+\"='\"+t.model.uid+\"']\");for(this.container&&(o=this.container.find(\".k-scheduler-delete\"),o[0]&&(a=\"phone\")),i=0;t.buttons.length>i;i++)r+=this._createActionSheetButton(t.buttons[i]);r+=\"</ul>\",n=e(r).appendTo(this.pane.view().element).kendoMobileActionSheet({type:a,cancel:this.options.messages.cancel,cancelTemplate:'<li class=\"km-actionsheet-cancel\"><a class=\"k-button\" href=\"\\\\#\">#:cancel#</a></li>',close:function(){this.destroy()},command:function(i){var a=n.element.find(\"li:not(.km-actionsheet-cancel) > .k-button\").index(e(i.currentTarget));a>-1&&(n.close(),t.buttons[a].click())},popup:this._actionSheetPopupOptions}).data(\"kendoMobileActionSheet\"),n.open(o)},editEvent:function(t){var i,n,a,r,o,s=this.pane,d=\"\",l=this.options.messages,c=l.save,u=l.destroy,h=l.cancel,p=l.editor.editorTitle;return d+='<div data-role=\"view\" class=\"k-popup-edit-form k-scheduler-edit-form k-mobile-list\" id=\"edit\" '+M.attr(\"uid\")+'=\"'+t.uid+'\"><div data-role=\"header\" class=\"k-header\"><a href=\"#\" class=\"k-button k-scheduler-cancel\">'+h+\"</a>\"+p+'<a href=\"#\" class=\"k-button k-scheduler-update\">'+c+\"</a></div>\",i=this.fields(w.mobile,t),n=this,a=[],d+=this._buildEditTemplate(t,i,a),!t.isNew()&&this.options.editable&&this.options.editable.destroy!==!1&&(d+='<div class=\"k-edit-buttons\"><a href=\"#\" class=\"k-scheduler-delete k-button\">'+u+\"</a></div>\"),d+=\"</div>\",r=s.append(d),o=this.container=r.element,this.editable=o.kendoEditable({fields:a,model:t,clearContainer:!1,target:n.options.target,validateOnBlur:!0}).data(\"kendoEditable\"),o.find(\"input[type=checkbox],input[type=radio]\").parent(\".k-edit-field\").addClass(\"k-check\").prev(\".k-edit-label\").addClass(\"k-check\").click(function(){e(this).next().children(\"input\").click()}),this.trigger(\"edit\",{container:o,model:t})?this.trigger(\"cancel\",{container:o,model:t}):(o.on(X+Z,\"a.k-scheduler-edit, a.k-scheduler-cancel, a.k-scheduler-update, a.k-scheduler-delete\",function(i){var a,r;i.preventDefault(),i.stopPropagation(),a=e(this),a.hasClass(\"k-scheduler-edit\")?s.navigate(\"#edit\",n.options.animations.right):(r=\"cancel\",a.hasClass(\"k-scheduler-update\")?r=\"save\":a.hasClass(\"k-scheduler-delete\")&&(r=\"remove\"),n.trigger(r,{container:o,model:t}))}),s.navigate(r,n.options.animations.left),\nt.bind(\"change\",n.toggleDateValidationHandler)),this.editable},_views:function(){return this.pane.element.find(M.roleSelector(\"view\")).not(this.view.element)},close:function(){var e,t,i,n;if(this.container){for(this.pane.navigate(\"\",this.options.animations.right),e=this._views(),i=0,n=e.length;n>i;i++)t=e.eq(i).data(\"kendoMobileView\"),t&&t.purge();e.remove(),this.container=null,this.editable&&(this.editable.options.model.unbind(\"change\",this.toggleDateValidationHandler),this.editable.destroy(),this.editable=null),this.timezoneView=null}}}),z=b.extend({destroy:function(){this.close(),this.unbind()},editEvent:function(t){var i,n,a,r=this,o=r.options.editable,s=\"<div \"+M.attr(\"uid\")+'=\"'+t.uid+'\" class=\"k-popup-edit-form k-scheduler-edit-form\"><div class=\"k-edit-form-container\">',d=r.options.messages,l=d.save,c=d.cancel,u=d.destroy,h=this.fields(w.desktop,t),p=[];return s+=this._buildEditTemplate(t,h,p),n=q(o)?o.window:{},s+='<div class=\"k-edit-buttons k-state-default\">',s+=this.createButton({name:\"update\",text:l,attr:i})+this.createButton({name:\"canceledit\",text:c,attr:i}),t.isNew()||o.destroy===!1||(s+=this.createButton({name:\"delete\",text:u,attr:i})),s+=\"</div></div></div>\",a=this.container=e(s).appendTo(r.element).eq(0).kendoWindow(Q({modal:!0,resizable:!1,draggable:!0,title:d.editor.editorTitle,visible:!1,close:function(e){e.userTriggered&&r.trigger(ee,{container:a,model:t})&&e.preventDefault()}},n)),r.editable=a.kendoEditable({fields:p,model:t,clearContainer:!1,validateOnBlur:!0,target:r.options.target}).data(\"kendoEditable\"),r.trigger(ae,{container:a,model:t})?r.trigger(ee,{container:a,model:t}):(a.data(\"kendoWindow\").center().open(),a.on(X+Z,\"a.k-scheduler-cancel\",function(e){e.preventDefault(),e.stopPropagation(),r.trigger(ee,{container:a,model:t})}),a.on(X+Z,\"a.k-scheduler-update\",function(e){e.preventDefault(),e.stopPropagation(),r.trigger(\"save\",{container:a,model:t})}),a.on(X+Z,\"a.k-scheduler-delete\",function(e){e.preventDefault(),e.stopPropagation(),r.trigger(te,{container:a,model:t})}),M.cycleForm(a),t.bind(\"change\",r.toggleDateValidationHandler)),r.editable},close:function(){var e=this,t=function(){e.editable&&(e.editable.options.model.unbind(\"change\",e.toggleDateValidationHandler),e.editable.destroy(),e.editable=null,e.container=null),e.popup&&(e.popup.destroy(),e.popup=null)};e.editable?(e._timezonePopup&&e._timezonePopup.data(\"kendoWindow\")&&(e._timezonePopup.data(\"kendoWindow\").destroy(),e._timezonePopup=null),e.container.is(\":visible\")?e.container.data(\"kendoWindow\").bind(\"deactivate\",t).close():t()):t()},_createEndTimezoneButton:function(){var e=this.options.messages,t=\"\";return t+='<div class=\"k-edit-buttons k-state-default\">',t+=this.createButton({name:\"savetimezone\",text:e.save})+this.createButton({name:\"canceltimezone\",text:e.cancel}),t+=\"</div></div></div>\"},showDialog:function(t){var i,n,a,r=M.format(\"<div class='k-popup-edit-form'><div class='k-edit-form-container'><p class='k-popup-message'>{0}</p>\",t.text);for(r+='<div class=\"k-edit-buttons k-state-default\">',i=0;t.buttons.length>i;i++)r+=this.createButton(t.buttons[i]);r+=\"</div></div></div>\",n=this.element,this.popup&&this.popup.destroy(),a=this.popup=e(r).appendTo(n).eq(0).on(\"click\",\".k-button\",function(i){i.preventDefault(),a.close();var n=e(i.currentTarget).index();t.buttons[n].click()}).kendoWindow({modal:!0,resizable:!1,draggable:!1,title:t.title,visible:!1,close:function(){this.destroy(),n.focus()}}).getKendoWindow(),a.center().open()},_initTimezoneEditor:function(e,t){var i,n=this,a=n.container.find(\".k-scheduler-timezones\"),r=a.find(\".k-timezone-toggle\"),o=a.find(\".k-edit-label:last\").add(a.find(\".k-edit-field:last\")),s=a.find(\".k-scheduler-savetimezone\"),d=a.find(\".k-scheduler-canceltimezone\"),l=n._timezonePopup,c=function(t){if(\"startTimezone\"===t.field){var i=e.startTimezone;r.prop(\"disabled\",!i),i||(o.hide(),e.set(\"endTimezone\",\"\"),r.prop(\"checked\",!1))}};n._startTimezone=e.startTimezone,n._endTimezone=e.endTimezone,l||(n._timezonePopup=l=a.kendoWindow({modal:!0,resizable:!1,draggable:!0,title:n.options.messages.editor.timezoneEditorTitle,visible:!1,close:function(i){e.unbind(\"change\",c),i.userTriggered&&n._revertTimezones(e),t&&t.focus()}}),r.click(function(){o.toggle(r.prop(\"checked\")),e.set(\"endTimezone\",\"\")}),s.click(function(e){e.preventDefault(),i.close()}),d.click(function(t){t.preventDefault(),n._revertTimezones(e),i.close()}),e.bind(\"change\",c)),r.prop(\"checked\",e.endTimezone).prop(\"disabled\",!e.startTimezone),e.endTimezone?o.show():o.hide(),i=l.data(\"kendoWindow\"),i.center().open()}}),T=N.extend({init:function(t,i){var n=this;W.fn.init.call(n,t,i),n.options.views&&n.options.views.length||(n.options.views=[\"day\",\"week\"]),n.resources=[],n._initModel(),n._wrapper(),n._views(),n._toolbar(),n._dataSource(),n._resources(),n._resizeHandler=function(){n.resize()},n.wrapper.on(\"mousedown\"+Z+\" selectstart\"+Z,function(t){e(t.target).is(\":kendoFocusable\")||t.preventDefault()}),n.options.editable&&n.options.editable.resize!==!1&&n._resizable(),n._movable(),n._bindResize(),n.options.messages&&n.options.messages.recurrence&&(P.options=n.options.messages.recurrence),n._selectable(),n._ariaId=M.guid(),n._createEditor()},_bindResize:function(){e(window).on(\"resize\"+Z,this._resizeHandler)},_unbindResize:function(){e(window).off(\"resize\"+Z,this._resizeHandler)},dataItems:function(){var i,n,a,r,o,s=this,d=s.items(),l=s._data,c=e.map(d,function(t){return e(t).attr(\"data-uid\")}),u={},h=c.length;for(i=0;h>i;i++)u[c[i]]=null;for(a=l.length,i=0;a>i;i++)r=l[i],u[r.uid]!==t&&(u[r.uid]=r);o=[];for(n in u)o.push(u[n]);return o},_isMobile:function(){var e=this.options;return e.mobile===!0&&M.support.mobileOS||\"phone\"===e.mobile||\"tablet\"===e.mobile},_isMobilePhoneView:function(){var e=this.options;return e.mobile===!0&&M.support.mobileOS&&!M.support.mobileOS.tablet||\"phone\"===e.mobile},_groupsByResource:function(e,t,i,n,a){var r,o,s,d,l,c,u;if(i||(i=[]),r=e[0]){for(s=r.dataSource.view(),d=0,l=0;s.length>l;l++)c=M.getter(r.dataValueField)(s[l]),u=t+d+l,o=this._groupsByResource(e.slice(1),u,i,c,r.field),o[r.field]=c,d=o.groupIndex,a&&n&&(o[a]=n),1===e.length&&(o.groupIndex=t+l,i.push(o));return o}return{}},data:function(){return this._data},select:function(i){var n,a,r,o,s,d,l,c,u,h,p=this,f=p.view(),m=p._selection,v=f.groups;if(i===t)return r=f._selectedSlots,m?(m&&m.events&&(a=p._selectedEvents()),{start:m.start,end:m.end,events:a,slots:r,resources:f._resourceBySlot(m)}):[];if(!i)return p._selection=null,p._old=null,f.clearSelection(),t;if(e.isArray(i)&&(i={events:i.splice(0)}),i.resources){s=[],d=[],f.groupedResources&&p._groupsByResource(f.groupedResources,0,d);for(o in i.resources)s.push({field:o,operator:\"eq\",value:i.resources[o]});n=new M.data.Query(d).filter(s).toArray()}return i.events&&i.events.length?(p._selectEvents(i.events,n),p._select(),t):(v&&i.start&&i.end&&(l=O(f._startDate),c=M.date.addDays(O(f._endDate),1),c>i.start&&i.end>=l&&(u=n&&n.length?v[n[0].groupIndex]:v[0],h=u.ranges(i.start,i.end,i.isAllDay,!1),h.length&&(p._selection={start:M.timezone.toLocalDate(h[0].start.start),end:M.timezone.toLocalDate(h[h.length-1].end.end),groupIndex:h[0].start.groupIndex,index:h[0].start.index,isAllDay:h[0].start.isDaySlot,events:[]},p._select()))),t)},_selectEvents:function(e,t){var i,n,a,r,o,s,d,l,c=this,u=c.view(),h=u.groups,p=e.length,f=t&&t.length;for(i=0;p>i;i++)if(h&&f){for(n=h[t[0].groupIndex],a=[],r=n.timeSlotCollectionCount(),o=n.daySlotCollectionCount(),s=0;r>s;s++)a=a.concat(n.getTimeSlotCollection(s).events());for(d=0;o>d;d++)a=a.concat(n.getDaySlotCollection(d).events());a=new M.data.Query(a).filter({field:\"element[0].getAttribute('data-uid')\",operator:\"eq\",value:e[i]}).toArray(),a[0]&&c._createSelection(a[0].element)}else l=u.element.find(M.format(\".k-event[data-uid={0}], .k-task[data-uid={0}]\",e[i])),l.length&&c._createSelection(l[0])},_selectable:function(){var t,i=this,n=i.wrapper,a=M.support.mobileOS?\"touchend\":\"mousedown\";i.options.selectable&&(i._tabindex(),n.on(a+Z,\".k-scheduler-header-all-day td, .k-scheduler-content td, .k-event\",function(e){var t=e.which,a=e.button,r=M.support.browser,o=t&&3===t||a&&2==a;M.support.mobileOS&&e.isDefaultPrevented()||(o||i._createSelection(e.currentTarget),n.focus(),r.msie&&9>r.version&&setTimeout(function(){n.focus()}))}),t=e.proxy(i._mouseMove,i),n.on(\"mousedown\"+Z,\".k-scheduler-header-all-day td, .k-scheduler-content td\",function(e){var i=e.which,a=e.button,r=i&&3===i||a&&2==a;r||n.on(\"mousemove\"+Z,\".k-scheduler-header-all-day td, .k-scheduler-content td\",t)}),n.on(\"mouseup\"+Z+\" mouseleave\"+Z,function(){n.off(\"mousemove\"+Z,\".k-scheduler-header-all-day td, .k-scheduler-content td\",t)}),n.on(\"focus\"+Z,function(){i._selection||i._selectFirstSlot(),i._select()}),n.on(\"focusout\"+Z,function(){i._ctrlKey=i._shiftKey=!1}),n.on(\"keydown\"+Z,$(i._keydown,i)),n.on(\"keyup\"+Z,function(e){i._ctrlKey=e.ctrlKey,i._shiftKey=e.shiftKey}))},_selectFirstSlot:function(){this._createSelection(this.wrapper.find(\".k-scheduler-content\").find(\"td:first\"))},_select:function(){var t,i,n,a,r,o=this,s=o.view(),d=o.wrapper,l=s.current(),c=o._selection;if(c&&(l&&(l.removeAttribute(\"id\"),l.removeAttribute(\"aria-label\"),d.removeAttr(\"aria-activedescendant\")),s.select(c),l=s.current(),l&&o._old!==l)){if(t=e(l).data(\"uid\"),o._old&&t&&t===e(o._old).data(\"uid\"))return;n=c,a=o._selectedEvents(),r=s._selectedSlots,a[0]?(n=a[0]||c,i=M.format(o.options.messages.ariaEventLabel,n.title,n.start,n.start)):i=M.format(o.options.messages.ariaSlotLabel,n.start,n.end),l.setAttribute(\"id\",o._ariaId),l.setAttribute(\"aria-label\",i),d.attr(\"aria-activedescendant\",o._ariaId),o._old=l,o.trigger(\"change\",{start:c.start,end:c.end,events:a,slots:r,resources:s._resourceBySlot(c)})}},_selectedEvents:function(){for(var e,t=this._selection.events,i=t.length,n=0,a=[];i>n;n++)e=this.occurrenceByUid(t[n]),e&&a.push(e);return a},_mouseMove:function(t){var i=this;clearTimeout(i._moveTimer),i._moveTimer=setTimeout(function(){var n,a,r,o=i.view(),s=i._selection;s&&(n=o.selectionByElement(e(t.currentTarget)),n&&s.groupIndex===n.groupIndex&&(a=n.startDate(),r=n.endDate(),a>=s.end?s.backward=!1:s.start>=r&&(s.backward=!0),s.backward?s.start=a:s.end=r,i._select()))},5)},_viewByIndex:function(e){var t,i=this.views;for(t in i){if(!e)return t;e--}},_keydown:function(i){var n=this,a=i.keyCode,r=n.view(),o=r.options.editable,s=n._selection,d=i.shiftKey;return n._ctrlKey=i.ctrlKey,n._shiftKey=i.shiftKey,s?(a===H.TAB?r.moveToEvent(s,d)&&(n._select(),i.preventDefault()):o&&a===H.ENTER?s.events.length?o.update!==!1&&n.editEvent(s.events[0]):o.create!==!1&&(s.isAllDay&&(s=e.extend({},s,{end:M.date.addDays(s.end,-1)})),n.addEvent(Q({},s,r._resourceBySlot(s)))):a===H.DELETE&&o!==!1&&o.destroy!==!1?n.removeEvent(s.events[0]):a>=49&&57>=a?n.view(n._viewByIndex(a-49)):r.move(s,a,d)&&(r.inRange(s)?n._select():n.date(s.start),i.preventDefault()),n._adjustSelectedDate(),t):(n._selectFirstSlot(),n._select(),t)},_createSelection:function(t){var i,n,a;this._selection&&(this._ctrlKey||this._shiftKey)||(this._selection={events:[],groupIndex:0}),t=e(t),a=this._selection,t.is(\".k-event\")&&(i=t.attr(M.attr(\"uid\"))),n=this.view().selectionByElement(t),n&&(a.groupIndex=n.groupIndex||0),i&&(n=d(this._data,i)),n&&n.uid&&(i=[n.uid]),this._updateSelection(n,i),this._adjustSelectedDate()},_updateSelection:function(e,i,n){var a,r,o=this._selection;e&&o&&(a=this.view(),e.uid&&(e=a._updateEventForSelection(e)),this._shiftKey&&o.start&&o.end?(r=o.end>e.end,o.end=e.endDate?e.endDate():e.end,r&&a._timeSlotInterval&&M.date.setTime(o.end,-a._timeSlotInterval())):(o.start=e.startDate?e.startDate():e.start,o.end=e.endDate?e.endDate():e.end),o.isAllDay=\"isDaySlot\"in e?e.isDaySlot:e.isAllDay,null!==n&&n!==t&&(o.groupIndex=n),o.index=e.index,o.events=this._ctrlKey?o.events.concat(i||[]):i||[])},options:{name:\"Scheduler\",date:oe,editable:!0,autoBind:!0,snap:!0,mobile:!1,timezone:\"\",allDaySlot:!0,min:new Date(1900,0,1),max:new Date(2099,11,31),toolbar:null,footer:{},messages:{today:\"Today\",pdf:\"Export to PDF\",save:\"Save\",cancel:\"Cancel\",destroy:\"Delete\",deleteWindowTitle:\"Delete event\",ariaSlotLabel:\"Selected from {0:t} to {1:t}\",ariaEventLabel:\"{0} on {1:D} at {2:t}\",views:{day:\"Day\",week:\"Week\",workWeek:\"Work Week\",agenda:\"Agenda\",month:\"Month\",timeline:\"Timeline\",timelineWeek:\"Timeline Week\",timelineWorkWeek:\"Timeline Work Week\",timelineMonth:\"Timeline Month\"},recurrenceMessages:{deleteWindowTitle:\"Delete Recurring Item\",deleteWindowOccurrence:\"Delete current occurrence\",deleteWindowSeries:\"Delete the series\",editWindowTitle:\"Edit Recurring Item\",editWindowOccurrence:\"Edit current occurrence\",editWindowSeries:\"Edit the series\"},editable:{confirmation:ce},editor:{title:\"Title\",start:\"Start\",end:\"End\",allDayEvent:\"All day event\",description:\"Description\",repeat:\"Repeat\",timezone:\" \",startTimezone:\"Start timezone\",endTimezone:\"End timezone\",separateTimezones:\"Use separate start and end time zones\",timezoneEditorTitle:\"Timezones\",timezoneEditorButton:\"Time zone\",timezoneTitle:\"Time zones\",noTimezone:\"No timezone\",editorTitle:\"Event\"}},height:null,width:null,resources:[],group:{resources:[],orientation:\"horizontal\"},views:[],selectable:!1},events:[te,ae,ee,ie,\"add\",\"dataBinding\",\"dataBound\",\"moveStart\",\"move\",\"moveEnd\",\"resizeStart\",\"resize\",\"resizeEnd\",\"navigate\",\"change\"],destroy:function(){var t,i=this;W.fn.destroy.call(i),i.dataSource&&(i.dataSource.unbind(G,i._refreshHandler),i.dataSource.unbind(\"progress\",i._progressHandler),i.dataSource.unbind(\"error\",i._errorHandler)),i.calendar&&(i.calendar.destroy(),i.popup.destroy()),i.view()&&i.view().destroy(),i._editor&&i._editor.destroy(),this._moveDraggable&&this._moveDraggable.destroy(),this._resizeDraggable&&this._resizeDraggable.destroy(),t=i.element.add(i.wrapper).add(i.toolbar).add(i.popup),t.off(Z),clearTimeout(i._moveTimer),i._model=null,i.toolbar=null,i.element=null,e(window).off(\"resize\"+Z,i._resizeHandler),M.destroy(i.wrapper)},setDataSource:function(e){this.options.dataSource=e,this._dataSource(),this.options.autoBind&&e.fetch()},items:function(){var e=this.wrapper.find(\".k-scheduler-content\"),t=this.view();return t&&\"agenda\"===t.options.name?e.find(\".k-task\"):e.find(\".k-event\").add(this.wrapper.find(\".k-scheduler-header-wrap\").find(\".k-scheduler-header-all-day\").siblings())},_movable:function(){var i,n,a,r,o,s,d,l=this,c=0,u=l._isMobile(),h=l.options.editable&&l.options.editable.move!==!1,p=l.options.editable&&l.options.editable.resize!==!1;(h||p&&u)&&(u&&M.support.mobileOS.android&&(c=5),l._moveDraggable=new M.ui.Draggable(l.element,{distance:c,filter:\".k-event\",ignore:\".k-resize-handle\",holdToDrag:u,autoScroll:!0}),h&&l._moveDraggable.bind(\"dragstart\",function(e){var r=l.view(),c=e.currentTarget;return r.options.editable&&r.options.editable.move!==!1?u&&!c.hasClass(\"k-event-active\")?(l.element.find(\".k-event-active\").removeClass(\"k-event-active\"),e.preventDefault(),t):(o=l.occurrenceByUid(c.attr(M.attr(\"uid\"))),s=o.clone(),s.update(r._eventOptionsForMove(s)),i=r._slotByPosition(e.x.startLocation,e.y.startLocation),a=i.startOffset(e.x.startLocation,e.y.startLocation,l.options.snap),n=i,d=i,i&&!l.trigger(\"moveStart\",{event:o})||e.preventDefault(),t):(e.preventDefault(),t)}).bind(\"drag\",function(e){var t,d,c=l.view(),u=c._slotByPosition(e.x.location,e.y.location);u&&(r=u.startOffset(e.x.location,e.y.location,l.options.snap),u.isDaySlot!==i.isDaySlot?(i=c._slotByPosition(e.x.location,e.y.location),a=i.startOffset(e.x.location,e.y.location,l.options.snap),t=r-a,s.isAllDay=u.isDaySlot,s.start=M.timezone.toLocalDate(a),s.end=M.timezone.toLocalDate(r),c._updateMoveHint(s,u.groupIndex,t),d={start:s.start,end:s.end}):(t=r-a,c._updateMoveHint(s,u.groupIndex,t),d=_(s,t)),l.trigger(\"move\",{event:o,slot:{element:u.element,start:u.startDate(),end:u.endDate(),isDaySlot:u.isDaySlot},resources:c._resourceBySlot(u),start:d.start,end:d.end})?c._updateMoveHint(s,u.groupIndex,t):n=u)}).bind(\"dragend\",function(t){var c,u,h,p,f,m,v,g,k;l.view()._removeMoveHint(),c=r-a,u=_(s,c),h=u.start,p=u.end,f=l.view()._resourceBySlot(n),m=l.view()._resourceBySlot(i),v=l.trigger(\"moveEnd\",{event:o,slot:{element:n.element,start:n.startDate(),end:n.endDate()},start:h,end:p,resources:f}),v||o.start.getTime()===h.getTime()&&o.end.getTime()===p.getTime()&&d.isDaySlot===n.isDaySlot&&M.stringify(f)===M.stringify(m)||(g=l.view()._eventOptionsForMove(o),k=d.isDaySlot!==n.isDaySlot?n.isDaySlot?e.extend({start:n.startDate(),end:n.startDate(),isAllDay:n.isDaySlot},g,f):e.extend({isAllDay:n.isDaySlot,start:h,end:p},g,f):e.extend({isAllDay:o.isAllDay,start:h,end:p},g,f),l._updateEvent(null,o,k,n.groupIndex)),t.currentTarget.removeClass(\"k-event-active\"),this.cancelHold()}).bind(\"dragcancel\",function(){l.view()._removeMoveHint(),this.cancelHold()}),u&&(l._moveDraggable.bind(\"hold\",function(e){l.element.find(\".k-scheduler-monthview\").length&&e.preventDefault(),l.element.find(\".k-event-active\").removeClass(\"k-event-active\"),e.currentTarget.addClass(\"k-event-active\")}),M.support.mobileOS.android||l._moveDraggable.userEvents.bind(\"press\",function(e){e.preventDefault()})))},_resizable:function(){function t(e){var t,i={\"k-resize-e\":\"east\",\"k-resize-w\":\"west\",\"k-resize-n\":\"north\",\"k-resize-s\":\"south\"};for(t in i)if(e.hasClass(t))return i[t]}var i,n,a,r,o,s=this,d=0;s._isMobile()&&M.support.mobileOS.android&&(d=5),s._resizeDraggable=new M.ui.Draggable(s.element,{distance:d,filter:\".k-resize-handle\",autoScroll:!0,dragstart:function(t){var d=e(t.currentTarget),l=d.closest(\".k-event\"),c=l.attr(M.attr(\"uid\")),u=s.view();a=s.occurrenceByUid(c),r=a.clone(),u._updateEventForResize(r),o=u._slotByPosition(t.x.startLocation,t.y.startLocation),s.trigger(\"resizeStart\",{event:a})&&t.preventDefault(),i=M.date.toUtcTime(r.start),n=M.date.toUtcTime(r.end)},drag:function(d){var l,c,u,h,p,f;o&&(l=e(d.currentTarget),c=t(l),u=s.view(),h=u._slotByPosition(d.x.location,d.y.location),h&&o.groupIndex==h.groupIndex&&(o=h,p=i,f=n,\"south\"==c?!o.isDaySlot&&o.end-M.date.toUtcTime(r.start)>=u._timeSlotInterval()&&(n=r.isAllDay?o.startOffset(d.x.location,d.y.location,s.options.snap):o.endOffset(d.x.location,d.y.location,s.options.snap)):\"north\"==c?!o.isDaySlot&&M.date.toUtcTime(r.end)-o.start>=u._timeSlotInterval()&&(i=o.startOffset(d.x.location,d.y.location,s.options.snap)):\"east\"==c?o.isDaySlot&&M.date.toUtcTime(M.date.getDate(o.endDate()))>=M.date.toUtcTime(M.date.getDate(r.start))?n=r.isAllDay?o.startOffset(d.x.location,d.y.location,s.options.snap):o.endOffset(d.x.location,d.y.location,s.options.snap):!o.isDaySlot&&o.end-M.date.toUtcTime(r.start)>=u._timeSlotInterval()&&(n=o.endOffset(d.x.location,d.y.location,s.options.snap)):\"west\"==c&&(o.isDaySlot&&M.date.toUtcTime(M.date.getDate(r.end))>=M.date.toUtcTime(M.date.getDate(o.startDate()))?i=o.startOffset(d.x.location,d.y.location,s.options.snap):!o.isDaySlot&&M.date.toUtcTime(r.end)-o.start>=u._timeSlotInterval()&&(i=o.startOffset(d.x.location,d.y.location,s.options.snap))),s.trigger(\"resize\",{event:a,slot:{element:o.element,start:o.startDate(),end:o.endDate()},start:M.timezone.toLocalDate(i),end:M.timezone.toLocalDate(n),resources:u._resourceBySlot(o)})?(i=p,n=f):u._updateResizeHint(r,o.groupIndex,i,n)))},dragend:function(d){var l,c=e(d.currentTarget),u=new Date(r.start.getTime()),h=new Date(r.end.getTime()),p=t(c);s.view()._removeResizeHint(),\"south\"==p?h=M.timezone.toLocalDate(n):\"north\"==p?u=M.timezone.toLocalDate(i):\"east\"==p?h=o.isDaySlot?M.date.getDate(M.timezone.toLocalDate(n)):M.timezone.toLocalDate(n):\"west\"==p&&(o.isDaySlot?(u=new Date(M.timezone.toLocalDate(i)),u.setHours(0),u.setMinutes(0)):u=M.timezone.toLocalDate(i)),l=s.trigger(\"resizeEnd\",{event:a,slot:{element:o.element,start:o.startDate(),end:o.endDate()},start:u,end:h,resources:s.view()._resourceBySlot(o)}),!l&&h.getTime()>=u.getTime()&&(r.start.getTime()==u.getTime()&&r.end.getTime()==h.getTime()||(s.view()._updateEventForResize(a),s._updateEvent(p,a,{start:u,end:h}))),o=null,a=null},dragcancel:function(){s.view()._removeResizeHint(),o=null,a=null}})},_updateEvent:function(e,t,i,n){var a,r=this,o=function(e,t){try{r._preventRefresh=!0,e.update(i),r._convertDates(e)}finally{r._preventRefresh=!1}r.trigger(ie,{event:e})||(t&&t(),r._updateSelection(e,[e.uid],n),r.dataSource.sync())},s=function(e){return e.recurrenceRule?r.dataSource.getByUid(e.uid):r.dataSource.get(e.recurrenceId)},d=function(){var n,a,d=s(t);\"south\"!=e&&\"north\"!=e||(i.start&&(n=M.date.getDate(d.start),M.date.setTime(n,V(i.start)),i.start=n),i.end&&(a=M.date.getDate(d.end),M.date.setTime(a,V(i.end)),i.end=a)),r.dataSource._removeExceptions(d),o(d)},l=function(){var e=s(t),i=function(){r._convertDates(e)},n=e.toOccurrence({start:t.start,end:t.end});o(r.dataSource.add(n),i)};t.recurrenceRule||t.isOccurrence()?(a=r.options.messages.recurrenceMessages,r._showRecurringDialog(t,l,d,{title:a.editWindowTitle,text:a.editRecurring?a.editRecurring:he,occurrenceText:a.editWindowOccurrence,seriesText:a.editWindowSeries})):o(r.dataSource.getByUid(t.uid))},_modelForContainer:function(t){return t=e(t).closest(\"[\"+M.attr(\"uid\")+\"]\"),this.dataSource.getByUid(t.attr(M.attr(\"uid\")))},showDialog:function(e){this._editor.showDialog(e)},focus:function(){this.wrapper.focus()},_confirmation:function(e,t){var i,n,a,r,o,s=this.options.editable;s===!0||s.confirmation!==!1?(i=this.options.messages,n=i.deleteWindowTitle,a=typeof s.confirmation===L?s.confirmation:i.editable.confirmation,this._isEditorOpened()&&t.isRecurring()&&(r=this.options.messages.recurrenceMessages,n=r.deleteWindowTitle,a=t.isException()?r.deleteRecurringConfirmation?r.deleteRecurringConfirmation:pe:r.deleteSeriesConfirmation?r.deleteSeriesConfirmation:fe),o=[{name:\"destroy\",text:i.destroy,click:function(){e()}}],this._isMobile()&&M.mobile.ui.Pane||o.push({name:\"canceledit\",text:i.cancel,click:function(){e(!0)}}),this._unbindResize(),this.showDialog({model:t,text:a,title:n,buttons:o}),this._bindResize()):e()},addEvent:function(e){var t,i,n=this._editor.editable,a=this.dataSource;e=e||{},i=this.trigger(\"add\",{event:e}),!i&&(n&&n.end()||!n)&&(this.cancelEvent(),e&&e.toJSON&&(e=e.toJSON()),t=a.add(e),t&&(this.cancelEvent(),this._editEvent(t)))},saveEvent:function(){var e,t,i,n=this._editor;n&&(e=n.editable,t=n.container,i=this._modelForContainer(t),t&&e&&e.end()&&!this.trigger(ie,{container:t,event:i})&&(i.isRecurrenceHead()&&this.dataSource._removeExceptions(i),i.dirty||i.isOccurrence()||this._convertDates(i,\"remove\"),this.dataSource.sync()))},cancelEvent:function(){var e,t=this._editor,i=t.container;i&&(e=this._modelForContainer(i),e&&e.isOccurrence()&&(this._convertDates(e,\"remove\"),this._convertDates(this.dataSource.get(e.recurrenceId),\"remove\")),this.dataSource.cancelChanges(e),t.close())},editEvent:function(e){var t=\"string\"==typeof e?this.occurrenceByUid(e):e;t&&(this.cancelEvent(),t.isRecurring()?this._editRecurringDialog(t):this._editEvent(t))},_editEvent:function(e){this._unbindResize(),this._createPopupEditor(e),this._bindResize()},_editRecurringDialog:function(e){var t=this,i=function(){e.isException()?t._editEvent(e):t.addEvent(e)},n=function(){e.recurrenceId&&(e=t.dataSource.get(e.recurrenceId)),t._editEvent(e)},a=t.options.messages.recurrenceMessages;t._showRecurringDialog(e,i,n,{title:a.editWindowTitle,text:a.editRecurring?a.editRecurring:he,occurrenceText:a.editWindowOccurrence,seriesText:a.editWindowSeries})},_showRecurringDialog:function(e,t,i,n){var a=this,r=a.options.editable,o=q(r)?r.editRecurringMode:\"dialog\";\"series\"===o?i():\"occurrence\"===o?t():(this._unbindResize(),a.showDialog({model:e,title:n.title,text:n.text,buttons:[{text:n.occurrenceText,click:t},{text:n.seriesText,click:i}]}),this._bindResize())},_createButton:function(e){var t=e.template||me,i=typeof e===L?e:e.name||e.text,n={className:\"k-scheduler-\"+(i||\"\").replace(/\\s/g,\"\"),text:i,attr:\"\"};if(!(i||q(e)&&e.template))throw Error(\"Custom commands should have name specified\");return q(e)?(e.className&&(e.className+=\" \"+n.className),\"edit\"===i&&q(e.text)&&(e=Q(!0,{},e),e.text=e.text.edit),n=Q(!0,n,k[i],e)):n=Q(!0,n,k[i]),M.template(t)(n)},_convertDates:function(e,t){var i=this.dataSource.reader.timezone,n=e.startTimezone,a=e.endTimezone,r=e.start,o=e.start;t=t||\"apply\",n=n||a,a=a||n,n&&(i?\"apply\"===t?(r=M.timezone.convert(e.start,i,n),o=M.timezone.convert(e.end,i,a)):(r=M.timezone.convert(e.start,n,i),o=M.timezone.convert(e.end,a,i)):(r=M.timezone[t](e.start,n),o=M.timezone[t](e.end,a)),e._set(\"start\",r),e._set(\"end\",o))},_createEditor:function(){var e,i=this;e=i._editor=this._isMobile()&&M.mobile.ui.Pane?new y(this.wrapper,Q({},this.options,{target:this,timezone:i.dataSource.reader.timezone,resources:i.resources,createButton:$(this._createButton,this)})):new z(this.wrapper,Q({},this.options,{target:this,createButton:$(this._createButton,this),timezone:i.dataSource.reader.timezone,resources:i.resources})),e.bind(\"cancel\",function(e){return i.trigger(\"cancel\",{container:e.container,event:e.model})?(e.preventDefault(),t):(i.cancelEvent(),i.focus(),t)}),e.bind(\"edit\",function(e){i.trigger(ae,{container:e.container,event:e.model})&&e.preventDefault()}),e.bind(\"save\",function(){i.saveEvent()}),e.bind(\"remove\",function(e){i.removeEvent(e.model)})},_createPopupEditor:function(e){var t=this._editor;e.isNew()&&!e.isOccurrence()||(e.isOccurrence()&&this._convertDates(e.recurrenceId?this.dataSource.get(e.recurrenceId):e),this._convertDates(e)),this.editable=t.editEvent(e)},removeEvent:function(e){var t=this,i=\"string\"==typeof e?t.occurrenceByUid(e):e;i&&(i.isRecurring()?t._deleteRecurringDialog(i):t._confirmation(function(e){e||t._removeEvent(i)},i))},occurrenceByUid:function(e){var t=this.dataSource.getByUid(e);return t||(t=d(this._data,e)),t},occurrencesInRange:function(e,t){return new M.data.Query(this._data).filter({logic:\"or\",filters:[{logic:\"and\",filters:[{field:\"start\",operator:\"gte\",value:e},{field:\"end\",operator:\"gte\",value:e},{field:\"start\",operator:\"lt\",value:t}]},{logic:\"and\",filters:[{field:\"start\",operator:\"lte\",value:e},{field:\"end\",operator:\"gt\",value:e}]}]}).toArray()},_removeEvent:function(e){this.trigger(te,{event:e})||this.dataSource.remove(e)&&this.dataSource.sync()},_deleteRecurringDialog:function(e){var t,i,n,a,r,o=this,s=e,d=o.options.editable,l=q(d)?d.editRecurringMode:\"dialog\",c=function(){var e=s.recurrenceId?s:s.toOccurrence(),t=o.dataSource.get(e.recurrenceId);o._convertDates(t),o._removeEvent(e)},u=function(){s.recurrenceId&&(s=o.dataSource.get(s.recurrenceId)),o._removeEvent(s)};(\"dialog\"!=l||o._isEditorOpened())&&(t=function(){o._confirmation(function(e){e||c()},s)},i=function(){o._confirmation(function(e){e||u()},s)}),n=i||u,a=t||c,o._isEditorOpened()?e.isException()?a():n():(r=o.options.messages.recurrenceMessages,o._showRecurringDialog(e,a,n,{title:r.deleteWindowTitle,text:r.deleteRecurring?r.deleteRecurring:ue,occurrenceText:r.deleteWindowOccurrence,seriesText:r.deleteWindowSeries}))},_isEditorOpened:function(){return!!this._editor.container},_unbindView:function(e){var t=this;t.angular(\"cleanup\",function(){return{elements:t.items()}}),e.destroy()},_bindView:function(e){var t=this;t.options.editable&&(t._viewRemoveHandler&&e.unbind(te,t._viewRemoveHandler),t._viewRemoveHandler=function(e){t.removeEvent(e.uid)},e.bind(te,t._viewRemoveHandler),t._viewAddHandler&&e.unbind(ne,t._viewAddHandler),t._viewAddHandler=function(e){t.addEvent(e.eventInfo)},e.bind(ne,this._viewAddHandler),t._viewEditHandler&&e.unbind(ae,t._viewEditHandler),t._viewEditHandler=function(e){t.editEvent(e.uid)},e.bind(ae,this._viewEditHandler)),t._viewNavigateHandler&&e.unbind(\"navigate\",t._viewNavigateHandler),t._viewNavigateHandler=function(e){var i,n;e.view&&(i=\"isWorkDay\"in e,n=i?\"changeWorkDay\":\"changeView\",t.trigger(\"navigate\",{view:e.view,isWorkDay:e.isWorkDay,action:n,date:e.date})||(i&&(t._workDayMode=e.isWorkDay),t._selectView(e.view),t.date(e.date)))},e.bind(\"navigate\",t._viewNavigateHandler),t._viewActivateHandler&&e.unbind(\"activate\",t._viewActivateHandler),t._viewActivateHandler=function(){var e=this;t._selection&&(e.constrainSelection(t._selection),t._select(),t._adjustSelectedDate())},e.bind(\"activate\",t._viewActivateHandler)},_selectView:function(e){var t,i,n,a=this;e&&a.views[e]&&(a._selectedView&&a._unbindView(a._selectedView),a._selectedView=a._renderView(e),a._selectedViewName=e,a._viewsCount>1&&(t=ve({views:a.views,view:e,ns:M.ns}),i=a.toolbar.find(\".k-scheduler-views li:first-child\"),i.is(\".k-current-view\")?i.replaceWith(t):a.toolbar.find(\".k-scheduler-views\").prepend(t),n=a.toolbar.find(\".k-scheduler-views li\").removeClass(\"k-state-selected\"),n.end().find(\".k-view-\"+e.replace(/\\./g,\"\\\\.\").toLowerCase()).addClass(\"k-state-selected\")))},view:function(e){var i=this;return e?(i._selectView(e),i.rebind(),t):i._selectedView},viewName:function(){return this.view().name},_renderView:function(e){var t=this._initializeView(e);return this._bindView(t),this._model.set(\"formattedDate\",t.dateForTitle()),this._model.set(\"formattedShortDate\",t.shortDateForTitle()),t},resize:function(e){var t=this.getSize(),i=this._size,n=this.view();n&&n.groups&&(!e&&i&&t.width===i.width&&t.height===i.height||(this.refresh({action:\"resize\"}),this._size=t))},_adjustSelectedDate:function(){var e=this._model.selectedDate,t=this._selection,i=t.start;i&&!M.date.isInDateRange(e,O(i),O(t.end))&&e.setFullYear(i.getFullYear(),i.getMonth(),i.getDate())},_initializeView:function(e){var t,i,n=this.views[e];if(n){if(t=q(n),i=n.type,typeof i===L&&(i=M.getter(n.type)(window)),!i)throw Error(\"There is no such view\");n=new i(this.wrapper,h(Q(!0,{},this.options,t?n:{},{resources:this.resources,date:this.date(),showWorkHours:this._workDayMode})))}return n},_views:function(){var e,t,i,n,a,r,o,s,d,l=this.options.views;for(this.views={},this._viewsCount=0,o=0,s=l.length;s>o;o++)d=!1,e=l[o],n=q(e),n?(r=a=e.type?e.type:e,typeof r!==L&&(a=e.name||e.title,d=!0)):r=a=e,t=D[a],t&&!d&&(e.type=t.type,t.title=this.options.messages.views[a],\"day\"===t.type?t.messages={allDay:this.options.messages.allDay}:\"agenda\"===t.type&&(t.messages={event:this.options.messages.event,date:this.options.messages.date,time:this.options.messages.time})),e=Q({title:a},t,n?e:{}),a&&(this.views[a]=e,this._viewsCount++,i&&!e.selected||(i=a));i&&(this._selectedViewName=i)},rebind:function(){this.dataSource.fetch()},_dataSource:function(){var e=this,t=e.options,i=t.dataSource;i=Y(i)?{data:i}:i,!t.timezone||i instanceof Ce?i instanceof Ce&&(t.timezone=i.options.schema?i.options.schema.timezone:\"\"):i=Q(!0,i,{schema:{timezone:t.timezone}}),e.dataSource&&e._refreshHandler?e.dataSource.unbind(G,e._refreshHandler).unbind(\"progress\",e._progressHandler).unbind(\"error\",e._errorHandler):(e._refreshHandler=$(e.refresh,e),e._progressHandler=$(e._requestStart,e),e._errorHandler=$(e._error,e)),e.dataSource=M.data.SchedulerDataSource.create(i).bind(G,e._refreshHandler).bind(\"progress\",e._progressHandler).bind(\"error\",e._errorHandler),e.options.dataSource=e.dataSource},_error:function(){this._progress(!1)},_requestStart:function(){this._progress(!0)},_progress:function(e){var t=this.element.find(\".k-scheduler-content\");M.ui.progress(t,e)},_resources:function(){var t,i,n,a,r,o=this,s=o.options.resources;for(t=0;s.length>t;t++){if(i=s[t],n=i.field,a=i.dataSource,!n||!a)throw Error('The \"field\" and \"dataSource\" options of the scheduler resource are mandatory.');o.resources.push({field:n,name:i.name||n,title:i.title||n,dataTextField:i.dataTextField||\"text\",dataValueField:i.dataValueField||\"value\",dataColorField:i.dataColorField||\"color\",valuePrimitive:null!=i.valuePrimitive?i.valuePrimitive:!0,multiple:i.multiple||!1,dataSource:M.data.DataSource.create(a)})}r=e.map(o.resources,function(e){return e.dataSource.fetch()}),e.when.apply(null,r).then(function(){o.options.autoBind?o.view(o._selectedViewName):o._selectView(o._selectedViewName)})},_initModel:function(){var e=this;e._model=M.observable({selectedDate:new Date(this.options.date),formattedDate:\"\",formattedShortDate:\"\"}),e._model.bind(\"change\",function(t){\n\"selectedDate\"===t.field&&e.view(e._selectedViewName)})},_wrapper:function(){var e=this,t=e.options,i=t.height,n=t.width;e.wrapper=e.element.addClass(\"k-widget k-scheduler k-floatwrap\").attr(\"role\",\"grid\").attr(\"aria-multiselectable\",!0),e._isMobile()&&e.wrapper.addClass(\"k-scheduler-mobile\"),e._isMobilePhoneView()&&e.wrapper.addClass(\"k-scheduler-phone\"),i&&e.wrapper.height(i),n&&e.wrapper.width(n)},date:function(e){return null!=e&&O(e)>=O(this.options.min)&&O(e)<=O(this.options.max)&&this._model.set(\"selectedDate\",e),O(this._model.get(\"selectedDate\"))},_toolbar:function(){var i,n,a=this,r=a.options,o=[];r.toolbar&&(o=e.isArray(r.toolbar)?r.toolbar:[r.toolbar]),i=this._isMobilePhoneView()?_e:ge,n=e(i({messages:r.messages,pdf:e.grep(o,function(e){return\"pdf\"==e||\"pdf\"==e.name}).length>0,ns:M.ns,views:a.views,viewsCount:a._viewsCount})),a.wrapper.append(n),a.toolbar=n,M.bind(a.toolbar,a._model),n.on(X+Z,\".k-pdf\",function(e){e.preventDefault(),a.saveAsPDF()}),n.on(X+Z,\".k-scheduler-navigation li\",function(i){var n=e(this),r=new Date(a.date()),o=\"\";if(i.preventDefault(),n.hasClass(\"k-nav-today\"))o=\"today\",r=new Date;else if(n.hasClass(\"k-nav-next\"))o=\"next\",r=a.view().nextDate();else if(n.hasClass(\"k-nav-prev\"))o=\"previous\",r=a.view().previousDate();else if(n.hasClass(\"k-nav-current\")&&!a._isMobilePhoneView())return a._showCalendar(),t;a.trigger(\"navigate\",{view:a._selectedViewName,action:o,date:r})||a.date(r)}),n.on(X+Z,\".k-scheduler-views li, .k-scheduler-refresh\",function(t){t.preventDefault();var i=e(this).attr(M.attr(\"name\"));a.trigger(\"navigate\",{view:i,action:\"changeView\",date:a.date()})||(a.view(i),a.element.find(\".k-state-expanded\").removeClass(\"k-state-expanded\"))}),n.on(X+Z,\".k-scheduler-views li.k-current-view\",function(){a.element.find(\".k-scheduler-views\").toggleClass(\"k-state-expanded\")}),n.find(\"li\").hover(function(){e(this).addClass(\"k-state-hover\")},function(){e(this).removeClass(\"k-state-hover\")})},_showCalendar:function(){var t=this,i=t.toolbar.find(\".k-nav-current\"),n=e('<div class=\"k-calendar-container\"><div class=\"k-scheduler-calendar\"/></div>');t.popup||(t.popup=new U(n,{anchor:i,open:function(){t.calendar||(t.calendar=new j(this.element.find(\".k-scheduler-calendar\"),{change:function(){var e=this.value();t.trigger(\"navigate\",{view:t._selectedViewName,action:\"changeDate\",date:e})||(t.date(e),t.popup.close())},min:t.options.min,max:t.options.max})),t.calendar.value(t.date())},copyAnchorStyles:!1})),t.popup.open()},refresh:function(e){var t=this,i=this.view();this._progress(!1),this.angular(\"cleanup\",function(){return{elements:t.items()}}),e=e||{},i&&(e&&\"itemchange\"===e.action&&(this._editor.editable||this._preventRefresh)||this.trigger(\"dataBinding\",{action:e.action||\"rebind\",index:e.index,items:e.items})||(e&&\"resize\"===e.action||!this._editor||this._editor.close(),this._data=this.dataSource.expand(i.startDate(),i.endDate()),i.refreshLayout(),i.render(this._data),this.trigger(\"dataBound\")))},slotByPosition:function(e,t){var i,n=this.view();return n._slotByPosition?(i=n._slotByPosition(e,t),i?{startDate:i.startDate(),endDate:i.endDate(),groupIndex:i.groupIndex,element:i.element,isDaySlot:i.isDaySlot}:null):null},slotByElement:function(t){var i=e(t).offset();return this.slotByPosition(i.left,i.top)},resourcesBySlot:function(e){return this.view()._resourceBySlot(e)}}),D={day:{type:\"kendo.ui.DayView\"},week:{type:\"kendo.ui.WeekView\"},workWeek:{type:\"kendo.ui.WorkWeekView\"},agenda:{type:\"kendo.ui.AgendaView\"},month:{type:\"kendo.ui.MonthView\"},timeline:{type:\"kendo.ui.TimelineView\"},timelineWeek:{type:\"kendo.ui.TimelineWeekView\"},timelineWorkWeek:{type:\"kendo.ui.TimelineWorkWeekView\"},timelineMonth:{type:\"kendo.ui.TimelineMonthView\"}},F.plugin(T),M.PDFMixin&&(M.PDFMixin.extend(T.prototype),x=\"k-scheduler-pdf-export\",T.fn._drawPDF=function(t){var i,n,a,r=this.wrapper,o=r[0].style.cssText;return r.css({width:r.width(),height:r.height()}),r.addClass(x),i=this,n=new e.Deferred,a=r.find(\".k-scheduler-content\").find(\"table\").css(\"table-layout\",\"auto\"),setTimeout(function(){a.css(\"table-layout\",\"fixed\"),i.resize(!0),i._drawPDFShadow({},{avoidLinks:i.options.pdf.avoidLinks}).done(function(e){var i={page:e,pageNumber:1,progress:1,totalPages:1};t.notify(i),n.resolve(i.page)}).fail(function(e){n.reject(e)}).always(function(){r[0].style.cssText=o,r.removeClass(x),i.resize(!0),i.resize(!0)})}),n}),S=W.extend({init:function(e,t){var i=this,n=M.timezone.windows_zones;if(!n||!M.timezone.zones_titles)throw Error(\"kendo.timezones.min.js is not included.\");W.fn.init.call(i,e,t),i.wrapper=i.element,i._zonesQuery=new M.data.Query(n),i._zoneTitleId=M.guid(),i._zoneTitlePicker(),i._zonePicker(),i._zoneTitle.bind(\"cascade\",function(){this.value()||i._zone.wrapper.hide()}),i._zone.bind(\"cascade\",function(){i._value=this.value(),i.trigger(\"change\")}),i.value(i.options.value)},options:{name:\"TimezoneEditor\",value:\"\",optionLabel:\"No timezone\"},events:[\"change\"],_zoneTitlePicker:function(){var t=this,i=e('<input id=\"'+t._zoneTitleId+'\"/>').appendTo(t.wrapper);t._zoneTitle=new M.ui.DropDownList(i,{dataSource:M.timezone.zones_titles,dataValueField:\"other_zone\",dataTextField:\"name\",optionLabel:t.options.optionLabel})},_zonePicker:function(){var t=this,i=e(\"<input />\").appendTo(this.wrapper);t._zone=new M.ui.DropDownList(i,{dataValueField:\"zone\",dataTextField:\"territory\",dataSource:t._zonesQuery.data,cascadeFrom:t._zoneTitleId,dataBound:function(){t._value=this.value(),this.wrapper.toggle(this.dataSource.view().length>1)}}),t._zone.wrapper.hide()},destroy:function(){W.fn.destroy.call(this),M.destroy(this.wrapper)},value:function(e){var i,n=this;return e===t?n._value:(i=n._zonesQuery.filter({field:\"zone\",operator:\"eq\",value:e}).data[0],i?(n._zoneTitle.value(i.other_zone),n._zone.value(i.zone)):n._zoneTitle.select(0),t)}}),F.plugin(S),E=M.template('<option value=\"#=other_zone#\">#=name#</option>'),C=M.template('<option value=\"#=zone#\">#=territory#</option>'),A=W.extend({init:function(e,t){var i=this,n=M.timezone.windows_zones;if(!n||!M.timezone.zones_titles)throw Error(\"kendo.timezones.min.js is not included.\");W.fn.init.call(i,e,t),i.wrapper=i.element,i._zonesQuery=new M.data.Query(n),i._zoneTitlePicker(),i._zonePicker(),i.value(i.options.value)},options:{name:\"MobileTimezoneEditor\",optionLabel:\"No timezone\",value:\"\"},events:[\"change\"],_bindZones:function(e){var t=e?this._filter(e):[];this._zone.html(this._options(t,C))},_filter:function(e){return this._zonesQuery.filter({field:\"other_zone\",operator:\"eq\",value:e}).data},_options:function(e,t,i){var n=0,a=\"\",r=e.length;for(i&&(a+=t({other_zone:\"\",name:i}));r>n;n++)a+=t(e[n]);return a},_zoneTitlePicker:function(){var t=this,i=t._options(M.timezone.zones_titles,E,t.options.optionLabel);t._zoneTitle=e(\"<select>\"+i+\"</select>\").appendTo(t.wrapper).change(function(){var e=this.value,i=t._zone;t._bindZones(e),e&&i[0].children.length>1?i.show():i.hide(),t._value=i[0].value,t.trigger(\"change\")})},_zonePicker:function(){var t=this;t._zone=e('<select style=\"display:none\"></select>').appendTo(this.wrapper).change(function(){t._value=this.value,t.trigger(\"change\")}),t._bindZones(t._zoneTitle.val()),t._value=t._zone[0].value},destroy:function(){W.fn.destroy.call(this),M.destroy(this.wrapper)},value:function(e){var i,n=this,a=n._zone,r=\"\",o=\"\";return e===t?n._value:(i=n._zonesQuery.filter({field:\"zone\",operator:\"eq\",value:e}).data[0],i&&(o=i.zone,r=i.other_zone),n._zoneTitle.val(r),n._bindZones(r),a.val(o),o=a[0].value,o&&a[0].children.length>1?a.show():a.hide(),n._value=o,t)}}),F.plugin(A)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,i){(i||t)()});\n//# sourceMappingURL=kendo.scheduler.min.js.map\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IRecipientData>): RecipientRecord => {\n  const record: IRecipientRecord = { ...(json as any) };\n\n  return new RecipientRecord(record);\n};\n\nexport interface IRecipientData {\n  id: number;\n  signature_guid: string;\n  status: string;\n  rs_url: string;\n  signer: Nullable<string>;\n  name: string;\n  email: string;\n  required: boolean;\n  role_id: string;\n}\n\nexport interface IRecipientRecord {\n  id: Nullable<number>;\n  signature_guid: Nullable<string>;\n  status: Nullable<string>;\n  rs_url: Nullable<string>;\n  signer: Nullable<string>;\n  name: Nullable<string>;\n  email: Nullable<string>;\n  required: boolean;\n  included: boolean;\n  role_id: string;\n}\n\nexport const defaultRecipientProps = {\n  id: 0,\n  signature_guid: null,\n  status: \"created\",\n  rs_url: null,\n  signer: \"\",\n  name: \"\",\n  email: \"\",\n  required: false,\n  included: true,\n  role_id: \"\",\n};\n\nexport class RecipientRecord extends Record<IRecipientRecord>(defaultRecipientProps) implements IRecipientRecord {}\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: IEstimateComparisonLinkData): EstimateComparisonLinkRecord => {\n  const record: IEstimateComparisonLinkRecord = { ...(json as any) };\n\n  if (json.created_at) {\n    record.created_at = new Date(json.created_at as any as string);\n  }\n\n  if (json.updated_at) {\n    record.updated_at = new Date(json.updated_at as any as string);\n  }\n\n  return new EstimateComparisonLinkRecord(record);\n};\n\nexport const toJSON = (record: EstimateComparisonLinkRecord): IEstimateComparisonLinkData => {\n  return record.toJS();\n};\n\nexport interface IEstimateComparisonLinkData {\n  estimate_id: number;\n  id: number;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IEstimateComparisonLinkRecord {\n  estimate_id: number;\n  id: number;\n  created_at: Date;\n  updated_at: Date;\n  _destroy: boolean;\n}\n\nexport const defaultEstimateComparisonLinkProps: IEstimateComparisonLinkRecord = {\n  id: 0,\n  estimate_id: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n  _destroy: null,\n};\n\nexport class EstimateComparisonLinkRecord\n  extends Record(defaultEstimateComparisonLinkProps)\n  implements IEstimateComparisonLinkRecord\n{\n  public readonly id!: number;\n  public readonly estimate_id!: number;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n  public readonly _destroy!: boolean;\n\n  public constructor(values?: Partial<IEstimateComparisonLinkRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","export type FlashLevelTypes = \"success\" | \"info\" | \"warning\" | \"danger\";\nexport enum FlashLevels {\n  success,\n  info,\n  warning,\n  danger,\n}\n","import { Record } from \"immutable\";\n\nexport const customAddressFromJSON = (json: Partial<ICustomAddressData>): CustomAddressRecord => {\n  const data: ICustomAddressRecord = { ...(json as any) };\n\n  return new CustomAddressRecord(data);\n};\n\nexport const customAddressToJSON = (\n  record: CustomAddressRecord,\n  kind: \"physical\" | \"mailing\" | \"co_applicant_physical\",\n): ICustomAddressData => {\n  const customAddress = record.toJS() as any;\n\n  if (kind === \"physical\") {\n    delete customAddress.same_as_applicant;\n    delete customAddress.same_as_physical;\n  }\n\n  if (kind === \"mailing\") {\n    delete customAddress.same_as_applicant;\n  }\n\n  if (kind === \"co_applicant_physical\") {\n    delete customAddress.same_as_physical;\n  }\n\n  return customAddress;\n};\n\nexport interface ICustomAddressData {\n  same_as_physical: boolean;\n  same_as_applicant: boolean;\n  line_1: string;\n  line_2: string;\n  city: string;\n  state: string;\n  postal_code: string;\n}\n\nexport interface ICustomAddressRecord {\n  same_as_physical: boolean;\n  same_as_applicant: boolean;\n  line_1: string;\n  line_2: string;\n  city: string;\n  state: string;\n  postal_code: string;\n}\n\nconst defaultCustomAddressProps: ICustomAddressRecord = {\n  same_as_physical: false,\n  same_as_applicant: false,\n  line_1: \"\",\n  line_2: \"\",\n  city: \"\",\n  state: \"\",\n  postal_code: \"\",\n};\n\nexport class CustomAddressRecord extends Record(defaultCustomAddressProps) implements ICustomAddressRecord {}\n","import {\n  customAddressFromJSON,\n  CustomAddressRecord,\n  customAddressToJSON,\n  ICustomAddressData,\n} from \"app2/src/components/JobTabs/InfoTab/CustomForm/CustomAddressRecord\";\nimport { Nullable } from \"app2/src/records\";\nimport { Record } from \"immutable\";\n\nexport const applicantFromJSON = (json: Partial<IApplicantData>): ApplicantRecord => {\n  const data: IApplicantRecord = { ...(json as any) };\n\n  if (json.physical_address) {\n    data.physical_address = customAddressFromJSON(json.physical_address);\n  }\n  if (json.mailing_address) {\n    data.mailing_address = customAddressFromJSON(json.mailing_address);\n  }\n\n  return new ApplicantRecord(data);\n};\n\nexport const applicantToJSON = (record: ApplicantRecord, kind: \"applicant\" | \"co_applicant\"): any => {\n  const applicant = record.toJS() as any;\n\n  if (record.physical_address) {\n    applicant.physical_address = customAddressToJSON(\n      record.physical_address,\n      kind === \"applicant\" ? \"physical\" : \"co_applicant_physical\",\n    );\n  }\n  if (record.mailing_address) {\n    applicant.mailing_address = customAddressToJSON(record.mailing_address, \"mailing\");\n  }\n\n  applicant.picture_id_expiration_date = applicant.picture_id_expiration_date?.toISOString().split(\"T\")[0];\n  applicant.picture_id_issue_date = applicant.picture_id_issue_date?.toISOString().split(\"T\")[0];\n  applicant.employed_start_date = applicant.employed_start_date?.toISOString().split(\"T\")[0];\n  applicant.previous_employer_start_date = applicant.previous_employer_start_date?.toISOString().split(\"T\")[0];\n  applicant.previous_employer_end_date = applicant.previous_employer_end_date?.toISOString().split(\"T\")[0];\n  applicant.additional_income_from = applicant.additional_income_from?.toISOString().split(\"T\")[0];\n\n  return applicant;\n};\n\nexport interface IApplicantData {\n  physical_address: Partial<ICustomAddressData>;\n  mailing_address: Partial<ICustomAddressData>;\n\n  first_name: string;\n  middle_initial: string;\n  last_name: string;\n  phone: string;\n  email: string;\n  marital_status: string;\n  us_citizen: string;\n\n  picture_id_expiration_date: Nullable<Date>;\n  picture_id_issue_date: Nullable<Date>;\n\n  employer_name: string;\n  gross_monthly_income: number;\n  employed_start_date: Date;\n  position: string;\n  employer_phone: string;\n  less_than_2_years: string;\n  previous_employer: string;\n  previous_employer_start_date: Nullable<Date>;\n  previous_employer_end_date: Nullable<Date>;\n\n  additional_income_source: string;\n  additional_income_amount: number;\n  additional_income_from: Date;\n}\n\nexport interface IApplicantRecord {\n  physical_address: CustomAddressRecord;\n  mailing_address: CustomAddressRecord;\n\n  first_name: string;\n  middle_initial: string;\n  last_name: string;\n  phone: string;\n  email: string;\n  marital_status: string;\n  us_citizen: string;\n\n  picture_id_expiration_date: Date;\n  picture_id_issue_date: Date;\n\n  employer_name: string;\n  gross_monthly_income: number;\n  employed_start_date: Date;\n  position: string;\n  employer_phone: string;\n  less_than_2_years: string;\n  previous_employer: string;\n  previous_employer_start_date: Date;\n  previous_employer_end_date: Date;\n\n  additional_income_source: string;\n  additional_income_amount: number;\n  additional_income_from: Date;\n}\n\nconst defaultApplicantProps: IApplicantRecord = {\n  physical_address: customAddressFromJSON({}),\n  mailing_address: customAddressFromJSON({}),\n\n  first_name: \"\",\n  middle_initial: \"\",\n  last_name: \"\",\n  phone: \"\",\n  email: \"\",\n  marital_status: \"\",\n  us_citizen: \"\",\n\n  picture_id_expiration_date: null,\n  picture_id_issue_date: null,\n\n  employer_name: \"\",\n  gross_monthly_income: null,\n  employed_start_date: null,\n  position: \"\",\n  employer_phone: \"\",\n  less_than_2_years: \"\",\n  previous_employer: \"\",\n  previous_employer_start_date: null,\n  previous_employer_end_date: null,\n\n  additional_income_source: \"\",\n  additional_income_amount: null,\n  additional_income_from: null,\n};\n\nexport class ApplicantRecord extends Record(defaultApplicantProps) implements IApplicantRecord {}\n","import {\n  applicantFromJSON,\n  ApplicantRecord,\n  applicantToJSON,\n  IApplicantData,\n} from \"app2/src/components/JobTabs/InfoTab/CustomForm/ApplicantRecord\";\nimport { Nullable } from \"app2/src/records\";\nimport { fromJS, Map, Record } from \"immutable\";\n\nexport const customFormFromJSON = (json: Partial<ICustomFormData>): CustomFormRecord => {\n  const data: ICustomFormRecord = { ...(json as any) };\n\n  if (json.applicant) {\n    data.applicant = applicantFromJSON(json.applicant);\n  }\n  if (json.co_applicant) {\n    data.co_applicant = applicantFromJSON(json.co_applicant);\n  }\n  if (json.form_data) {\n    data.form_data = fromJS(json.form_data);\n  }\n\n  return new CustomFormRecord(data);\n};\n\nexport const customFormToJSON = (record: CustomFormRecord): any => {\n  const customFormData = record.toJS() as any;\n\n  const permittedData = {\n    kind: customFormData.kind,\n    job_uuid: customFormData.job_uuid,\n    form_data: customFormData.form_data,\n  } as any;\n  if (record.id !== \"0\") {\n    permittedData.id = record.id;\n  }\n\n  return permittedData;\n};\n\nexport const dabellaCustomFormToJSON = (record: CustomFormRecord): any => {\n  const customFormData = record.toJS() as any;\n\n  if (customFormData.id === \"0\") {\n    delete customFormData.id;\n  }\n\n  if (record.applicant) {\n    customFormData.applicant = applicantToJSON(record.applicant, \"applicant\");\n  }\n  if (record.co_applicant) {\n    customFormData.co_applicant = applicantToJSON(record.co_applicant, \"co_applicant\");\n  }\n\n  customFormData.todays_date = customFormData.todays_date.toISOString().split(\"T\")[0];\n  customFormData.property_purchase_date = customFormData.property_purchase_date.toISOString().split(\"T\")[0];\n\n  delete customFormData.form_data;\n  delete customFormData.loading;\n  delete customFormData.created_at;\n  delete customFormData.updated_at;\n\n  return customFormData;\n};\n\nexport type CustomFormKind = \"pii_form\" | \"job_resulting\";\n\nexport interface ICustomFormData {\n  id: string;\n  kind: CustomFormKind;\n  job_uuid: string;\n  form_data: any;\n  applicant: Partial<IApplicantData>;\n  co_applicant: Partial<IApplicantData>;\n\n  todays_date: Date;\n  market: string;\n  rep_1: string;\n  rep_2: string;\n  customer_name: string;\n  product_roof: boolean;\n  product_siding: boolean;\n  product_gutters: boolean;\n  product_windows: boolean;\n  product_bath: boolean;\n  proof_of_income: string;\n  finance_information: string;\n  special_plan: string;\n  deposit: number;\n  credit_select: string;\n  county: string;\n  estimated_payment: number;\n  credit_score: number;\n  plan: string;\n  standard_apr: string;\n  standard_term: string;\n  deferred_term: string;\n  amount: number;\n  purpose: string;\n  dealer_name: string;\n\n  property_purchase_date: Nullable<Date>;\n  property_payment_rent: number;\n  property_balance_owed: number;\n  property_market_value: number;\n  property_home_type: string;\n  property_primary_residence: string;\n  property_owner: string;\n  property_second_mortgage: string;\n  property_second_mortgage_payment: number;\n  property_second_mortgage_balance: number;\n  application_status: string;\n\n  created_at: Nullable<string>;\n  updated_at: Nullable<string>;\n  loading: boolean;\n}\n\nexport interface ICustomFormRecord {\n  id: string;\n  kind: CustomFormKind;\n  job_uuid: string;\n  form_data: Map<string, any>;\n  applicant: ApplicantRecord;\n  co_applicant: ApplicantRecord;\n\n  todays_date: Date;\n  market: string;\n  rep_1: string;\n  rep_2: string;\n  customer_name: string;\n  product_roof: boolean;\n  product_siding: boolean;\n  product_gutters: boolean;\n  product_windows: boolean;\n  product_bath: boolean;\n  proof_of_income: string;\n  finance_information: string;\n  special_plan: string;\n  deposit: number;\n\n  credit_select: string;\n  county: string;\n  estimated_payment: number;\n  credit_score: number;\n  plan: string;\n  standard_apr: string;\n  standard_term: string;\n  deferred_term: string;\n  amount: number;\n  purpose: string;\n  dealer_name: string;\n\n  property_purchase_date: Nullable<Date>;\n  property_payment_rent: number;\n  property_balance_owed: number;\n  property_market_value: number;\n  property_home_type: string;\n  property_primary_residence: string;\n  property_owner: string;\n  property_second_mortgage: string;\n  property_second_mortgage_payment: number;\n  property_second_mortgage_balance: number;\n  application_status: string;\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n  loading: boolean;\n}\n\nconst defaultCustomFormProps: ICustomFormRecord = {\n  id: \"0\",\n  kind: \"pii_form\",\n  job_uuid: \"\",\n  form_data: Map(),\n  todays_date: new Date(),\n  market: \"\",\n  rep_1: \"\",\n  rep_2: \"\",\n  customer_name: \"\",\n  applicant: applicantFromJSON({}),\n  co_applicant: applicantFromJSON({}),\n  product_roof: false,\n  product_siding: false,\n  product_gutters: false,\n  product_windows: false,\n  product_bath: false,\n  proof_of_income: \"\",\n  finance_information: \"\",\n  special_plan: \"\",\n  deposit: null,\n\n  credit_select: null,\n  county: \"\",\n  estimated_payment: null,\n  credit_score: null,\n  plan: null,\n  standard_apr: null,\n  standard_term: null,\n  deferred_term: null,\n  amount: null,\n  purpose: null,\n  dealer_name: null,\n\n  property_purchase_date: null,\n  property_payment_rent: null,\n  property_balance_owed: null,\n  property_market_value: null,\n  property_home_type: null,\n  property_primary_residence: null,\n  property_owner: null,\n  property_second_mortgage: null,\n  property_second_mortgage_payment: null,\n  property_second_mortgage_balance: null,\n  application_status: null,\n\n  created_at: null,\n  updated_at: null,\n  loading: false,\n};\n\nexport class CustomFormRecord extends Record(defaultCustomFormProps) implements ICustomFormRecord {}\n\nexport const customFormTestData: Partial<ICustomFormData> = {\n  id: 2,\n  applicant: {\n    first_name: \"John\",\n    middle_initial: \"D\",\n    last_name: \"Doe\",\n    marital_status: \"UNMARRIED\",\n    us_citizen: \"YES\",\n    physical_address: {\n      line_1: \"123 Main St\",\n      line_2: \"PO Box 123\",\n      city: \"Anytown\",\n      state: \"Indiana\",\n      postal_code: \"12345\",\n    },\n    mailing_address: {\n      same_as_physical: true,\n      line_1: \"123 Main St\",\n      line_2: \"PO Box 123\",\n      city: \"Anytown\",\n      state: \"Indiana\",\n      postal_code: \"12345\",\n    },\n    picture_id_expiration_date: new Date(\"2024-01-03\"),\n    picture_id_issue_date: new Date(\"2024-01-04\"),\n    phone: \"123-456-7890\",\n    email: \"john.doe@example.com\",\n    gross_monthly_income: 100,\n    employed_start_date: new Date(\"2024-01-08\"),\n    employer_name: \"OCC\",\n    employer_phone: \"123-456-7890\",\n    position: \"Sales\",\n    previous_employer: \"OCC1\",\n    less_than_2_years: \"YES\",\n    previous_employer_start_date: new Date(\"2024-01-10\"),\n    previous_employer_end_date: new Date(\"2024-01-11\"),\n    additional_income_from: new Date(\"2024-01-09\"),\n    additional_income_amount: 100,\n    additional_income_source: \"Random\",\n  },\n  co_applicant: {\n    first_name: \"Jane\",\n    middle_initial: \"D\",\n    last_name: \"Doe\",\n    marital_status: \"MARRIED\",\n    us_citizen: \"YES\",\n    physical_address: {\n      same_as_applicant: false,\n      line_1: \"123 Main St\",\n      line_2: \"PO Box 123\",\n      city: \"Anytown\",\n      state: \"Indiana\",\n      postal_code: \"12345\",\n    },\n    mailing_address: {\n      same_as_physical: false,\n      line_1: \"123 Main St\",\n      line_2: \"PO Box 123\",\n      city: \"Anytown\",\n      state: \"Indiana\",\n      postal_code: \"12345\",\n    },\n    picture_id_expiration_date: new Date(\"2024-01-05\"),\n    picture_id_issue_date: new Date(\"2024-01-06\"),\n    phone: \"123-456-7890\",\n    email: \"jane.doe@example.com\",\n    gross_monthly_income: 100,\n    employed_start_date: new Date(\"2024-01-08\"),\n    employer_name: \"OCC\",\n    employer_phone: \"123-456-7890\",\n    position: \"Sales\",\n    less_than_2_years: \"YES\",\n    previous_employer: \"OCC1\",\n    previous_employer_start_date: new Date(\"2024-01-10\"),\n    previous_employer_end_date: new Date(\"2024-01-11\"),\n    additional_income_from: new Date(\"2024-01-09\"),\n    additional_income_amount: 100,\n    additional_income_source: \"Random\",\n  },\n  todays_date: new Date(\"2024-01-01\"),\n  market: \"SAMPLE MARKET\",\n  rep_1: \"SAMPLE REP 1\",\n  rep_2: \"SAMPLE REP 2\",\n  customer_name: \"SAMPLE CUSTOMER\",\n  product_roof: true,\n  product_siding: false,\n  product_gutters: false,\n  product_windows: false,\n  product_bath: false,\n  proof_of_income: \"YES\",\n  finance_information: \"SAMPLE FINANCE INFORMATION\",\n  special_plan: \"SAMPLE SPECIAL PLAN\",\n  deposit: 1000,\n  property_purchase_date: new Date(\"2024-01-02\"),\n  credit_select: \"GOOD\",\n  county: \"SAMPLE COUNTY\",\n  estimated_payment: 200,\n  credit_score: 700,\n  plan: \"STANDARD\",\n  standard_apr: \"9.99\",\n  standard_term: \"36\",\n  deferred_term: \"3\",\n  amount: 5000,\n  purpose: \"HOME IMPROVEMENT\",\n  dealer_name: \"SAMPLE DEALER\",\n\n  property_payment_rent: 1200,\n  property_balance_owed: 30000,\n  property_market_value: 50000,\n  property_home_type: \"1-4 FAMILY\",\n  property_primary_residence: \"YES\",\n  property_owner: \"YES\",\n  property_second_mortgage: \"YES\",\n  property_second_mortgage_payment: 100,\n  property_second_mortgage_balance: 20000,\n\n  created_at: null,\n  updated_at: null,\n  loading: false,\n};\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { EventRecord, IEventData } from \"../records/Event\";\nimport { IMetaPaginationData } from \"../records/MetaPagination\";\nimport { QueryParamsRecord } from \"../records/Page\";\nimport { ITaskData } from \"../records/Task\";\nimport { listParams } from \"./Api\";\n\nexport const url = \"api/v1/events\";\nexport interface IInviteParams {\n  emails: string;\n  event_id: number;\n  summary: string;\n}\nexport interface IEventIndexResponse {\n  events: IEventData[];\n  meta: { pagination: IMetaPaginationData };\n}\nexport interface IEventQueryOptions {\n  start?: Date;\n  end?: Date;\n  start_time?: Date;\n  end_time?: Date;\n  start_time_after?: Date;\n  user_ids?: number[] | number;\n  jobs_only?: boolean;\n  orgs_only?: boolean;\n  sort_by?: string;\n  sort_order?: string;\n  includes?: string[];\n}\n\nexport const load = (queryParams: QueryParamsRecord): Promise<IEventIndexResponse> => {\n  const jobId = queryParams.getIn([\"parameters\", \"jobId\"]);\n  const actionUrl = jobId ? `api/v1/jobs/${jobId}/events` : url;\n\n  const params = listParams(queryParams);\n  const options = cleanQueryOptions(queryParams.parameters.toJS());\n  const parameters = { ...params, ...options };\n\n  if (!queryParams.getIn([\"parameters\", \"sort_order\"])) parameters[\"sort_order\"] = \"asc\";\n  if (!queryParams.getIn([\"parameters\", \"sort_by\"])) parameters[\"sort_by\"] = \"start_time\";\n  if (parameters.jobId) delete parameters.jobId;\n\n  return fetcher.get<IEventIndexResponse>(actionUrl, parameters);\n};\n\nexport const list = (params: any): Promise<IEventIndexResponse> => {\n  const options = cleanQueryOptions(params);\n  return fetcher.get(url, options);\n};\n\nexport const create = (event: EventRecord, includes: string[]): Promise<{ event: IEventData }> => {\n  return fetcher.post(url, { event: event.toJS(), include: includes });\n};\n\nexport const update = (event: EventRecord, includes: string[]): Promise<{ event: IEventData }> => {\n  return fetcher.patch(fetcher.joinUrls(url, event.id.toString()), { event: event.toJS(), include: includes });\n};\n\nexport const deleteEvent = (eventId: number): Promise<{ event: IEventData }> => {\n  return fetcher.delete(fetcher.joinUrls(url, eventId.toString()));\n};\n\nexport const sendInvite = (jobId: number, inviteParams: IInviteParams): Promise<{ task: ITaskData }> => {\n  return fetcher.post(`api/v1/jobs/${jobId}/invite`, inviteParams);\n};\n\nexport const resultEvent = (event: EventRecord): Promise<{ event: IEventData }> => {\n  return fetcher.patch(fetcher.joinUrls(url, event.id.toString(), \"result\"), { event: event.toJS() });\n};\n\nconst cleanQueryOptions = (src: IEventQueryOptions): any => {\n  const props: any = { ...src };\n  if (src.start_time) {\n    props.start_time = src.start_time.toUTCString();\n  }\n\n  if (src.end_time) {\n    props.end_time = src.end_time.toUTCString();\n  }\n\n  if (src.start) {\n    props.start = src.start.toUTCString();\n  }\n\n  if (src.start_time_after) {\n    props.start_time_after = src.start_time_after.toUTCString();\n  }\n\n  if (src.end) {\n    props.end = src.end.toUTCString();\n  }\n\n  if (src.includes) {\n    props[\"include[]\"] = src.includes;\n  }\n  return props;\n};\n","import { ThunkAction } from \"redux-thunk\";\nimport { ActionsUnion, createAction } from \"./Utils\";\nimport { RootState } from \".\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { RootDispatchType } from \"../store\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { create, update, deleteEvent, IInviteParams, sendInvite, resultEvent, load } from \"../api/event.service\";\nimport { EventRecord, IEventData } from \"../records/Event\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { queryParamsFromJSON, QueryParamsRecord } from \"../records/Page\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { IMetaPaginationData } from \"../records/MetaPagination\";\nimport { List } from \"immutable\";\nimport { event as eventSelector } from \"../selectors/event.selectors\";\nimport { pageRecord } from \"app2/src/selectors/pagination.selectors\";\n\nexport const RECEIVE_EVENTS = \"@appointments/RECEIVE_EVENTS\";\nexport const FETCH_EVENT = \"@appointments/FETCH_EVENT\";\nexport const RECEIVE_EVENT = \"@appointments/RECEIVE_EVENT\";\nexport const FETCH_BUSY = \"@events/FETCH_BUSY\";\nexport const RECEIVE_BUSY = \"@events/RECEIVE_BUSY\";\nexport const UPDATE_FORM = \"@events/UPDATE_FORM\";\nexport const INITIALIZE_EVENT = \"@events/INITIALIZE_EVENT\";\nexport const RESET_EVENT = \"@events/RESET_EVENT\";\nexport const REMOVE_EVENT = \"@events/REMOVE_EVENT\";\nexport const GENERATE_COLORS = \"@events/GENERATE_COLORS\";\n\nexport type IBusyInfo = { [key: string]: boolean };\n\nexport const Actions = {\n  receiveEvents: (events: IEventData[]) => createAction(RECEIVE_EVENTS, { events }),\n  fetchEvent: (eventId: number) => createAction(FETCH_EVENT, { eventId }),\n  receiveEvent: (event: IEventData) => createAction(RECEIVE_EVENT, { event }),\n  fetchMonthFreeBusy: (start: string, end: string) => createAction(FETCH_BUSY, { start, end }),\n  receiveMonthFreeBusy: (start: string, end: string, busyInfo: IBusyInfo) =>\n    createAction(RECEIVE_BUSY, { start, end, busyInfo }),\n  updateForm: (event: { rootPath: any; name: string; value: any }) => createAction(UPDATE_FORM, { event }),\n  resetEvent: (eventId: number) => createAction(RESET_EVENT, { eventId }),\n  initializeEvent: (newEventData: Partial<IEventData>) => createAction(INITIALIZE_EVENT, { newEventData }),\n  removeEvent: (eventId: number) => createAction(REMOVE_EVENT, { eventId }),\n  generateColors: (userIds: List<number>, userToAssignId?: number) =>\n    createAction(GENERATE_COLORS, { userIds, userToAssignId }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, ActionsUnion<typeof Actions>>;\n\nexport const AsyncActions = {\n  fetchBusyInfo: (start: string, end: string): ThunkResult<Promise<IBusyInfo>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchMonthFreeBusy(start, end));\n      const actionUrl = \"/api/v1/events/busy\";\n\n      return fetcher\n        .get(actionUrl, {\n          start_date: start,\n          end_date: end,\n        })\n        .then((data: { busy: IBusyInfo }) => {\n          dispatch(Actions.receiveMonthFreeBusy(start, end, data.busy));\n          return data.busy;\n        });\n    };\n  },\n  loadEvents: (\n    queryParams: QueryParamsRecord = queryParamsFromJSON({}),\n    modelName = \"events\",\n    allPages = false,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(paginationActions.Actions.fetchPage(modelName, queryParams));\n\n        const response = await load(queryParams);\n        let pagination = {} as IMetaPaginationData;\n        if (response.meta?.pagination) {\n          pagination = response.meta.pagination;\n        }\n        const pageData = {\n          ids: List(_.pluck(response.events, \"id\")),\n          pagination,\n        };\n\n        dispatch(Actions.receiveEvents(response.events));\n        dispatch(paginationActions.Actions.receivePage(modelName, queryParams, pageData));\n\n        if (allPages && pagination.current_page < pagination.total_pages) {\n          const totalEventsQueried = pagination.current_page * queryParams.per_page;\n\n          // Limit to 300 queried events\n          if (totalEventsQueried + queryParams.per_page > 300) {\n            dispatch(\n              commonActions.Actions.flashAddAlert(\n                FlashLevels.warning,\n                \"You have reached the limit on the number of appointments we can load and display.  To see all the appointments please choose a view with a smaller timeframe.\",\n              ),\n            );\n            return;\n          }\n          return dispatch(\n            AsyncActions.loadEvents(queryParams.set(\"page\", pagination.current_page + 1), modelName, allPages),\n          );\n        }\n\n        return;\n      } catch (response) {\n        const errors = handleErrors(response, dispatch);\n        dispatch(paginationActions.Actions.receivePageError(modelName, queryParams, errors));\n      }\n    };\n  },\n  createOrUpdate: (eventId: number, includes: string[]): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      if (eventId === 0) {\n        await dispatch(AsyncActions.create(eventId, includes));\n      } else {\n        await dispatch(AsyncActions.update(eventId, includes));\n      }\n    };\n  },\n  updateTime: (eventData: Partial<IEventData>, includes: string[]): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      const rootPath = [\"events\", \"byId\", eventData.id];\n      dispatch(Actions.updateForm({ rootPath, name: \"start_time\", value: eventData.start_time }));\n      dispatch(Actions.updateForm({ rootPath, name: \"end_time\", value: eventData.end_time }));\n      await dispatch(AsyncActions.update(eventData.id, includes));\n    };\n  },\n  create: (eventId: number, includes: string[]): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const event = eventSelector(getState(), { eventId });\n\n      try {\n        dispatch(Actions.fetchEvent(eventId));\n        const response = await create(event, includes);\n        dispatch(Actions.receiveEvent(response.event));\n        dispatch(paginationActions.Actions.pushId(response.event.id, \"events\"));\n        dispatch(paginationActions.Actions.pushId(response.event.id, \"userEvents\"));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Appointment created successfully.\"));\n        dispatch(Actions.resetEvent(eventId));\n      } catch (response) {\n        dispatch(Actions.resetEvent(eventId));\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  update: (eventId: number, includes: string[]): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const event = eventSelector(getState(), { eventId });\n\n      try {\n        dispatch(Actions.fetchEvent(eventId));\n        const response = await update(event, includes);\n        dispatch(Actions.receiveEvent(response.event));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Appointment saved successfully.\"));\n      } catch (response) {\n        dispatch(Actions.resetEvent(eventId));\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  delete: (eventId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        await deleteEvent(eventId);\n        if (pageRecord(getState(), { modelName: \"events\", page: 1 })) {\n          dispatch(paginationActions.Actions.removeId(eventId, \"events\"));\n        }\n        if (pageRecord(getState(), { modelName: \"userEvents\", page: 1 })) {\n          dispatch(paginationActions.Actions.removeId(eventId, \"userEvents\"));\n        }\n        dispatch(Actions.removeEvent(eventId));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Appointment deleted successfully.\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  sendInvite: (jobId: number, params: IInviteParams): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        await sendInvite(jobId, params);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Invite successfully sent.\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  resultEvent: (eventRecord: EventRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const { event } = await resultEvent(eventRecord);\n        dispatch(Actions.receiveEvent(event));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Appointment result saved successfully.\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { Record, List } from \"immutable\";\nimport * as moment from \"moment\";\nimport { CamelToSnakeKeys, SnakeToCamelKeys } from \"app2/src/helpers/Format\";\nimport { checkDate } from \"app2/src/records\";\nimport {\n  IFenceSegmentData,\n  FenceSegmentRecord,\n  fromJSON as segmentFromJSON,\n  toFormData as segmentToFormData,\n} from \"./Segment\";\n\nexport const fromJSON = (data: Partial<IFenceData>): FenceRecord => {\n  const record: Partial<IFenceRecord> = SnakeToCamelKeys(data);\n\n  if (data.segments) {\n    record.segments = List(data.segments.map((s) => segmentFromJSON(s)));\n  }\n\n  if (data.created_at) {\n    record.createdAt = checkDate(data.created_at);\n  }\n\n  if (data.updated_at) {\n    record.updatedAt = checkDate(data.updated_at);\n  }\n\n  return new FenceRecord(record);\n};\n\nexport const toFormData = (record: FenceRecord): IFenceData => {\n  const data = CamelToSnakeKeys(record.toJSON());\n\n  delete (data as any).segment_ids;\n\n  if (record.segments.size > 0) {\n    data.segments = record.segments.map((r) => segmentToFormData(r)).toArray();\n  } else {\n    data.segments = [];\n  }\n\n  data.updated_at = moment(record.updatedAt).format(\"YYYY-MM-DDTHH:mm:ss.SSS\");\n  data.created_at = moment(record.createdAt).format(\"YYYY-MM-DDTHH:mm:ss.SSS\");\n\n  return data;\n};\n\nexport interface IFenceData {\n  id: number;\n  segments: Array<Partial<IFenceSegmentData>>;\n  fencing_id: number;\n  corner_posts: number;\n  terminal_posts: number;\n  gate_count: number;\n  gate_length: number;\n  total_length: number;\n  net_length: number;\n  line_posts_4: number;\n  line_posts_6: number;\n  line_posts_8: number;\n  _destroy?: boolean;\n  created_at: string;\n  updated_at: string;\n}\n\nexport interface IFenceRecord {\n  id: number;\n  segments: List<FenceSegmentRecord>;\n  segmentIds: List<number>;\n  fencingId: number;\n  cornerPosts: number;\n  terminalPosts: number;\n  gateCount: number;\n  gateLength: number;\n  totalLength: number;\n  netLength: number;\n  linePosts4: number;\n  linePosts6: number;\n  linePosts8: number;\n  _destroy: boolean;\n  updatedAt: Date;\n  createdAt: Date;\n}\n\nexport const defaultFenceProps = {\n  id: 0,\n  segments: List(),\n  segmentIds: List(),\n  fencingId: 0,\n  cornerPosts: 0,\n  terminalPosts: 0,\n  totalLength: 0,\n  gateCount: 0,\n  gateLength: 0,\n  netLength: 0,\n  linePosts4: 0,\n  linePosts6: 0,\n  linePosts8: 0,\n  _destroy: false,\n  updatedAt: new Date(),\n  createdAt: new Date(),\n};\n\nexport class FenceRecord extends Record<IFenceRecord>(defaultFenceProps) implements IFenceRecord {}\n\nexport const emptyFenceRecord = new FenceRecord();\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IIframeData>): IframeRecord => {\n  const record: IIframeRecord = { ...(json as any) };\n\n  return new IframeRecord(record);\n};\n\nexport interface IIframeData {\n  url: string;\n  error: string;\n}\n\nexport interface IIframeRecord {\n  url: string;\n  error: string;\n}\n\nconst defaultIframeProps: IIframeRecord = {\n  url: \"\",\n  error: \"Not a valid url\",\n};\n\nexport class IframeRecord extends Record(defaultIframeProps) implements IIframeRecord {}\n","import { IEstimateData } from \"app2/src/records/Estimate\";\nimport { IFinanceOptionData } from \"app2/src/records/FinanceOption\";\nimport { IframeRecord, IIframeData, fromJSON as iframeFromJSON } from \"app2/src/records/Iframe\";\nimport { IJobData } from \"app2/src/records/Job\";\nimport { IOrgData } from \"app2/src/records/OrgRecord\";\nimport { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<ILandingEstimateData>): LandingEstimateRecord => {\n  const record: ILandingEstimateRecord = { ...(json as any) };\n\n  if (json.estimate) {\n    record.estimateId = json.estimate.id;\n  }\n\n  if (json.org) {\n    record.orgId = json.org.id;\n  }\n\n  if (json.job) {\n    record.jobId = json.job.id;\n  }\n\n  if (json.finance_option) {\n    record.financeOptionId = json.finance_option.id;\n  }\n\n  if (json.iframe) {\n    record.iframe = iframeFromJSON(json.iframe);\n  }\n\n  return new LandingEstimateRecord(record);\n};\n\nexport interface ILandingEstimateData {\n  estimate: IEstimateData;\n  org: IOrgData;\n  job: IJobData;\n  finance_option: IFinanceOptionData;\n  iframe: IIframeData;\n  loading?: boolean;\n}\n\nexport interface ILandingEstimateRecord {\n  estimateId: number;\n  orgId: number;\n  jobId: number;\n  financeOptionId: number;\n  iframe: IframeRecord;\n  loading: boolean;\n}\n\nconst defaultLandingEstimateProps: ILandingEstimateRecord = {\n  estimateId: null,\n  orgId: null,\n  jobId: null,\n  financeOptionId: null,\n  iframe: iframeFromJSON({}),\n  loading: false,\n};\n\nexport class LandingEstimateRecord extends Record(defaultLandingEstimateProps) implements ILandingEstimateRecord {}\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<ICalculatedFinancingData>): CalculatedFinancingRecord => {\n  const record: ICalculatedFinancingRecord = { ...(json as any) };\n\n  return new CalculatedFinancingRecord(record);\n};\n\nexport interface ICalculatedFinancingData {\n  monthly_payment: number;\n  promo_payment: number;\n  financed_amount: number;\n  finance_option_id: number;\n  estimate_id: number;\n  error: string;\n  loading?: boolean;\n}\n\nexport interface ICalculatedFinancingRecord {\n  monthly_payment: number;\n  promo_payment: number;\n  financed_amount: number;\n  finance_option_id: number;\n  estimate_id: number;\n  error: string;\n  loading: boolean;\n}\n\nexport const defaultCalculatedFinancingProps = {\n  monthly_payment: 0,\n  promo_payment: 0,\n  financed_amount: 0,\n  finance_option_id: null,\n  estimate_id: null,\n  error: null,\n  loading: false,\n};\n\nexport class CalculatedFinancingRecord\n  extends Record<ICalculatedFinancingRecord>(defaultCalculatedFinancingProps)\n  implements ICalculatedFinancingRecord\n{\n  public readonly monthly_payment!: number;\n  public readonly promo_payment!: number;\n  public readonly financed_amount!: number;\n  public readonly finance_option_id!: number;\n  public readonly estimate_id!: number;\n  public readonly error!: string;\n  public readonly loading!: boolean;\n\n  public constructor(values?: Partial<ICalculatedFinancingRecord>) {\n    values ? super(values) : super();\n  }\n}\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\nimport { CommissionMethod } from \"./Estimate\";\n\nexport const fromJSON = (data: Partial<IEstimateCommissionDetailsData>): EstimateCommissionDetailsRecord => {\n  const record: IEstimateCommissionDetailsRecord = { ...(data as any) };\n  return new EstimateCommissionDetailsRecord(record);\n};\n\nexport interface IEstimateCommissionDetailsData {\n  method: CommissionMethod;\n  overhead: number;\n  formula: string;\n  greenline_percentage: number;\n}\n\nexport interface IEstimateCommissionDetailsRecord {\n  method: Nullable<CommissionMethod>;\n  overhead: number;\n  formula: string;\n  greenline_percentage: number;\n}\n\nconst defaultEstimateCommissionDetailsProps: IEstimateCommissionDetailsRecord = {\n  method: null,\n  overhead: 0,\n  formula: \"\",\n  greenline_percentage: 0,\n};\n\nexport class EstimateCommissionDetailsRecord\n  extends Record(defaultEstimateCommissionDetailsProps)\n  implements IEstimateCommissionDetailsRecord {}\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (data: Partial<IEstimateCommissionVariablesData>): EstimateCommissionVariablesRecord => {\n  const record: IEstimateCommissionVariablesRecord = { ...(data as any) };\n  return new EstimateCommissionVariablesRecord(record);\n};\n\nexport interface IEstimateCommissionVariablesData {\n  adj_to_commission: number;\n  base_commission: number;\n  calculated_commission: string;\n  greenline: string;\n  percent_of_greenline: number;\n  percent_payable: number;\n  sale_price: string;\n  sale_price_less_adm_fee: string;\n  total_cost: string;\n}\n\nexport interface IEstimateCommissionVariablesRecord {\n  adj_to_commission: number;\n  base_commission: number;\n  calculated_commission: string;\n  greenline: string;\n  percent_of_greenline: number;\n  percent_payable: number;\n  sale_price: string;\n  sale_price_less_adm_fee: string;\n  total_cost: string;\n}\n\nconst defaultIEstimateCommissionVariablesProps: IEstimateCommissionVariablesRecord = {\n  adj_to_commission: 0,\n  base_commission: 0,\n  calculated_commission: \"\",\n  greenline: \"\",\n  percent_of_greenline: 0,\n  percent_payable: 0,\n  sale_price: \"\",\n  sale_price_less_adm_fee: \"\",\n  total_cost: \"\",\n};\n\nexport class EstimateCommissionVariablesRecord\n  extends Record(defaultIEstimateCommissionVariablesProps)\n  implements IEstimateCommissionVariablesRecord {}\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (\n  data: Partial<IEstimateCommissionOutputObjectsData>,\n): EstimateCommissionOutputObjectsRecord => {\n  const record: IEstimateCommissionOutputObjectsRecord = { ...(data as any) };\n  return new EstimateCommissionOutputObjectsRecord(record);\n};\n\nexport interface IEstimateCommissionOutputObjectsData {\n  title: string;\n  value: string;\n  formatted: string;\n}\n\nexport interface IEstimateCommissionOutputObjectsRecord {\n  title: string;\n  value: string;\n  formatted: string;\n}\n\nconst defaultIEstimateCommissionOutputObjectsProps: IEstimateCommissionOutputObjectsRecord = {\n  title: \"\",\n  value: \"\",\n  formatted: \"\",\n};\n\nexport class EstimateCommissionOutputObjectsRecord\n  extends Record(defaultIEstimateCommissionOutputObjectsProps)\n  implements IEstimateCommissionOutputObjectsRecord {}\n","import { List, Record } from \"immutable\";\nimport {\n  EstimateCommissionOutputObjectsRecord,\n  IEstimateCommissionOutputObjectsData,\n} from \"./EstimateCommissionOutputObjects\";\nimport { EstimateCommissionVariablesRecord, IEstimateCommissionVariablesData } from \"./EstimateCommissionVariables\";\nimport { fromJSON as variablesFromJson } from \"./EstimateCommissionVariables\";\nimport { fromJSON as outputObjectsFromJson } from \"./EstimateCommissionOutputObjects\";\n\nexport const fromJSON = (data: Partial<IEstimateCommissionOutputData>): EstimateCommissionOutputRecord => {\n  const record: IEstimateCommissionOutputRecord = { ...(data as any) };\n\n  if (data.variables) {\n    record.variables = variablesFromJson(data.variables);\n  }\n\n  if (data.verbose_output) {\n    record.verbose_output = List(data.verbose_output);\n  }\n\n  if (data.verbose_output_objects) {\n    record.verbose_output_objects = List(\n      data.verbose_output_objects.map((outputObject) => outputObjectsFromJson(outputObject)),\n    );\n  }\n\n  return new EstimateCommissionOutputRecord(record);\n};\n\nexport interface IEstimateCommissionOutputData {\n  variables: IEstimateCommissionVariablesData;\n  verbose_output: string[];\n  verbose_output_objects: IEstimateCommissionOutputObjectsData[];\n}\n\nexport interface IEstimateCommissionOutputRecord {\n  variables: EstimateCommissionVariablesRecord;\n  verbose_output: List<string>;\n  verbose_output_objects: List<EstimateCommissionOutputObjectsRecord>;\n}\n\nconst defaultIEstimateCommissionOutputProps: IEstimateCommissionOutputRecord = {\n  variables: null,\n  verbose_output: List(),\n  verbose_output_objects: List(),\n};\n\nexport class EstimateCommissionOutputRecord\n  extends Record(defaultIEstimateCommissionOutputProps)\n  implements IEstimateCommissionOutputRecord {}\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (data: Partial<IEstimateCommissionUserData>): EstimateCommissionUserRecord => {\n  const record: IEstimateCommissionUserRecord = { ...(data as any) };\n  return new EstimateCommissionUserRecord(record);\n};\n\nexport interface IEstimateCommissionUserData {\n  commission_rate: number;\n  overhead: number;\n}\n\nexport interface IEstimateCommissionUserRecord {\n  commission_rate: number;\n  overhead: number;\n}\n\nconst defaultIEstimateCommissionUserProps: IEstimateCommissionUserRecord = {\n  commission_rate: 0,\n  overhead: 0,\n};\n\nexport class EstimateCommissionUserRecord\n  extends Record(defaultIEstimateCommissionUserProps)\n  implements IEstimateCommissionUserRecord {}\n","/*eslint camelcase: 0*/\nimport { Record } from \"immutable\";\nimport { Nullable } from \".\";\nimport {\n  EstimateCommissionDetailsRecord,\n  IEstimateCommissionDetailsData,\n  fromJSON as commissionDetailsFromJSON,\n} from \"./EstimateCommissionDetails\";\nimport {\n  EstimateCommissionOutputRecord,\n  IEstimateCommissionOutputData,\n  fromJSON as commissionOutputFromJSON,\n} from \"./EstimateCommissionOutput\";\nimport {\n  EstimateCommissionUserRecord,\n  IEstimateCommissionUserData,\n  fromJSON as commissionUserFromJSON,\n} from \"./EstimateCommissionUser\";\n\nexport const fromJSON = (data: Partial<IEstimateCommissionData>): EstimateCommissionRecord => {\n  const record: IEstimateCommissionRecord = { ...(data as any) };\n\n  if (data.commission) {\n    record.commission = commissionDetailsFromJSON(data.commission);\n  }\n\n  if (data.user) {\n    record.user = commissionUserFromJSON(data.user);\n  }\n\n  if (data.output) {\n    record.output = commissionOutputFromJSON(data.output);\n  }\n\n  return new EstimateCommissionRecord(record);\n};\n\nexport interface IEstimateCommissionData {\n  estimate_id: number;\n  estimate_last_updated: Date;\n  apl_id: number;\n  apl_current: boolean;\n  generated_at: Date;\n  generated_by_user_id: number;\n  generated_by_user_name: string;\n  generated_by_user_email: string;\n  commission: IEstimateCommissionDetailsData;\n  user: IEstimateCommissionUserData;\n  output: IEstimateCommissionOutputData;\n  loading?: boolean;\n}\n\nexport interface IEstimateCommissionRecord {\n  estimate_id: number;\n  estimate_last_updated: Nullable<Date>;\n  apl_id: number;\n  apl_current: boolean;\n  generated_at: Nullable<Date>;\n  generated_by_user_id: number;\n  generated_by_user_name: string;\n  generated_by_user_email: string;\n  commission: EstimateCommissionDetailsRecord;\n  user: EstimateCommissionUserRecord;\n  output: EstimateCommissionOutputRecord;\n  loading?: boolean;\n}\n\nconst defaultEstimateCommissionProps: IEstimateCommissionRecord = {\n  estimate_id: 0,\n  estimate_last_updated: null,\n  apl_id: 0,\n  apl_current: false,\n  generated_at: null,\n  generated_by_user_id: 0,\n  generated_by_user_name: \"\",\n  generated_by_user_email: \"\",\n  commission: new EstimateCommissionDetailsRecord(),\n  user: new EstimateCommissionUserRecord(),\n  output: new EstimateCommissionOutputRecord(),\n  loading: false,\n};\n\nexport class EstimateCommissionRecord\n  extends Record(defaultEstimateCommissionProps)\n  implements IEstimateCommissionRecord {}\n","import * as estimateActions from \"./estimate.actions\";\nimport * as estimateGroupActions from \"./estimateGroup.actions\";\nimport { reducer as estimateGroupReducer } from \"./estimateGroup.reducer\";\nimport { List, Map, Record } from \"immutable\";\nimport { EstimateRecord, fromJSON, removeDiscount, addDiscount, updateDiscount } from \"../records/Estimate\";\nimport { EstimateOverviewRecord, fromJSON as overviewFromJSON } from \"../records/EstimateOverview\";\nimport { RootState, RootActions } from \".\";\nimport {\n  estimate,\n  toEstimateOverview,\n  updateBaseTotal,\n  updateDiscountTotal,\n  updateTaxTotal,\n  updatePaymentTermTotal,\n} from \"../selectors/estimate.selectors\";\nimport { fromJSON as paymentTermFromJSON } from \"../records/PaymentTerm\";\nimport * as estimateFinanceOptionActions from \"./estimateFinanceOption.actions\";\nimport * as financeOptionActions from \"./org/financeOption.actions\";\nimport * as orgActions from \"./org.actions\";\nimport * as jobActions from \"./job.actions\";\nimport { Actions as DocumentActions } from \"./document.actions\";\nimport { reducer as estimateFinanceOptionReducer } from \"./estimateFinanceOption.reducer\";\nimport { reducer as orgReducer } from \"./org.reducer\";\nimport { reducer as jobReducer } from \"./job.reducer\";\nimport { reducer as documentReducer } from \"./document.reducer\";\nimport { LandingEstimateRecord, fromJSON as landingEstimateFromJSON } from \"app2/src/records/LandingEstimate\";\nimport {\n  CalculatedFinancingRecord,\n  fromJSON as calculatedFinancingFromJSON,\n} from \"app2/src/records/CalculatedFinancing\";\nimport { toCalculatedFinancing } from \"app2/src/records/EstimateFinanceOption\";\nimport { fetch } from \"app2/src/reducers/Reducer\";\nimport { EstimateSignedDocumentRecord } from \"../records/EstimateSignedDocument\";\nimport { EstimateCommissionRecord, fromJSON as estimateCommissionFromJSON } from \"../records/EstimateCommission\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport * as moment from \"moment\";\nimport { contractTitle } from \"app2/src/selectors/org.selectors\";\n\nexport const EstimateStateRecord = Record({\n  estimateOverviewsByJob: Map<number, List<EstimateOverviewRecord>>(),\n  byId: Map<number, EstimateRecord>(),\n  byKey: Map<string, LandingEstimateRecord>(),\n  lastSavedById: Map<number, EstimateRecord>(),\n  calculatedFinancingByFinancedAmount: Map<number, Map<number, CalculatedFinancingRecord>>(),\n  unsavedId: -1,\n  calculatedCommission: EstimateCommissionRecord,\n  errors: List<string>(),\n  estimateDocumentsByJobId: Map<number, List<EstimateSignedDocumentRecord>>(),\n});\n\nexport const initialState = EstimateStateRecord();\n\nexport type EstimateState = typeof initialState;\n\nexport const model = \"estimates\";\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let estimateRecord: EstimateRecord;\n  let landingEstimateRecord: LandingEstimateRecord;\n  switch (action.type) {\n    case estimateActions.FETCH_ESTIMATE:\n      return fetch(state, model, fromJSON({ id: action.payload.estimateId }));\n\n    case estimateActions.RECEIVE_ESTIMATE:\n      action.payload.estimate.groups.map((g) => {\n        state = estimateGroupReducer(state, estimateGroupActions.Actions.receiveEstimateGroup(g));\n      });\n      const financedAmount = action.payload.estimate.payment_terms.financed_amount;\n      const calculations = action.payload.estimate.finance_options.map((efo) =>\n        toCalculatedFinancing(financedAmount, efo),\n      );\n      state = reducer(state, estimateActions.Actions.receiveCalculations(financedAmount, calculations));\n\n      action.payload.estimate.finance_options.map((fo) => {\n        state = estimateFinanceOptionReducer(\n          state,\n          estimateFinanceOptionActions.Actions.receiveEstimateFinanceOption(fo),\n        );\n      });\n\n      estimateRecord = fromJSON({ ...action.payload.estimate, loading: false });\n\n      return state.setIn([model, \"byId\", action.payload.estimate.id], estimateRecord);\n\n    case estimateActions.SET_LAST_SAVED_ESTIMATE:\n      const totEstimate = state.getIn([model, \"byId\", action.payload.estimateId]);\n      return state.setIn([model, \"lastSavedById\", action.payload.estimateId], totEstimate);\n\n    case estimateActions.RECEIVE_ESTIMATE_ERROR:\n      return state.setIn([model, \"errors\"], List<string>(action.payload.errors));\n\n    case estimateActions.RECEIVE_ESTIMATE_PDF: {\n      const { estimateId, data, documentId } = action.payload;\n      const tempDocumentId = documentId || -1;\n      const job = currentJob(state);\n      const name = job.name + \" - \" + moment().format(\"MM-DD-Y HH:mm\") + \" - \" + contractTitle(state) + \".pdf\";\n\n      state = documentReducer(\n        state,\n        DocumentActions.receiveDocument({\n          id: tempDocumentId,\n          name,\n          base64: URL.createObjectURL(data),\n          documentable_id: job.get(\"id\"),\n          documentable_type: \"Job\",\n        }),\n      );\n\n      return state.updateIn([model, \"byId\", estimateId], (est) => {\n        if (!est) {\n          est = fromJSON({ id: estimateId });\n        }\n        return est.merge({ tempDocumentId, loading: false });\n      });\n    }\n    case estimateActions.REMOVE_ESTIMATE_PDF: {\n      const { estimateId } = action.payload;\n      return state.updateIn([model, \"byId\", estimateId], (est) => est.set(\"tempDocumentId\", null));\n    }\n    case estimateActions.SET_ESTIMATE_LOADED:\n      return state.setIn([model, \"byId\", action.payload.estimateId, \"loading\"], false);\n\n    case estimateActions.FETCH_JOB_ESTIMATES:\n      return state.setIn([model, \"estimateOverviewsByJob\", action.payload], List<EstimateOverviewRecord>());\n\n    case estimateActions.RECEIVE_JOB_ESTIMATES:\n      const overviews = action.payload.estimates.map((e) => overviewFromJSON(e));\n\n      return state.setIn([model, \"estimateOverviewsByJob\", action.payload.jobId], List(overviews));\n\n    case estimateActions.RECEIVE_JOB_ERRORS:\n      return state.setIn([model, \"errors\"], List<string>(action.payload.errors));\n\n    case estimateActions.UPDATE_ESTIMATE_OVERVIEW:\n      if (state.getIn([model, \"estimateOverviewsByJob\", action.payload.estimate.job_id])) {\n        return state.updateIn(\n          [model, \"estimateOverviewsByJob\", action.payload.estimate.job_id],\n          (list: List<EstimateOverviewRecord>) => {\n            const idx = list.findIndex((e) => e.id === action.payload.estimate.id);\n\n            if (idx >= 0) {\n              return list.set(idx, toEstimateOverview(state, { estimateId: action.payload.estimate.id }));\n            }\n\n            return list.push(toEstimateOverview(state, { estimateId: action.payload.estimate.id }));\n          },\n        );\n      }\n      return state;\n\n    case estimateActions.FETCH_LANDING_ESTIMATE:\n      if (state.getIn([model, \"byKey\", action.payload.key])) {\n        return state.setIn([model, \"byKey\", action.payload.key, \"loading\"], true);\n      }\n\n      landingEstimateRecord = landingEstimateFromJSON({ loading: true });\n\n      return state.setIn([model, \"byKey\", action.payload.key], landingEstimateRecord);\n\n    case estimateActions.RECEIVE_LANDING_ESTIMATE:\n      landingEstimateRecord = landingEstimateFromJSON(action.payload.response);\n\n      state = reducer(state, estimateActions.Actions.receiveEstimate(action.payload.response.estimate));\n\n      state = jobReducer(state, jobActions.Actions.receiveJob(action.payload.response.job));\n\n      state = orgReducer(\n        state,\n        financeOptionActions.Actions.receiveFinanceOption(action.payload.response.finance_option),\n      );\n\n      state = orgReducer(state, orgActions.Actions.setOrg(action.payload.response.org));\n\n      return state.setIn([model, \"byKey\", action.payload.key], landingEstimateRecord);\n\n    case estimateActions.SET_LANDING_LOADED:\n      return state.setIn([model, \"byKey\", action.payload.key, \"loading\"], false);\n\n    case estimateActions.ADD_PT_TEMPLATE:\n      const template = action.payload.template;\n      const newPaymentTerms = paymentTermFromJSON({\n        id: template.id,\n        name: template.name,\n        description: template.description,\n        payment_term_items: template.breakdown.items.toJS(),\n      });\n      return state.setIn([model, \"byId\", action.payload.estimateId, \"payment_terms\"], newPaymentTerms);\n\n    case estimateActions.ADD_PT_ITEM:\n      const paymentTerms = state.getIn([\n        model,\n        \"byId\",\n        action.payload.estimateId,\n        \"payment_terms\",\n        \"payment_term_items\",\n      ]);\n      const addNewPaymentTerms = paymentTerms.push(action.payload.item);\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateId, \"payment_terms\", \"payment_term_items\"],\n        addNewPaymentTerms,\n      );\n\n    case estimateActions.UPDATE_PT_ITEM:\n      const currentPaymentTerms = state.getIn([\n        model,\n        \"byId\",\n        action.payload.estimateId,\n        \"payment_terms\",\n        \"payment_term_items\",\n      ]);\n      const index = currentPaymentTerms.findIndex((record) => record.uuid === action.payload.item.uuid);\n      const updatedPaymentTerms = currentPaymentTerms.set(index, action.payload.item);\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateId, \"payment_terms\", \"payment_term_items\"],\n        updatedPaymentTerms,\n      );\n\n    case estimateActions.REMOVE_PT_ITEM:\n      const existingPaymentTerms = state.getIn([\n        model,\n        \"byId\",\n        action.payload.estimateId,\n        \"payment_terms\",\n        \"payment_term_items\",\n      ]);\n      const rptPaymentTerms = existingPaymentTerms.filter((pt) => pt !== action.payload.item).toList();\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateId, \"payment_terms\", \"payment_term_items\"],\n        rptPaymentTerms,\n      );\n\n    case estimateActions.REMOVE_DISCOUNT:\n      estimateRecord = state.getIn([model, \"byId\", action.payload.estimateId]);\n\n      let uuid = action.payload.discount;\n      if (typeof action.payload.discount !== \"string\") {\n        uuid = action.payload.discount.uuid;\n      }\n      return state.setIn([model, \"byId\", action.payload.estimateId], removeDiscount(estimateRecord, uuid));\n\n    case estimateActions.ADD_DISCOUNT:\n      estimateRecord = state.getIn([model, \"byId\", action.payload.estimateId]);\n\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateId],\n        addDiscount(estimateRecord, action.payload.discount),\n      );\n\n    case estimateActions.UPDATE_DISCOUNT:\n      estimateRecord = state.getIn([model, \"byId\", action.payload.estimateId]);\n\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateId],\n        updateDiscount(estimateRecord, action.payload.discount),\n      );\n\n    case estimateActions.UPDATE_BASE_TOTAL:\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateId],\n        updateBaseTotal(state, { estimateId: action.payload.estimateId }),\n      );\n\n    case estimateActions.UPDATE_DISCOUNT_TOTAL:\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateId],\n        updateDiscountTotal(state, { estimateId: action.payload.estimateId }),\n      );\n\n    case estimateActions.UPDATE_TAX_TOTAL:\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateId],\n        updateTaxTotal(state, { estimateId: action.payload.estimateId }),\n      );\n\n    case estimateActions.UPDATE_PAYMENT_TERM_TOTAL:\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateId],\n        updatePaymentTermTotal(state, { estimateId: action.payload.estimateId }),\n      );\n\n    case estimateActions.DUPLICATE_ESTIMATE:\n      let record = state.getIn([model, \"byId\", action.payload.estimateId]);\n      const unsavedId = state.getIn([model, \"unsavedId\"]);\n      record = record.set(\"id\", unsavedId);\n      record = record.set(\"name\", `Copy of ${record.name}`);\n      // Remove one_look metadata from the duplicate to allow new finance applications\n      if (record.metadata && record.metadata.has(\"one_look\")) {\n        record = record.set(\"metadata\", record.metadata.delete(\"one_look\"));\n      }\n      state = state.setIn([model, \"byId\", record.id], record);\n      state = estimateGroupReducer(state, estimateGroupActions.Actions.duplicateGroups(record.id, record.group_ids));\n      state = estimateFinanceOptionReducer(\n        state,\n        estimateFinanceOptionActions.Actions.duplicateEstimateFinanceOptions(record.id, record.finance_option_ids),\n      );\n\n      return state.setIn([model, \"unsavedId\"], unsavedId - 1);\n\n    case estimateActions.EDIT_NAME:\n      return state.setIn([model, \"byId\", action.payload.estimateId, \"name\"], action.payload.name);\n\n    case estimateActions.ADD_FINANCE_OPTION_ID:\n      estimateRecord = estimate(state, { estimateId: action.payload.estimateId });\n      const addFinanceOptionIds = estimateRecord.finance_option_ids.push(action.payload.financeOptionId);\n      return state.setIn([model, \"byId\", action.payload.estimateId, \"finance_option_ids\"], addFinanceOptionIds);\n\n    case estimateActions.SET_ESTIMATE_FINANCE_OPTIONS:\n      estimateRecord = estimate(state, { estimateId: action.payload.estimateId });\n      estimateRecord.finance_option_ids.forEach((foId) => {\n        state = estimateFinanceOptionReducer(\n          state,\n          estimateFinanceOptionActions.Actions.calculateFinanceOption(action.payload.estimateId, foId),\n        );\n      });\n\n      return state;\n\n    case estimateActions.FETCH_CALCULATIONS:\n      action.payload.financeOptionIds.forEach((id: number) => {\n        state = state.setIn(\n          [model, \"calculatedFinancingByFinancedAmount\", action.payload.financedAmount, id],\n          calculatedFinancingFromJSON({ loading: true }),\n        );\n      });\n\n      return state;\n\n    case estimateActions.RECEIVE_CALCULATIONS:\n      action.payload.calculations.forEach((calculation) => {\n        state = state.setIn(\n          [model, \"calculatedFinancingByFinancedAmount\", action.payload.financedAmount, calculation.finance_option_id],\n          calculatedFinancingFromJSON({ ...calculation, loading: false }),\n        );\n      });\n\n      return state;\n\n    case estimateActions.SET_CALCULATIONS_ERROR:\n      const error = action.payload.errors.join(\", \");\n      action.payload.financeOptionIds.forEach((foid) => {\n        let fo = state.getIn([model, \"calculatedFinancingByFinancedAmount\", action.payload.financedAmount, foid]);\n        fo = fo.merge({ error: error, loading: false });\n        state = state.setIn([model, \"calculatedFinancingByFinancedAmount\", action.payload.financedAmount, foid], fo);\n      });\n\n      return state;\n\n    case estimateActions.SET_ESTIMATE_SIGNED_DOCUMENTS:\n      return state.setIn(\n        [model, \"estimateDocumentsByJobId\", action.payload.jobId],\n        action.payload.estimateSignedDocuments,\n      );\n\n    case estimateActions.FETCH_ESTIMATE_COMMISSION:\n      return state.setIn([model, \"calculatedCommission\"], estimateCommissionFromJSON({ loading: true }));\n\n    case estimateActions.RECEIVE_ESTIMATE_COMMISSION:\n      return state.setIn(\n        [model, \"calculatedCommission\"],\n        estimateCommissionFromJSON({ ...action.payload.commissionData, loading: false }),\n      );\n\n    case estimateActions.RESET_DISCOUNTS: {\n      const { estimateId } = action.payload;\n      estimateRecord = state.getIn([model, \"byId\", estimateId]);\n      estimateRecord = estimateRecord.set(\"discounts\", List());\n\n      return state.setIn([model, \"byId\", estimateId], estimateRecord);\n    }\n\n    case estimateActions.RESET_PAYMENT_TERMS: {\n      const { estimateId } = action.payload;\n      return state.setIn([model, \"byId\", estimateId, \"payment_terms\"], paymentTermFromJSON({}));\n    }\n\n    case estimateActions.UPDATE_METADATA: {\n      const { estimateId, metadataName, metadata } = action.payload;\n\n      return state.setIn([model, \"byId\", estimateId, \"metadata\", metadataName], metadata);\n    }\n\n    default:\n      return state;\n  }\n};\n","import { PaymentRequestRecord } from \"app2/src/records/PaymentRequest\";\nimport { RootState } from \"app2/src/reducers\";\n\n/**\n * Loads the paymentRequest\n *\n * @param {RootState} state The RootState\n * @param {{paymentRequestId: number}} options\n * @returns {PaymentRequestRecord} PaymentRequestRecord\n */\nexport const paymentRequest = (state: RootState, props: any): PaymentRequestRecord =>\n  state.getIn([\"paymentRequests\", \"byId\", props.paymentRequestId]);\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport {\n  ICrmUserIndexResponse,\n  CrmUserRecord,\n  ICrmUserResponse,\n  CrmUserType,\n} from \"app2/src/records/integrations/CrmUser\";\nimport { CamelToSnake } from \"app2/src/helpers/Format\";\n\nexport interface IIntegrationOptions {\n  orgId: number;\n  userType: CrmUserType;\n  modelName?: string;\n}\n\nexport const url = \"api/v1/orgs/:id/:userType\";\n\nexport const loadByOrg = (\n  options: IIntegrationOptions,\n  queryParams: QueryParamsRecord,\n): Promise<ICrmUserIndexResponse> => {\n  const actionUrl = url\n    .replace(\":id\", options.orgId.toString())\n    .replace(\":userType\", `${CamelToSnake(options.userType, false)}s`);\n\n  return fetcher.get<ICrmUserIndexResponse>(actionUrl, queryParams.toJSON());\n};\n\nexport const updateUser = (user: CrmUserRecord): Promise<ICrmUserResponse> => {\n  const actionUrl =\n    url.replace(\":id\", user.org_id.toString()).replace(\":userType\", `${CamelToSnake(user.type, false)}s`) +\n    `/${user.id}`;\n\n  return fetcher.patch<ICrmUserResponse>(actionUrl, user.toJSON());\n};\n","import { ThunkAction } from \"redux-thunk\";\nimport { List } from \"immutable\";\nimport { ActionsUnion, createAction } from \"./Utils\";\nimport { ICrmUserData, CrmUserRecord } from \"app2/src/records/integrations/CrmUser\";\nimport { loadByOrg, updateUser, IIntegrationOptions } from \"app2/src/api/crmUser.service\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { Actions as PaginationActions } from \"app2/src/reducers/pagination.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { RootState, RootActions } from \".\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nexport interface IAuthorizeReponse {\n  authorized: boolean;\n  id: number;\n}\n\n// SINGLE\nexport const FETCH_CRM_USER = \"@crmUsers/FETCH_CRM_USER\";\nexport const RECEIVE_CRM_USER = \"@crmUsers/RECEIVE_CRM_USER\";\nexport const SET_CRM_USER_LOADED = \"@crmUsers/SET_CRM_USER_LOADED\";\n// MULTIPLE\nexport const RECEIVE_CRM_USERS = \"@crmUsers/RECEIVE_CRM_USERS\";\n\nexport const Actions = {\n  // SINGLE\n  fetchCrmUser: (id: number) => createAction(FETCH_CRM_USER, { id }),\n  receiveCrmUser: (crmUser: ICrmUserData) => createAction(RECEIVE_CRM_USER, { crmUser }),\n  setCrmUserLoaded: (id: number) => createAction(SET_CRM_USER_LOADED, { id }),\n  // MULTIPLE\n  receiveCrmUsers: (crmUsers: ICrmUserData[]) => createAction(RECEIVE_CRM_USERS, { crmUsers }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, RootActions>;\n\nexport const AsyncActions = {\n  queryUsers: (options: IIntegrationOptions, queryParams: QueryParamsRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      const model = options.modelName || options.userType;\n      try {\n        dispatch(PaginationActions.fetchPage(model, queryParams));\n\n        const result = await loadByOrg(options, queryParams);\n        const pageData = {\n          ids: List(_.pluck(result.crm_users, \"id\")),\n          pagination: result.meta.pagination,\n        };\n        dispatch(Actions.receiveCrmUsers(result.crm_users));\n        dispatch(PaginationActions.receivePage(model, queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(PaginationActions.receivePageError(model, queryParams, errors));\n      }\n    };\n  },\n  updateUser: (crmUser: CrmUserRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(Actions.fetchCrmUser(crmUser.id));\n\n        const result = await updateUser(crmUser);\n        dispatch(Actions.receiveCrmUser(result.crm_user));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"User updated successfully\"));\n      } catch (response) {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, handleErrors(response)));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { baseCleanProps } from \"app2/src/api/Api\";\nimport { fetcher } from \"../helpers/Fetcher\";\nimport { ITokenData, TokenRecord, TokenKind } from \"../records/Token\";\n\nexport interface ITokenResponse {\n  token: ITokenData;\n}\n\nclass TokenService {\n  public url = \"api/v1/orgs/:org_id/tokens\";\n\n  public loadByKind(orgId: number, tokenKind: TokenKind, parentTokenLoad: boolean): Promise<ITokenResponse> {\n    const params: { parent_token_load?: boolean } = {};\n    if (parentTokenLoad) {\n      params.parent_token_load = parentTokenLoad;\n    }\n    const actionUrl = fetcher.joinUrls(this.url.replace(\":org_id\", orgId.toString()), tokenKind);\n\n    return fetcher.get(actionUrl, params);\n  }\n\n  public loadAuthorized(orgId: number): Promise<ITokenResponse> {\n    const actionUrl = fetcher.joinUrls(this.url.replace(\":org_id\", orgId.toString()), \"authorized\");\n\n    return fetcher.get(actionUrl);\n  }\n\n  public create(token: TokenRecord): Promise<ITokenResponse> {\n    const actionUrl = this.url.replace(\":org_id\", token.org_id.toString());\n\n    return fetcher.post(actionUrl, token.toJS());\n  }\n\n  public update(token: TokenRecord): Promise<ITokenResponse> {\n    const actionUrl = fetcher.joinUrls(this.url.replace(\":org_id\", token.org_id.toString()), token.kind);\n\n    return fetcher.patch(actionUrl, cleanProps(token));\n  }\n\n  public deleteByKind(orgId: number, tokenKind: TokenKind): Promise<ITokenResponse> {\n    const actionUrl = fetcher.joinUrls(this.url.replace(\":org_id\", orgId.toString()), tokenKind);\n\n    return fetcher.delete<any>(actionUrl);\n  }\n}\n\nexport const cleanProps = (token: TokenRecord): ITokenData => {\n  const tokenParams = baseCleanProps(token.toJS());\n\n  return tokenParams as any as ITokenData;\n};\n\nexport const tokenService = new TokenService();\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IEstimateTemplateData, EstimateTemplateRecord } from \"app2/src/records/EstimateTemplate\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { IMetaPaginationData } from \"app2/src/records/MetaPagination\";\nimport { List } from \"immutable\";\nimport { CamelToSnakeKeys } from \"app2/src/helpers/Format\";\nimport { baseCleanProps, listParams } from \"app2/src/api/Api\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport interface IEstimateTemplateIndexResponse {\n  estimate_templates: IEstimateTemplateData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nexport interface IEstimateTemplateResponse {\n  estimate_template?: IEstimateTemplateData;\n}\n\nexport interface IEstimateTemplateOptions {\n  id: number;\n  estimateTemplateIds?: List<number>;\n  folderId?: number;\n}\n\nconst url = \"api/v1/orgs/:id/estimate_templates\";\n\nexport const list = (\n  options: IEstimateTemplateOptions,\n  queryParams: QueryParamsRecord = new QueryParamsRecord(),\n): Promise<IEstimateTemplateIndexResponse> => {\n  const actionUrl = url.replace(\":id\", options.id.toString());\n  const params = listParams(queryParams);\n\n  if (options.folderId && options.folderId !== 0) {\n    params.folder_id = options.folderId;\n  }\n\n  if (options.estimateTemplateIds) {\n    params[\"estimate_template_ids[]\"] = options.estimateTemplateIds.toArray();\n  }\n\n  const parameters = queryParams.get(\"parameters\")?.toJS() as any;\n  if (parameters?.kind) {\n    params[\"kind[]\"] = parameters.kind;\n  }\n\n  return fetcher.get<IEstimateTemplateIndexResponse>(actionUrl, params);\n};\n\nexport const updateOrCreate = (estimateTemplate: EstimateTemplateRecord): Promise<IEstimateTemplateResponse> => {\n  if (estimateTemplate.id > 0) {\n    return update(estimateTemplate);\n  } else {\n    return create(estimateTemplate);\n  }\n};\n\nexport const create = (estimateTemplate: EstimateTemplateRecord): Promise<IEstimateTemplateResponse> => {\n  const actionUrl = urlSetup(estimateTemplate);\n  return fetcher.post<IEstimateTemplateResponse>(actionUrl, cleanProps(estimateTemplate));\n};\n\nexport const update = (estimateTemplate: EstimateTemplateRecord): Promise<IEstimateTemplateResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(estimateTemplate), estimateTemplate.id.toString());\n  return fetcher.patch(actionUrl, cleanProps(estimateTemplate));\n};\n\nexport const destroy = (estimateTemplate: EstimateTemplateRecord): Promise<IEstimateTemplateResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(estimateTemplate), estimateTemplate.id.toString());\n  return fetcher.delete(actionUrl);\n};\n\nexport const cleanProps = (estimateTemplate: EstimateTemplateRecord): IEstimateTemplateData => {\n  const estimateTemplateParams = baseCleanProps(CamelToSnakeKeys(estimateTemplate.toJS()));\n\n  if (isNullOrUndefined(estimateTemplateParams.folder_id)) {\n    delete estimateTemplateParams.folder_id;\n  }\n\n  return estimateTemplateParams;\n};\n\nexport const urlSetup = (estimateTemplate: EstimateTemplateRecord): string => {\n  return url.replace(\":id\", estimateTemplate.orgId.toString());\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { EstimateTemplateRecord, IEstimateTemplateData } from \"../records/EstimateTemplate\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { List } from \"immutable\";\nimport { list, create, update, destroy, IEstimateTemplateOptions } from \"app2/src/api/estimateTemplate.service\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState, ThunkResult } from \"app2/src/reducers\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { IPageData, QueryParamsRecord } from \"app2/src/records/Page\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { estimateTemplate, estimateTemplatesSelectedIds } from \"app2/src/selectors/estimateTemplate.selectors\";\nimport { dirtyIds } from \"app2/src/selectors/pagination.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\n// SINGLE\nexport const FETCH_ESTIMATE_TEMPLATE = \"@estimateTemplates/FETCH_ESTIMATE_TEMPLATE\";\nexport const RECEIVE_ESTIMATE_TEMPLATE = \"@estimateTemplates/RECEIVE_ESTIMATE_TEMPLATE\";\nexport const RESET_ESTIMATE_TEMPLATE = \"@estimateTemplates/RESET_ESTIMATE_TEMPLATE\";\nexport const SET_ESTIMATE_TEMPLATE_LOADED = \"@estimateTemplates/SET_ESTIMATE_TEMPLATE_LOADED\";\nexport const DESTROY_ESTIMATE_TEMPLATE = \"@estimateTemplates/DESTROY_ESTIMATE_TEMPLATE\";\nexport const EDIT_ESTIMATE_TEMPLATE = \"@estimateTemplates/EDIT_ESTIMATE_TEMPLATE\";\n// MULTIPLE\nexport const FETCH_ESTIMATE_TEMPLATES = \"@estimateTemplates/FETCH_ESTIMATE_TEMPLATES\";\nexport const RECEIVE_ESTIMATE_TEMPLATES = \"@estimateTemplates/RECEIVE_ESTIMATE_TEMPLATES\";\nexport const SET_ESTIMATE_TEMPLATES_LOADED = \"@estimateTemplates/SET_ESTIMATE_TEMPLATES_LOADED\";\nexport const BATCH_EDIT_ESTIMATE_TEMPLATE = \"@estimateTemplates/BATCH_EDIT_ESTIMATE_TEMPLATE\";\nexport const BATCH_REMOVE_IDS = \"@estimateTemplates/BATCH_REMOVE_IDS\";\n\nexport const Actions = {\n  // SINGLE\n  fetchEstimateTemplate: (id: number) => createAction(FETCH_ESTIMATE_TEMPLATE, { id }),\n  receiveEstimateTemplate: (estimateTemplate: IEstimateTemplateData) =>\n    createAction(RECEIVE_ESTIMATE_TEMPLATE, { estimateTemplate }),\n  resetEstimateTemplate: (id: number) => createAction(RESET_ESTIMATE_TEMPLATE, { id }),\n  setEstimateTemplateLoaded: (id: number) => createAction(SET_ESTIMATE_TEMPLATE_LOADED, { id }),\n  destroyEstimateTemplate: (id: number) => createAction(DESTROY_ESTIMATE_TEMPLATE, { id }),\n  editSortOrder: (id: number, sortOrder: number) =>\n    createAction(EDIT_ESTIMATE_TEMPLATE, { id, name: \"sortOrder\", value: sortOrder }),\n  editSelected: (id: number, selected: boolean) =>\n    createAction(EDIT_ESTIMATE_TEMPLATE, { id, name: \"selected\", value: selected }),\n  editName: (id: number, name: string) => createAction(EDIT_ESTIMATE_TEMPLATE, { id, name: \"name\", value: name }),\n  // MULTIPLE\n  fetchEstimateTemplates: (ids: List<number>) => createAction(FETCH_ESTIMATE_TEMPLATES, { ids }),\n  receiveEstimateTemplates: (estimateTemplates: IEstimateTemplateData[]) =>\n    createAction(RECEIVE_ESTIMATE_TEMPLATES, { estimateTemplates }),\n  setEstimateTemplatesLoaded: (ids: List<number>) => createAction(SET_ESTIMATE_TEMPLATES_LOADED, { ids }),\n  batchEditSelected: (ids: List<number>, selected: boolean) =>\n    createAction(BATCH_EDIT_ESTIMATE_TEMPLATE, { ids, name: \"selected\", value: selected }),\n  batchEditFolderId: (ids: List<number>, folderId: number) =>\n    createAction(BATCH_EDIT_ESTIMATE_TEMPLATE, { ids, name: \"folderId\", value: folderId }),\n  batchEditSortOrder: (ids: List<number>, sortOrder: number) =>\n    createAction(BATCH_EDIT_ESTIMATE_TEMPLATE, { ids, name: \"sortOrder\", value: sortOrder }),\n  batchRemoveIds: (ids: List<number>) => createAction(BATCH_REMOVE_IDS, { ids }),\n};\n\nexport const AsyncActions = {\n  listEstimateTemplates: (\n    options: Partial<IEstimateTemplateOptions>,\n    queryParams: QueryParamsRecord,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const mergedOptions = setOptionsId(options, getState());\n\n      dispatch(paginationActions.Actions.fetchPage(\"estimateTemplate\", queryParams));\n\n      try {\n        const response = await list(mergedOptions, queryParams);\n        dispatch(Actions.receiveEstimateTemplates(response.estimate_templates));\n        const pageData: Partial<IPageData> = {\n          ids: List(response.estimate_templates.map((estimateTemplate: IEstimateTemplateData) => estimateTemplate.id)),\n          pagination: response.meta.pagination,\n        };\n        dispatch(paginationActions.Actions.receivePage(\"estimateTemplate\", queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response, dispatch);\n        dispatch(paginationActions.Actions.receivePageError(\"estimateTemplate\", queryParams, errors));\n      }\n    };\n  },\n  createEstimateTemplate: (estimateTemplate: EstimateTemplateRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const response = await create(estimateTemplate);\n        dispatch(Actions.receiveEstimateTemplate(response.estimate_template));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Created estimate template successfully\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setEstimateTemplateLoaded(estimateTemplate.id));\n      }\n    };\n  },\n  destroyEstimateTemplate: (estimateTemplate: EstimateTemplateRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchEstimateTemplate(estimateTemplate.id));\n\n      try {\n        await destroy(estimateTemplate);\n        dispatch(Actions.destroyEstimateTemplate(estimateTemplate.id));\n        await dispatch(AsyncActions.checkPageEmpty(estimateTemplate.folderId));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Estimate template successfully deleted\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setEstimateTemplateLoaded(estimateTemplate.id));\n      }\n    };\n  },\n  batchUpdateEstimateTemplate: (estimateTemplateIds: List<number>, reject = false): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const promises = [];\n      dispatch(Actions.fetchEstimateTemplates(estimateTemplateIds));\n\n      estimateTemplateIds.forEach((estimateTemplateId) => {\n        const updatedEstimateTemplate = estimateTemplate(getState(), { estimateTemplateId });\n        promises.push(update(updatedEstimateTemplate));\n      });\n\n      try {\n        const responses = await Promise.all(promises);\n        const estimateTemplates = responses.map((response) => response.estimate_template);\n        dispatch(Actions.receiveEstimateTemplates(estimateTemplates));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved estimate template successfully\"));\n      } catch (response) {\n        dispatch(Actions.setEstimateTemplatesLoaded(estimateTemplateIds));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, [\"Update failed, please try again.\"]));\n        if (reject) {\n          return Promise.reject();\n        }\n      }\n    };\n  },\n  onSortEnd: (oldIndex: number, newIndex: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      await dispatch(paginationActions.AsyncActions.onSortEnd(\"estimateTemplate\", oldIndex, newIndex, [\"sortOrder\"]));\n\n      dispatch(AsyncActions.batchUpdateEstimateTemplate(dirtyIds(getState())));\n      dispatch(paginationActions.Actions.setDirtyIds(null));\n    };\n  },\n  moveEstimateTemplates: (folderId: number): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const estimateTemplateIds = estimateTemplatesSelectedIds(getState(), {});\n      const estimateTemplateRecord = estimateTemplate(getState(), { estimateTemplateId: estimateTemplateIds.first() });\n\n      dispatch(Actions.batchEditFolderId(estimateTemplateIds, folderId));\n      try {\n        await dispatch(AsyncActions.batchUpdateEstimateTemplate(estimateTemplateIds, true));\n\n        dispatch(Actions.batchRemoveIds(estimateTemplateIds));\n        await dispatch(AsyncActions.checkPageEmpty(estimateTemplateRecord.folderId));\n      } catch {\n        dispatch(Actions.batchEditFolderId(estimateTemplateIds, estimateTemplateRecord.folderId));\n      }\n    };\n  },\n  checkPageEmpty: (folderId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      return paginationActions.checkPageEmpty(getState(), \"estimateTemplate\", (newQueryParams) =>\n        dispatch(\n          AsyncActions.listEstimateTemplates(\n            {\n              folderId,\n            },\n            newQueryParams,\n          ),\n        ),\n      );\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nconst setOptionsId = (options: Partial<IEstimateTemplateOptions>, state: RootState): IEstimateTemplateOptions => {\n  if (isNullOrUndefined(options.id)) {\n    options.id = currentOrgId(state);\n  }\n\n  return options as IEstimateTemplateOptions;\n};\n","import * as financeOptionActions from \"./financeOption.actions\";\nimport { FinanceOptionRecord, fromJSON } from \"app2/src/records/FinanceOption\";\nimport { Map, Record, List } from \"immutable\";\nimport { RootState, RootActions, InitRootState } from \"app2/src/reducers\";\n\nexport interface IOrgFinanceOptionsRecord {\n  financeOptions: List<number>;\n  errors: List<string>;\n  loading: boolean;\n}\nexport const OrgFinanceOptionsRecord: Record.Factory<IOrgFinanceOptionsRecord> = Record<IOrgFinanceOptionsRecord>({\n  financeOptions: List<number>(),\n  errors: List<string>(),\n  loading: false,\n});\n\nexport const FinanceOptionStateRecord = Record({\n  byId: Map<number, FinanceOptionRecord>(),\n  byOrgId: Map<number, List<typeof OrgFinanceOptionsRecord>>(),\n});\n\nexport const initialState = FinanceOptionStateRecord();\nexport type FinanceOptionState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.getIn([\"orgs\", \"financeOptions\"])) {\n    state = state.setIn([\"orgs\", \"financeOptions\"], initialState);\n  }\n  switch (action.type) {\n    case financeOptionActions.RECEIVE_FINANCE_OPTION:\n      const financeOption = fromJSON({ ...action.payload, loading: false });\n\n      if (!state.getIn([\"orgs\", \"financeOptions\", \"byOrgId\", financeOption.org_id])) {\n        state = state.setIn([\"orgs\", \"financeOptions\", \"byOrgId\", financeOption.org_id], OrgFinanceOptionsRecord({}));\n      }\n\n      return state.setIn([\"orgs\", \"financeOptions\", \"byId\", financeOption.id], financeOption).setIn(\n        [\"orgs\", \"financeOptions\", \"byOrgId\", financeOption.org_id, \"financeOptions\"],\n        //@ts-ignore\n        state\n          .getIn([\"orgs\", \"financeOptions\", \"byOrgId\", financeOption.org_id, \"financeOptions\"], List<number>())\n          .push(financeOption.id)\n          .toSet()\n          .toList(),\n      );\n    case financeOptionActions.RECEIVE_FINANCE_OPTION_ERROR:\n      return state\n        .setIn(\n          [\"orgs\", \"financeOptions\", \"byId\", action.payload.financeOptionId, \"errors\"],\n          List<string>(action.payload.errors),\n        )\n        .setIn([\"orgs\", \"financeOptions\", \"byId\", action.payload.financeOptionId, \"loading\"], false);\n    case financeOptionActions.FETCH_FINANCE_OPTION:\n      if (state.getIn([\"orgs\", \"financeOptions\", \"byId\", action.payload.financeOptionId])) {\n        return state.setIn([\"orgs\", \"financeOptions\", \"byId\", action.payload.financeOptionId, \"loading\"], true);\n      }\n\n      return state.setIn(\n        [\"orgs\", \"financeOptions\", \"byId\", action.payload.financeOptionId],\n        fromJSON({ id: action.payload.financeOptionId, org_id: action.payload.orgId, loading: true }),\n      );\n    case financeOptionActions.FETCH_ORG_FINANCE_OPTIONS:\n      if (!state.getIn([\"orgs\", \"financeOptions\", \"byOrgId\", action.payload])) {\n        return state.setIn(\n          [\"orgs\", \"financeOptions\", \"byOrgId\", action.payload],\n          OrgFinanceOptionsRecord({ loading: true }),\n        );\n      }\n\n      return state.setIn([\"orgs\", \"financeOptions\", \"byOrgId\", action.payload, \"loading\"], true);\n    case financeOptionActions.RECEIVE_ORG_FINANCE_OPTIONS:\n      state = state.setIn([\"orgs\", \"financeOptions\", \"byOrgId\", action.payload.orgId, \"financeOptions\"], List([]));\n      action.payload.financeOptions.forEach((d) => {\n        state = reducer(state, financeOptionActions.Actions.receiveFinanceOption(d));\n      });\n\n      return state.setIn([\"orgs\", \"financeOptions\", \"byOrgId\", action.payload.orgId, \"loading\"], false);\n    case financeOptionActions.RECEIVE_ORG_ERRORS:\n      return state\n        .setIn(\n          [\"orgs\", \"financeOptions\", \"byOrgId\", action.payload.orgId, \"errors\"],\n          List<string>(action.payload.errors),\n        )\n        .setIn([\"orgs\", \"financeOptions\", \"byOrgId\", action.payload.orgId, \"loading\"], false);\n    case financeOptionActions.REMOVE_FINANCE_OPTION:\n      return state.removeIn([\"orgs\", \"financeOptions\", \"byId\", action.payload]);\n    case financeOptionActions.REMOVE_ORG_FINANCE_OPTION:\n      return state.updateIn(\n        [\"orgs\", \"financeOptions\", \"byOrgId\", action.payload.orgId, \"financeOptions\"],\n        (financeOptions: List<number>) => {\n          return financeOptions.filter((d) => d !== action.payload.financeOptionId);\n        },\n      );\n    default:\n      return state;\n  }\n};\n","import * as orgActions from \"./org.actions\";\nimport { Map, Record, List, fromJS } from \"immutable\";\nimport { OrgRecord, fromJSON } from \"app2/src/records/OrgRecord\";\nimport {\n  initialState as FinanceOptionInitialState,\n  reducer as financeOptionReducer,\n} from \"./org/financeOption.reducer\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { mergeDeepOverwriteArrays } from \"../helpers/ImmutableData\";\nimport { Nullable } from \"app2/src/records\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\n\nexport const OrgStateRecord = Record({\n  orgsById: Map<string, typeof OrgRecord>(),\n  lastSavedOrgsById: Map<string, typeof OrgRecord>(),\n  // Org ID of the current view, Job page = job.org_id, Admin page = org in current view, otherwise null\n  currentOrgId: null as Nullable<number>,\n  financeOptions: FinanceOptionInitialState,\n});\n\nexport const initialState = OrgStateRecord();\n\nexport type OrgState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"orgs\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n  switch (action.type) {\n    case orgActions.SET_CURRENT_ORG_ID:\n      return state.setIn([model, \"currentOrgId\"], action.payload.id);\n\n    case orgActions.SET_ORG:\n      action.payload.loading = false;\n      const immutableOrg = fromJSON(action.payload);\n      // if this org already exists, we should merge the data in so as to\n      // not overwrite any data\n      if (state.getIn([model, \"orgsById\", action.payload.id])) {\n        const currentOrg = state.getIn([model, \"orgsById\", action.payload.id]);\n        let mergedOrg = mergeDeepOverwriteArrays(currentOrg, fromJS(action.payload));\n        mergedOrg = fromJSON(mergedOrg.toJS());\n        state = state.setIn([model, \"lastSavedOrgsById\", action.payload.id], mergedOrg);\n        state = state.setIn([model, \"orgsById\", action.payload.id], mergedOrg);\n      } else {\n        state = state.setIn([model, \"lastSavedOrgsById\", action.payload.id], immutableOrg);\n        state = state.setIn([model, \"orgsById\", action.payload.id], immutableOrg);\n      }\n      return state;\n\n    case orgActions.RESET_ORG:\n      const orgIdReset = currentOrgId(state);\n      return state.setIn([model, \"orgsById\", orgIdReset], state.getIn([model, \"lastSavedOrgsById\", orgIdReset]));\n\n    case orgActions.FETCH_ORG:\n      if (state.getIn([model, \"orgsById\", action.payload])) {\n        return state.setIn([model, \"orgsById\", action.payload, \"loading\"], true);\n      }\n      return state.setIn([model, \"orgsById\", action.payload], fromJSON({ id: action.payload, loading: true }));\n\n    case orgActions.RECEIVE_ORG_ERRORS:\n      if (state.getIn([model, \"orgsById\", action.payload.id])) {\n        return state\n          .setIn([model, \"orgsById\", action.payload.id, \"errors\"], List<string>(action.payload.errors))\n          .setIn([model, \"orgsById\", action.payload.id, \"loading\"], false);\n      }\n      return state\n        .setIn([model, \"orgsById\", action.payload.id], fromJSON({ id: action.payload.id, loading: false }))\n        .setIn([model, \"orgsById\", action.payload.id, \"errors\"], List<string>(action.payload.errors));\n\n    case orgActions.UPDATE_SETTINGS_CONFIG:\n      let settingsConfig = state.getIn([model, \"orgsById\", action.payload.orgId, \"settings\", \"config\"]);\n      settingsConfig = settingsConfig.setIn(action.payload.path, action.payload.value);\n\n      return state.setIn([model, \"orgsById\", action.payload.orgId, \"settings\", \"config\"], settingsConfig);\n\n    case orgActions.UPDATE_PREF_CONFIG:\n      let prefConfig = state.getIn([model, \"orgsById\", action.payload.orgId, \"preferences\", \"config\"]);\n      prefConfig = prefConfig.setIn(action.payload.path, action.payload.value);\n\n      return state.setIn([model, \"orgsById\", action.payload.orgId, \"preferences\", \"config\"], prefConfig);\n\n    case orgActions.UPDATE_DOCUMENT_ORDER:\n      const orgId = currentOrgId(state);\n      return state.setIn(\n        [model, \"orgsById\", orgId, \"preferences\", \"config\", \"document_order\", action.payload.docType],\n        action.payload.list,\n      );\n\n    case orgActions.ADD_TO_DOCUMENT_ORDER:\n      const doc = action.payload.document;\n      const orgIdAdd = currentOrgId(state);\n      return state.updateIn(\n        [model, \"orgsById\", orgIdAdd, \"preferences\", \"config\", \"document_order\", action.payload.docType],\n        (list) => {\n          return list.push({\n            id: doc.id,\n            doc_type: \"org\",\n            file_name: doc.name,\n            filter_states: [],\n          });\n        },\n      );\n\n    case orgActions.RECEIVE_ORGS:\n      action.payload.orgs.forEach((o) => {\n        state = reducer(state, orgActions.Actions.setOrg(o));\n      });\n      return state;\n\n    case orgActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n\n    case orgActions.ADD_SIGNATURE_RECIPIENTS_INFO:\n      const stateRootPath = [\n        model,\n        \"orgsById\",\n        action.payload.orgId,\n        \"settings\",\n        \"config\",\n        \"signature_settings\",\n        \"signers\",\n      ];\n      const recipients = state.getIn(stateRootPath);\n\n      recipients.map((recipient, index) => {\n        switch (recipient.toJSON().signer) {\n          case \"job\":\n            state = state\n              .setIn(stateRootPath.concat([index, \"name\"]), action.payload.job.name)\n              .setIn(stateRootPath.concat([index, \"email\"]), action.payload.job.email);\n            break;\n          case \"salesrep\":\n            if (action.payload.job.assignments && action.payload.job.assignments.size > 0) {\n              const assignee = action.payload.job.assignments.toJSON()[0];\n              state = state\n                .setIn(\n                  stateRootPath.concat([index, \"name\"]),\n                  assignee.user?.first_name + \" \" + assignee.user?.last_name,\n                )\n                .setIn(stateRootPath.concat([index, \"email\"]), assignee.user.email);\n            }\n            break;\n        }\n        state = state.setIn(stateRootPath.concat([index, \"status\"]), \"created\");\n      });\n\n      return state;\n\n    case orgActions.UPDATE_SIGNATURE_RECIPIENT_INFO:\n      return state.setIn(\n        action.payload.event.rootPath.concat(action.payload.event.name.split(\".\")),\n        action.payload.event.value,\n      );\n    default:\n      return financeOptionReducer(state, action);\n  }\n};\n","import { AddressRecord } from \"app2/src/records/Address\";\nimport { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { JobQueryRecord } from \"../components/JobList/JobQuery\";\nimport { recordChanged } from \"../helpers/Record\";\nimport { JobRecord } from \"../records/Job\";\n\nexport const job = (state: RootState, props: any) => state.getIn([\"jobs\", \"byId\", props.jobId]);\nexport const currentJob = (state: RootState, _props?: any) => state.getIn([\"jobs\", \"byId\", currentJobId(state)]);\nexport const currentJobName = (state: RootState) => state.getIn([\"jobs\", \"byId\", currentJobId(state), \"name\"]);\nexport const currentJobOrgId = (state: RootState, _props?: any) =>\n  state.getIn([\"jobs\", \"byId\", currentJobId(state), \"org_id\"], 0);\nexport const currentJobId = (state: RootState, _props?: any) => state.getIn([\"jobs\", \"currentJobId\"]);\n\n/**\n * Loads the current job address\n *\n * @param {RootState} state The RootState\n * @returns {AddressRecord} AddressRecord\n */\nexport const currentJobAddress = (state: RootState): AddressRecord => currentJob(state).get(\"address\");\n\nexport const jobLoading = (state: RootState, _props?: any) =>\n  state.getIn([\"jobs\", \"byId\", currentJobId(state), \"loading\"]);\nexport const resourceDocuments = (state: RootState, _props?: any) =>\n  state.getIn([\"jobs\", \"byId\", currentJobId(state), \"config\", \"resource_documents\"], List());\nexport const selectedEstimateId = (state: RootState) => state.getIn([\"jobs\", \"selectedEstimateId\"]);\n/**\n * Loads the current job query\n *\n * @param {RootState} state The RootState\n * @returns {JobQueryRecord} JobQueryRecord\n */\nexport const jobQuery = (state: RootState): JobQueryRecord => state.getIn([\"jobs\", \"jobQuery\"]);\n/**\n * Loads the previously submitted job query\n *\n * @param {RootState} state The RootState\n * @returns {JobQueryRecord} JobQueryRecord\n */\nexport const lastSavedJobQuery = (state: RootState): JobQueryRecord => state.getIn([\"jobs\", \"lastSavedJobQuery\"]);\n/**\n * Loads the fields changed since the job filter menu was last opened\n *\n * @param {RootState} state The RootState\n * @returns {string[]} string[]\n */\nexport const lastChangesJobQuery = (state: RootState): string[] =>\n  Object.keys(state.getIn([\"jobs\", \"lastChangesJobQuery\"]).toJS());\n/**\n * Returns true if the previously submitted job query is different than the current job query\n *\n * @param {RootState} state The RootState\n * @returns {boolean} boolean\n */\nexport const jobQueryChanged = createSelector(\n  [jobQuery, lastSavedJobQuery],\n  (presentation: JobQueryRecord, lastSavedPresentation: JobQueryRecord) => {\n    return recordChanged(presentation, lastSavedPresentation);\n  },\n);\nexport const jobStates = (state: RootState, props: any) => state.getIn([\"jobs\", \"jobStates\"], List());\nexport const jobDocumentCount = (state: RootState, props: any) =>\n  state.getIn([\"jobs\", \"byId\", props.jobId, \"document_count\"]);\nexport const jobImageCount = (state: RootState, props: any) =>\n  state.getIn([\"jobs\", \"byId\", props.jobId, \"image_count\"]);\nexport const jobResourceIds = (state: RootState, _props?: any) => resourceDocuments(state).map((doc) => doc.get(\"id\"));\nexport const jobStats = (state: RootState) => state.getIn([\"jobs\", \"stats\"]);\nexport const sampleJobs = (state: RootState) => state.getIn([\"jobs\", \"sampleJobs\"]);\n\n/**\n * Checks if imageUuid passed in as a prop is a cover image on the currentJob\n *\n * @param {RootState} state The RootState\n * @param {{ imageUuid: string }} options\n * @returns {boolean} boolean\n */\nexport const coverImage = (state: RootState, props: any) =>\n  currentJob(state, props).get(\"cover_image_uuid\") === props.imageUuid;\n\n/**\n * Gets the job's assigned user id\n *\n * @param {RootState} state The RootState\n * @param {{jobId: number }} options\n * @returns user id\n */\nexport const jobAssignedUserId = createSelector([job], (job: JobRecord): number =>\n  job?.getIn([\"assignments\", 0, \"user\", \"id\"]),\n);\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IJobQueryStateData>): JobQueryStateRecord => {\n  const record: IJobQueryStateRecord = { ...(json as any) };\n\n  if (record.id === undefined) {\n    record.id = record.value;\n  }\n  return new JobQueryStateRecord(record);\n};\n\nexport interface IJobQueryStateData {\n  id: string;\n  label: string;\n  value: string;\n  color: string;\n}\n\nexport interface IJobQueryStateRecord {\n  id: string;\n  label: string;\n  value: string;\n  color: string;\n}\n\nexport const defaultJobQueryState = {\n  id: \"\",\n  label: \"\",\n  value: \"\",\n  color: \"\",\n};\n\nexport class JobQueryStateRecord\n  extends Record<IJobQueryStateRecord>(defaultJobQueryState)\n  implements IJobQueryStateRecord {}\n","import { endOfYear, sub, subMonths } from \"date-fns\";\nimport { List, Record } from \"immutable\";\nimport {\n  fromJSON as reactSelectRecordFromJSON,\n  ReactSelectRecord,\n  IReactSelectData,\n  IReactSelectRecord,\n} from \"@tberrysoln/rsf-form\";\nimport { fromJSON as jobQueryStateFromJSON } from \"./JobQueryState\";\n\nexport const fromJSON = (json: Partial<IJobQueryData>): JobQueryRecord => {\n  const record: IJobQueryRecord = { ...(json as any) };\n\n  if (json.state) {\n    record.state = jobStatesFromJSON(json.state);\n  } else {\n    record.state = List();\n  }\n\n  record.user = reactSelectRecordFromJSON(json.user || { id: -1, name: \"All assignees\" });\n  record.org = reactSelectRecordFromJSON(json.org || {});\n\n  return new JobQueryRecord(record);\n};\n\nexport const jobStatesFromJSON = (json: any): List<any> =>\n  List(\n    Object.entries(json).map(([key, data]: [string, any]) =>\n      jobQueryStateFromJSON({ label: data.pretty_name, value: key, color: data.color }),\n    ),\n  );\n\nexport const getJobQueryChanges = (jobQuery: JobQueryRecord): string[] => {\n  const defaultJobQuery = fromJSON({});\n  return jobQuery\n    .toSeq()\n    .filter((value, key) => {\n      if (key === \"state\" || key === \"org\" || key === \"user\") {\n        return !jobQuery.get(key).equals(defaultJobQuery.get(key));\n      }\n      return value !== defaultJobQuery.get(key);\n    })\n    .keySeq()\n    .toJS();\n};\n\nexport const calculateUpdatedSince = (jobQuery: JobQueryRecord | IJobQueryData): Date => {\n  const isYear = jobQuery.updated_since.length === Number.parseInt(jobQuery.updated_since).toString().length;\n\n  if (isYear) {\n    const year = parseInt(jobQuery.updated_since);\n    const since = new Date(year, 0, 1, 0, 0, 0, 0);\n    return since;\n  } else if (jobQuery.updated_since !== \"Custom\") {\n    // It is a number of months / days\n    const quantity = parseInt(jobQuery.updated_since);\n    const unit = jobQuery.updated_since.slice(quantity.toString().length);\n    const now = new Date();\n\n    return sub(now, { [unit]: quantity });\n  } else {\n    return jobQuery.filter_by_updated_since;\n  }\n};\n\nexport const calculateUpdatedBefore = (jobQuery: JobQueryRecord | IJobQueryData): Date => {\n  const isYear = jobQuery.updated_since.length === Number.parseInt(jobQuery.updated_since).toString().length;\n\n  if (isYear) {\n    const year = parseInt(jobQuery.updated_since);\n    const since = new Date(year, 0, 1, 0, 0, 0, 0);\n    return endOfYear(since);\n  } else if (jobQuery.updated_since !== \"Custom\") {\n    const today = new Date();\n    return today;\n  } else {\n    return jobQuery.filter_by_updated_before;\n  }\n};\n\nexport type SortOrderTypes = \"desc\" | \"asc\";\n\nexport interface IJobQueryData {\n  org: IReactSelectData;\n  user: IReactSelectData;\n  archived: boolean;\n  state: string[];\n  job_type: string;\n  sort_order: SortOrderTypes;\n  sort_by: string;\n  updated_since: string;\n  updated_before: string;\n  filter_by_updated_since: Date;\n  filter_by_updated_before: Date;\n  lead_source: string;\n}\n\nexport interface IJobQueryRecord {\n  org: IReactSelectRecord;\n  user: IReactSelectRecord;\n  archived: boolean;\n  state: List<string>;\n  job_type: string;\n  sort_order: SortOrderTypes;\n  sort_by: string;\n  updated_since: string;\n  updated_before: string;\n  filter_by_updated_since: Date;\n  filter_by_updated_before: Date;\n  lead_source: string;\n}\nexport const defaultJobQuery = {\n  org: reactSelectRecordFromJSON({}),\n  user: reactSelectRecordFromJSON({}),\n  archived: false,\n  state: List(),\n  job_type: \"\",\n  sort_order: \"desc\" as SortOrderTypes,\n  sort_by: \"jobs.updated_at\",\n  updated_since: \"6months\",\n  updated_before: null,\n  filter_by_updated_since: subMonths(new Date().setHours(0, 0, 0, 0), 6),\n  filter_by_updated_before: null,\n  lead_source: \"_allleads_\",\n};\n\nexport class JobQueryRecord extends Record<IJobQueryRecord>(defaultJobQuery) implements IJobQueryRecord {}\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IFinanceOptionValidationData>): FinanceOptionValidationRecord => {\n  const record: IFinanceOptionValidationRecord = { ...(json as any) };\n\n  return new FinanceOptionValidationRecord(record);\n};\n\nexport interface IFinanceOptionValidationData {\n  active: boolean;\n  min_amount: string;\n  max_amount: string;\n  min_payment: string;\n  state: string;\n}\n\nexport interface IFinanceOptionValidationRecord {\n  active: boolean;\n  min_amount: number;\n  max_amount: number;\n  min_payment: number;\n  state: string;\n}\n\nexport const defaultFinanceOptionValidationProps = {\n  active: false,\n  min_amount: 0,\n  max_amount: 0,\n  min_payment: 0,\n  state: \"\",\n};\n\nexport class FinanceOptionValidationRecord\n  extends Record<IFinanceOptionValidationRecord>(defaultFinanceOptionValidationProps)\n  implements IFinanceOptionValidationRecord\n{\n  public readonly active!: boolean;\n  public readonly min_amount!: number;\n  public readonly max_amount!: number;\n  public readonly min_payment!: number;\n\n  public constructor(values?: Partial<IFinanceOptionValidationRecord>) {\n    values ? super(values) : super();\n  }\n}\n","import { Record, List, Map } from \"immutable\";\nimport { Nullable } from \".\";\nimport { Finance } from \"financejs\";\nimport { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { Parser } from \"hot-formula-parser\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { EstimatePrototype, IEstimate } from \"app/src/Models/Estimate\";\nimport { fromJSON as validationFromJSON } from \"app2/src/records/FinanceOptionValidation\";\nimport * as config from \"react-global-configuration\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { ICalculatedFinancingData } from \"app2/src/records/CalculatedFinancing\";\nimport { JobRecord } from \"./Job\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport const fromJSON = (json: Partial<IFinanceOptionData>): FinanceOptionRecord => {\n  const record: IFinanceOptionRecord = { ...(json as any) };\n\n  if (json.validation && !Record.isRecord(json.validation)) {\n    record.validation = validationFromJSON(json.validation);\n  }\n\n  if (!json.validation) {\n    record.validation = validationFromJSON({});\n  }\n\n  return new FinanceOptionRecord(record);\n};\n\nexport const toJSON = (record: FinanceOptionRecord): Partial<any> => {\n  const jsonObj: any = record.toJSON() as any;\n\n  if (jsonObj.id < 0) {\n    delete jsonObj.id;\n  }\n\n  //@ts-ignore\n  if (jsonObj.loading !== undefined) {\n    //@ts-ignore\n    delete jsonObj.loading;\n  }\n\n  return jsonObj;\n};\n\nexport const hasRequiredApplicationData = (financeOption: FinanceOptionRecord, job: JobRecord): Array<string> => {\n  return [];\n};\n\nexport const filterByValidation = (\n  financeOptions: List<FinanceOptionRecord>,\n  estimate: EstimateRecord,\n  jobState: string,\n): List<FinanceOptionRecord> => {\n  return (financeOptions = financeOptions.filter((fo) => {\n    if (!fo.validation.active) {\n      return true;\n    }\n    let testBoolean = true;\n    const { min_amount, max_amount, min_payment, state } = fo.validation;\n    const { financed_amount } = estimate.payment_terms;\n\n    if (state !== \"\" && jobState !== state) {\n      testBoolean = false;\n    }\n\n    if (min_amount >= 0 && financed_amount < min_amount) {\n      testBoolean = false;\n    }\n\n    if (max_amount > 0 && financed_amount > max_amount) {\n      testBoolean = false;\n    }\n\n    if (min_payment >= 0 && calculateRate(fo, estimate) < min_payment) {\n      testBoolean = false;\n    }\n\n    return testBoolean;\n  }));\n};\n\nexport const filterByStatus = (financeOptions: List<FinanceOptionRecord>): List<FinanceOptionRecord> => {\n  return (financeOptions = financeOptions.filter((fo) => {\n    return fo.status === \"active\" || fo.status === \"active_range\";\n  }));\n};\n\nexport const range = (financeOptions: FinanceOptionRecord[], estimate: EstimateRecord) => {\n  let min = 0,\n    max = 0;\n\n  _.each(financeOptions, (fo, idx) => {\n    const rate = calculateRate(fo, estimate);\n\n    if (idx === 0) {\n      min = rate;\n    }\n    min = _.min([rate, min]);\n    max = _.max([rate, max]);\n  });\n\n  if (min === max) {\n    return `${CurrencyFormat(min, 0)}`;\n  } else {\n    return `${CurrencyFormat(min, 0)} - ${CurrencyFormat(max, 0)}`;\n  }\n};\n\nexport const setupForumulaParser = (estimate) => {\n  const parser = new Parser();\n  const keys = [\"subtotal\", \"total\", \"product_total\", \"taxable_amount\", \"labor_total\"];\n  _.each(keys, (k) => {\n    parser.setVariable(k, estimate[k]);\n  });\n  let financedAmount = 0;\n  if (estimate.payment_terms) {\n    financedAmount = estimate.payment_terms.financed_amount;\n  }\n  parser.setVariable(\"financed_amount\", financedAmount);\n  return parser;\n};\n\nexport const localCalculations = (\n  financeOptions: List<FinanceOptionRecord>,\n  estimate: EstimateRecord | IEstimate,\n): ICalculatedFinancingData[] => {\n  let financedAmount = 0;\n  if (Record.isRecord(estimate)) {\n    financedAmount = estimate.getIn([\"payment_terms\", \"financed_amount\"]);\n  } else {\n    financedAmount = estimate.payment_terms.financed_amount;\n  }\n  return financeOptions\n    .map((fo) => {\n      return {\n        monthly_payment: calculateRate(fo, estimate),\n        promo_payment: 0,\n        financed_amount: financedAmount,\n        finance_option_id: fo.id,\n        estimate_id: estimate.id,\n        error: \"\",\n      };\n    })\n    .toArray();\n};\n\nexport const calculateRate = (financeOption: FinanceOptionRecord, estimate: EstimateRecord | EstimatePrototype) => {\n  if (!financeOption) {\n    return 0;\n  }\n\n  let rate = 0;\n  if (_.isUndefined(financeOption.formula) || _.isNull(financeOption.formula) || financeOption.formula === \"\") {\n    if (financeOption.rate === 0) {\n      rate = roundToDecimals(estimate.payment_terms.financed_amount / financeOption.term, 0);\n    } else {\n      const finance = new Finance();\n      rate = roundToDecimals(\n        finance.AM(estimate.payment_terms.financed_amount, financeOption.rate, financeOption.term, 1),\n        0,\n      );\n    }\n  } else {\n    const parser = setupForumulaParser(estimate);\n    rate = roundToDecimals(parser.parse(financeOption.formula).result, 0);\n  }\n\n  return rate;\n};\n\nexport const rate = (financeOption: FinanceOptionRecord, estimate: EstimateRecord) => {\n  const rate = calculateRate(financeOption, estimate);\n\n  return `${CurrencyFormat(rate, 0)}`;\n};\n\nexport const getUrl = (financeOption: FinanceOptionRecord, estimate: EstimateRecord) => {\n  if (!financeOption) return \"\";\n\n  if (financeOption.provider === FinanceOptionProviders.get(0)) {\n    return financeOption.apply_now_url;\n  }\n\n  const id = `${estimate.uid}-${financeOption.org_uid}`;\n  return fetcher.joinUrls(config.get(\"APP_URL\"), \"finance_options\", id, \"apply\");\n};\n\nexport interface IFinanceOptionData {\n  id: number;\n  name: string;\n  estimate_id: number;\n  org_id: number;\n  org_uid: string;\n  provider: FinanceOptionProvider;\n  integrations_identifier: string;\n  rate: number;\n  sort_order: number;\n  status: FinanceOptionStatus;\n  term: number;\n  formula: string;\n  apply_now_url: string;\n  merchant_fee: number;\n  promo_fee: number;\n  promo_rate: number;\n  promo_term: number;\n  source: any;\n  validation: any;\n  loading?: boolean;\n\n  archive_number: string;\n  archived_at: Date;\n  archived: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\n// No good way to not duplicate things\nexport type FinanceOptionStatus = \"active\" | \"inactive\" | \"active_range\";\nexport const FinanceOptionStatuses: Array<FinanceOptionStatus> = [\"active\", \"inactive\", \"active_range\"];\n\n// No good way to not duplicate things\nexport type FinanceOptionProvider = \"\" | \"green_sky\" | \"fin_mkt\" | \"fin_mkt_offer\";\nexport const FinanceOptionProviders = List<FinanceOptionProvider>([\"\", \"green_sky\", \"fin_mkt\", \"fin_mkt_offer\"]);\nexport const DisabledCreationProviders = List<FinanceOptionProvider>([]);\nexport const PrequalificationProviders = List<FinanceOptionProvider>([]);\nexport const AsyncCalcFinanceOptionProviders = List<FinanceOptionProvider>([]);\nexport const LocalCalcFinanceOptionProviders = List<FinanceOptionProvider>([\"\", \"green_sky\"]);\n\nexport const formatStatus = (type: FinanceOptionStatus): string => {\n  switch (type) {\n    case \"active\":\n      return \"Active\";\n    case \"inactive\":\n      return \"Disabled\";\n    case \"active_range\":\n      return \"Active Range\";\n  }\n};\n\nexport interface IFinanceOptionRecord {\n  id: number;\n  name: string;\n  estimate_id: number;\n  org_id: number;\n  org_uid: string;\n  provider: FinanceOptionProvider;\n  integrations_identifier: string;\n  rate: number;\n  sort_order: number;\n  status: FinanceOptionStatus;\n  term: number;\n  formula: string;\n  apply_now_url: string;\n  merchant_fee: number;\n  promo_fee: number;\n  promo_rate: number;\n  promo_term: number;\n  source: any;\n  validation: any;\n  metadata: Map<any, any>;\n\n  loading: boolean;\n  errors: Nullable<List<string>>;\n\n  archive_number: Nullable<string>;\n  archived_at: Nullable<Date>;\n  archived: boolean;\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nexport const defaultFinanceOptionProps = {\n  id: 0,\n  name: \"\",\n  estimate_id: null,\n  org_id: 0,\n  org_uid: \"\",\n  provider: FinanceOptionProviders.get(0),\n  integrations_identifier: \"\",\n  rate: 0,\n  sort_order: 0,\n  status: FinanceOptionStatuses[0],\n  term: 0,\n  formula: \"\",\n  apply_now_url: \"\",\n  merchant_fee: 0,\n  promo_fee: 0,\n  promo_rate: 0,\n  promo_term: 0,\n  source: {},\n  validation: {},\n  metadata: Map(),\n  archive_number: \"\",\n  archived_at: null,\n  archived: false,\n  loading: false,\n  created_at: null,\n  updated_at: null,\n  errors: List<string>(),\n};\n\nexport class FinanceOptionRecord\n  extends Record<IFinanceOptionRecord>(defaultFinanceOptionProps)\n  implements IFinanceOptionRecord\n{\n  public readonly id!: number;\n  public readonly name!: string;\n  public readonly estimate_id!: number;\n  public readonly org_id!: number;\n  public readonly org_uid!: string;\n  public readonly provider!: FinanceOptionProvider;\n  public readonly integrations_identifier!: string;\n  public readonly rate!: number;\n  public readonly sort_order!: number;\n  public readonly status!: FinanceOptionStatus;\n  public readonly term!: number;\n  public readonly formula!: string;\n  public readonly apply_now_url!: string;\n  public readonly merchant_fee!: number;\n  public readonly promo_fee!: number;\n  public readonly promo_rate!: number;\n  public readonly promo_term!: number;\n  public readonly source!: any;\n  public readonly validation!: any;\n\n  public readonly loading!: boolean;\n  public readonly errors!: List<string>;\n\n  public readonly archive_number!: Nullable<string>;\n  public readonly archived_at!: Nullable<Date>;\n  public readonly archived!: boolean;\n\n  public readonly created_at!: Nullable<Date>;\n  public readonly updated_at!: Nullable<Date>;\n\n  public constructor(values?: Partial<IFinanceOptionRecord>) {\n    values ? super(values) : super();\n  }\n}\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.color.min\",[\"kendo.core.min\"],e)}(function(){!function(e,t,r){function n(e,f){var a,i;if(null==e||\"none\"==e)return null;if(e instanceof s)return e;if(e=e.toLowerCase(),a=o.exec(e))return e=\"transparent\"==a[1]?new u(1,1,1,0):n(h.namedColors[a[1]],f),e.match=[a[1]],e;if((a=/^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(e))?i=new l(r(a[1],16),r(a[2],16),r(a[3],16),1):(a=/^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(e))?i=new l(r(a[1]+a[1],16),r(a[2]+a[2],16),r(a[3]+a[3],16),1):(a=/^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(e))?i=new l(r(a[1],10),r(a[2],10),r(a[3],10),1):(a=/^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(e))?i=new l(r(a[1],10),r(a[2],10),r(a[3],10),t(a[4])):(a=/^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(e))?i=new u(t(a[1])/100,t(a[2])/100,t(a[3])/100,1):(a=/^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(e))&&(i=new u(t(a[1])/100,t(a[2])/100,t(a[3])/100,t(a[4]))),i)i.match=a;else if(!f)throw Error(\"Cannot parse color: \"+e);return i}function f(e,t,r){for(r||(r=\"0\"),e=e.toString(16);t>e.length;)e=\"0\"+e;return e}function a(e,t,r){return 0>r&&(r+=1),r>1&&(r-=1),1/6>r?e+6*(t-e)*r:.5>r?t:2/3>r?e+(t-e)*(2/3-r)*6:e}var o,i,s,u,l,d,c,h=function(e){var t,r,n,f,a,o=this,i=h.formats;if(1===arguments.length)for(e=o.resolveColor(e),f=0;i.length>f;f++)t=i[f].re,r=i[f].process,n=t.exec(e),n&&(a=r(n),o.r=a[0],o.g=a[1],o.b=a[2]);else o.r=arguments[0],o.g=arguments[1],o.b=arguments[2];o.r=o.normalizeByte(o.r),o.g=o.normalizeByte(o.g),o.b=o.normalizeByte(o.b)};h.prototype={toHex:function(){var e=this,t=e.padDigit,r=e.r.toString(16),n=e.g.toString(16),f=e.b.toString(16);return\"#\"+t(r)+t(n)+t(f)},resolveColor:function(e){return e=e||\"black\",\"#\"==e.charAt(0)&&(e=e.substr(1,6)),e=e.replace(/ /g,\"\"),e=e.toLowerCase(),e=h.namedColors[e]||e},normalizeByte:function(e){return 0>e||isNaN(e)?0:e>255?255:e},padDigit:function(e){return 1===e.length?\"0\"+e:e},brightness:function(e){var t=this,r=Math.round;return t.r=r(t.normalizeByte(t.r*e)),t.g=r(t.normalizeByte(t.g*e)),t.b=r(t.normalizeByte(t.b*e)),t},percBrightness:function(){var e=this;return Math.sqrt(.241*e.r*e.r+.691*e.g*e.g+.068*e.b*e.b)}},h.formats=[{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,process:function(e){return[r(e[1],10),r(e[2],10),r(e[3],10)]}},{re:/^(\\w{2})(\\w{2})(\\w{2})$/,process:function(e){return[r(e[1],16),r(e[2],16),r(e[3],16)]}},{re:/^(\\w{1})(\\w{1})(\\w{1})$/,process:function(e){return[r(e[1]+e[1],16),r(e[2]+e[2],16),r(e[3]+e[3],16)]}}],h.namedColors={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgrey:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",grey:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"778899\",lightslategrey:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"},o=[\"transparent\"];for(i in h.namedColors)h.namedColors.hasOwnProperty(i)&&o.push(i);o=RegExp(\"^(\"+o.join(\"|\")+\")(\\\\W|$)\",\"i\"),s=kendo.Class.extend({toHSV:function(){return this},toRGB:function(){return this},toHex:function(){return this.toBytes().toHex()},toBytes:function(){return this},toCss:function(){return\"#\"+this.toHex()},toCssRgba:function(){var e=this.toBytes();return\"rgba(\"+e.r+\", \"+e.g+\", \"+e.b+\", \"+t((+this.a).toFixed(3))+\")\"},toDisplay:function(){return kendo.support.browser.msie&&kendo.support.browser.version<9?this.toCss():this.toCssRgba()},equals:function(e){return e===this||null!==e&&this.toCssRgba()==n(e).toCssRgba()},diff:function(e){if(null==e)return NaN;var t=this.toBytes();return e=e.toBytes(),Math.sqrt(Math.pow(.3*(t.r-e.r),2)+Math.pow(.59*(t.g-e.g),2)+Math.pow(.11*(t.b-e.b),2))},clone:function(){var e=this.toBytes();return e===this&&(e=new l(e.r,e.g,e.b,e.a)),e}}),u=s.extend({init:function(e,t,r,n){this.r=e,this.g=t,this.b=r,this.a=n},toHSV:function(){var e,t,r=this.r,n=this.g,f=this.b,a=Math.min(r,n,f),o=Math.max(r,n,f),i=o,s=o-a;return 0===s?new d(0,0,i,this.a):(0!==o?(t=s/o,e=r==o?(n-f)/s:n==o?2+(f-r)/s:4+(r-n)/s,e*=60,0>e&&(e+=360)):(t=0,e=-1),new d(e,t,i,this.a))},toHSL:function(){var e,t,r,n=this.r,f=this.g,a=this.b,o=Math.max(n,f,a),i=Math.min(n,f,a),s=(o+i)/2;if(o==i)e=t=0;else{switch(r=o-i,t=s>.5?r/(2-o-i):r/(o+i),o){case n:e=(f-a)/r+(a>f?6:0);break;case f:e=(a-n)/r+2;break;case a:e=(n-f)/r+4}e*=60,t*=100,s*=100}return new c(e,t,s,this.a)},toBytes:function(){return new l(255*this.r,255*this.g,255*this.b,this.a)}}),l=u.extend({init:function(e,t,r,n){this.r=Math.round(e),this.g=Math.round(t),this.b=Math.round(r),this.a=n},toRGB:function(){return new u(this.r/255,this.g/255,this.b/255,this.a)},toHSV:function(){return this.toRGB().toHSV()},toHSL:function(){return this.toRGB().toHSL()},toHex:function(){return f(this.r,2)+f(this.g,2)+f(this.b,2)},toBytes:function(){return this}}),d=s.extend({init:function(e,t,r,n){this.h=e,this.s=t,this.v=r,this.a=n},toRGB:function(){var e,t,r,n,f,a,o,i,s=this.h,l=this.s,d=this.v;if(0===l)t=r=n=d;else switch(s/=60,e=Math.floor(s),f=s-e,a=d*(1-l),o=d*(1-l*f),i=d*(1-l*(1-f)),e){case 0:t=d,r=i,n=a;break;case 1:t=o,r=d,n=a;break;case 2:t=a,r=d,n=i;break;case 3:t=a,r=o,n=d;break;case 4:t=i,r=a,n=d;break;default:t=d,r=a,n=o}return new u(t,r,n,this.a)},toHSL:function(){return this.toRGB().toHSL()},toBytes:function(){return this.toRGB().toBytes()}}),c=s.extend({init:function(e,t,r,n){this.h=e,this.s=t,this.l=r,this.a=n},toRGB:function(){var e,t,r,n,f,o=this.h,i=this.s,s=this.l;return 0===i?e=t=r=s:(o/=360,i/=100,s/=100,n=.5>s?s*(1+i):s+i-s*i,f=2*s-n,e=a(f,n,o+1/3),t=a(f,n,o),r=a(f,n,o-1/3)),new u(e,t,r,this.a)},toHSV:function(){return this.toRGB().toHSV()},toBytes:function(){return this.toRGB().toBytes()}}),h.fromBytes=function(e,t,r,n){return new l(e,t,r,null!=n?n:1)},h.fromRGB=function(e,t,r,n){return new u(e,t,r,null!=n?n:1)},h.fromHSV=function(e,t,r,n){return new d(e,t,r,null!=n?n:1)},h.fromHSL=function(e,t,r,n){return new c(e,t,r,null!=n?n:1)},kendo.Color=h,kendo.parseColor=n}(window.kendo.jQuery,parseFloat,parseInt)},\"function\"==typeof define&&define.amd?define:function(e,t,r){(r||t)()});\n//# sourceMappingURL=kendo.color.min.js.map\n","import { Record, List } from \"immutable\";\nimport { Nullable } from \".\";\nimport { IEstimateLineItemData } from \"./EstimateLineItem\";\nimport { IRoomEstimationData, RoomEstimationRecord, fromJSON as roomEstimationFromJson } from \"./RoomEstimation\";\nimport { getTimezoneString } from \"app2/src/records/Estimate\";\nimport { fromJSON as paymentTermsFromJSON, PaymentTermRecord, IPaymentTermData } from \"./PaymentTerm\";\nimport { fromJSON as discountFromJson, IEstimateDiscountData, EstimateDiscountRecord } from \"./EstimateDiscount\";\n\nexport const fromJSON = (json: Partial<IEstimateGroupData>): EstimateGroupRecord => {\n  const record: IEstimateGroupRecord = { ...(json as any) };\n\n  if (json.line_items) {\n    record.line_item_ids = List(json.line_items.map((li) => li.id));\n  }\n\n  if (json.room_estimations) {\n    record.room_estimations = List(json.room_estimations.map((estimation) => roomEstimationFromJson(estimation)));\n  }\n\n  if (json.estimated_start && typeof json.estimated_start === \"string\") {\n    const timezoneDate = new Date(json.estimated_start);\n    record.estimated_start = new Date(\n      `${json.estimated_start}T00:00:00.000${getTimezoneString(timezoneDate.getTimezoneOffset())}`,\n    );\n  }\n  if (json.estimated_end && typeof json.estimated_end === \"string\") {\n    const timezoneDate = new Date(json.estimated_end);\n    record.estimated_end = new Date(\n      `${json.estimated_end}T00:00:00.000${getTimezoneString(timezoneDate.getTimezoneOffset())}`,\n    );\n  }\n\n  if (json.payment_terms && !Record.isRecord(json.payment_terms)) {\n    record.payment_terms = paymentTermsFromJSON(json.payment_terms);\n  }\n\n  if (json.discounts) {\n    record.discounts = List(json.discounts.map((d) => discountFromJson(d)));\n  }\n\n  return new EstimateGroupRecord(record);\n};\n\nexport interface IEstimateGroupData {\n  id: number;\n  name: string;\n  included: boolean;\n  subtotal: number;\n  total: number;\n  labor_total: number;\n  product_total: number;\n  tax_total: number;\n  tax_rate: number;\n  taxable_amount: number;\n  default_taxable_amount: string;\n  line_items: IEstimateLineItemData[];\n  room_estimations: IRoomEstimationData[];\n  product_markup: number;\n  labor_markup: number;\n  payment_terms: IPaymentTermData;\n  discounts: IEstimateDiscountData[];\n  discount: number;\n  discountable_total: number;\n  running_discountable: number;\n  created_at: Date;\n  updated_at: Date;\n  estimated_start: Date;\n  estimated_end: Date;\n  sort_order: number;\n  _destroy: boolean;\n}\n\nexport interface IEstimateGroupRecord {\n  id: number;\n  name: string;\n  included: boolean;\n  subtotal: number;\n  total: number;\n  labor_total: number;\n  product_total: number;\n  tax_total: number;\n  tax_rate: number;\n  taxable_amount: number;\n  default_taxable_amount: string;\n  line_item_ids: List<number>;\n  room_estimations: List<RoomEstimationRecord>;\n  product_markup: number;\n  labor_markup: number;\n  payment_terms: PaymentTermRecord;\n  discounts: List<EstimateDiscountRecord>;\n  discount: number;\n  discountable_total: number;\n  running_discountable: number;\n  created_at: Date;\n  updated_at: Date;\n  estimated_start: Date;\n  estimated_end: Date;\n  sort_order: number;\n  _destroy: Nullable<boolean>;\n}\n\nconst defaultEstimateGroupProps: IEstimateGroupRecord = {\n  id: 0,\n  name: \"\",\n  included: true,\n  subtotal: 0,\n  total: 0,\n  labor_total: 0,\n  product_total: 0,\n  tax_total: 0,\n  tax_rate: 0,\n  taxable_amount: 0,\n  default_taxable_amount: \"\",\n  line_item_ids: List<number>(),\n  room_estimations: List<RoomEstimationRecord>(),\n  product_markup: 0,\n  labor_markup: 0,\n  payment_terms: paymentTermsFromJSON({}),\n  discounts: List<EstimateDiscountRecord>(),\n  discount: null,\n  discountable_total: 0,\n  running_discountable: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n  estimated_start: null,\n  estimated_end: null,\n  sort_order: 0,\n  _destroy: null,\n};\n\nexport class EstimateGroupRecord extends Record(defaultEstimateGroupProps) implements IEstimateGroupRecord {}\n","import * as estimateGroupActions from \"./estimateGroup.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { EstimateGroupRecord, fromJSON } from \"../records/EstimateGroup\";\nimport { RootState, RootActions } from \".\";\nimport * as estimateLineItemActions from \"./estimateLineItem.actions\";\nimport { reducer as estimateLineItemReducer } from \"./estimateLineItem.reducer\";\nimport { updateBaseTotal } from \"app2/src/selectors/estimateGroup.selectors\";\nimport { model as estimateModel } from \"./estimate.reducer\";\n\nexport const EstimateGroupStateRecord = Record({\n  byId: Map<number, EstimateGroupRecord>(),\n  lastSavedById: Map<number, EstimateGroupRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = EstimateGroupStateRecord();\n\nexport type EstimateState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"estimateGroups\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let estimateGroup: EstimateGroupRecord;\n  switch (action.type) {\n    case estimateGroupActions.RECEIVE_ESTIMATE_GROUP:\n      estimateGroup = fromJSON({ ...action.payload.estimateGroup });\n\n      action.payload.estimateGroup.line_items.map((li) => {\n        state = estimateLineItemReducer(state, estimateLineItemActions.Actions.receiveEstimateLineItem(li));\n      });\n\n      state = state.setIn([model, \"byId\", estimateGroup.id], estimateGroup);\n      state = reducer(state, estimateGroupActions.Actions.updateBaseTotal(estimateGroup.id));\n\n      const totEstimateGroup = state.getIn([model, \"byId\", estimateGroup.id]);\n      return state.setIn([model, \"lastSavedById\", estimateGroup.id], totEstimateGroup);\n\n    case estimateGroupActions.DUPLICATE_ESTIMATE_GROUPS:\n      const estimate = state.getIn([estimateModel, \"byId\", action.payload.estimateId]);\n\n      let groupIds = List();\n      let unsavedId = state.getIn([model, \"unsavedId\"]);\n      action.payload.groupIds.map((gid: number) => {\n        let group = state.getIn([model, \"byId\", gid]);\n        group = group.set(\"id\", unsavedId);\n        let unsavedRoomEstimationId = -1;\n        group = group.set(\n          \"room_estimations\",\n          group.room_estimations.map((roomEstimation) => {\n            roomEstimation = roomEstimation.set(\"id\", unsavedRoomEstimationId).set(\"estimate_group_id\", unsavedId);\n            unsavedRoomEstimationId -= 1;\n            return roomEstimation;\n          }),\n        );\n        groupIds = groupIds.push(unsavedId);\n        state = state.setIn([model, \"byId\", group.id], group);\n        state = estimateLineItemReducer(\n          state,\n          estimateLineItemActions.Actions.duplicateEstimateLineItems(group.id, group.line_item_ids),\n        );\n        unsavedId -= 1;\n      });\n\n      return state\n        .setIn([estimateModel, \"byId\", estimate.id, \"group_ids\"], groupIds)\n        .setIn([model, \"unsavedId\"], unsavedId);\n\n    case estimateGroupActions.UPDATE_BASE_TOTAL:\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateGroupId],\n        updateBaseTotal(state, { estimateGroupId: action.payload.estimateGroupId }),\n      );\n\n    default:\n      return state;\n  }\n};\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.scheduler.monthview.min\",[\"kendo.scheduler.view.min\"],t)}(function(){return function(t){function e(t,e){return t.slice(e).concat(t.slice(0,e))}function n(t,e){for(var n=e.firstDay,o=new Date(t.getFullYear(),t.getMonth(),0,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds());o.getDay()!=n;)i.date.setTime(o,-1*u);return o}function o(t,e,n){var o,i=e,r=n;return o=t,o>=i&&r>=o}var i=window.kendo,r=i.ui,s=r.SchedulerView,a=\".kendoMonthView\",l=t.extend,d=i.date.getDate,u=i.date.MS_PER_DAY,c=6,h=7,f=i.template('<span class=\"k-link k-nav-day\">#:kendo.toString(date, \"dd\")#</span>'),_='<div role=\"gridcell\" aria-selected=\"false\" data-#=ns#uid=\"#=uid#\"#if (resources[0]) { #style=\"background-color:#=resources[0].color #; border-color: #=resources[0].color#\"class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\"#} else {#class=\"k-event\"#}#><span class=\"k-event-actions\"># if(data.tail || data.middle) {#<span class=\"k-icon k-i-arrow-w\"></span>#}## if(data.isException()) {#<span class=\"k-icon k-i-exception\"></span># } else if(data.isRecurring()) {#<span class=\"k-icon k-i-refresh\"></span>#}#</span>{0}<span class=\"k-event-actions\">#if (showDelete) {#<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>#}## if(data.head || data.middle) {#<span class=\"k-icon k-i-arrow-e\"></span>#}#</span># if(resizable && !data.tail && !data.middle) {#<span class=\"k-resize-handle k-resize-w\"></span>#}## if(resizable && !data.head && !data.middle) {#<span class=\"k-resize-handle k-resize-e\"></span>#}#</div>',p=i.template('<div title=\"#=title.replace(/\"/g,\"&\\\\#34;\")#\"><div class=\"k-event-template\">#:title#</div></div>'),v=i.template('<div style=\"width:#=width#px;left:#=left#px;top:#=top#px\" class=\"k-more-events k-button\"><span>...</span></div>'),g=i.Class.extend({init:function(t){this._view=t},_verticalRowCountForLevel:function(t){var e=this._view;return e._rowCountForLevel(t)},_horizontalGroupCountForLevel:function(t){var e=this._view;return e._columnCountForLevel(t)},_getCalendarRowsLength:function(t,e){return e/t},_createRows:function(t,e,n,o){var i,r=this._view,s=h,a=r._isVerticallyGrouped(),l=\"\";for(i=0;n>i;i++)l+=r._createRow(t,e,s,a?o:i);return l},_adjustStartDate:function(t){return i.date.addDays(t,h)},_getContent:function(t,e,n){return t({date:e,resources:n})},_getTimeSlotByPosition:function(t,e,n){var o=this._view.groups[n];return o.daySlotByPosition(t,e)},_nextSlotStartDate:function(t){return i.date.nextDay(t)},_createRowsLayout:function(t,e,n){var o=this._view;return o._createRowsLayout(t,e,n)},_createVerticalColumnsLayout:function(t,e,n,o){return o},_createColumnsLayout:function(t,e,n){var o=this._view;return o._createColumnsLayout(t,e,n)},_verticalGroupCount:function(t){var e=this._view;return e._rowCountForLevel(t)},_horizontalGroupCount:function(t){var e=this._view;return e._columnCountForLevel(t)/e._columnOffsetForResource(t)},_positionEvent:function(t,e,n,o,i,r,s){var a,l=this._view,d=l._isMobilePhoneView();o>1&&(0===s?r=n.end.endDate():s==o-1?i=n.start.startDate():(i=n.start.startDate(),r=n.end.endDate())),a=t.clone({start:i,end:r,head:n.head,tail:n.tail}),d?l._positionMobileEvent(n,l._createEventElement(a),e):l._positionEvent(n,l._createEventElement(a),e)},_addDaySlotCollections:function(t,e,n){var o,r,s,a,l,d,u,f,_,p,v,g=this._view,y=h,m=c;for(o=0;t>o;o++)for(r=0,s=0,g._isVerticallyGrouped()&&(s=o),a=s*m;(s+1)*m>a;a++)for(l=g.groups[o],d=l.addDaySlotCollection(i.date.addDays(n,r),i.date.addDays(n,r+y)),u=e[a],f=u.children,_=0,u.setAttribute(\"role\",\"row\"),g._isVerticallyGrouped()||(_=o),p=_*y;(_+1)*y>p;p++)v=f[p],g.addDaySlot(d,v,n,r),r++},_changePeriodGroupIndex:function(t){var e=this._view;return t?e.groups.length-1:0},_createResizeHint:function(t){var e=this._view,n=t.startSlot().offsetLeft,o=t.start.offsetTop,i=t.innerWidth(),r=t.start.clientHeight-2,a=s.fn._createResizeHint.call(e,n,o,i,r);e._appendResizeHint(a)},_createMoveHint:function(t,e){var n=this._view,o=t.startSlot(),i=t.endSlot(),r=n._createEventElement(e.clone({head:t.head,tail:t.tail}));r.css({left:o.offsetLeft+2,top:o.offsetTop+o.firstChildHeight,height:n.options.eventHeight,width:t.innerWidth()-(o.index!==i.index?5:4)}),r.addClass(\"k-event-drag-hint\"),n._appendMoveHint(r)}}),y=i.Class.extend({init:function(t){this._view=t},_verticalRowCountForLevel:function(){return 1},_horizontalGroupCountForLevel:function(t){var e=this._view;return e._columnCountForLevel(t+1)/h},_createRows:function(t,e,n){var o,r,s=this._view,a=h,l=s._isVerticallyGrouped(),d=\"\",u=0;if(l){for(o=new Date(t),r=s._groupCount(),u;c>u;u++)d+=s._createRow(o,e,r,u),o=i.date.addDays(o,a);t=i.date.nextDay(t)}else{for(u;a>u;u++)d+=s._createRow(t,e,n,u),t=i.date.nextDay(t);t=i.date.addDays(t,a)}return d},_adjustStartDate:function(t,e){var n=this._view,o=n._isVerticallyGrouped();return o?e?i.date.addDays(t,h*(c-1)+1):i.date.nextDay(t):i.date.addDays(t,h)},_getContent:function(t,e,n,o){return 0===o?t({date:e,resources:n}):\"\"},_getTimeSlotByPosition:function(t,e,n){var o=this._view.groups[n];return o.daySlotByPosition(t,e,!0)},_nextSlotStartDate:function(t){return t},_getCalendarRowsLength:function(){var t=this._view,e=t._isVerticallyGrouped();return e?h:c},_createRowsLayout:function(t,e,n,o){var i=this._view;return i._createDateLayout(o,null,!1)},_createVerticalColumnsLayout:function(t,e,n){var o,r,s=this._view,a=t[0],l=[],d=a.dataSource.view();for(o=0;d.length*c>o;o++)r={text:n({text:i.htmlEncode(i.getter(a.dataTextField)(d[o%d.length])),color:i.getter(a.dataColorField)(d[o%d.length]),field:a.field,title:a.title,name:a.name,value:i.getter(a.dataValueField)(d[o%d.length])}),className:\"k-slot-cell\"},r.columns=s._createColumnsLayout(t.slice(1),null,n),l.push(r);return l},_createColumnsLayout:function(t,e,n,o){var i=this._view;return i._createColumnsLayout(t,e,n,o,!0)},_verticalGroupCount:function(t){var e=this._view;return e._columnCountForLevel(t)/c},_horizontalGroupCount:function(t){var e=this._view;return e._columnCountForLevel(t)/h},_positionEvent:function(t,e,n,o,i,r){var s,a,l,d,u=this._view,c=n.start.index,h=n.end.index,f=u._isMobilePhoneView();for(s=n.start.index;n.end.index>=s;s++)a=n.collection._slots[s],l=e.daySlotRanges(a.start,a.start,!0)[0],d=t.clone({start:s===c?a.start:i,end:s===h?a.end:r,head:s!==h||n.head,tail:s!==c||n.tail}),f?u._positionMobileEvent(l,u._createEventElement(d),e):u._positionEvent(l,u._createEventElement(d),e)},_addDaySlotCollections:function(t,e,n){var o,r,s,a,l,d,u,f,_,p,v,g,y,m,w=this._view,D=h,k=c,C=w._isVerticallyGrouped();for(o=0;D>o;o++)for(r=0;k>r;r++)for(s=0,a=C?o:r,l=e[a],d=l.children,u=0,l.setAttribute(\"role\",\"row\"),w._isVerticallyGrouped()||(u=o),f=u*t;(u+1)*t>f;f++)_=r*D+o,p=C?f+r*t:f,v=d[p],g=C?f:s,y=w.groups[g],m=0===o?y.addDaySlotCollection(i.date.addDays(n,_),i.date.addDays(n,_+D)):y._daySlotCollections[r],w.addDaySlot(m,v,n,_),s++},_changePeriodGroupIndex:function(t,e,n){var o=this._view;return e&&o._isVerticallyGrouped()?t?o.groups.length-1:0:n},_createResizeHint:function(t){var e,n,o,i,r,a,l,d=this._view;if(d._isVerticallyGrouped())e=t.startSlot().offsetLeft,n=t.start.offsetTop,o=t.startSlot().offsetWidth,i=t.endSlot().offsetTop+t.startSlot().offsetHeight-t.startSlot().offsetTop-2,r=s.fn._createResizeHint.call(d,e,n,o,i),d._appendResizeHint(r);else for(a=t.startSlot().index;a<=t.endSlot().index;a++)l=t.collection._slots[a],e=l.offsetLeft,n=l.offsetTop,o=l.offsetWidth,i=l.offsetHeight-2,r=s.fn._createResizeHint.call(d,e,n,o,i),d._appendResizeHint(r)},_createMoveHint:function(t,e){var n,o,i,r=this._view,s=t.startSlot(),a=t.endSlot();for(n=s.index;a.index>=n;n++)o=t.collection._slots[n],i=r._createEventElement(e.clone({head:t.head,tail:t.tail})),i.css({left:o.offsetLeft,top:o.offsetTop+o.firstChildHeight,height:r.options.eventHeight,width:o.offsetWidth-2}),i.addClass(\"k-event-drag-hint\"),r._appendMoveHint(i)}});i.ui.scheduler.MonthGroupedView=g,i.ui.scheduler.MonthGroupedByDateView=y,r.MonthView=s.extend({init:function(t,e){var n=this;s.fn.init.call(n,t,e),n._groupedView=n._getGroupedView(),n.title=n.options.title,n._templates(),n._editable(),n._renderLayout(n.options.date),n._groups()},name:\"month\",_getGroupedView:function(){return this._isGroupedByDate()?new i.ui.scheduler.MonthGroupedByDateView(this):new i.ui.scheduler.MonthGroupedView(this)},_updateDirection:function(t,e,n,o,i){var r,s,a,l,d;n&&(r=e[0].start,s=e[e.length-1].end,a=r.index===s.index,l=r.collectionIndex===s.collectionIndex,d=i?a&&l||l:a&&l,d&&(t.backward=o))},_changeDate:function(t,e,n){var o,i,r,s=this.groups[t.groupIndex];if(n){if(o=s._getCollections(s.daySlotCollectionCount()),i=e.collectionIndex-1,i>=0)return o[i]._slots[o[i]._slots.length-1]}else if(o=s._getCollections(s.daySlotCollectionCount()),i=e.collectionIndex+1,r=0,o[i]&&o[i]._slots[r])return o[i]._slots[r]},_getNextHorizontalRange:function(t,e,n){var o=this._isVerticallyGrouped();return n.startSlot=t[e](n.startSlot,o),n.endSlot=t[e](n.endSlot,o),n},_getNextVerticalRange:function(t,e,n,o){var i=this._isVerticallyGrouped()&&this._isGroupedByDate();return n.startSlot=t[e](n.startSlot,o,i),n.endSlot=t[e](n.endSlot,o,i),n},_changeViewPeriod:function(t,e,n){var o=n?7:1;return e&&(o*=-1),t.start=i.date.addDays(t.start,o),t.end=i.date.addDays(t.end,o),(!n||n&&this._isVerticallyGrouped())&&(t.groupIndex=this._groupedView._changePeriodGroupIndex(e,n,t.groupIndex)),t.events=[],!0},_continuousSlot:function(t,e,n){var o=t.backward?0:e.length-1,i=this.groups[t.groupIndex];return i.continuousSlot(e[o].start,n)},_changeGroupContinuously:function(t,e,n,o){var i,r,s,a;return n||(i=t.groupIndex,r=this.groups.length-1,s=this._isVerticallyGrouped(),a=this.groups[i],!e&&s?(e=a[o?\"lastSlot\":\"firstSlot\"](),i+=o?-1:1):e&&!s&&(i=o?r:0),(0>i||i>r)&&(i=o?r:0,e=null),t.groupIndex=i),e},_normalizeHorizontalSelection:function(t,e,n){var o;return o=n?e[0].start:e[e.length-1].end},_normalizeVerticalSelection:function(t,e){var n;return n=t.backward?e[0].start:e[e.length-1].end},_templates:function(){var t=this.options,e=l({},i.Template,t.templateSettings);this.eventTemplate=this._eventTmpl(t.eventTemplate,_),this.dayTemplate=i.template(t.dayTemplate,e),this.groupHeaderTemplate=i.template(t.groupHeaderTemplate,e)},dateForTitle:function(){return i.format(this.options.selectedDateFormat,this._firstDayOfMonth,this._lastDayOfMonth)},shortDateForTitle:function(){return i.format(this.options.selectedShortDateFormat,this._firstDayOfMonth,this._lastDayOfMonth)},nextDate:function(){return i.date.nextDay(this._lastDayOfMonth)},previousDate:function(){return i.date.previousDay(this._firstDayOfMonth)},startDate:function(){return this._startDate},endDate:function(){return this._endDate},_renderLayout:function(e){var o=this;this._firstDayOfMonth=i.date.firstDayOfMonth(e),this._lastDayOfMonth=i.date.lastDayOfMonth(e),this._startDate=n(e,this.calendarInfo()),this.createLayout(this._layout()),this._content(),this.refreshLayout(),this.content.on(\"click\"+a,\".k-nav-day,.k-more-events\",function(e){var n=t(e.currentTarget).offset(),i=o._slotByPosition(n.left,n.top);e.preventDefault(),o.trigger(\"navigate\",{view:\"day\",date:i.startDate()})})},_editable:function(){this.options.editable&&!this._isMobilePhoneView()&&(this._isMobile()?this._touchEditable():this._mouseEditable())},_mouseEditable:function(){var e=this;e.element.on(\"click\"+a,\".k-scheduler-monthview .k-event a:has(.k-si-close)\",function(n){e.trigger(\"remove\",{uid:t(this).closest(\".k-event\").attr(i.attr(\"uid\"))}),n.preventDefault()}),e.options.editable.create!==!1&&e.element.on(\"dblclick\"+a,\".k-scheduler-monthview .k-scheduler-content td\",function(n){var o,i=t(n.currentTarget).offset(),r=e._slotByPosition(i.left,i.top);r&&(o=e._resourceBySlot(r),e.trigger(\"add\",{eventInfo:l({isAllDay:!0,start:r.startDate(),end:r.startDate()},o)})),n.preventDefault()}),e.options.editable.update!==!1&&e.element.on(\"dblclick\"+a,\".k-scheduler-monthview .k-event\",function(n){e.trigger(\"edit\",{uid:t(this).closest(\".k-event\").attr(i.attr(\"uid\"))}),n.preventDefault()})},_touchEditable:function(){var e=this,n=0;i.support.mobileOS.android&&(n=5),e.options.editable.create!==!1&&(e._addUserEvents=new i.UserEvents(e.element,{threshold:n,filter:\".k-scheduler-monthview .k-scheduler-content td\",tap:function(n){var o,i=t(n.target).offset(),r=e._slotByPosition(i.left,i.top);r&&(o=e._resourceBySlot(r),e.trigger(\"add\",{eventInfo:l({isAllDay:!0,start:r.startDate(),end:r.startDate()},o)})),n.preventDefault()}})),e.options.editable.update!==!1&&(e._editUserEvents=new i.UserEvents(e.element,{threshold:n,filter:\".k-scheduler-monthview .k-event\",tap:function(n){0===t(n.event.target).closest(\"a:has(.k-si-close)\").length&&(e.trigger(\"edit\",{uid:t(n.target).closest(\".k-event\").attr(i.attr(\"uid\"))}),n.preventDefault())}}))},selectionByElement:function(e){var n=t(e).offset();return this._slotByPosition(n.left,n.top)},_columnCountForLevel:function(t){var e=this.columnLevels[t];return e?e.length:0},_rowCountForLevel:function(t){var e=this.rowLevels[t];return e?e.length:0},_content:function(){var t,e=\"<tbody>\",n=1,o=this._groupedView,i=this.groupedResources;for(i.length&&this._isVerticallyGrouped()&&(n=o._verticalRowCountForLevel(i.length-1)),t=0;n>t;t++)e+=this._createCalendar(t);e+=\"</tbody>\",this.content.find(\"table\").html(e)},_createCalendar:function(t){var e,n,o,r=this.startDate(),s=h*c,a=h,l=[r],d=\"\",u=1,f=this._isVerticallyGrouped(),_=this._groupedView,p=this.groupedResources;for(p.length&&(f||(u=_._horizontalGroupCountForLevel(p.length-1))),this._slotIndices={},e=_._getCalendarRowsLength(a,s),n=0;e>n;n++)d+=\"<tr>\",l.push(r),o=n*a,d+=_._createRows(r,o,u,t),r=_._adjustStartDate(r,n===e-1),d+=\"</tr>\";return this._weekStartDates=l,this._endDate=i.date.previousDay(r),d},_createRow:function(t,e,n,o){var r,s=this,a=s._firstDayOfMonth,l=s._lastDayOfMonth,u=s.dayTemplate,c=\"\",h=\"\",f=this._groupedView,_=function(){return s._resourceBySlot({groupIndex:o})};for(r=0;n>r;r++)c=\"\",i.date.isToday(t)&&(c+=\"k-today\"),i.date.isInDateRange(t,a,l)||(c+=\" k-other-month\"),h+=\"<td \",\"\"!==c&&(h+='class=\"'+c+'\"'),h+=\">\",h+=f._getContent(u,t,_,r),h+=\"</td>\",s._slotIndices[d(t).getTime()]=e+r,t=f._nextSlotStartDate(t);return h},_layout:function(){var n,o,i,r=this.calendarInfo(),s=this._isMobile()?r.days.namesShort:r.days.names,a=e(s,r.firstDay),l=t.map(a,function(t){return{text:t}}),d=this.groupedResources,u=this._groupedView;if(d.length)if(this._isVerticallyGrouped()){for(o=[],i=0;6>i;i++)o.push({text:\"<div>&nbsp;</div>\",className:\"k-hidden k-slot-cell\"});n=u._createRowsLayout(d,o,this.groupHeaderTemplate,l),l=u._createVerticalColumnsLayout(d,o,this.groupHeaderTemplate,l)}else l=u._createColumnsLayout(d,l,this.groupHeaderTemplate,l);return{columns:l,rows:n}},_createEventElement:function(e){var n,o=this.options,r=o.editable,s=this._isMobile();return e.showDelete=r&&r.destroy!==!1&&!s,e.resizable=r&&r.resize!==!1&&!s,e.ns=i.ns,e.resources=this.eventResources(e),e.inverseColor=e.resources&&e.resources[0]?this._shouldInverseResourceColor(e.resources[0]):!1,n=t(this.eventTemplate(e)),this.angular(\"compile\",function(){return{elements:n,data:[{dataItem:e}]}}),n},_isInDateSlot:function(t){var e=this.groups[0],n=e.firstSlot().start,r=e.lastSlot().end-1,s=i.date.toUtcTime(t.start),a=i.date.toUtcTime(t.end);return(o(s,n,r)||o(a,n,r)||o(n,s,a)||o(r,s,a))&&(!o(a,n,n)||o(a,s,s)||t.isAllDay)},_slotIndex:function(t){return this._slotIndices[d(t).getTime()]},_positionMobileEvent:function(e,n,o){var r,a,l,d,u,c,h,f=e.start;e.start.offsetLeft>e.end.offsetLeft&&(f=e.end),r=e.start.index,a=r,l=3,d=s.collidingEvents(e.events(),r,a),d.push({element:n,start:r,end:a}),u=s.createRows(d),c=e.collection.at(r),h=c.container,h||(h=t(i.format('<div class=\"k-events-container\" style=\"top:{0};left:{1};width:{2}\"/>',f.offsetTop+f.firstChildTop+f.firstChildHeight-3+\"px\",f.offsetLeft+\"px\",f.offsetWidth+\"px\")),c.container=h,this.content[0].appendChild(h[0])),l>=u.length&&(e.addEvent({element:n,start:r,end:a,groupIndex:f.groupIndex}),o._continuousEvents.push({element:n,uid:n.attr(i.attr(\"uid\")),start:e.start,end:e.end}),h[0].appendChild(n[0]))},_positionEvent:function(e,n,o){var r,a,l,d,u,c,h,f,_,p,g,y,m,w,D,k=this.options.eventHeight,C=e.start;for(e.start.offsetLeft>e.end.offsetLeft&&(C=e.end),r=e.start.index,a=e.end.index,l=C.eventCount,d=s.collidingEvents(e.events(),r,a),u=r!==a?5:4,d.push({element:n,start:r,end:a}),c=s.createRows(d),h=0,f=Math.min(c.length,l);f>h;h++)for(_=c[h].events,p=C.offsetTop+C.firstChildHeight+h*k+3*h+\"px\",g=0,y=_.length;y>g;g++)_[g].element[0].style.top=p;if(c.length>l)for(m=r;a>=m;m++){if(w=e.collection,D=w.at(m),D.more)return;D.more=t(v({ns:i.ns,start:m,end:m,width:D.clientWidth-2,left:D.offsetLeft+2,top:D.offsetTop+D.firstChildHeight+l*k+3*l})),this.content[0].appendChild(D.more[0])}else e.addEvent({element:n,start:r,end:a,groupIndex:C.groupIndex}),n[0].style.width=e.innerWidth()-u+\"px\",n[0].style.left=C.offsetLeft+2+\"px\",n[0].style.height=k+\"px\",o._continuousEvents.push({element:n,uid:n.attr(i.attr(\"uid\")),start:e.start,end:e.end}),n.appendTo(this.content)},_slotByPosition:function(t,e){var n,o,i=this.content.offset();for(t-=i.left,e-=i.top,e+=this.content[0].scrollTop,t+=this.content[0].scrollLeft,t=Math.ceil(t),e=Math.ceil(e),n=0;this.groups.length>n;n++)if(o=this._groupedView._getTimeSlotByPosition(t,e,n))return o;return null},_appendResizeHint:function(t){t.appendTo(this.content),this._resizeHint=this._resizeHint.add(t)},_updateResizeHint:function(t,e,n,o){var r,s,a;for(this._removeResizeHint(),r=this.groups[e],s=r.ranges(n,o,!0,t.isAllDay),a=0;s.length>a;a++)this._groupedView._createResizeHint(s[a]);this._resizeHint.find(\".k-label-top,.k-label-bottom\").text(\"\"),this._resizeHint.first().addClass(\"k-first\").find(\".k-label-top\").text(i.toString(i.timezone.toLocalDate(n),\"M/dd\")),this._resizeHint.last().addClass(\"k-last\").find(\".k-label-bottom\").text(i.toString(i.timezone.toLocalDate(o),\"M/dd\"))},_updateMoveHint:function(t,e,n){var o,r=i.date.toUtcTime(t.start)+n,s=r+t.duration(),a=this.groups[e],l=a.ranges(r,s,!0,t.isAllDay);for(this._removeMoveHint(),o=0;l.length>o;o++)this._groupedView._createMoveHint(l[o],t)},_appendMoveHint:function(t){t.appendTo(this.content),this._moveHint=this._moveHint.add(t)},_groups:function(){var t,e=this._groupCount(),n=this.content[0].getElementsByTagName(\"tr\"),o=this.startDate();for(this.groups=[],t=0;e>t;t++)this._addResourceView(t);this._groupedView._addDaySlotCollections(e,n,o)},addDaySlot:function(t,e,n,o){var r,s=e.clientHeight,a=e.children.length?e.children[0].offsetHeight+3:0,l=i.date.addDays(n,o),d=i.date.MS_PER_DAY;n.getHours()!==l.getHours()&&(d+=(n.getHours()-l.getHours())*i.date.MS_PER_HOUR),l=i.date.toUtcTime(l),d+=l,r=Math.floor((s-a-this.options.moreButtonHeight)/(this.options.eventHeight+3)),e.setAttribute(\"role\",\"gridcell\"),e.setAttribute(\"aria-selected\",!1),t.addDaySlot(e,l,d,r)},render:function(t){this.content.children(\".k-event,.k-more-events,.k-events-container\").remove(),this._groups(),t=new i.data.Query(t).sort([{field:\"start\",dir:\"asc\"},{field:\"end\",dir:\"desc\"}]).toArray();var e=this.groupedResources;e.length?this._renderGroups(t,e,0,1):this._renderEvents(t,0),this.refreshLayout(),this.trigger(\"activate\")},_renderEvents:function(t,e){var n,o,i,r,s,a,l,d,u,c;for(o=0,i=t.length;i>o;o++)if(n=t[o],this._isInDateSlot(n))for(r=this.groups[e],r._continuousEvents||(r._continuousEvents=[]),s=r.slotRanges(n,!0),a=s.length,l=0;a>l;l++)d=s[l],u=n.start,c=n.end,this._groupedView._positionEvent(n,r,d,a,u,c,l)},_renderGroups:function(t,e,n,o){var r,a,l,d,u=e[0];if(u)for(r=u.dataSource.view(),a=0;r.length>a;a++)l=this._resourceValue(u,r[a]),d=new i.data.Query(t).filter({field:u.field,operator:s.groupEqFilter(l)}).toArray(),e.length>1?n=this._renderGroups(d,e.slice(1),n++,o+1):this._renderEvents(d,n++);return n},_groupCount:function(){var t=this.groupedResources,e=this._groupedView;return t.length?this._isVerticallyGrouped()?e._verticalGroupCount(t.length-1):e._horizontalGroupCount(t.length):1},_columnOffsetForResource:function(t){return this._columnCountForLevel(t)/this._columnCountForLevel(t-1)},destroy:function(){this.table&&this.table.removeClass(\"k-scheduler-monthview\"),this.content&&this.content.off(a),this.element&&this.element.off(a),s.fn.destroy.call(this),this._isMobile()&&!this._isMobilePhoneView()&&this.options.editable&&(this.options.editable.create!==!1&&this._addUserEvents.destroy(),this.options.editable.update!==!1&&this._editUserEvents.destroy())},events:[\"remove\",\"add\",\"edit\",\"navigate\"],options:{title:\"Month\",name:\"month\",eventHeight:25,moreButtonHeight:13,editable:!0,selectedDateFormat:\"{0:y}\",selectedShortDateFormat:\"{0:y}\",groupHeaderTemplate:\"#=text#\",dayTemplate:f,eventTemplate:p}})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()});\n//# sourceMappingURL=kendo.scheduler.monthview.min.js.map\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { calculateRate, filterByValidation, filterByStatus, FinanceOptionRecord } from \"app2/src/records/FinanceOption\";\nimport { Map, List } from \"immutable\";\nimport { job } from \"app2/src/selectors/job.selectors\";\nimport { calculatedFinancing } from \"app2/src/selectors/calculatedFinancing.selectors\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { estimateFinanceOptions } from \"app2/src/selectors/estimateFinanceOption.selectors\";\nimport { estimate } from \"app2/src/selectors/estimate.selectors\";\n\nexport const financeOption = (state: RootState, props: any) =>\n  state.getIn([\"orgs\", \"financeOptions\", \"byId\", props.financeOptionId]);\nexport const financeOptionsById = (state: RootState) => state.getIn([\"orgs\", \"financeOptions\", \"byId\"]);\nexport const orgFinanceOptionIds = (state: RootState, props: any) =>\n  state.getIn([\"orgs\", \"financeOptions\", \"byOrgId\", parseInt(props.orgId), \"financeOptions\"]);\n\nexport const financeOptions = createSelector(\n  [financeOptionsById, (state, props) => ({ state, props })],\n  (byId: Map<number, FinanceOptionRecord>, stateProps): List<FinanceOptionRecord> => {\n    const { props } = stateProps;\n    const { financeOptionIds } = props;\n    if (!financeOptionIds) {\n      return List();\n    }\n\n    return financeOptionIds.map((id: number) => byId.get(id));\n  },\n);\n\nexport const filteredFinanceOptions = createSelector(\n  [financeOptions, (state, props) => ({ state, props })],\n  (financeOptions: List<FinanceOptionRecord>, stateProps): List<FinanceOptionRecord> => {\n    const { state, props } = stateProps;\n    const { providers, financedAmount, forceRefresh } = props;\n\n    let safeFinanceOptions = financeOptions.filter((fo) => !!fo);\n\n    if (providers) {\n      safeFinanceOptions = safeFinanceOptions.filter((fo) => providers.includes(fo.provider));\n    }\n\n    if (!forceRefresh && financedAmount) {\n      // calulated financing already validly calculated\n      safeFinanceOptions = safeFinanceOptions.filter((fo) => {\n        return !calculatedFinancing(state, { financedAmount, financeOptionId: fo.id });\n      });\n    }\n\n    return safeFinanceOptions;\n  },\n);\n\nexport const getOrgFinanceOptions = createSelector(\n  [financeOptionsById, orgFinanceOptionIds],\n  (byId: Map<number, FinanceOptionRecord>, financeOptions: List<number>): List<FinanceOptionRecord> => {\n    if (!financeOptions) {\n      return List();\n    }\n\n    return financeOptions.map((id) => byId.get(id)).sortBy((fo) => fo.sort_order);\n  },\n);\n\nexport const rangeFinanceOptions = createSelector(\n  [estimate, (state, props) => ({ state, props })],\n  (estimate: EstimateRecord, stateProps: any): List<FinanceOptionRecord> => {\n    const { state, props } = stateProps;\n    const estimateFinanceOptionsList = estimateFinanceOptions(state, {\n      estimateFinanceOptionIds: estimate.finance_option_ids,\n    });\n    let financeOptions = sortedFilteredFinanceOptions(state, {\n      orgId: props.orgId,\n      estimate: estimate,\n      filterValidation: true,\n    });\n\n    if (estimateFinanceOptionsList.size > 0) {\n      const financeOptionEstimateIds = estimateFinanceOptionsList.map((efo) => efo.finance_option_id);\n      financeOptions = financeOptions.filter((o) => financeOptionEstimateIds.contains(o.id));\n    }\n\n    return financeOptions;\n  },\n);\n\nexport const sortedFilteredFinanceOptions = createSelector(\n  [getOrgFinanceOptions, (state, props) => ({ state, props })],\n  (financeOptions: List<FinanceOptionRecord>, stateProps): List<FinanceOptionRecord> => {\n    const { state, props } = stateProps;\n    const { sort, reverse, estimate, filterValidation, providers } = props;\n\n    financeOptions = filterByStatus(financeOptions);\n\n    if (filterValidation && estimate) {\n      const jobState = job(state, { jobId: estimate.job_id }).getIn([\"address\", \"state\"], \"\");\n      financeOptions = filterByValidation(financeOptions, estimate, jobState);\n    }\n\n    if (!sort || sort === \"payment\") {\n      if (estimate) {\n        financeOptions = financeOptions.sortBy((option) => calculateRate(option, estimate));\n      }\n    } else {\n      // @ts-ignore - this complains, but \"sort\" will always be an attribute of options\n      financeOptions = financeOptions.sortBy((option) => option.get(sort));\n    }\n\n    if (reverse) {\n      return financeOptions.reverse();\n    }\n\n    if (providers) {\n      financeOptions = financeOptions.filter((fo) => providers.includes(fo.provider));\n    }\n\n    return financeOptions;\n  },\n);\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { IDocumentData, DocumentRecord, toFormData, DocumentDisplayType } from \"app2/src/records/Document\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { IMetaPaginationData } from \"app2/src/records/MetaPagination\";\nimport { List } from \"immutable\";\nimport { baseCleanProps } from \"app2/src/api/Api\";\nimport { listParams } from \"app2/src/api/Api\";\nimport { CamelToSnake } from \"app2/src/helpers/Format\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport interface IDocumentIndexResponse {\n  documents: IDocumentData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nexport interface IDocumentResponse {\n  document?: IDocumentData;\n  documents?: IDocumentData[];\n}\n\nexport interface IDirectUploadResponse {\n  urls: {\n    id: string;\n    url: string;\n  }[];\n}\n\nexport type DocumentableType = \"org\" | \"job\" | \"estimate_line_item\";\nexport const DocumentableTypeConversion = { org: \"Org\", job: \"Job\", estimate_line_item: \"EstimateLineItem\" };\nexport type DocumentSignedType = \"signed\" | \"unsigned\";\n\nexport interface IDocumentOptions {\n  documentableId: number;\n  documentableType: DocumentableType;\n  presignedId?: number;\n  presignedType?: DocumentableType;\n  document_ids?: List<number>;\n  folder_id?: number;\n  job_id?: number;\n  signed?: DocumentSignedType;\n  display?: DocumentDisplayType;\n  disableFlash?: boolean;\n  content_type?: string;\n  signed_kind?: \"document\" | \"contract\";\n  sort_by?: string;\n  sort_order?: \"asc\" | \"dec\";\n}\n\nconst urls = {\n  org: \"api/v1/orgs/:id/documents\",\n  job: \"api/v1/jobs/:id/documents\",\n  estimate_line_item: \"api/v1/estimate_line_items/:id/documents\",\n};\n\nexport const list = (\n  options: IDocumentOptions,\n  queryParams: QueryParamsRecord = new QueryParamsRecord(),\n): Promise<IDocumentIndexResponse> => {\n  const actionUrl = urls[options.documentableType].replace(\":id\", options.documentableId.toString());\n  const params = listParams(queryParams);\n\n  if (options.folder_id && options.folder_id !== 0) {\n    params.folder_id = options.folder_id;\n  }\n\n  if (options.signed) {\n    params.signed = options.signed;\n  }\n\n  if (options.content_type) {\n    params.content_type = options.content_type;\n  }\n\n  if (options.display) {\n    params.display = options.display;\n  }\n\n  if (options.document_ids) {\n    params[\"document_ids[]\"] = options.document_ids.toArray();\n  }\n\n  if (options.signed_kind) {\n    params.signed_kind = options.signed_kind;\n  }\n\n  if (options.sort_by) {\n    params.sort_by = options.sort_by;\n  }\n\n  if (options.sort_order) {\n    params.sort_order = options.sort_order;\n  }\n\n  return fetcher.get<IDocumentIndexResponse>(actionUrl, params);\n};\n\nexport const updateOrCreate = (document: DocumentRecord): Promise<IDocumentResponse> => {\n  if (document.id > 0) {\n    return update(document);\n  } else {\n    return create(document);\n  }\n};\n\nexport const load = (documentId: number, options: IDocumentOptions): Promise<IDocumentResponse> => {\n  let actionUrl = urls[options.documentableType].replace(\":id\", options.documentableId.toString());\n  actionUrl = fetcher.joinUrls(actionUrl, documentId.toString());\n  return fetcher.get<IDocumentResponse>(actionUrl);\n};\n\nexport const create = (document: DocumentRecord): Promise<IDocumentResponse> => {\n  const actionUrl = urlSetup(document);\n  return fetcher.post<IDocumentResponse>(actionUrl, toFormData(document), { formData: true });\n};\n\nexport const update = (document: DocumentRecord): Promise<IDocumentResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(document), document.id.toString());\n  return fetcher.patch(actionUrl, cleanProps(document));\n};\n\nexport const importMeasurement = (document: DocumentRecord): Promise<IDocumentResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(document), document.id.toString(), \"import\");\n  return fetcher.post(actionUrl, cleanProps(document));\n};\n\nexport const combineDocuments = (\n  documentIds: List<number>,\n  name: string,\n  jobId: number,\n): Promise<IDocumentResponse> => {\n  const actionUrl = urls.job.replace(\":id\", jobId.toString()).concat(\"/combine\");\n  return fetcher.post(actionUrl, { document_ids: documentIds, name: name });\n};\n\nexport const destroy = (document: DocumentRecord): Promise<IDocumentResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(document), document.id.toString());\n  return fetcher.delete(actionUrl);\n};\n\nexport const directUpload = (\n  fileCount: number,\n  documentableType: DocumentableType,\n  documentableId: number,\n): Promise<IDirectUploadResponse> => {\n  const actionUrl = fetcher.joinUrls(urls[documentableType].replace(\":id\", documentableId.toString()), \"direct\");\n  return fetcher.post(actionUrl, { count: fileCount });\n};\n\nexport const cleanProps = (document: DocumentRecord): IDocumentData => {\n  let documentParams = document.toJS();\n  documentParams = baseCleanProps(documentParams);\n\n  if (isNullOrUndefined(documentParams.folder_id)) {\n    delete documentParams.folder_id;\n  }\n  return documentParams;\n};\n\nexport const urlSetup = (document: DocumentRecord): string => {\n  return urls[CamelToSnake(document.documentable_type)].replace(\":id\", document.documentable_id.toString());\n};\n\nexport const download = async (document: DocumentRecord): Promise<File> => {\n  const result = await fetcher.fetch(document.url, {}, { method: \"GET\" });\n  const fileBlob = await result.blob();\n  return new File([fileBlob], document.name, { type: fileBlob.type });\n};\n","import { ActionsUnion, createAction } from \"app2/src/reducers/Utils\";\nimport { RootState, ThunkResult } from \"app2/src/reducers/index\";\nimport { EstimateRecord, IEstimateData, DocType, getCreatedLineItemDocuments } from \"app2/src/records/Estimate\";\nimport { IEstimateOverviewData } from \"app2/src/records/EstimateOverview\";\nimport { EmailEstimateArgs, estimateService, IEstimateLandingResponse } from \"app2/src/api/estimate.service\";\nimport { financeOptionService } from \"app2/src/api/financeOption.service\";\nimport { PaymentTermTemplateRecord, PaymentTermItemRecord } from \"app2/src/records/PaymentTermTemplate\";\nimport { EstimateDiscountRecord, IEstimateDiscountData } from \"app2/src/records/EstimateDiscount\";\nimport {\n  estimateFinanceOptionIds,\n  toEstimateJson,\n  estimate as estimateSelector,\n} from \"app2/src/selectors/estimate.selectors\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport * as activatedPriceListActions from \"app2/src/reducers/activatedPriceList.actions\";\nimport { ICalculatedFinancingData } from \"app2/src/records/CalculatedFinancing\";\nimport { filteredFinanceOptions } from \"app2/src/selectors/financeOption.selectors\";\nimport { List } from \"immutable\";\nimport {\n  AsyncCalcFinanceOptionProviders,\n  LocalCalcFinanceOptionProviders,\n  localCalculations,\n} from \"app2/src/records/FinanceOption\";\nimport { IEstimate } from \"app/src/Models/Estimate\";\nimport { currentJob, currentJobId, currentJobOrgId, job, selectedEstimateId } from \"app2/src/selectors/job.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { EstimateSignedDocumentRecord } from \"app2/src/records/EstimateSignedDocument\";\nimport * as fileSaver from \"file-saver\";\nimport { IEstimateCommissionData } from \"app2/src/records/EstimateCommission\";\nimport * as moment from \"moment\";\nimport { contractTitle, settingsConfig } from \"app2/src/selectors/org.selectors\";\nimport * as taskActions from \"app2/src/reducers/task.actions\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport { DocumentableType, download } from \"app2/src/api/document.service\";\nimport { IDocumentData } from \"app2/src/records/Document\";\n\nexport const FETCH_JOB_ESTIMATES = \"@estimates/FETCH_JOB_ESTIMATES\";\nexport const FETCH_ESTIMATE = \"@estimates/FETCH_ESTIMATE\";\nexport const RECEIVE_JOB_ESTIMATES = \"@estimates/RECEIVE_JOB_ESTIMATES\";\nexport const RECEIVE_ESTIMATE = \"@estimates/RECEIVE_ESTIMATE\";\nexport const SET_ESTIMATE_LOADED = \"@estimates/SET_ESTIMATE_LOADED\";\nexport const SET_LAST_SAVED_ESTIMATE = \"@estimates/SET_LAST_SAVED_ESTIMATE\";\nexport const REMOVE_JOB_ESTIMATE = \"@estimates/REMOVE_JOB_ESTIMATE\";\nexport const RECEIVE_ESTIMATE_PDF = \"@estimates/RECEIVE_ESTIMATE_PDF\";\nexport const REMOVE_ESTIMATE_PDF = \"@estimates/REMOVE_ESTIMATE_PDF\";\nexport const REMOVE_ESTIMATE = \"@estimates/REMOVE_ESTIMATE\";\nexport const RECEIVE_JOB_ERRORS = \"@estimates/RECEIVE_JOB_ERRORS\";\nexport const RECEIVE_ESTIMATE_ERROR = \"@estimates/RECEIVE_ESTIMATE_ERROR\";\nexport const UPDATE_ESTIMATE_OVERVIEW = \"@estimates/UPDATE_ESTIMATE_OVERVIEW\";\nexport const FETCH_LANDING_ESTIMATE = \"@estimates/FETCH_LANDING_ESTIMATE\";\nexport const RECEIVE_LANDING_ESTIMATE = \"@estimates/RECEIVE_LANDING_ESTIMATE\";\nexport const SET_LANDING_LOADED = \"@estimates/SET_LANDING_LOADED\";\nexport const ADD_PT_TEMPLATE = \"@estimates/ADD_PT_TEMPLATE\";\nexport const ADD_PT_ITEM = \"@estimates/ADD_PT_ITEM\";\nexport const REMOVE_PT_ITEM = \"@estimates/REMOVE_PT_ITEM\";\nexport const UPDATE_PT_ITEM = \"@estimates/UPDATE_PT_ITEM\";\nexport const REMOVE_DISCOUNT = \"@estimates/REMOVE_DISCOUNT\";\nexport const ADD_DISCOUNT = \"@estimates/ADD_DISCOUNT\";\nexport const UPDATE_DISCOUNT = \"@estimates/UPDATE_DISCOUNT\";\nexport const UPDATE_BASE_TOTAL = \"@estimates/UPDATE_BASE_TOTAL\";\nexport const UPDATE_DISCOUNT_TOTAL = \"@estimates/UPDATE_DISCOUNT_TOTAL\";\nexport const UPDATE_TAX_TOTAL = \"@estimates/UPDATE_TAX_TOTAL\";\nexport const UPDATE_PAYMENT_TERM_TOTAL = \"@estimates/UPDATE_PAYMENT_TERM_TOTAL\";\nexport const DUPLICATE_ESTIMATE = \"@estimates/DUPLICATE_ESTIMATE\";\nexport const EDIT_NAME = \"@estimates/EDIT_NAME\";\nexport const ADD_FINANCE_OPTION_ID = \"@estimates/ADD_FINANCE_OPTION_ID\";\nexport const SET_ESTIMATE_FINANCE_OPTIONS = \"@estimates/SET_ESTIMATE_FINANCE_OPTIONS\";\nexport const FETCH_CALCULATIONS = \"@estimates/FETCH_CALCULATIONS\";\nexport const RECEIVE_CALCULATIONS = \"@estimates/RECEIVE_CALCULATIONS\";\nexport const SET_CALCULATIONS_ERROR = \"@estimates/SET_CALCULATIONS_ERROR\";\nexport const FETCH_ESTIMATE_COMMISSION = \"@estimates/FETCH_ESTIMATE_COMMISSION\";\nexport const RECEIVE_ESTIMATE_COMMISSION = \"@estimates/RECEIVE_ESTIMATE_COMMISSION\";\nexport const SET_ESTIMATE_SIGNED_DOCUMENTS = \"@estimates/SET_ESTIMATE_SIGNED_DOCUMENTS\";\nexport const RESET_DISCOUNTS = \"@estimates/RESET_DISCOUNTS\";\nexport const RESET_PAYMENT_TERMS = \"@estimates/RESET_SET_PAYMENT_TERMS\";\nexport const UPDATE_METADATA = \"@estimates/UPDATE_METADATA\";\n\nexport const Actions = {\n  fetchEstimate: (estimateId: number) => createAction(FETCH_ESTIMATE, { estimateId }),\n  receiveEstimateError: (estimateId: number, errors: string[]) =>\n    createAction(RECEIVE_ESTIMATE_ERROR, { estimateId, errors }),\n  receiveEstimate: (estimate: Partial<IEstimateData>) => createAction(RECEIVE_ESTIMATE, { estimate }),\n  setEstimateLoaded: (estimateId: number) => createAction(SET_ESTIMATE_LOADED, { estimateId }),\n  setLastSavedEstimate: (estimateId: number) => createAction(SET_LAST_SAVED_ESTIMATE, { estimateId }),\n  fetchEstimates: (jobId: number) => createAction(FETCH_JOB_ESTIMATES, jobId),\n  receiveErrors: (jobId: number, errors: string[]) => createAction(RECEIVE_JOB_ERRORS, { jobId, errors }),\n  receiveEstimates: (jobId: number, estimates: IEstimateOverviewData[]) =>\n    createAction(RECEIVE_JOB_ESTIMATES, { jobId, estimates }),\n  updateEstimateOverview: (estimate: EstimateRecord) => createAction(UPDATE_ESTIMATE_OVERVIEW, { estimate }),\n  receiveEstimatePdf: (estimateId: number, data: Blob, documentId: number) =>\n    createAction(RECEIVE_ESTIMATE_PDF, { estimateId, data, documentId }),\n  removeEstimatePdf: (estimateId: number) => createAction(REMOVE_ESTIMATE_PDF, { estimateId }),\n  fetchLandingEstimate: (key: string) => createAction(FETCH_LANDING_ESTIMATE, { key }),\n  receiveLandingEstimate: (key: string, response: IEstimateLandingResponse) =>\n    createAction(RECEIVE_LANDING_ESTIMATE, { key, response }),\n  setLandingLoaded: (key: string) => createAction(SET_LANDING_LOADED, { key }),\n  addPaymentTermTemplate: (estimateId: number, template: PaymentTermTemplateRecord) =>\n    createAction(ADD_PT_TEMPLATE, { estimateId, template }),\n  addPaymentTermItem: (estimateId: number, item: PaymentTermItemRecord) =>\n    createAction(ADD_PT_ITEM, { estimateId, item }),\n  removePaymentTermItem: (estimateId: number, item: PaymentTermItemRecord) =>\n    createAction(REMOVE_PT_ITEM, { estimateId, item }),\n  updatePaymentTermItem: (estimateId: number, item: PaymentTermItemRecord) =>\n    createAction(UPDATE_PT_ITEM, { estimateId, item }),\n  removeDiscount: (estimateId: number, discount: EstimateDiscountRecord | string) =>\n    createAction(REMOVE_DISCOUNT, { estimateId, discount }),\n  addDiscount: (estimateId: number, discount: IEstimateDiscountData) =>\n    createAction(ADD_DISCOUNT, { estimateId, discount }),\n  updateDiscount: (estimateId: number, discount: EstimateDiscountRecord) =>\n    createAction(UPDATE_DISCOUNT, { estimateId, discount }),\n  updateBaseTotal: (estimateId: number) => createAction(UPDATE_BASE_TOTAL, { estimateId }),\n  updateDiscountTotal: (estimateId: number) => createAction(UPDATE_DISCOUNT_TOTAL, { estimateId }),\n  updateTaxTotal: (estimateId: number) => createAction(UPDATE_TAX_TOTAL, { estimateId }),\n  updatePaymentTermTotal: (estimateId: number) => createAction(UPDATE_PAYMENT_TERM_TOTAL, { estimateId }),\n  duplicateEstimate: (estimateId: number) => createAction(DUPLICATE_ESTIMATE, { estimateId }),\n  editEstimateName: (estimateId: number, name: string) => createAction(EDIT_NAME, { estimateId, name }),\n  addFinanceOptionId: (estimateId: number, financeOptionId: number) =>\n    createAction(ADD_FINANCE_OPTION_ID, { estimateId, financeOptionId }),\n  setEstimateFinanceOptions: (estimateId: number) => createAction(SET_ESTIMATE_FINANCE_OPTIONS, { estimateId }),\n  fetchCalculations: (financedAmount: number, financeOptionIds: List<number>) =>\n    createAction(FETCH_CALCULATIONS, { financedAmount, financeOptionIds }),\n  receiveCalculations: (financedAmount: number, calculations: ICalculatedFinancingData[]) =>\n    createAction(RECEIVE_CALCULATIONS, { financedAmount, calculations }),\n  fetchEstimateCommission: (estimateId: number) => createAction(FETCH_ESTIMATE_COMMISSION, { estimateId }),\n  receiveEstimateCommission: (commissionData: IEstimateCommissionData) =>\n    createAction(RECEIVE_ESTIMATE_COMMISSION, { commissionData }),\n  setCalulationsError: (financedAmount: number, financeOptionIds: List<number>, errors: string[]) =>\n    createAction(SET_CALCULATIONS_ERROR, { financedAmount, financeOptionIds, errors }),\n  setEstimateSignedDocuments: (jobId: number, estimateSignedDocuments: List<EstimateSignedDocumentRecord>) =>\n    createAction(SET_ESTIMATE_SIGNED_DOCUMENTS, { jobId, estimateSignedDocuments }),\n  resetDiscounts: (estimateId: number) => createAction(RESET_DISCOUNTS, { estimateId }),\n  resetPaymentTerms: (estimateId: number) => createAction(RESET_PAYMENT_TERMS, { estimateId }),\n  updateMetadata: (estimateId: number, metadataName: string, metadata: Map<string, any>) =>\n    createAction(UPDATE_METADATA, { estimateId, metadataName, metadata }),\n};\n\nexport const AsyncActions = {\n  getEstimate: (estimateId: number, orgId?: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      //TODO: at some point this should do a quick etag call, something, to do cache validation\n      // if (estimateSelector(getState(), { estimateId }) !== undefined) {\n      //   return Promise.resolve(estimateSelector(getState(), { estimateId }));\n      // }\n\n      dispatch(Actions.fetchEstimate(estimateId));\n\n      try {\n        const response = await estimateService.load(estimateId);\n        if (!orgId) {\n          orgId = currentJobOrgId(getState());\n        }\n        await dispatch(\n          activatedPriceListActions.AsyncActions.getCached(orgId, response.estimate.activated_price_list_id),\n        );\n        dispatch(Actions.receiveEstimate(response.estimate));\n        dispatch(AsyncActions.updateEstimateTotal(estimateId));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.receiveEstimateError(estimateId, errors));\n        return Promise.reject(response.data.errors);\n      }\n    };\n  },\n  updateOrCreateEstimate: (estimateId: number, idx = 0): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(Actions.fetchEstimate(estimateId));\n      const estimate = toEstimateJson(getState(), { estimateId: estimateId, fullEstimate: true });\n\n      try {\n        const response = await estimateService.updateOrCreate(estimate);\n        const updatedEstimate = response.estimate;\n        dispatch(Actions.receiveEstimate(updatedEstimate));\n        const documentsArray: IDocumentData[] = getCreatedLineItemDocuments(estimate, updatedEstimate);\n        await dispatch(AsyncActions.directUploadEstimateLineItemDocuments(documentsArray));\n        dispatch(AsyncActions.updateEstimateTotal(updatedEstimate.id));\n        const estimateRecord = estimateSelector(getState(), { estimateId: updatedEstimate.id });\n        dispatch(Actions.updateEstimateOverview(estimateRecord));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved estimate successfully\"));\n        return { index: idx, id: updatedEstimate.id };\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.receiveEstimateError(estimateId, errors));\n        return Promise.reject(errors);\n      }\n    };\n  },\n  directUploadEstimateLineItemDocuments: (documentsArray: IDocumentData[]): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      if (documentsArray.length) {\n        await Promise.all(\n          documentsArray.map(async (document: IDocumentData) => {\n            const options = {\n              documentableType: \"estimate_line_item\" as DocumentableType,\n              documentableId: document.documentable_id,\n              display: document.display,\n              disableFlash: true,\n            };\n            const files = [];\n            try {\n              const file: File = await download(document as any);\n              files.push(file);\n            } catch (response) {\n              handleErrors([`A document named \"${document.name}\" failed to be fetched and attached.`], dispatch);\n              return;\n            }\n            await dispatch(documentActions.AsyncActions.batchCreateDocument(files, options));\n          }),\n        );\n      }\n    };\n  },\n  updateEstimateTotal: (estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(Actions.updateBaseTotal(estimateId));\n      dispatch(Actions.updateDiscountTotal(estimateId));\n      dispatch(Actions.updateTaxTotal(estimateId));\n      dispatch(Actions.updatePaymentTermTotal(estimateId));\n      await dispatch(\n        AsyncActions.reduxCalculateCalculatedFinancing(\n          estimateId,\n          estimateFinanceOptionIds(getState(), { estimateId }),\n        ),\n      );\n      dispatch(Actions.setEstimateFinanceOptions(estimateId));\n      dispatch(Actions.setLastSavedEstimate(estimateId));\n    };\n  },\n  getJobEstimates: (jobId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchEstimates(jobId));\n\n      try {\n        const response = await estimateService.loadByJob(jobId);\n        dispatch(Actions.receiveEstimates(jobId, response.estimates));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.receiveErrors(jobId, errors));\n        return Promise.reject(response.data);\n      }\n    };\n  },\n  shallowUpdateEstimate: (estimate: EstimateRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.fetchEstimate(estimate.id));\n\n      try {\n        const response = await estimateService.shallowUpdate(estimate);\n        dispatch(Actions.receiveEstimate(response.estimate));\n\n        const estimateRecord = estimateSelector(getState(), { estimateid: estimate.id });\n        dispatch(Actions.updateEstimateOverview(estimateRecord));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Updated estimate successfully\"));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.receiveEstimateError(estimate.id, errors));\n        return Promise.reject(response.data);\n      }\n    };\n  },\n  landingEstimate: (queryParams: any): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      const key = queryParams.key;\n      dispatch(Actions.fetchLandingEstimate(key));\n\n      try {\n        const response = await estimateService.landing(queryParams);\n        dispatch(Actions.receiveLandingEstimate(key, response));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.setLandingLoaded(key));\n        return Promise.reject(errors);\n      }\n    };\n  },\n  getEstimatePdf: (estimateId: number, docType: DocType, tempFolder = false): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const jobId = currentJobId(getState());\n        dispatch(Actions.fetchEstimate(estimateId));\n        const response = await estimateService.fetchPdf(jobId, estimateId, docType, tempFolder);\n        const blob = await response.blob();\n        const documentId = Number(response.headers.get(\"document-id\"));\n        dispatch(Actions.receiveEstimatePdf(estimateId, blob, documentId));\n      } catch (response) {\n        dispatch(Actions.setEstimateLoaded(estimateId));\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  addDiscount: (estimateId: number, discount: IEstimateDiscountData): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.addDiscount(estimateId, discount));\n      dispatch(AsyncActions.updateDiscountTotal(estimateId));\n    };\n  },\n  removeDiscount: (estimateId: number, discount: EstimateDiscountRecord | string): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.removeDiscount(estimateId, discount));\n      dispatch(AsyncActions.updateDiscountTotal(estimateId));\n    };\n  },\n  updateDiscount: (estimateId: number, discount: EstimateDiscountRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.updateDiscount(estimateId, discount));\n      dispatch(AsyncActions.updateDiscountTotal(estimateId));\n    };\n  },\n  updateDiscountTotal: (estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(Actions.updateDiscountTotal(estimateId));\n      dispatch(Actions.updateTaxTotal(estimateId));\n      dispatch(Actions.updatePaymentTermTotal(estimateId));\n      await dispatch(\n        AsyncActions.reduxCalculateCalculatedFinancing(\n          estimateId,\n          estimateFinanceOptionIds(getState(), { estimateId }),\n        ),\n      );\n      dispatch(Actions.setEstimateFinanceOptions(estimateId));\n    };\n  },\n  addPaymentTermTemplate: (estimateId: number, template: PaymentTermTemplateRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(Actions.addPaymentTermTemplate(estimateId, template));\n      dispatch(Actions.updatePaymentTermTotal(estimateId));\n      await dispatch(\n        AsyncActions.reduxCalculateCalculatedFinancing(\n          estimateId,\n          estimateFinanceOptionIds(getState(), { estimateId }),\n        ),\n      );\n      dispatch(Actions.setEstimateFinanceOptions(estimateId));\n    };\n  },\n  addPaymentTermItem: (estimateId: number, item: PaymentTermItemRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(Actions.addPaymentTermItem(estimateId, item));\n      dispatch(Actions.updatePaymentTermTotal(estimateId));\n      await dispatch(\n        AsyncActions.reduxCalculateCalculatedFinancing(\n          estimateId,\n          estimateFinanceOptionIds(getState(), { estimateId }),\n        ),\n      );\n      dispatch(Actions.setEstimateFinanceOptions(estimateId));\n    };\n  },\n  removePaymentTermItem: (estimateId: number, item: PaymentTermItemRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(Actions.removePaymentTermItem(estimateId, item));\n      dispatch(Actions.updatePaymentTermTotal(estimateId));\n      await dispatch(\n        AsyncActions.reduxCalculateCalculatedFinancing(\n          estimateId,\n          estimateFinanceOptionIds(getState(), { estimateId }),\n        ),\n      );\n      dispatch(Actions.setEstimateFinanceOptions(estimateId));\n    };\n  },\n  updatePaymentTermItem: (estimateId: number, item: PaymentTermItemRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(Actions.updatePaymentTermItem(estimateId, item));\n      dispatch(Actions.updatePaymentTermTotal(estimateId));\n      await dispatch(\n        AsyncActions.reduxCalculateCalculatedFinancing(\n          estimateId,\n          estimateFinanceOptionIds(getState(), { estimateId }),\n        ),\n      );\n      dispatch(Actions.setEstimateFinanceOptions(estimateId));\n    };\n  },\n  addFinanceOptionId: (estimateId: number, financeOptionId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(Actions.addFinanceOptionId(estimateId, financeOptionId));\n      await dispatch(\n        AsyncActions.reduxCalculateCalculatedFinancing(\n          estimateId,\n          estimateFinanceOptionIds(getState(), { estimateId }),\n        ),\n      );\n      dispatch(Actions.setEstimateFinanceOptions(estimateId));\n    };\n  },\n  reduxCalculateCalculatedFinancing: (\n    estimateId: number,\n    financeOptionIds: List<number>,\n    forceRefresh = false,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const estimateRecord = estimateSelector(getState(), { estimateId });\n      const financedAmount = estimateRecord.getIn([\"payment_terms\", \"financed_amount\"]);\n      dispatch(\n        AsyncActions.calculateCalculatedFinancing(estimateRecord, financedAmount, financeOptionIds, forceRefresh),\n      );\n    };\n  },\n  calculateCalculatedFinancing: (\n    estimate: EstimateRecord | IEstimate,\n    financedAmount: number,\n    financeOptionIds: List<number>,\n    forceRefresh: boolean,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const jobRecord = job(getState(), { jobId: estimate.job_id });\n      const asyncFinanceOptionIds = filteredFinanceOptions(getState(), {\n        providers: AsyncCalcFinanceOptionProviders,\n        financeOptionIds,\n        financedAmount,\n        forceRefresh,\n      }).map((fo) => fo.id);\n      const localFinanceOptions = filteredFinanceOptions(getState(), {\n        providers: LocalCalcFinanceOptionProviders,\n        financeOptionIds,\n        financedAmount,\n      });\n\n      if (localFinanceOptions.size > 0) {\n        dispatch(Actions.receiveCalculations(financedAmount, localCalculations(localFinanceOptions, estimate)));\n      }\n\n      if (asyncFinanceOptionIds.size > 0) {\n        dispatch(Actions.fetchCalculations(financedAmount, asyncFinanceOptionIds));\n        try {\n          const response = await financeOptionService.calculate(\n            jobRecord.org_id,\n            asyncFinanceOptionIds.toArray(),\n            financedAmount,\n          );\n          dispatch(Actions.receiveCalculations(financedAmount, response.calculations));\n        } catch (response) {\n          const errors = handleErrors(response);\n          dispatch(Actions.setCalulationsError(financedAmount, asyncFinanceOptionIds, errors));\n        }\n      }\n    };\n  },\n  calculateEstimateCommission: (estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchEstimateCommission(estimateId));\n\n      try {\n        const response = await estimateService.getEstimateCommission(estimateId);\n        dispatch(Actions.receiveEstimateCommission(response));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.receiveEstimateError(estimateId, errors));\n        return Promise.reject(response.data.errors);\n      }\n    };\n  },\n  getCommissionPdf: (estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const data = await estimateService.getCommissionPdf(estimateId);\n        fileSaver.saveAs(data, `estimate_${estimateId}_commission_sheet.pdf`);\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  emailEstimate: (args: EmailEstimateArgs): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const estimateId = selectedEstimateId(getState());\n        await estimateService.emailEstimate(estimateId, args);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Document was successfully sent.\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  attachIntegration: (\n    estimateId: number,\n    integrationType: string,\n    documentType: \"estimate\" | \"contract\",\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        await estimateService.attachIntegration(estimateId, documentType);\n        const message = `Successfully attached document to ${\n          integrationType === \"marketsharp\"\n            ? \"Contact in MarketSharp\"\n            : integrationType === \"salesforce\"\n              ? \"Opportunity in Salesforce\"\n              : integrationType === \"job_nimbus\"\n                ? \"Job Nimbus\"\n                : integrationType === \"job_progress\"\n                  ? \"JobProgress\"\n                  : integrationType === \"lead_perfection\"\n                    ? \"LeadPerfection\"\n                    : \"integration\"\n        }.`;\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, message));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  signContract: (estimateId: number, notify: boolean, recipients: any[]): ThunkResult<Promise<number>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const state = getState();\n        const estimate = estimateSelector(state, { estimateId });\n        const fileName =\n          currentJob(state).name + \" - \" + moment().format(\"MM-DD-Y HH:mm\") + \" - \" + contractTitle(state) + \".pdf\";\n\n        const data = {\n          include: [\"document\", \"recipients\"],\n          notify: notify,\n          document: {\n            name: fileName,\n          },\n          signed_document: {\n            document_id: estimate.get(\"tempDocumentId\"),\n            platform: settingsConfig(state, { path: [\"signature_settings\", \"signature_platform\"], notSet: \"scribble\" }),\n            recipients_attributes: _.select(recipients, (recipient) => {\n              return recipient.required || recipient.include;\n            }),\n          },\n        };\n        const { signed_document } = await estimateService.signContract(estimateId, data);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.info, \"Signed Document uploaded.  Processing...\"));\n        await dispatch(taskActions.AsyncActions.pollTask(signed_document.document.task));\n        return signed_document.document.signed_document.id;\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  manuallyTrigger: (estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        await estimateService.manuallyTrigger(estimateId);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Successfully triggered.\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { ITaskContext, ITaskData } from \"app2/src/records/Task\";\nimport { dispatch, useState } from \"../storeRegistry\";\nimport { Actions } from \"app2/src/reducers/task.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { task } from \"app2/src/selectors/task.selectors\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\n\nexport const syncTask = async (taskObj: ITaskData): Promise<void> => {\n  const state = useState();\n  const taskRecord = await task(state, { taskId: taskObj.id });\n\n  if (taskRecord && taskRecord.context.model) {\n    switch (taskObj.status) {\n      case \"finished\":\n        await handleTaskSuccess(taskObj, taskRecord.context);\n        break;\n      case \"error\":\n        await handleTaskError(taskObj, taskRecord.context);\n        break;\n      default:\n        break;\n    }\n    dispatch(Actions.receiveTask(taskObj));\n  }\n};\n\nexport const handleTaskSuccess = async (newTask: ITaskData, context: ITaskContext) => {\n  if (context.model && context.action) {\n    await dispatchContextAction(newTask, context.model, context.action, context.action_payload);\n  } else {\n    const name = newTask.results.class_name || \"Task Completion\";\n    dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, `${name} Successful.`));\n  }\n};\n\nexport const handleTaskError = async (newTask: ITaskData, context: ITaskContext) => {\n  if (context.model && context.error_action) {\n    await dispatchContextAction(newTask, context.model, context.error_action, context.action_payload);\n  } else {\n    const errorMessage =\n      newTask?.results?.error_message ||\n      \"There were problems processing your task. Please try again. If the problem persists contact support.\";\n\n    dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errorMessage));\n  }\n};\n\nconst dispatchContextAction = async (newTask: ITaskData, model: string, actionHandler: string, action_payload: any) => {\n  try {\n    const module = await import(`app2/src/reducers/${model}.actions.ts`);\n    const action = module.AsyncActions[actionHandler];\n    dispatch(action(newTask, action_payload));\n  } catch (error) {\n    console.error(\"Error in dispatching function dynamically:\", error.message);\n  }\n};\n","type WsEventName =\n  | \"WsOpen\"\n  | \"WsClose\"\n  | \"WsError\"\n  | \"WsTokenExpired\"\n  | \"WsTokenRefreshSuccess\"\n  | \"WsTokenRefreshFailed\";\n\ntype WsEventAttrs = {\n  attempt?: number;\n  code?: number;\n  reason?: string;\n  wasClean?: boolean;\n  isReconnect?: boolean;\n  tokenExpired?: boolean;\n  refreshErrorClass?: string;\n  refreshErrorMessage?: string;\n};\n\n/**\n * Safely send a WebSocket event to NewRelic.\n * This method is typed specifically for websocket monitoring\n *\n * @param {WsEventName} name name of the WsEvent\n * @param {WsEventAttrs} attrs attrs to include in payload to NewRelic\n * @returns void\n */\nexport const trackWsEvent = (name: WsEventName, attrs: WsEventAttrs = {}): void => {\n  if (typeof window === \"undefined\") return;\n\n  const nr = (window as any).newrelic;\n  if (!nr || typeof nr.addPageAction !== \"function\") return;\n\n  nr.addPageAction(name, attrs);\n};\n\n/**\n * Safely send an error to NewRelic.\n * All errors sent via this method will appear in the Errors Inbox and count towards the errors for the agent/app.\n *\n * @param {string} err The error message\n * @param {Record<string, any>} extra Additional data to include in the error to NR\n * @returns void\n */\nexport const noticeError = (err: unknown, extra: Record<string, any> = {}): void => {\n  if (typeof window === \"undefined\") return;\n\n  const nr = (window as any).newrelic;\n  if (!nr || typeof nr.noticeError !== \"function\") return;\n\n  nr.noticeError(err, extra);\n};\n","import { Channel, Socket } from \"phoenix\";\nimport * as config from \"react-global-configuration\";\nimport { useState, dispatch, StoreRegistry } from \"app2/src/storeRegistry\";\nimport { createAction } from \"app2/src/reducers/Utils\";\nimport { ITaskData } from \"app2/src/records/Task\";\nimport { syncTask } from \"app2/src/helpers/TaskSync\";\nimport * as AppMessageAPI from \"app2/src/api/appMessage.service\";\nimport { currentUserAccess } from \"app2/src/selectors/user.selectors\";\nimport { isExpired } from \"app2/src/services/jwtToken.service\";\nimport { IAuthService } from \"app2/src/helpers/Auth.service\";\nimport * as authActions from \"app2/src/reducers/auth.actions\";\nimport { trackWsEvent, noticeError } from \"app2/src/helpers/NewRelic\";\n\nexport type RemoteStorageCallback = (data: IRemoteStorageStateChange) => void;\nexport type RemoteStorageErrorCallback = (response?: any) => any;\nexport type RemoteStorageTimeoutCallback = (response?: any) => any;\n\nexport interface IRemoteStorageServiceOptions {\n  callbacks: RemoteStorageCallback[];\n  onError?: RemoteStorageErrorCallback;\n  onTimeout?: RemoteStorageTimeoutCallback;\n}\n\nexport interface IRemoteStorageStateChange {\n  change: { [key: string]: any };\n  kind: \"clear\" | \"full\" | \"push\" | \"remove\";\n  node: string;\n  sessionId: string;\n  timestamp: Date;\n}\n\nexport interface IRemoteStorageService {\n  initialized: boolean;\n  connect: (sessionId: string) => Promise<boolean>;\n  clear: () => Promise<boolean>;\n  disconnect: () => void;\n  endSession: () => Promise<boolean>;\n  getItem: (key: string) => Promise<boolean>;\n  removeItem: (key: string) => Promise<boolean>;\n  setItem: (key: string, value: any) => Promise<boolean>;\n  getAppMessageChannel: () => Channel | undefined;\n  joinAppMessageChannel: (allowReconnect?: boolean) => Promise<void>;\n}\n\n/**\n * A class to facilitate syncing values between browser instances\n */\nexport class RemoteStorageService implements IRemoteStorageService {\n  public initialized: boolean;\n\n  private _callbacks: RemoteStorageCallback[];\n  private _channel: Channel;\n  private _taskChannel: Channel;\n  private _appMessageChannel: Channel;\n  private _errorCallback: RemoteStorageErrorCallback;\n  private _socket: Socket;\n  private _socketUrl: string;\n  private _timeout = 2_000;\n  private _connectCount = 0;\n  private _timeoutCallback: RemoteStorageTimeoutCallback;\n\n  constructor(options: IRemoteStorageServiceOptions) {\n    this._socketUrl = config.get(\"RSF_ANALYTICS_WS\") + \"/socket\";\n    this._callbacks = options.callbacks;\n\n    this._errorCallback = options.onError || this.defaultErrorHandler;\n    this._timeoutCallback = options.onTimeout || this.defaultTimeoutHandler;\n  }\n\n  /**\n   * Connect to the server and subscribe to new data being pushed down from the remote storage.\n   */\n  public async connect(sessionId: string): Promise<boolean> {\n    return new Promise<boolean>((resolve, reject) => {\n      // If the channel has already been initialized, unsubscribe from the existing listeners\n      if (this._channel) {\n        this._channel.off(\"session:disconnect\");\n        this._channel.off(\"state:changed\");\n      }\n\n      if (this._socket && this._socket.isConnected()) {\n        this._socket.disconnect();\n      }\n\n      this._socket = new Socket(this._socketUrl, {\n        params: () => ({ token: useState().getIn([\"auth\", \"token\"]) }),\n      });\n      this._socket.onOpen(() => {\n        this._connectCount += 1;\n\n        trackWsEvent(\"WsOpen\", {\n          attempt: this._connectCount,\n          isReconnect: this._connectCount > 1,\n        });\n      });\n      this._socket.onClose((event) => {\n        trackWsEvent(\"WsClose\", {\n          code: event.code,\n          reason: event.reason,\n          wasClean: event.wasClean,\n          isReconnect: this._connectCount > 1,\n        });\n      });\n      this._socket.onError(async (e, _t) => {\n        if (isExpired(useState().getIn([\"auth\", \"token\"]))) {\n          trackWsEvent(\"WsTokenExpired\", {\n            isReconnect: this._connectCount > 0,\n          });\n          const authService = StoreRegistry.get<IAuthService>(\"authService\");\n\n          try {\n            await authService.refreshToken(useState().getIn([\"auth\", \"refreshToken\"]));\n          } catch (e) {\n            trackWsEvent(\"WsTokenRefreshFailed\", {\n              refreshErrorClass: e?.name,\n              refreshErrorMessage: e?.message?.slice(0, 200), // avoid huge payloads\n            });\n\n            dispatch(authActions.Actions.setRefreshTokenExpired(true));\n          }\n        } else {\n          noticeError(e, {\n            context: \"websocket.onError\",\n          });\n        }\n        this._errorCallback(e);\n      });\n      this._socket.connect();\n\n      const params = () => ({ bearer: useState().getIn([\"auth\", \"token\"]) });\n      const topic = `remote_storage:${sessionId}`;\n      this._channel = this._socket.channel(topic, params);\n\n      this._channel.on(\"session:disconnect\", () => this.disconnect());\n      this._channel.on(\"state:changed\", this.processStateChange.bind(this));\n      this._channel\n        .join()\n        .receive(\"ok\", () => resolve(true))\n        .receive(\"error\", (reasons) => reject(reasons))\n        .receive(\"timeout\", () => reject(\"A timeout occurred\"));\n\n      const topic2 = `task_sync:${sessionId}`;\n      this._taskChannel = this._socket.channel(topic2, params);\n      this._taskChannel.on(\"task_update_sync\", async (data) => {\n        const task: ITaskData = data.data;\n        if (task) await syncTask(task);\n      });\n\n      this._taskChannel\n        .join()\n        .receive(\"ok\", () => resolve(true))\n        .receive(\"error\", (reasons) => reject(reasons))\n        .receive(\"timeout\", () => reject(\"A timeout occurred\"));\n\n      this.initialized = true;\n    });\n  }\n\n  /** Deletes all state for the session on the remote server */\n  public async clear(): Promise<boolean> {\n    return new Promise<boolean>((resolve) => {\n      if (!this._channel) {\n        resolve(false);\n        return;\n      }\n\n      this._channel\n        .push(\"storage:clear_state\", {}, this._timeout)\n        .receive(\"ok\", () => resolve(true))\n        .receive(\"error\", () => resolve(false))\n        .receive(\"timeout\", () => resolve(false))\n        // Client code callbacks\n        .receive(\"error\", this._errorCallback)\n        .receive(\"timeout\", this._timeoutCallback);\n    });\n  }\n\n  /**\n   * Asks the server to send out debug information about the custer status to all clients\n   * connected to the session. The callback function will be called on \"ok\", \"error\" and \"timeout\".\n   * The only place to view the response is in the Developer Tools Network tab (in the web socket\n   * output).\n   */\n  public async debugCluster(): Promise<boolean> {\n    return new Promise<boolean>((resolve) => {\n      if (!this._channel) {\n        resolve(false);\n        return;\n      }\n\n      this._channel\n        .push(\"debug:cluster\", {}, this._timeout)\n        .receive(\"ok\", () => resolve(true))\n        .receive(\"error\", () => resolve(false))\n        .receive(\"timeout\", () => resolve(false));\n    });\n  }\n\n  /**\n   * Disconnects from the server but does not delete the remote storage for this\n   * session. Consider calling `endSession()` instead to clean up the server.\n   */\n  public disconnect(): void {\n    this.initialized = false;\n\n    if (this._channel) {\n      this._channel.leave(this._timeout);\n    }\n\n    if (this._socket) {\n      this._socket.disconnect();\n    }\n  }\n\n  /**\n   * Sends a message to the server to delete this session data and disconnect\n   * any other remote storage sessions\n   * */\n  public async endSession(): Promise<boolean> {\n    return new Promise<boolean>((resolve) => {\n      if (!this._channel) {\n        resolve(false);\n        return;\n      }\n\n      this._channel\n        .push(\"session:disconnect\", {}, this._timeout)\n        .receive(\"ok\", () => resolve(true))\n        .receive(\"error\", () => resolve(false))\n        .receive(\"timeout\", () => resolve(false));\n    });\n  }\n\n  /**\n   * Request an item to be pushed out to all clients for the session.\n   * **Note:** This does not return the value from this method\n   */\n  public async getItem(key: string): Promise<boolean> {\n    return new Promise<boolean>((resolve) => {\n      if (!this._channel) {\n        resolve(false);\n        return;\n      }\n\n      this._channel\n        .push(\"storage:get_item\", { data: key }, this._timeout)\n        .receive(\"ok\", () => resolve(true))\n        .receive(\"error\", () => resolve(false))\n        .receive(\"timeout\", () => resolve(false))\n        // Client code callbacks\n        .receive(\"error\", this._errorCallback)\n        .receive(\"timeout\", this._timeoutCallback);\n    });\n  }\n\n  /** Removes an item from the remote storage */\n  public async removeItem(key: string): Promise<boolean> {\n    return new Promise<boolean>((resolve) => {\n      if (!this._channel) {\n        resolve(false);\n        return;\n      }\n\n      this._channel\n        .push(\"storage:remove_item\", { data: key }, this._timeout)\n        .receive(\"ok\", () => resolve(true))\n        .receive(\"error\", () => resolve(false))\n        .receive(\"timeout\", () => resolve(false))\n        // Client code callbacks\n        .receive(\"error\", this._errorCallback)\n        .receive(\"timeout\", this._timeoutCallback);\n    });\n  }\n\n  /**\n   * Sets the key/value pair on the server. If the key already exists, it will be\n   * overwritten. Changes are automatically pushed out to session clients.\n   */\n  public async setItem(key: string, value: any): Promise<boolean> {\n    return new Promise<boolean>((resolve) => {\n      if (!this._channel) {\n        resolve(false);\n        return;\n      }\n\n      this._channel\n        .push(\"storage:set_item\", { data: { [key]: value } }, this._timeout)\n        .receive(\"ok\", () => resolve(true))\n        .receive(\"error\", () => resolve(false))\n        .receive(\"timeout\", () => resolve(false))\n        // Client code callbacks\n        .receive(\"error\", this._errorCallback)\n        .receive(\"timeout\", this._timeoutCallback);\n    });\n  }\n\n  /** Returns the AppMessage channel for direct access (useful for debugging) */\n  public getAppMessageChannel(): Channel | undefined {\n    return this._appMessageChannel;\n  }\n\n  /**\n   * Joins the AppMessage channel with the current access.\n   * This should be called after callbacks are initialized to ensure initial messages are captured.\n   * Can also be used to reconnect when the user's current access changes.\n   *\n   * @param allowReconnect - If true, will leave existing channel before rejoining. If false, will reject if channel already exists.\n   */\n  public async joinAppMessageChannel(allowReconnect = false): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      // Do not need to check for connected socket, just that it's there.\n      // library will wait for socket to connect before joining.\n      if (!this._socket) {\n        reject(\"Socket is not available\");\n        return;\n      }\n\n      // Handle existing channel based on allowReconnect flag\n      if (this._appMessageChannel) {\n        if (allowReconnect) {\n          this._appMessageChannel.leave(this._timeout);\n        } else {\n          reject(\"AppMessage channel already exists\");\n          return;\n        }\n      }\n\n      // Create new channel\n      const access = currentUserAccess(useState());\n      const accessUid = access?.get(\"uid\") || \"\";\n      const appMessageTopic = `app_messages:${accessUid || \"_\"}`;\n\n      // No params needed - authentication is at socket level\n      this._appMessageChannel = this._socket.channel(appMessageTopic);\n      AppMessageAPI.setupChannelListeners(this._appMessageChannel);\n\n      // Join the channel\n      this._appMessageChannel\n        .join()\n        .receive(\"ok\", (response: AppMessageAPI.IAppMessageResponse) => {\n          AppMessageAPI.handleJoinResponse(response);\n          resolve();\n        })\n        .receive(\"error\", (reasons) => reject(reasons))\n        .receive(\"timeout\", () => reject(\"A timeout occurred\"));\n    });\n  }\n\n  /** Generic error handler that throws an exception */\n  private defaultErrorHandler(err: any): never {\n    throw {\n      message: \"Error occurred: Consider including an error callback.\",\n      error: err,\n    };\n  }\n\n  /** Generic timeout handler that throws an exception */\n  private defaultTimeoutHandler(err: any): never {\n    throw {\n      message: \"Timeout occurred: Consider including a timeout callback.\",\n      error: err,\n    };\n  }\n\n  /** Iterates over the callbacks that were registers during object creation */\n  private processStateChange(res: any): void {\n    // Massage the values into appropriate shapes\n    res.data.timestamp = new Date(res.data.timestamp);\n    res.data.sessionId = res.data.session_id;\n    delete res.data.session_id;\n\n    for (const cb of this._callbacks) {\n      // Send the payload to the subscriber\n      cb(res.data);\n    }\n  }\n}\n\nconst remoteStorageCallback = (data) => {\n  switch (data.kind) {\n    case \"full\":\n    case \"push\":\n    case \"clear\":\n      if (data.change) {\n        _.each(Object.keys(data.change), (key) => {\n          const action = () => createAction(key, data.change[key]);\n          //@ts-ignore\n          dispatch(action());\n        });\n      }\n  }\n};\n\nexport const remoteStorage = new RemoteStorageService({\n  callbacks: [remoteStorageCallback],\n  onError: () => {},\n  onTimeout: () => {},\n});\n\nlet remoteStorageInstance = StoreRegistry.get<IRemoteStorageService>(\"remoteStorage\");\nexport const getRemoteStorage = () => {\n  if (remoteStorageInstance) {\n    return remoteStorageInstance;\n  }\n\n  remoteStorageInstance = StoreRegistry.get<IRemoteStorageService>(\"remoteStorage\");\n  return remoteStorageInstance;\n};\n\n// Expose AppMessage API and channel to window for console debugging\ndeclare global {\n  interface Window {\n    AppMessageAPI: typeof AppMessageAPI;\n    getAppMessageChannel: () => Channel | undefined;\n  }\n}\n\nwindow.AppMessageAPI = AppMessageAPI;\nwindow.getAppMessageChannel = () => getRemoteStorage()?.getAppMessageChannel();\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.mobile.scroller.min\",[\"kendo.fx.min\",\"kendo.draganddrop.min\"],e)}(function(){return function(e,i){var n=window.kendo,t=n.mobile,s=n.effects,o=t.ui,l=e.proxy,a=e.extend,r=o.Widget,c=n.Class,h=n.ui.Movable,u=n.ui.Pane,d=n.ui.PaneDimensions,m=s.Transition,f=s.Animation,p=Math.abs,v=500,b=.7,x=.96,y=10,T=55,w=.5,g=5,_=\"km-scroller-release\",E=\"km-scroller-refresh\",C=\"pull\",k=\"change\",S=\"resize\",z=\"scroll\",M=2,A=f.extend({init:function(e){var i=this;f.fn.init.call(i),a(i,e),i.userEvents.bind(\"gestureend\",l(i.start,i)),i.tapCapture.bind(\"press\",l(i.cancel,i))},enabled:function(){return this.dimensions.minScale>this.movable.scale},done:function(){return.01>this.dimensions.minScale-this.movable.scale},tick:function(){var e=this.movable;e.scaleWith(1.1),this.dimensions.rescale(e.scale)},onEnd:function(){var e=this.movable;e.scaleTo(this.dimensions.minScale),this.dimensions.rescale(e.scale)}}),O=f.extend({init:function(e){var i=this;f.fn.init.call(i),a(i,e,{transition:new m({axis:e.axis,movable:e.movable,onEnd:function(){i._end()}})}),i.tapCapture.bind(\"press\",function(){i.cancel()}),i.userEvents.bind(\"end\",l(i.start,i)),i.userEvents.bind(\"gestureend\",l(i.start,i)),i.userEvents.bind(\"tap\",l(i.onEnd,i))},onCancel:function(){this.transition.cancel()},freeze:function(e){var i=this;i.cancel(),i._moveTo(e)},onEnd:function(){var e=this;e.paneAxis.outOfBounds()?e._snapBack():e._end()},done:function(){return p(this.velocity)<1},start:function(e){var i,n=this;n.dimension.enabled&&(n.paneAxis.outOfBounds()?n._snapBack():(i=e.touch.id===M?0:e.touch[n.axis].velocity,n.velocity=Math.max(Math.min(i*n.velocityMultiplier,T),-T),n.tapCapture.captureNext(),f.fn.start.call(n)))},tick:function(){var e=this,i=e.dimension,n=e.paneAxis.outOfBounds()?w:e.friction,t=e.velocity*=n,s=e.movable[e.axis]+t;!e.elastic&&i.outOfBounds(s)&&(s=Math.max(Math.min(s,i.max),i.min),e.velocity=0),e.movable.moveAxis(e.axis,s)},_end:function(){this.tapCapture.cancelCapture(),this.end()},_snapBack:function(){var e=this,i=e.dimension,n=e.movable[e.axis]>i.max?i.max:i.min;e._moveTo(n)},_moveTo:function(e){this.transition.moveTo({location:e,duration:v,ease:m.easeOutExpo})}}),H=f.extend({init:function(e){var i=this;n.effects.Animation.fn.init.call(this),a(i,e,{origin:{},destination:{},offset:{}})},tick:function(){this._updateCoordinates(),this.moveTo(this.origin)},done:function(){return p(this.offset.y)<g&&p(this.offset.x)<g},onEnd:function(){this.moveTo(this.destination),this.callback&&this.callback.call()},setCoordinates:function(e,i){this.offset={},this.origin=e,this.destination=i},setCallback:function(e){e&&n.isFunction(e)?this.callback=e:e=i},_updateCoordinates:function(){this.offset={x:(this.destination.x-this.origin.x)/4,y:(this.destination.y-this.origin.y)/4},this.origin={y:this.origin.y+this.offset.y,x:this.origin.x+this.offset.x}}}),B=c.extend({init:function(i){var n=this,t=\"x\"===i.axis,s=e('<div class=\"km-touch-scrollbar km-'+(t?\"horizontal\":\"vertical\")+'-scrollbar\" />');a(n,i,{element:s,elementSize:0,movable:new h(s),scrollMovable:i.movable,alwaysVisible:i.alwaysVisible,size:t?\"width\":\"height\"}),n.scrollMovable.bind(k,l(n.refresh,n)),n.container.append(s),i.alwaysVisible&&n.show()},refresh:function(){var e=this,i=e.axis,n=e.dimension,t=n.size,s=e.scrollMovable,o=t/n.total,l=Math.round(-s[i]*o),a=Math.round(t*o);o>=1?this.element.css(\"display\",\"none\"):this.element.css(\"display\",\"\"),l+a>t?a=t-l:0>l&&(a+=l,l=0),e.elementSize!=a&&(e.element.css(e.size,a+\"px\"),e.elementSize=a),e.movable.moveAxis(i,l)},show:function(){this.element.css({opacity:b,visibility:\"visible\"})},hide:function(){this.alwaysVisible||this.element.css({opacity:0})}}),R=r.extend({init:function(t,s){var o,c,m,f,v,b,x,y,T,w=this;return r.fn.init.call(w,t,s),t=w.element,(w._native=w.options.useNative&&n.support.hasNativeScrolling)?(t.addClass(\"km-native-scroller\").prepend('<div class=\"km-scroll-header\"/>'),a(w,{scrollElement:t,fixedContainer:t.children().first()}),i):(t.css(\"overflow\",\"hidden\").addClass(\"km-scroll-wrapper\").wrapInner('<div class=\"km-scroll-container\"/>').prepend('<div class=\"km-scroll-header\"/>'),o=t.children().eq(1),c=new n.TapCapture(t),m=new h(o),f=new d({element:o,container:t,forcedEnabled:w.options.zoom}),v=this.options.avoidScrolling,b=new n.UserEvents(t,{touchAction:\"pan-y\",fastTap:!0,allowSelection:!0,preventDragEvent:!0,captureUpIfMoved:!0,multiTouch:w.options.zoom,start:function(i){f.refresh();var n=p(i.x.velocity),t=p(i.y.velocity),s=2*n>=t,o=e.contains(w.fixedContainer[0],i.event.target),l=2*t>=n;!o&&!v(i)&&w.enabled&&(f.x.enabled&&s||f.y.enabled&&l)?b.capture():b.cancel()}}),x=new u({movable:m,dimensions:f,userEvents:b,elastic:w.options.elastic}),y=new A({movable:m,dimensions:f,userEvents:b,tapCapture:c}),T=new H({moveTo:function(e){w.scrollTo(e.x,e.y)}}),m.bind(k,function(){w.scrollTop=-m.y,w.scrollLeft=-m.x,w.trigger(z,{scrollTop:w.scrollTop,scrollLeft:w.scrollLeft})}),w.options.mousewheelScrolling&&t.on(\"DOMMouseScroll mousewheel\",l(this,\"_wheelScroll\")),a(w,{movable:m,dimensions:f,zoomSnapBack:y,animatedScroller:T,userEvents:b,pane:x,tapCapture:c,pulled:!1,enabled:!0,scrollElement:o,scrollTop:0,scrollLeft:0,fixedContainer:t.children().first()}),w._initAxis(\"x\"),w._initAxis(\"y\"),w._wheelEnd=function(){w._wheel=!1,w.userEvents.end(0,w._wheelY)},f.refresh(),w.options.pullToRefresh&&w._initPullToRefresh(),i)},_wheelScroll:function(e){this._wheel||(this._wheel=!0,this._wheelY=0,this.userEvents.press(0,this._wheelY)),clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(this._wheelEnd,50);var i=n.wheelDeltaY(e);i&&(this._wheelY+=i,this.userEvents.move(0,this._wheelY)),e.preventDefault()},makeVirtual:function(){this.dimensions.y.makeVirtual()},virtualSize:function(e,i){this.dimensions.y.virtualSize(e,i)},height:function(){return this.dimensions.y.size},scrollHeight:function(){return this.scrollElement[0].scrollHeight},scrollWidth:function(){return this.scrollElement[0].scrollWidth},options:{name:\"Scroller\",zoom:!1,pullOffset:140,visibleScrollHints:!1,elastic:!0,useNative:!1,mousewheelScrolling:!0,avoidScrolling:function(){return!1},pullToRefresh:!1,messages:{pullTemplate:\"Pull to refresh\",releaseTemplate:\"Release to refresh\",refreshTemplate:\"Refreshing\"}},events:[C,z,S],_resize:function(){this._native||this.contentResized()},setOptions:function(e){var i=this;r.fn.setOptions.call(i,e),e.pullToRefresh&&i._initPullToRefresh()},reset:function(){this._native?this.scrollElement.scrollTop(0):(this.movable.moveTo({x:0,y:0}),this._scale(1))},contentResized:function(){this.dimensions.refresh(),this.pane.x.outOfBounds()&&this.movable.moveAxis(\"x\",this.dimensions.x.min),this.pane.y.outOfBounds()&&this.movable.moveAxis(\"y\",this.dimensions.y.min)},zoomOut:function(){var e=this.dimensions;e.refresh(),this._scale(e.fitScale),this.movable.moveTo(e.centerCoordinates())},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},scrollTo:function(e,i){this._native?(this.scrollElement.scrollLeft(p(e)),this.scrollElement.scrollTop(p(i))):(this.dimensions.refresh(),this.movable.moveTo({x:e,y:i}))},animatedScrollTo:function(e,i,n){var t,s;this._native?this.scrollTo(e,i):(t={x:this.movable.x,y:this.movable.y},s={x:e,y:i},this.animatedScroller.setCoordinates(t,s),this.animatedScroller.setCallback(n),this.animatedScroller.start())},pullHandled:function(){var e=this;e.refreshHint.removeClass(E),e.hintContainer.html(e.pullTemplate({})),e.yinertia.onEnd(),e.xinertia.onEnd(),e.userEvents.cancel()},destroy:function(){r.fn.destroy.call(this),this.userEvents&&this.userEvents.destroy()},_scale:function(e){this.dimensions.rescale(e),this.movable.scaleTo(e)},_initPullToRefresh:function(){var e=this;e.dimensions.y.forceEnabled(),e.pullTemplate=n.template(e.options.messages.pullTemplate),e.releaseTemplate=n.template(e.options.messages.releaseTemplate),e.refreshTemplate=n.template(e.options.messages.refreshTemplate),e.scrollElement.prepend('<span class=\"km-scroller-pull\"><span class=\"km-icon\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span><span class=\"km-template\">'+e.pullTemplate({})+\"</span></span>\"),e.refreshHint=e.scrollElement.children().first(),e.hintContainer=e.refreshHint.children(\".km-template\"),e.pane.y.bind(\"change\",l(e._paneChange,e)),e.userEvents.bind(\"end\",l(e._dragEnd,e))},_dragEnd:function(){var e=this;e.pulled&&(e.pulled=!1,e.refreshHint.removeClass(_).addClass(E),e.hintContainer.html(e.refreshTemplate({})),e.yinertia.freeze(e.options.pullOffset/2),e.trigger(\"pull\"))},_paneChange:function(){var e=this;e.movable.y/w>e.options.pullOffset?e.pulled||(e.pulled=!0,e.refreshHint.removeClass(E).addClass(_),e.hintContainer.html(e.releaseTemplate({}))):e.pulled&&(e.pulled=!1,e.refreshHint.removeClass(_),e.hintContainer.html(e.pullTemplate({})))},_initAxis:function(e){var i=this,n=i.movable,t=i.dimensions[e],s=i.tapCapture,o=i.pane[e],l=new B({axis:e,movable:n,dimension:t,container:i.element,alwaysVisible:i.options.visibleScrollHints});t.bind(k,function(){l.refresh()}),o.bind(k,function(){l.show()}),i[e+\"inertia\"]=new O({axis:e,paneAxis:o,movable:n,tapCapture:s,userEvents:i.userEvents,dimension:t,elastic:i.options.elastic,friction:i.options.friction||x,velocityMultiplier:i.options.velocityMultiplier||y,end:function(){l.hide(),i.trigger(\"scrollEnd\",{axis:e,scrollTop:i.scrollTop,scrollLeft:i.scrollLeft})}})}});o.plugin(R)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,i,n){(n||i)()});\n//# sourceMappingURL=kendo.mobile.scroller.min.js.map\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IWebhookData, WebhookRecord } from \"app2/src/records/Webhook\";\nimport { baseCleanProps, listParams } from \"app2/src/api/Api\";\nimport { QueryParamsRecord } from \"../records/Page\";\nimport { IMetaPaginationData } from \"../records/MetaPagination\";\nimport { IWebhookEventData } from \"../records/WebhookEvent\";\nimport { getIn } from \"immutable\";\n\nexport interface IWebhookResponse {\n  webhook?: IWebhookData;\n}\n\nexport interface IWebhookIndexResponse {\n  webhooks: IWebhookData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nexport interface IWebhookEventIndexResponse {\n  webhook_events: IWebhookEventData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nconst url = \"api/v1/orgs/:id/webhooks\";\n\nexport const load = (orgId: number, queryParams: QueryParamsRecord): Promise<IWebhookIndexResponse> => {\n  const params: any = listParams(queryParams);\n\n  // if (getIn(queryParams, [\"parameters\", \"org_id\"], []).length > 0) {\n  //   params[\"org_id\"] = getIn(queryParams, [\"parameters\", \"org_id\"], \"\");\n  // }\n  // params[\"org_id\"] =\n  let actionUrl = urlSetup(orgId);\n  actionUrl = fetcher.urlOptions(actionUrl, params);\n  return fetcher.get<IWebhookIndexResponse>(actionUrl);\n};\n\nexport const loadEvents = (\n  webhookID: string,\n  orgId: number,\n  queryParams: QueryParamsRecord,\n): Promise<IWebhookEventIndexResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(orgId), webhookID, \"events\");\n\n  return fetcher.get<IWebhookEventIndexResponse>(actionUrl, queryParams.toJS());\n};\n\nexport const create = (webhook: WebhookRecord, orgId: number): Promise<IWebhookResponse> => {\n  const actionUrl = urlSetup(orgId);\n  return fetcher.post<IWebhookResponse>(actionUrl, formatWebhookParams(webhook));\n};\n\nexport const update = (webhook: WebhookRecord, orgId: number): Promise<IWebhookResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(orgId), webhook.id);\n  return fetcher.patch(actionUrl, formatWebhookParams(webhook));\n};\n\nexport const destroy = async (webhook: WebhookRecord, orgId: number): Promise<IWebhookResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(orgId), webhook.id);\n  return await fetcher.delete(actionUrl);\n};\n\nexport const urlSetup = (orgId: number): string => {\n  return url.replace(\":id\", orgId.toString());\n};\n\nexport const formatWebhookParams = (webhook: WebhookRecord) => {\n  const webhookObject = baseCleanProps(webhook.toJS());\n  if (webhookObject.auth_type === \"none\") delete webhookObject.auth_config;\n  if (webhookObject.events) {\n    const eventsArray = _.chain(Object.keys(webhookObject.events))\n      .map((model) => {\n        return Object.keys(webhookObject.events[model])\n          .filter((e) => webhookObject.events[model][e] === true)\n          .map((filtered_event) => `${model}.${filtered_event}`);\n      })\n      .flatten()\n      .value();\n    webhookObject.events = eventsArray;\n  }\n  return { webhook: webhookObject };\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IWebhookData, WebhookRecord } from \"app2/src/records/Webhook\";\nimport { IWebhookEventData, WebhookEventRecord } from \"app2/src/records/WebhookEvent\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { load, update, create, destroy, loadEvents, IWebhookResponse } from \"../api/webhook.service\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { QueryParamsRecord, IPageData } from \"../records/Page\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { List } from \"immutable\";\n\nexport const RECEIVE_WEBHOOK = \"@webhooks/RECEIVE_WEBHOOK\";\nexport const RECEIVE_WEBHOOK_EVENT = \"@webhooks/RECEIVE_WEBHOOK_EVENT\";\nexport const RECEIVE_WEBHOOKS = \"@webhooks/RECEIVE_WEBHOOKS\";\nexport const RECEIVE_WEBHOOK_EVENTS = \"@webhooks/RECEIVE_WEBHOOK_EVENTS\";\nexport const REMOVE_WEBHOOK = \"@webhooks/REMOVE_WEBHOOK\";\nexport const RESET_WEBHOOK = \"@webhooks/RESET_WEBHOOK\";\nexport const FETCH_WEBHOOK = \"@webhooks/FETCH_WEBHOOK\";\nexport const UPDATE_FORM = \"@webhooks/UPDATE_FORM\";\nexport const SET_UP_NEW_WEBHOOK = \"@webhooks/SET_UP_NEW_WEBHOOK\";\nexport const SET_WEBHOOK_LOADED = \"@webhooks/SET_WEBHOOK_LOADED\";\n\nexport const Actions = {\n  receiveWebhook: (webhook: Partial<IWebhookData>) => createAction(RECEIVE_WEBHOOK, webhook),\n  receiveWebhookEvent: (webhook_event: Partial<IWebhookEventData>) =>\n    createAction(RECEIVE_WEBHOOK_EVENT, webhook_event),\n  receiveWebhooks: (webhooks: Partial<IWebhookData>[]) => createAction(RECEIVE_WEBHOOKS, { webhooks }),\n  receiveWebhookEvents: (webhook_events: Partial<IWebhookEventData>[]) =>\n    createAction(RECEIVE_WEBHOOK_EVENTS, { webhook_events }),\n  removeWebhook: (webhookId: string) => createAction(REMOVE_WEBHOOK, { webhookId }),\n  fetchWebhook: (id: string) => createAction(FETCH_WEBHOOK, id),\n  setWebhookLoaded: (id: string) => createAction(SET_WEBHOOK_LOADED, id),\n  updateForm: (event: { rootPath: (string | number)[]; name: string; value: any }) =>\n    createAction(UPDATE_FORM, { event }),\n  resetWebhook: (webhookId: string) => createAction(RESET_WEBHOOK, { webhookId }),\n  // editWebhook: (webhookId: number, webhook: string) => createAction(EDIT_WEBHOOK, { noteId, note }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  listWebhooks: (\n    orgId: number,\n    queryParams: QueryParamsRecord = new QueryParamsRecord(),\n    modelName = \"webhook\",\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(paginationActions.Actions.fetchPage(modelName, queryParams));\n      try {\n        const response = await load(orgId, queryParams);\n        dispatch(Actions.receiveWebhooks(response.webhooks));\n\n        const pageData: Partial<IPageData> = {\n          ids: List(response.webhooks.map((webhook: IWebhookData) => webhook.id)),\n          pagination: (response as any).meta.pagination,\n        };\n\n        dispatch(paginationActions.Actions.receivePage(modelName, queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(paginationActions.Actions.receivePageError(modelName, queryParams, errors));\n      }\n    };\n  },\n\n  listWebhookEvents: (\n    weebhookId: string,\n    orgId: number,\n    queryParams: QueryParamsRecord = new QueryParamsRecord(),\n    modelName = \"webhook_event\",\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(paginationActions.Actions.fetchPage(modelName, queryParams));\n      try {\n        const response = await loadEvents(weebhookId, orgId, queryParams);\n        dispatch(Actions.receiveWebhookEvents(response.webhook_events));\n\n        const pageData: Partial<IPageData> = {\n          ids: List(response.webhook_events.map((event: IWebhookEventData) => event.id)),\n          pagination: (response as any).meta.pagination,\n        };\n\n        dispatch(paginationActions.Actions.receivePage(modelName, queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(paginationActions.Actions.receivePageError(modelName, queryParams, errors));\n      }\n    };\n  },\n  updateOrCreateWebhook: (webhook: WebhookRecord, orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchWebhook(webhook.id));\n\n      try {\n        let result: IWebhookResponse;\n        if (webhook.id === \"-1\") {\n          result = await create(webhook, orgId);\n          dispatch(Actions.receiveWebhook(result.webhook));\n          dispatch(paginationActions.Actions.pushId(result.webhook.id, \"webhook\"));\n        } else {\n          result = await update(webhook, orgId);\n          dispatch(Actions.receiveWebhook(result.webhook));\n        }\n\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Webhook Saved Successfully\"));\n      } catch (err) {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, handleErrors(err)));\n        dispatch(Actions.setWebhookLoaded(webhook.id));\n      }\n    };\n  },\n  destroyWebhook: (webhook: WebhookRecord, orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        await destroy(webhook, orgId);\n        dispatch(Actions.removeWebhook(webhook.id));\n        await dispatch(AsyncActions.checkPageEmpty(orgId));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Webhook deleted successfully!\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n\n  checkPageEmpty: (orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      return paginationActions.checkPageEmpty(getState(), \"webhook\", (newQueryParams) =>\n        dispatch(AsyncActions.listWebhooks(orgId, newQueryParams)),\n      );\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { Record, Map, List } from \"immutable\";\nimport * as paginationActions from \"./pagination.actions\";\nimport { IPageRecord, fromJSON, QueryParamsRecord, PageRecord } from \"app2/src/records/Page\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { currentPage } from \"app2/src/selectors/pagination.selectors\";\nimport { Nullable } from \"app2/src/records\";\n\nexport const PaginationStateRecord = Record({\n  byModel: Map<string, PaginationRecord>(),\n  dirtyIds: null as Nullable<List<number>>,\n});\n\nexport const initialState = PaginationStateRecord();\nexport type IPaginationStateRecord = typeof initialState;\n\nexport interface IPaginationRecord {\n  pages: Map<number, IPageRecord>;\n  queryParams: QueryParamsRecord;\n}\n\nconst defaultPagination: IPaginationRecord = {\n  pages: Map<number, IPageRecord>(),\n  queryParams: new QueryParamsRecord(),\n};\n\nexport class PaginationRecord extends Record(defaultPagination) implements IPaginationRecord {\n  public readonly pages!: Map<number, IPageRecord>;\n  public readonly queryParams!: QueryParamsRecord;\n\n  public constructor(values?: Partial<IPaginationRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"pagination\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case paginationActions.FETCH_PAGE:\n      const payloadFetch = action.payload;\n      const pageFetch = payloadFetch.queryParams.page;\n      const queryParamsFetch = payloadFetch.queryParams;\n      if (!state.getIn([model, \"byModel\", payloadFetch.model])) {\n        return state\n          .setIn([model, \"byModel\", payloadFetch.model], new PaginationRecord())\n          .setIn([model, \"byModel\", payloadFetch.model, \"queryParams\"], new QueryParamsRecord(queryParamsFetch))\n          .setIn([model, \"byModel\", payloadFetch.model, \"pages\", pageFetch], fromJSON({ loading: true }));\n      }\n\n      return state\n        .setIn([model, \"byModel\", payloadFetch.model, \"queryParams\"], new QueryParamsRecord(queryParamsFetch))\n        .setIn([model, \"byModel\", payloadFetch.model, \"pages\", pageFetch], fromJSON({ loading: true }));\n    case paginationActions.RECEIVE_PAGE:\n      const payloadReceive = action.payload;\n      const pageReceive = payloadReceive.queryParams.page;\n      const queryParamsReceive = payloadReceive.queryParams;\n      if (!state.getIn([model, \"byModel\", payloadReceive.model])) {\n        state = state.setIn([model, \"byModel\", payloadReceive.model], new PaginationRecord());\n      }\n      return state\n        .setIn([model, \"byModel\", payloadReceive.model, \"queryParams\"], queryParamsReceive)\n        .setIn(\n          [model, \"byModel\", payloadReceive.model, \"pages\", pageReceive],\n          fromJSON({ ...payloadReceive.pageData, loading: false }),\n        );\n    case paginationActions.SET_PAGE_IDS:\n      return state.setIn(\n        [\n          model,\n          \"byModel\",\n          action.payload.modelName,\n          \"pages\",\n          currentPage(state, { modelName: action.payload.modelName }),\n          \"ids\",\n        ],\n        action.payload.ids,\n      );\n    case paginationActions.RECEIVE_PAGE_ERROR:\n      const payloadError = action.payload;\n      const pageError = payloadError.queryParams.page;\n      const queryParamsError = payloadError.queryParams;\n\n      return state\n        .setIn([model, \"byModel\", payloadError.model, \"queryParams\"], new QueryParamsRecord(queryParamsError))\n        .setIn(\n          [model, \"byModel\", payloadError.model, \"pages\", pageError],\n          fromJSON({ errors: payloadError.errors, loading: false }),\n        );\n    case paginationActions.PUSH_ID:\n      let ids = state.getIn([model, \"byModel\", action.payload.modelName, \"pages\", 1, \"ids\"]);\n      if (!ids) {\n        return state;\n      }\n\n      if (ids.indexOf(action.payload.id) < 0) {\n        ids = ids.push(action.payload.id);\n      }\n\n      return state.setIn([model, \"byModel\", action.payload.modelName, \"pages\", 1, \"ids\"], ids);\n    case paginationActions.PREPEND_ID:\n      let existingIds = state.getIn([model, \"byModel\", action.payload.modelName, \"pages\", 1, \"ids\"]);\n      if (!existingIds) {\n        return state;\n      }\n\n      existingIds = existingIds.unshift(action.payload.id);\n\n      return state.setIn([model, \"byModel\", action.payload.modelName, \"pages\", 1, \"ids\"], existingIds);\n    case paginationActions.REPLACE_ID:\n      let replaceIds = state.getIn([model, \"byModel\", action.payload.modelName, \"pages\", 1, \"ids\"]);\n      replaceIds = replaceIds.map((id) => {\n        if (id === action.payload.replacedId) {\n          return action.payload.newId;\n        } else {\n          return id;\n        }\n      });\n\n      return state.setIn([model, \"byModel\", action.payload.modelName, \"pages\", 1, \"ids\"], replaceIds);\n    case paginationActions.REMOVE_ID:\n      state.getIn([model, \"byModel\", action.payload.modelName, \"pages\"])?.forEach((_value: PageRecord, key: number) => {\n        let removeIds = state.getIn([model, \"byModel\", action.payload.modelName, \"pages\", key, \"ids\"]);\n        removeIds = removeIds.filter((id: number) => {\n          return id !== action.payload.removeId;\n        });\n\n        state = state.setIn([model, \"byModel\", action.payload.modelName, \"pages\", key, \"ids\"], removeIds);\n      });\n\n      return state;\n\n    case paginationActions.CLEAR_PAGE:\n      return state.setIn([model, \"byModel\", action.payload.modelName], new PaginationRecord());\n\n    case paginationActions.SET_BY_ATTR_PATH:\n      return state.setIn(\n        [`${action.payload.modelName}s`, \"byId\", action.payload.id].concat(action.payload.attrPath),\n        action.payload.value,\n      );\n\n    case paginationActions.SET_DIRTY_IDS:\n      return state.setIn([model, \"dirtyIds\"], action.payload.ids);\n\n    default:\n      return state;\n  }\n};\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { getIn, List } from \"immutable\";\nimport { IUserData, UserRecord } from \"../records/UserRecord\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { baseCleanProps, listParams } from \"app2/src/api/Api\";\nimport { CrmUserType } from \"app2/src/records/integrations/CrmUser\";\nimport { CamelToSnake } from \"app2/src/helpers/Format\";\nimport { IMetaPaginationData } from \"../records/MetaPagination\";\n\nexport interface ILoginData {\n  token: string;\n  refresh_token: string;\n  user: IUserData;\n  accessUid?: string;\n}\n\nexport interface IUserIndexResponse {\n  users: IUserData[];\n  meta?: { pagination: IMetaPaginationData };\n}\n\nexport interface IUserResponse {\n  user: IUserData;\n}\n\nexport interface IAclResponse {\n  acl: { [key: string]: string[] };\n  templates: { name: string; descriptor: string }[];\n}\n\nexport const includes: string[] = [\"permissions\", \"org\", \"lead_sources\", \"preferences\", \"settings\", \"address\"];\nexport const url = \"/api/v1/users/\";\n\nexport const create = (user: UserRecord, includes: string[] = []): Promise<IUserResponse> => {\n  const postBody: any = { user: cleanProps(user) };\n\n  if (includes?.length > 0) {\n    postBody.include = includes;\n  }\n  return fetcher.post<IUserResponse>(url, postBody);\n};\n\nexport const update = (user: UserRecord, includes: string[] = []): Promise<IUserResponse> => {\n  const actionUrl = fetcher.joinUrls(url, user.id.toString());\n  const postBody: any = { user: cleanProps(user) };\n\n  if (includes?.length > 0) {\n    postBody.include = includes;\n  }\n\n  return fetcher.patch(actionUrl, postBody);\n};\n\nexport const load = (id: number, includes: string[] = []): Promise<IUserData> => {\n  let actionUrl = fetcher.joinUrls(url, id.toString());\n\n  if (includes.length > 0) {\n    actionUrl = fetcher.urlOptions(actionUrl, {\n      \"include[]\": includes,\n    });\n  }\n  return fetcher.get<{ user: IUserData }>(actionUrl).then((data) => data.user);\n};\n\nexport const loadByEmail = (email: string, includes: string[] = [], token?: string): Promise<IUserData> => {\n  let actionUrl = fetcher.joinUrls(url, \"email\");\n  const options: any = {};\n\n  if (includes.length > 0) {\n    actionUrl = fetcher.urlOptions(actionUrl, {\n      email: email,\n      \"include[]\": includes,\n    });\n  }\n\n  if (token) {\n    options.headers = {\n      Authorization: `Bearer ${token}`,\n    };\n  }\n\n  return fetcher.get<{ user: IUserData }>(actionUrl, {}, options).then((data) => data.user);\n};\n\nexport const loadByAltId = (\n  altName: string,\n  altId: string,\n  includes: string[] = [],\n  token?: string,\n): Promise<IUserData> => {\n  let actionUrl = fetcher.joinUrls(url, \"by_alt_id\");\n  const options: any = {};\n\n  if (includes.length > 0) {\n    actionUrl = fetcher.urlOptions(actionUrl, {\n      alt_name: altName,\n      alt_id: altId,\n      \"include[]\": includes,\n    });\n  }\n\n  if (token) {\n    options.headers = {\n      Authorization: `Bearer ${token}`,\n    };\n  }\n\n  return fetcher.get<{ user: IUserData }>(actionUrl, {}, options).then((data) => data.user);\n};\n\nexport const list = (queryParams: QueryParamsRecord = new QueryParamsRecord()): Promise<IUserIndexResponse> => {\n  let actionUrl = url;\n  const params: any = listParams(queryParams);\n  params.version = getIn(queryParams, [\"parameters\", \"version\"], \"v2\");\n  params.sort_by = \"name\";\n\n  if (getIn(queryParams, [\"parameters\", \"includes\"], []).size > 0) {\n    params[\"include[]\"] = getIn(queryParams, [\"parameters\", \"includes\"], List()).toJS();\n  }\n\n  if (getIn(queryParams, [\"parameters\", \"org_id\"], []).length > 0) {\n    params[\"org_id\"] = getIn(queryParams, [\"parameters\", \"org_id\"], \"\");\n  }\n\n  actionUrl = fetcher.urlOptions(actionUrl, params);\n  return fetcher.get<IUserIndexResponse>(actionUrl);\n};\n\nexport const crmUserCheck = (orgId: number, userId: number, type: CrmUserType): Promise<void> => {\n  const orgAssociation = CamelToSnake(type) + \"s\";\n  const actionUrl = `api/v1/orgs/${orgId}/users/${userId}/${orgAssociation}/check`;\n\n  return fetcher.get(actionUrl);\n};\n\nexport const revokeAccess = async (userId: number, accessId: number): Promise<void> => {\n  const actionUrl = fetcher.joinUrls(url, userId.toString(), \"revoke_access\");\n\n  await fetcher.post(actionUrl, { access_id: accessId });\n};\n\nexport const sendInvitation = async (email: string): Promise<void> => {\n  const actionUrl = fetcher.joinUrls(url, \"send_invitation\");\n\n  await fetcher.post(actionUrl, { email });\n};\n\nexport const loadAclValues = (userId: number, accessUid: string, template: string): Promise<IAclResponse> => {\n  const actionUrl = fetcher.joinUrls(url, userId.toString(), \"acl\");\n\n  const params: { access_uid?: string; template?: string } = {};\n\n  if (accessUid) {\n    params.access_uid = accessUid;\n  }\n\n  if (template) {\n    params.template = template;\n  }\n\n  return fetcher.get(actionUrl, params);\n};\n\nconst cleanProps = (user: UserRecord): IUserData => {\n  const userData: IUserData = baseCleanProps(user.toJS());\n\n  if (userData.accesses) {\n    (userData as any).accesses_attributes = userData.accesses.map((a) => {\n      const cleaned = baseCleanProps(a);\n      delete cleaned.org;\n\n      if (cleaned.org_id <= 0) {\n        delete cleaned.org_id;\n      }\n\n      return cleaned;\n    });\n\n    delete userData.accesses;\n  }\n\n  if (userData.org) {\n    delete userData.org;\n  }\n\n  return userData;\n};\n","import { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IStatsData>): StatsRecord => new StatsRecord(json);\n\nexport interface IStatsData {\n  stats: IStatisticData[];\n  total: number;\n}\n\nexport interface IStatisticData {\n  name: string;\n  color: string;\n  count: number;\n}\n\nexport interface IStatsRecord extends IStatsData {}\n\nexport const defaultStatsProps = {\n  stats: [],\n  total: 0,\n};\n\nexport class StatsRecord extends Record<IStatsRecord>(defaultStatsProps) implements IStatsRecord {}\n","import * as jobActions from \"./job.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { fromJSON, IJobData, JobRecord, IJobsPageRecord, JobsPageRecord } from \"../records/Job\";\nimport { ImageRecord } from \"../records/Image\";\nimport { EstimateOverviewRecord, fromJSON as overviewFromJSON } from \"../records/EstimateOverview\";\nimport { RootActions, RootState } from \"app2/src/reducers\";\nimport { JobQueryRecord, jobStatesFromJSON } from \"app2/src/components/JobList/JobQuery\";\nimport { Nullable } from \"app2/src/records\";\nimport { fetch, receive } from \"app2/src/reducers/Reducer\";\nimport { fromJSON as statsFromJSON } from \"app2/src/records/Statistics\";\nimport { fromJSON as jobQueryFromJSON } from \"app2/src/components/JobList/JobQuery\";\nimport { endOfDay, startOfDay } from \"date-fns\";\nimport { currentUser } from \"app2/src/selectors/userCommon.selectors\";\nimport { org as orgSelector } from \"app2/src/selectors/org.selectors\";\nimport { orgNameAddress } from \"app2/src/records/OrgRecord\";\n\nexport const JobStateRecord = Record({\n  // Job ID of the current view\n  currentJobId: null as Nullable<number>,\n  byId: Map<number, JobRecord>(),\n  lastSavedById: Map<number, JobRecord>(),\n  byPage: Map<number, IJobsPageRecord>(),\n  jobQuery: jobQueryFromJSON({}),\n  lastSavedJobQuery: jobQueryFromJSON({}),\n  lastChangesJobQuery: Map<Partial<JobQueryRecord>>({}),\n  jobStates: List(),\n  selectedEstimateId: null,\n  page: 1,\n  total_count: 1,\n  total_pages: 1,\n  swiped_job: 0,\n  uploading: false,\n  stats: null,\n  sampleJobs: List(),\n});\n\nexport const initialState = JobStateRecord();\n\nexport type JobState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"jobs\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case jobActions.SET_CURRENT_JOB_ID:\n      return state.setIn([model, \"currentJobId\"], action.payload.id);\n    case jobActions.RECEIVE_JOB:\n      const job = fromJSON({ ...action.payload });\n      return receive(state, model, job);\n    case jobActions.FETCH_JOB:\n      return fetch(state, model, fromJSON({ id: action.payload.id }));\n    case jobActions.FETCH_PAGE:\n      state = state.setIn([model, \"page\"], action.payload);\n      // if the page doesn't exist, the assumption is that no pages past it exist\n      if (!state.getIn([\"byPage\", action.payload])) {\n        return state.setIn([model, \"byPage\", action.payload], JobsPageRecord({ loading: true }));\n      }\n\n      // update the page in question, and since we're reloading it, clear out everything past it for reloading\n      // as well.\n      return state.setIn([model, \"byPage\", action.payload, \"loading\"], true).updateIn([model, \"byPage\"], (jbp) => {\n        return jbp.filter((v, k) => {\n          return k <= action.payload;\n        });\n      });\n    case jobActions.RECEIVE_PAGE:\n      const ids = List(\n        action.payload.jobs.map((j) => {\n          state = reducer(state, jobActions.Actions.receiveJob(j as any as IJobData));\n          return j.id;\n        }),\n      );\n\n      return state\n        .setIn([model, \"byPage\", action.payload.page, \"loading\"], false)\n        .setIn([model, \"byPage\", action.payload.page, model], ids)\n        .setIn([model, \"total_count\"], action.payload.meta.pagination.total_count)\n        .setIn([model, \"total_pages\"], action.payload.meta.pagination.total_pages);\n    case jobActions.RESET_PAGES:\n      return state.mergeIn([model], { page: 1, total_count: 1, total_pages: 1 });\n    case jobActions.SWIPE_JOB:\n      return state.setIn([model, \"swiped_job\"], action.payload);\n    case jobActions.ADDING_PHOTO:\n      return state.setIn([model, \"uploading\"], true);\n    case jobActions.ADDED_PHOTO:\n      return state\n        .setIn([model, \"uploading\"], false)\n        .updateIn([model, \"byId\", action.payload.jobId, \"images\"], (images: List<ImageRecord>) => {\n          return images.push(action.payload.image);\n        });\n    case jobActions.SAVING_JOB:\n      return state.setIn([model, \"byId\", action.payload, \"loading\"], true);\n    case jobActions.CANCEL_SAVING_JOB:\n      return state.setIn([model, \"byId\", action.payload, \"loading\"], false);\n    case jobActions.SET_JOB_LOADED:\n      return state.setIn([model, \"byId\", action.payload.id, \"loading\"], false);\n    case jobActions.ADD_JOB_TO_PAGE:\n      return state.updateIn([model, \"byPage\", action.payload.page, model], (jobIds: List<number>) => {\n        const newJobs = jobIds.unshift(action.payload.jobId);\n        return newJobs;\n      });\n    case jobActions.SET_JOB_QUERY:\n      let { value } = action.payload.jobQuery;\n      const { name } = action.payload.jobQuery;\n      if (name === \"state\" && value === null) {\n        value = undefined;\n      }\n      if (name === \"updated_since\") {\n        if (value === \"Custom\") {\n          state = state\n            .setIn([model, \"jobQuery\", \"filter_by_updated_since\"], startOfDay(new Date()))\n            .setIn([model, \"jobQuery\", \"filter_by_updated_before\"], endOfDay(new Date()));\n        }\n      }\n      return state.setIn([model, \"jobQuery\", name], value).setIn([model, \"lastChangesJobQuery\", name], value);\n    case jobActions.SET_LAST_SAVED_JOB_QUERY:\n      return state.setIn([model, \"lastSavedJobQuery\"], action.payload.jobQuery);\n    case jobActions.RESET_LAST_CHANGES_JOB_QUERY:\n      return state.setIn([model, \"lastChangesJobQuery\"], Map({}));\n    case jobActions.RESET_JOB_QUERY:\n      const user = currentUser(state);\n      const org = orgSelector(state, { orgId: user.org_id });\n      const emptyJobQuery = jobQueryFromJSON({ org: { id: org.id, name: orgNameAddress(org) } });\n      return state\n        .setIn([model, \"lastSavedJobQuery\"], emptyJobQuery)\n        .setIn([model, \"jobQuery\"], emptyJobQuery)\n        .setIn([model, \"lastChangesJobQuery\"], Map({}));\n    case jobActions.REVERT_JOB_QUERY:\n      return state\n        .setIn([model, \"jobQuery\"], state.getIn([model, \"lastSavedJobQuery\"]))\n        .setIn([model, \"lastChangesJobQuery\"], Map({}));\n    case jobActions.SET_JOB_STATES:\n      return state.setIn([model, \"jobStates\"], jobStatesFromJSON(action.payload.jobStates));\n    case jobActions.JOB_RECEIVE_ESTIMATE:\n      return state.updateIn(\n        [model, \"byId\", action.payload.jobId, \"estimates\"],\n        (estimates: List<EstimateOverviewRecord>) => {\n          const e = estimates.findIndex((e) => e.id === action.payload.estimate.id);\n          if (e === -1) {\n            return estimates.push(overviewFromJSON(action.payload.estimate));\n          }\n\n          return estimates.set(e, overviewFromJSON(action.payload.estimate));\n        },\n      );\n    case jobActions.SET_SELECTED_ESTIMATE_ID:\n      return state.setIn([model, \"selectedEstimateId\"], action.payload.estimateId);\n    case jobActions.EDIT_RESOURCE_DISPLAY:\n      let documents = state.getIn([model, \"byId\", action.payload.jobId, \"config\", \"resource_documents\"], List());\n      const foundIndex = documents.findIndex((d) => d.get(\"id\") === action.payload.documentId);\n      if (foundIndex < 0) {\n        let doc = Map({ id: action.payload.documentId, displayInAgreement: false, displayInProposal: false });\n        doc = doc.set(action.payload.name, action.payload.value);\n        documents = documents.push(doc);\n      } else {\n        documents = documents.setIn([foundIndex, action.payload.name], action.payload.value);\n      }\n\n      documents = documents.filter((doc) => {\n        return doc.get(\"displayInAgreement\") || doc.get(\"displayInProposal\");\n      });\n\n      return state.setIn([model, \"byId\", action.payload.jobId, \"config\", \"resource_documents\"], documents);\n\n    case jobActions.SET_RESOURCE_DOCUMENTS:\n      return state.setIn(\n        [model, \"byId\", action.payload.jobId, \"config\", \"resource_documents\"],\n        action.payload.resourceDocuments,\n      );\n\n    case jobActions.INCREASE_COUNT:\n      return state.updateIn(\n        [model, \"byId\", action.payload.jobId, `${action.payload.fileType}_count`],\n        (oldValue) => oldValue + 1,\n      );\n\n    case jobActions.DECREASE_COUNT:\n      return state.updateIn(\n        [model, \"byId\", action.payload.jobId, `${action.payload.fileType}_count`],\n        (oldValue) => oldValue - 1,\n      );\n\n    case jobActions.EDIT_JOB:\n      return state.setIn([model, \"byId\", action.payload.jobId, action.payload.name], action.payload.value);\n\n    case jobActions.RECEIVE_STATS:\n      const statsRecord = statsFromJSON(action.payload.statistics);\n      return state.setIn([\"jobs\", \"stats\"], statsRecord.stats);\n    case jobActions.SET_SAMPLE_JOBS:\n      return state.setIn([model, \"sampleJobs\"], List(action.payload.sampleJobs));\n\n    default:\n      return state;\n  }\n};\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { IEstimateData, EstimateRecord, DocType } from \"app2/src//records/Estimate\";\nimport { IEstimateOverviewData } from \"app2/src//records/EstimateOverview\";\nimport { IEstimateGroupData } from \"app2/src//records/EstimateGroup\";\nimport { IEstimateFinanceOptionData } from \"app2/src//records/EstimateFinanceOption\";\nimport { IOrgData } from \"app2/src/records/OrgRecord\";\nimport { IJobData } from \"app2/src/records/Job\";\nimport { IFinanceOptionData } from \"app2/src/records/FinanceOption\";\nimport { IIframeData } from \"app2/src/records/Iframe\";\nimport { ICalculatedFinancingData } from \"app2/src/records/CalculatedFinancing\";\nimport { IEstimateCommissionData } from \"app2/src//records/EstimateCommission\";\nimport { IDocumentOptions } from \"app2/src/api//document.service\";\n\nexport interface IEstimateOverviewIndexResponse {\n  estimates: IEstimateOverviewData[];\n}\n\nexport interface IEstimateResponse {\n  estimate: IEstimateData;\n}\n\nexport interface IEstimateLandingResponse {\n  estimate: IEstimateData;\n  org: IOrgData;\n  job: IJobData;\n  finance_option: IFinanceOptionData;\n  iframe: IIframeData;\n}\n\nexport interface ICalculatedFinancingResponse {\n  calculations: ICalculatedFinancingData[];\n}\n\nexport interface EmailEstimateArgs {\n  email: string;\n  message: string;\n  kind: \"email\" | \"email_csv\";\n  doc_type?: \"estimate\" | \"contract\";\n  csv_type?: \"product\" | \"labor_summary\" | \"remeasure\" | \"order\";\n}\n\nclass EstimateService {\n  public jobUrl = \"api/v1/jobs/:id/estimates\";\n  public url = \"api/v1/estimates\";\n  public include: string[] = [\n    \"job\",\n    \"org\",\n    \"settings\",\n    \"address\",\n    \"line_items\",\n    \"elevations\",\n    \"documents\",\n    \"images\",\n    \"assignments\",\n    \"preferences\",\n    \"finance_option\",\n  ];\n\n  public async load(estimateId: number): Promise<IEstimateResponse> {\n    const actionUrl = fetcher.joinUrls(this.url, estimateId.toString());\n\n    return await fetcher.get<IEstimateResponse>(actionUrl, { \"include[]\": this.include });\n  }\n\n  public async loadByJob(jobId: number): Promise<IEstimateOverviewIndexResponse> {\n    const actionUrl = this.jobUrl.replace(\":id\", jobId.toString());\n\n    return await fetcher.get<IEstimateOverviewIndexResponse>(actionUrl);\n  }\n\n  public updateOrCreate(estimate: IEstimateData): Promise<IEstimateResponse> {\n    if (estimate.id > 0) {\n      return this.update(estimate);\n    } else {\n      return this.create(estimate.job_id, estimate);\n    }\n  }\n\n  public async create(jobId: number, estimate: IEstimateData): Promise<IEstimateResponse> {\n    const actionUrl = this.jobUrl.replace(\":id\", jobId.toString());\n\n    const data = cleanProps(estimate);\n\n    return await fetcher.post<IEstimateResponse>(actionUrl, {\n      estimate: data,\n      include: this.include,\n    });\n  }\n\n  public update(estimate: IEstimateData): Promise<IEstimateResponse> {\n    return this._update(cleanProps(estimate));\n  }\n\n  public shallowUpdate(estimate: EstimateRecord): Promise<IEstimateResponse> {\n    return this._update(shallowCleanProps(estimate));\n  }\n\n  public async landing(queryParams: any): Promise<IEstimateLandingResponse> {\n    const actionUrl = fetcher.joinUrls(this.url, \"landing\");\n\n    return await fetcher.get<IEstimateLandingResponse>(actionUrl, {\n      ...queryParams,\n      \"include[]\": [\"line_items\", \"address\", \"preferences\"],\n    });\n  }\n\n  public async fetchPdf(jobId: number, estimateId: number, docType: DocType, saveTemp = false): Promise<Response> {\n    let actionUrl = this.url;\n    if (jobId) {\n      actionUrl = this.jobUrl.replace(\":id\", jobId.toString());\n    }\n    actionUrl = fetcher.joinUrls(actionUrl, `${estimateId.toString()}.pdf`);\n    const params = { doc_type: docType, save_tmp: saveTemp };\n    if (!saveTemp) {\n      delete params.save_tmp;\n    }\n    const pdf = await fetcher.fetch(actionUrl, params, {\n      method: \"GET\",\n      headers: {\n        accept: \"application/pdf\",\n      },\n    });\n    return pdf;\n  }\n\n  public async getCommissionPdf(estimateId: number): Promise<Blob> {\n    const pdf = await fetcher.fetch(`api/v1/estimates/${estimateId}/commission.pdf`);\n    return pdf.blob();\n  }\n\n  public async emailEstimate(estimateId: number, args: EmailEstimateArgs): Promise<{ location: string }> {\n    const { email, message, kind, csv_type, doc_type } = args;\n    const url = fetcher.joinUrls(this.url, estimateId.toString(), kind);\n    return await fetcher.post(url, { doc_type, csv_type, emails: email, message, options: {} });\n  }\n\n  public async getEstimateCommission(estimatedId: number): Promise<IEstimateCommissionData> {\n    const url = fetcher.joinUrls(this.url, estimatedId.toString(), \"commission\");\n    return fetcher.get(url);\n  }\n\n  public async attachIntegration(estimateId: number, documentType: \"estimate\" | \"contract\"): Promise<void> {\n    const url = fetcher.joinUrls(this.url, estimateId.toString(), \"ms_upload\");\n    return fetcher.post(url, { doc_type: documentType });\n  }\n\n  public async signContract(estimateId: number, data: any): Promise<{ signed_document: any }> {\n    const url = fetcher.joinUrls(this.url, estimateId.toString(), \"signed_documents\");\n    return fetcher.post(url, data);\n  }\n\n  public async manuallyTrigger(estimate_id: number): Promise<void> {\n    const url = fetcher.joinUrls(this.url, estimate_id.toString(), \"manual_trigger\");\n    return fetcher.post(url);\n  }\n\n  public async delete(jobId: number, estimateId: number): Promise<void> {\n    const jobUrl = this.jobUrl.replace(\":id\", jobId.toString());\n    const actionUrl = fetcher.joinUrls(jobUrl, estimateId.toString());\n    return fetcher.delete(actionUrl);\n  }\n\n  protected async _update(estimate: Partial<IEstimateData>): Promise<IEstimateResponse> {\n    const jobUrl = this.jobUrl.replace(\":id\", estimate.job_id.toString());\n    const actionUrl = fetcher.joinUrls(jobUrl, estimate.id.toString());\n\n    return await fetcher.patch<IEstimateResponse>(actionUrl, {\n      estimate,\n      include: this.include,\n    });\n  }\n}\n\nexport const estimateService = new EstimateService();\n\n/**\n * ToJSON while removing fields that shouldn't go back to the server.\n * @param record - Estimate Record to be transformed\n */\nexport const cleanProps = (estimateData: IEstimateData): any => {\n  let estimate: any = { ...estimateData };\n\n  estimate = cleanEstimatedDates(estimate);\n\n  if (estimate.id <= 0) {\n    delete estimate.id;\n  }\n\n  if (estimate.job) {\n    delete estimate.job;\n  }\n\n  // Need to handle 'line items that have moved groups' like the Angular based transform.\n  // Thinking this will need to be handled before getting to cleanProps using lastSavedEstimateById?\n\n  if (estimate.groups) {\n    estimate.groups_attributes = [];\n    _.each(estimate.groups, (groupData: IEstimateGroupData) => {\n      estimate.groups_attributes.push(groupCleanProps(groupData));\n    });\n    delete estimate.groups;\n  }\n\n  if (estimate.finance_options) {\n    estimate.estimate_finance_options_attributes = [];\n    _.each(estimate.finance_options, (estimateFinanceOptionData: IEstimateFinanceOptionData) => {\n      estimate.estimate_finance_options_attributes.push(financeOptionCleanProps(estimateFinanceOptionData));\n    });\n    delete estimate.finance_options;\n  }\n\n  if (estimate.created_at) {\n    delete estimate.created_at;\n  }\n\n  if (estimate.updated_at) {\n    delete estimate.updated_at;\n  }\n\n  if (!_.isUndefined(estimate.loading)) {\n    delete estimate.loading;\n  }\n\n  return estimate;\n};\n\n/**\n * ToJSON while removing fields that shouldn't go back to the server.\n * @param record - Estimate Record to be transformed\n */\nexport const shallowCleanProps = (record: EstimateRecord): any => {\n  let estimate: any = record.toJSON() as any as IEstimateData;\n\n  if (estimate.group_ids) {\n    delete estimate.group_ids;\n  }\n\n  if (estimate.groups_attributes) {\n    delete estimate.groups_attributes;\n  }\n\n  estimate = cleanEstimatedDates(estimate);\n\n  return estimate;\n};\n\nexport const groupCleanProps = (groupData: IEstimateGroupData) => {\n  const group: any = { ...groupData };\n  if (group.id < 0) {\n    delete group.id;\n  }\n\n  group.line_items_attributes = [];\n\n  // clean out temp ID from \"new\" line items\n  _.each(group.line_items, (lineItemData: any) => {\n    const lineItem: any = { ...lineItemData };\n    if (lineItem.id <= 0) {\n      delete lineItem.id;\n    }\n\n    delete lineItem.product;\n    delete lineItem.estimateGroup;\n    delete lineItem.orig_estimate_group_id;\n    if (lineItem.estimate_group_id <= 0) {\n      delete lineItem.estimate_group_id;\n    }\n\n    lineItem.options_attributes = [];\n    _.each(lineItem.options, (optionData: any) => {\n      const option: any = { ...optionData };\n      if (option.id <= 0) {\n        delete option.id;\n      }\n\n      if (option.estimate_line_item_id <= 0) {\n        delete option.estimate_line_item_id;\n      }\n\n      delete option.product_option;\n      delete option.estimate_line_item;\n      delete option.product_option_group;\n\n      lineItem.options_attributes.push(option);\n    });\n\n    lineItem.opening_estimations_attributes = [];\n    _.each(lineItem.opening_estimations, (openingEstimationData: any) => {\n      const openingEstimation: any = { ...openingEstimationData };\n      if (openingEstimation.id <= 0) {\n        delete openingEstimation.id;\n      }\n      if (openingEstimation.estimate_line_item_id <= 0) {\n        delete openingEstimation.estimate_line_item_id;\n      }\n\n      lineItem.opening_estimations_attributes.push(openingEstimation);\n    });\n\n    lineItem.images_attributes = [];\n    _.each(lineItem.images, (imageData: any) => {\n      const image: any = { ...imageData };\n      if (image.id <= 0) {\n        image.remote_file_url = image.file.url;\n        delete image.id;\n      }\n      delete image.file;\n\n      lineItem.images_attributes.push(image);\n    });\n\n    lineItem.documents_attributes = [];\n    _.each(lineItem.documents, (documentData: any) => {\n      const document: any = { ...documentData };\n      if (document.id <= 0) {\n        return;\n      }\n      delete document.file;\n\n      lineItem.documents_attributes.push(document);\n    });\n    delete lineItem.options;\n    delete lineItem.opening_estimations;\n    delete lineItem.images;\n    delete lineItem.documents;\n\n    group.line_items_attributes.push(lineItem);\n  });\n\n  group.room_estimations_attributes = [];\n  _.each(group.room_estimations, (roomEstimationData: any) => {\n    const roomEstimation: any = { ...roomEstimationData };\n    if (roomEstimation.id < 0) {\n      delete roomEstimation.id;\n    }\n\n    group.room_estimations_attributes.push(roomEstimation);\n  });\n\n  delete group.estimate;\n  delete group.line_items;\n\n  return group;\n};\n\nconst cleanEstimatedDates = (estimate: IEstimateData): IEstimateData => {\n  if (estimate.estimated_start instanceof Date) {\n    estimate.estimated_start = (estimate.estimated_start as Date).toISOString() as any;\n  }\n  if (typeof estimate.estimated_start === \"string\") {\n    estimate.estimated_start = (estimate.estimated_start as string).split(\"T\")[0] as any;\n  }\n\n  if (estimate.estimated_end instanceof Date) {\n    estimate.estimated_end = (estimate.estimated_end as Date).toISOString() as any;\n  }\n  if (typeof estimate.estimated_end === \"string\") {\n    estimate.estimated_end = (estimate.estimated_end as string).split(\"T\")[0] as any;\n  }\n\n  return estimate;\n};\n\nexport const financeOptionCleanProps = (financeOption) => {\n  if (financeOption.id <= 0) {\n    delete financeOption.id;\n  }\n  return financeOption;\n};\n","import { FinanceApplicationRecord } from \"app2/src/records/FinanceApplication\";\nimport { RootState } from \"app2/src/reducers\";\n\ninterface IFinanceApplicationProps {\n  estimateId: number;\n}\n\n/**\n * Loads the finance application by estimate id\n *\n * @param {RootState} state The RootState\n * @param {{ estimateId: number }} options\n * @returns {FinanceApplicationRecord} FinanceApplicationRecord\n */\nexport const financeApplication = (state: RootState, props: IFinanceApplicationProps): FinanceApplicationRecord =>\n  state.getIn([\"financeApplications\", \"byEstimateId\", props.estimateId]);\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.notification.min\",[\"kendo.core.min\",\"kendo.popup.min\"],t)}(function(){return function(t,i){var n=window.kendo,e=n.ui.Widget,o=t.proxy,a=t.extend,s=window.setTimeout,p=\"click\",d=\"show\",c=\"hide\",l=\"k-notification\",u=\".k-notification-wrap .k-i-close\",r=\"k-hiding\",f=\"info\",h=\"success\",g=\"warning\",m=\"error\",_=\"top\",w=\"left\",k=\"bottom\",v=\"right\",P=\"up\",T=\".kendoNotification\",b='<div class=\"k-widget k-notification\"></div>',C='<div class=\"k-notification-wrap\"><span class=\"k-icon k-i-#=typeIcon#\">#=typeIcon#</span>#=content#<span class=\"k-icon k-i-close\">Hide</span></div>',y=C.replace(\"#=content#\",\"#:content#\"),S=e.extend({init:function(i,o){var a=this;e.fn.init.call(a,i,o),o=a.options,o.appendTo&&t(o.appendTo).is(i)||a.element.hide(),a._compileTemplates(o.templates),a._guid=\"_\"+n.guid(),a._isRtl=n.support.isRtl(i),a._compileStacking(o.stacking,o.position.top,o.position.left),n.notify(a)},events:[d,c],options:{name:\"Notification\",position:{pinned:!0,top:null,left:null,bottom:20,right:20},stacking:\"default\",hideOnClick:!0,button:!1,allowHideAfter:0,autoHideAfter:5e3,appendTo:null,width:null,height:null,templates:[],animation:{open:{effects:\"fade:in\",duration:300},close:{effects:\"fade:out\",duration:600,hide:!0}}},_compileTemplates:function(i){var e=this,o=n.template;e._compiled={},t.each(i,function(i,n){e._compiled[n.type]=o(n.template||t(\"#\"+n.templateId).html())}),e._defaultCompiled=o(C),e._safeCompiled=o(y)},_getCompiled:function(t,i){var n=i?this._safeCompiled:this._defaultCompiled;return t?this._compiled[t]||n:n},_compileStacking:function(t,i,n){var e,o,a=this,s={paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},p=null!==n?w:v;switch(t){case\"down\":e=k+\" \"+p,o=_+\" \"+p,delete s.paddingBottom;break;case v:e=_+\" \"+v,o=_+\" \"+w,delete s.paddingRight;break;case w:e=_+\" \"+w,o=_+\" \"+v,delete s.paddingLeft;break;case P:e=_+\" \"+p,o=k+\" \"+p,delete s.paddingTop;break;default:null!==i?(e=k+\" \"+p,o=_+\" \"+p,delete s.paddingBottom):(e=_+\" \"+p,o=k+\" \"+p,delete s.paddingTop)}a._popupOrigin=e,a._popupPosition=o,a._popupPaddings=s},_attachPopupEvents:function(t,i){function e(t){t.on(p+T,function(){a._hidePopup(i)})}var o,a=this,d=t.allowHideAfter,c=!isNaN(d)&&d>0;i.options.anchor!==document.body&&i.options.origin.indexOf(v)>0&&i.bind(\"open\",function(){var t=n.getShadows(i.element);s(function(){i.wrapper.css(\"left\",parseFloat(i.wrapper.css(\"left\"))+t.left+t.right)})}),t.hideOnClick?i.bind(\"activate\",function(){c?s(function(){e(i.element)},d):e(i.element)}):t.button&&(o=i.element.find(u),c?s(function(){e(o)},d):e(o))},_showPopup:function(i,e){var o,p,d=this,c=e.autoHideAfter,l=e.position.left,f=e.position.top;p=t(\".\"+d._guid+\":not(.\"+r+\")\").last(),o=new n.ui.Popup(i,{anchor:p[0]?p:document.body,origin:d._popupOrigin,position:d._popupPosition,animation:e.animation,modal:!0,collision:\"\",isRtl:d._isRtl,close:function(){d._triggerHide(this.element)},deactivate:function(t){t.sender.element.off(T),t.sender.element.find(u).off(T),t.sender.destroy()}}),d._attachPopupEvents(e,o),p[0]?o.open():(null===l&&(l=t(window).width()-i.width()-e.position.right),null===f&&(f=t(window).height()-i.height()-e.position.bottom),o.open(l,f)),o.wrapper.addClass(d._guid).css(a({margin:0},d._popupPaddings)),e.position.pinned?(o.wrapper.css(\"position\",\"fixed\"),p[0]&&d._togglePin(o.wrapper,!0)):p[0]||d._togglePin(o.wrapper,!1),c>0&&s(function(){d._hidePopup(o)},c)},_hidePopup:function(t){t.wrapper.addClass(r),t.close()},_togglePin:function(i,n){var e=t(window),o=n?-1:1;i.css({top:parseInt(i.css(_),10)+o*e.scrollTop(),left:parseInt(i.css(w),10)+o*e.scrollLeft()})},_attachStaticEvents:function(t,i){function n(t){t.on(p+T,o(e._hideStatic,e,i))}var e=this,a=t.allowHideAfter,d=!isNaN(a)&&a>0;t.hideOnClick?d?s(function(){n(i)},a):n(i):t.button&&(d?s(function(){n(i.find(u))},a):n(i.find(u)))},_showStatic:function(t,i){var n=this,e=i.autoHideAfter,o=i.animation,a=i.stacking==P||i.stacking==w?\"prependTo\":\"appendTo\";t.addClass(n._guid)[a](i.appendTo).hide().kendoAnimate(o.open||!1),n._attachStaticEvents(i,t),e>0&&s(function(){n._hideStatic(t)},e)},_hideStatic:function(t){t.kendoAnimate(a(this.options.animation.close||!1,{complete:function(){t.off(T).find(u).off(T),t.remove()}})),this._triggerHide(t)},_triggerHide:function(t){this.trigger(c,{element:t}),this.angular(\"cleanup\",function(){return{elements:t}})},show:function(e,o,s){var p,c,u=this,r=u.options,h=t(b);return o||(o=f),null!==e&&e!==i&&\"\"!==e&&(n.isFunction(e)&&(e=e()),c={typeIcon:o,content:\"\"},p=t.isPlainObject(e)?a(c,e):a(c,{content:e}),h.addClass(l+\"-\"+o).toggleClass(l+\"-button\",r.button).attr(\"data-role\",\"alert\").css({width:r.width,height:r.height}).append(u._getCompiled(o,s)(p)),u.angular(\"compile\",function(){return{elements:h,data:[{dataItem:p}]}}),t(r.appendTo)[0]?u._showStatic(h,r):u._showPopup(h,r),u.trigger(d,{element:h})),u},showText:function(t,i){this.show(t,i,!0)},info:function(t){return this.show(t,f)},success:function(t){return this.show(t,h)},warning:function(t){return this.show(t,g)},error:function(t){return this.show(t,m)},hide:function(){var i=this,n=i.getNotifications();return n.each(i.options.appendTo?function(n,e){i._hideStatic(t(e))}:function(n,e){var o=t(e).data(\"kendoPopup\");o&&i._hidePopup(o)}),i},getNotifications:function(){var i=this,n=t(\".\"+i._guid+\":not(.\"+r+\")\");return i.options.appendTo?n:n.children(\".\"+l)},setOptions:function(t){var n,o=this;e.fn.setOptions.call(o,t),n=o.options,t.templates!==i&&o._compileTemplates(n.templates),t.stacking===i&&t.position===i||o._compileStacking(n.stacking,n.position.top,n.position.left)},destroy:function(){e.fn.destroy.call(this),this.getNotifications().off(T).find(u).off(T)}});n.ui.plugin(S)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,i,n){(n||i)()});\n//# sourceMappingURL=kendo.notification.min.js.map\n","var map = {\n\t\"./af\": 25177,\n\t\"./af.js\": 25177,\n\t\"./ar\": 61509,\n\t\"./ar-dz\": 41488,\n\t\"./ar-dz.js\": 41488,\n\t\"./ar-kw\": 58676,\n\t\"./ar-kw.js\": 58676,\n\t\"./ar-ly\": 42353,\n\t\"./ar-ly.js\": 42353,\n\t\"./ar-ma\": 24496,\n\t\"./ar-ma.js\": 24496,\n\t\"./ar-ps\": 6947,\n\t\"./ar-ps.js\": 6947,\n\t\"./ar-sa\": 82682,\n\t\"./ar-sa.js\": 82682,\n\t\"./ar-tn\": 89756,\n\t\"./ar-tn.js\": 89756,\n\t\"./ar.js\": 61509,\n\t\"./az\": 95533,\n\t\"./az.js\": 95533,\n\t\"./be\": 28959,\n\t\"./be.js\": 28959,\n\t\"./bg\": 47777,\n\t\"./bg.js\": 47777,\n\t\"./bm\": 54903,\n\t\"./bm.js\": 54903,\n\t\"./bn\": 61290,\n\t\"./bn-bd\": 17357,\n\t\"./bn-bd.js\": 17357,\n\t\"./bn.js\": 61290,\n\t\"./bo\": 31545,\n\t\"./bo.js\": 31545,\n\t\"./br\": 11470,\n\t\"./br.js\": 11470,\n\t\"./bs\": 44429,\n\t\"./bs.js\": 44429,\n\t\"./ca\": 7306,\n\t\"./ca.js\": 7306,\n\t\"./cs\": 56464,\n\t\"./cs.js\": 56464,\n\t\"./cv\": 96016,\n\t\"./cv.js\": 96016,\n\t\"./cy\": 64226,\n\t\"./cy.js\": 64226,\n\t\"./da\": 93601,\n\t\"./da.js\": 93601,\n\t\"./de\": 77853,\n\t\"./de-at\": 26111,\n\t\"./de-at.js\": 26111,\n\t\"./de-ch\": 54697,\n\t\"./de-ch.js\": 54697,\n\t\"./de.js\": 77853,\n\t\"./dv\": 60708,\n\t\"./dv.js\": 60708,\n\t\"./el\": 54691,\n\t\"./el.js\": 54691,\n\t\"./en-au\": 53872,\n\t\"./en-au.js\": 53872,\n\t\"./en-ca\": 28298,\n\t\"./en-ca.js\": 28298,\n\t\"./en-gb\": 56195,\n\t\"./en-gb.js\": 56195,\n\t\"./en-ie\": 66584,\n\t\"./en-ie.js\": 66584,\n\t\"./en-il\": 65543,\n\t\"./en-il.js\": 65543,\n\t\"./en-in\": 9033,\n\t\"./en-in.js\": 9033,\n\t\"./en-nz\": 79402,\n\t\"./en-nz.js\": 79402,\n\t\"./en-sg\": 43004,\n\t\"./en-sg.js\": 43004,\n\t\"./eo\": 32934,\n\t\"./eo.js\": 32934,\n\t\"./es\": 97650,\n\t\"./es-do\": 20838,\n\t\"./es-do.js\": 20838,\n\t\"./es-mx\": 17730,\n\t\"./es-mx.js\": 17730,\n\t\"./es-us\": 56575,\n\t\"./es-us.js\": 56575,\n\t\"./es.js\": 97650,\n\t\"./et\": 3035,\n\t\"./et.js\": 3035,\n\t\"./eu\": 3508,\n\t\"./eu.js\": 3508,\n\t\"./fa\": 119,\n\t\"./fa.js\": 119,\n\t\"./fi\": 90527,\n\t\"./fi.js\": 90527,\n\t\"./fil\": 95995,\n\t\"./fil.js\": 95995,\n\t\"./fo\": 52477,\n\t\"./fo.js\": 52477,\n\t\"./fr\": 85498,\n\t\"./fr-ca\": 26435,\n\t\"./fr-ca.js\": 26435,\n\t\"./fr-ch\": 37892,\n\t\"./fr-ch.js\": 37892,\n\t\"./fr.js\": 85498,\n\t\"./fy\": 37071,\n\t\"./fy.js\": 37071,\n\t\"./ga\": 41734,\n\t\"./ga.js\": 41734,\n\t\"./gd\": 70217,\n\t\"./gd.js\": 70217,\n\t\"./gl\": 77329,\n\t\"./gl.js\": 77329,\n\t\"./gom-deva\": 32124,\n\t\"./gom-deva.js\": 32124,\n\t\"./gom-latn\": 93383,\n\t\"./gom-latn.js\": 93383,\n\t\"./gu\": 95050,\n\t\"./gu.js\": 95050,\n\t\"./he\": 11713,\n\t\"./he.js\": 11713,\n\t\"./hi\": 43861,\n\t\"./hi.js\": 43861,\n\t\"./hr\": 26308,\n\t\"./hr.js\": 26308,\n\t\"./hu\": 90609,\n\t\"./hu.js\": 90609,\n\t\"./hy-am\": 17160,\n\t\"./hy-am.js\": 17160,\n\t\"./id\": 74063,\n\t\"./id.js\": 74063,\n\t\"./is\": 89374,\n\t\"./is.js\": 89374,\n\t\"./it\": 88383,\n\t\"./it-ch\": 21827,\n\t\"./it-ch.js\": 21827,\n\t\"./it.js\": 88383,\n\t\"./ja\": 23827,\n\t\"./ja.js\": 23827,\n\t\"./jv\": 89722,\n\t\"./jv.js\": 89722,\n\t\"./ka\": 41794,\n\t\"./ka.js\": 41794,\n\t\"./kk\": 27088,\n\t\"./kk.js\": 27088,\n\t\"./km\": 96870,\n\t\"./km.js\": 96870,\n\t\"./kn\": 84451,\n\t\"./kn.js\": 84451,\n\t\"./ko\": 63164,\n\t\"./ko.js\": 63164,\n\t\"./ku\": 98174,\n\t\"./ku-kmr\": 6181,\n\t\"./ku-kmr.js\": 6181,\n\t\"./ku.js\": 98174,\n\t\"./ky\": 78474,\n\t\"./ky.js\": 78474,\n\t\"./lb\": 79680,\n\t\"./lb.js\": 79680,\n\t\"./lo\": 15867,\n\t\"./lo.js\": 15867,\n\t\"./lt\": 45766,\n\t\"./lt.js\": 45766,\n\t\"./lv\": 69532,\n\t\"./lv.js\": 69532,\n\t\"./me\": 58076,\n\t\"./me.js\": 58076,\n\t\"./mi\": 41848,\n\t\"./mi.js\": 41848,\n\t\"./mk\": 30306,\n\t\"./mk.js\": 30306,\n\t\"./ml\": 73739,\n\t\"./ml.js\": 73739,\n\t\"./mn\": 99053,\n\t\"./mn.js\": 99053,\n\t\"./mr\": 86169,\n\t\"./mr.js\": 86169,\n\t\"./ms\": 73386,\n\t\"./ms-my\": 92297,\n\t\"./ms-my.js\": 92297,\n\t\"./ms.js\": 73386,\n\t\"./mt\": 77075,\n\t\"./mt.js\": 77075,\n\t\"./my\": 72264,\n\t\"./my.js\": 72264,\n\t\"./nb\": 22274,\n\t\"./nb.js\": 22274,\n\t\"./ne\": 8235,\n\t\"./ne.js\": 8235,\n\t\"./nl\": 92572,\n\t\"./nl-be\": 43784,\n\t\"./nl-be.js\": 43784,\n\t\"./nl.js\": 92572,\n\t\"./nn\": 54566,\n\t\"./nn.js\": 54566,\n\t\"./oc-lnc\": 69330,\n\t\"./oc-lnc.js\": 69330,\n\t\"./pa-in\": 29849,\n\t\"./pa-in.js\": 29849,\n\t\"./pl\": 94418,\n\t\"./pl.js\": 94418,\n\t\"./pt\": 79834,\n\t\"./pt-br\": 48303,\n\t\"./pt-br.js\": 48303,\n\t\"./pt.js\": 79834,\n\t\"./ro\": 24457,\n\t\"./ro.js\": 24457,\n\t\"./ru\": 82271,\n\t\"./ru.js\": 82271,\n\t\"./sd\": 1221,\n\t\"./sd.js\": 1221,\n\t\"./se\": 33478,\n\t\"./se.js\": 33478,\n\t\"./si\": 17538,\n\t\"./si.js\": 17538,\n\t\"./sk\": 5784,\n\t\"./sk.js\": 5784,\n\t\"./sl\": 46637,\n\t\"./sl.js\": 46637,\n\t\"./sq\": 86794,\n\t\"./sq.js\": 86794,\n\t\"./sr\": 45719,\n\t\"./sr-cyrl\": 3322,\n\t\"./sr-cyrl.js\": 3322,\n\t\"./sr.js\": 45719,\n\t\"./ss\": 56000,\n\t\"./ss.js\": 56000,\n\t\"./sv\": 41011,\n\t\"./sv.js\": 41011,\n\t\"./sw\": 40748,\n\t\"./sw.js\": 40748,\n\t\"./ta\": 11025,\n\t\"./ta.js\": 11025,\n\t\"./te\": 11885,\n\t\"./te.js\": 11885,\n\t\"./tet\": 28861,\n\t\"./tet.js\": 28861,\n\t\"./tg\": 86571,\n\t\"./tg.js\": 86571,\n\t\"./th\": 55802,\n\t\"./th.js\": 55802,\n\t\"./tk\": 59527,\n\t\"./tk.js\": 59527,\n\t\"./tl-ph\": 29231,\n\t\"./tl-ph.js\": 29231,\n\t\"./tlh\": 31052,\n\t\"./tlh.js\": 31052,\n\t\"./tr\": 85096,\n\t\"./tr.js\": 85096,\n\t\"./tzl\": 79846,\n\t\"./tzl.js\": 79846,\n\t\"./tzm\": 81765,\n\t\"./tzm-latn\": 97711,\n\t\"./tzm-latn.js\": 97711,\n\t\"./tzm.js\": 81765,\n\t\"./ug-cn\": 48414,\n\t\"./ug-cn.js\": 48414,\n\t\"./uk\": 16618,\n\t\"./uk.js\": 16618,\n\t\"./ur\": 57777,\n\t\"./ur.js\": 57777,\n\t\"./uz\": 57609,\n\t\"./uz-latn\": 72475,\n\t\"./uz-latn.js\": 72475,\n\t\"./uz.js\": 57609,\n\t\"./vi\": 21135,\n\t\"./vi.js\": 21135,\n\t\"./x-pseudo\": 64051,\n\t\"./x-pseudo.js\": 64051,\n\t\"./yo\": 82218,\n\t\"./yo.js\": 82218,\n\t\"./zh-cn\": 52648,\n\t\"./zh-cn.js\": 52648,\n\t\"./zh-hk\": 1632,\n\t\"./zh-hk.js\": 1632,\n\t\"./zh-mo\": 31541,\n\t\"./zh-mo.js\": 31541,\n\t\"./zh-tw\": 50304,\n\t\"./zh-tw.js\": 50304\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 35358;","import { CurrencyFormat } from \"app2/src/helpers/Format\";\nimport { CalculatedFinancingRecord } from \"app2/src/records/CalculatedFinancing\";\nimport { EstimateRecord } from \"app2/src/records/Estimate\";\nimport { RootState } from \"app2/src/reducers\";\nimport { estimateFinanceOptions } from \"app2/src/selectors/estimateFinanceOption.selectors\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { model as estimateModel } from \"app2/src/reducers/estimate.reducer\";\n\nexport const calculatedFinancing = (state: RootState, props: any): CalculatedFinancingRecord =>\n  state.getIn([estimateModel, \"calculatedFinancingByFinancedAmount\", props.financedAmount, props.financeOptionId]);\n\nexport const calculatedFinancings = createSelector(\n  [(state: RootState, props: any) => ({ state, props })],\n  (stateProps: any): List<CalculatedFinancingRecord> => {\n    const { state, props } = stateProps;\n    return props.financeOptionIds.map((financeOptionId: number) =>\n      calculatedFinancing(state, { financedAmount: props.financedAmount, financeOptionId }),\n    );\n  },\n);\n\nexport const range = createSelector([calculatedFinancings], (calculatedFinancings): string => {\n  let min = 0,\n    max = 0;\n\n  calculatedFinancings.forEach((cf, idx) => {\n    const rate = cf.monthly_payment;\n\n    if (idx === 0) {\n      min = rate;\n    }\n    min = _.min([rate, min]);\n    max = _.max([rate, max]);\n  });\n\n  if (min === max) {\n    return `${CurrencyFormat(min, 0)}`;\n  } else {\n    return `${CurrencyFormat(min, 0)} - ${CurrencyFormat(max, 0)}`;\n  }\n});\n\n// unable to import from estimate.selectors due to circular dependency\nexport const estimatesById = (state: RootState): Map<number, EstimateRecord> => state.getIn([estimateModel, \"byId\"]);\nexport const estimates = createSelector([estimatesById, (state, props) => ({ state, props })], (byId, stateProps) => {\n  const { props } = stateProps;\n\n  return props.estimateIds.map((id: number) => byId.get(id));\n});\n\nexport const calculatedFinancingsEstimatesLoading = createSelector(\n  [estimates, (state, props) => ({ state, props })],\n  (estimates, stateProps): boolean => {\n    const { state } = stateProps;\n    if (!estimates) {\n      estimates = List();\n    }\n    return estimates.some((estimate) => {\n      if (!estimate) {\n        return true;\n      }\n      const financeOptionIds = estimateFinanceOptions(state, {\n        estimateFinanceOptionIds: estimate.finance_option_ids,\n      }).map((efo) => efo.finance_option_id);\n      return calculatedFinancingsLoading(state, {\n        financeOptionIds,\n        financedAmount: estimate.getIn([\"payment_terms\", \"financed_amount\"]),\n      });\n    });\n  },\n);\n\nexport const calculatedFinancingsLoading = createSelector([calculatedFinancings], (calculatedFinancings): boolean => {\n  return calculatedFinancings.some((cf) => {\n    return !cf || cf.loading;\n  });\n});\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.binder.min\",[\"kendo.core.min\",\"kendo.data.min\"],e)}(function(){return function(e,t){function i(t,i,n){return p.extend({init:function(e,t,i){var n=this;p.fn.init.call(n,e.element[0],t,i),n.widget=e,n._dataBinding=M(n.dataBinding,n),n._dataBound=M(n.dataBound,n),n._itemChange=M(n.itemChange,n)},itemChange:function(e){r(e.item[0],e.data,this._ns(e.ns),[e.data].concat(this.bindings[t]._parents()))},dataBinding:function(e){var t,i,n=this.widget,s=e.removedItems||n.items();for(t=0,i=s.length;i>t;t++)h(s[t],!1)},_ns:function(t){t=t||k.ui;var i=[k.ui,k.dataviz.ui,k.mobile.ui];return i.splice(e.inArray(t,i),1),i.unshift(t),k.rolesFromNamespaces(i)},dataBound:function(e){var n,s,a,o,d=this.widget,h=e.addedItems||d.items(),l=d[i],c=k.data.HierarchicalDataSource;if(!(c&&l instanceof c)&&h.length)for(a=e.addedDataItems||l.flatView(),o=this.bindings[t]._parents(),n=0,s=a.length;s>n;n++)r(h[n],a[n],this._ns(e.ns),[a[n]].concat(o))},refresh:function(e){var s,a,r,o=this,d=o.widget;e=e||{},e.action||(o.destroy(),d.bind(\"dataBinding\",o._dataBinding),d.bind(\"dataBound\",o._dataBound),d.bind(\"itemChange\",o._itemChange),s=o.bindings[t].get(),d[i]instanceof k.data.DataSource&&d[i]!=s&&(s instanceof k.data.DataSource?d[n](s):s&&s._dataSource?d[n](s._dataSource):(d[i].data(s),a=k.ui.Select&&d instanceof k.ui.Select,r=k.ui.MultiSelect&&d instanceof k.ui.MultiSelect,o.bindings.value&&(a||r)&&d.value(f(o.bindings.value.get(),d.options.dataValueField)))))},destroy:function(){var e=this.widget;e.unbind(\"dataBinding\",this._dataBinding),e.unbind(\"dataBound\",this._dataBound),e.unbind(\"itemChange\",this._itemChange)}})}function n(e,i){var n=k.initWidget(e,{},i);return n?new w(n):t}function s(e){var t,i,n,a,r,o,d,h={};for(d=e.match(x),t=0,i=d.length;i>t;t++)n=d[t],a=n.indexOf(\":\"),r=n.substring(0,a),o=n.substring(a+1),\"{\"==o.charAt(0)&&(o=s(o)),h[r]=o;return h}function a(e,t,i){var n,s={};for(n in e)s[n]=new i(t,e[n]);return s}function r(e,t,i,o){var h,l,c,u,f=e.getAttribute(\"data-\"+k.ns+\"role\"),p=e.getAttribute(\"data-\"+k.ns+\"bind\"),m=[],y=!0,w={};if(o=o||[t],(f||p)&&d(e,!1),f&&(c=n(e,i)),p&&(p=s(p.replace(B,\"\")),c||(w=k.parseOptions(e,{textField:\"\",valueField:\"\",template:\"\",valueUpdate:j,valuePrimitive:!1,autoBind:!0}),w.roles=i,c=new _(e,w)),c.source=t,l=a(p,o,g),w.template&&(l.template=new v(o,\"\",w.template)),l.click&&(p.events=p.events||{},p.events.click=p.click,l.click.destroy(),delete l.click),l.source&&(y=!1),p.attr&&(l.attr=a(p.attr,o,g)),p.style&&(l.style=a(p.style,o,g)),p.events&&(l.events=a(p.events,o,b)),p.css&&(l.css=a(p.css,o,g)),c.bind(l)),c&&(e.kendoBindingTarget=c),u=e.children,y&&u){for(h=0;u.length>h;h++)m[h]=u[h];for(h=0;m.length>h;h++)r(m[h],t,i,o)}}function o(t,i){var n,s,a,o=k.rolesFromNamespaces([].slice.call(arguments,2));for(i=k.observable(i),t=e(t),n=0,s=t.length;s>n;n++)a=t[n],1===a.nodeType&&r(a,i,o)}function d(t,i){var n,s=t.kendoBindingTarget;s&&(s.destroy(),L?delete t.kendoBindingTarget:t.removeAttribute?t.removeAttribute(\"kendoBindingTarget\"):t.kendoBindingTarget=null),i&&(n=k.widgetInstance(e(t)),n&&typeof n.destroy===P&&n.destroy())}function h(e,t){d(e,t),l(e,t)}function l(e,t){var i,n,s=e.children;if(s)for(i=0,n=s.length;n>i;i++)h(s[i],t)}function c(t){var i,n;for(t=e(t),i=0,n=t.length;n>i;i++)h(t[i],!1)}function u(e,t){var i=e.element,n=i[0].kendoBindingTarget;n&&o(i,n.source,t)}function f(e,t){var i,n,s=[],a=0;if(!t)return e;if(e instanceof F){for(i=e.length;i>a;a++)n=e[a],s[a]=n.get?n.get(t):n[t];e=s}else e instanceof S&&(e=e.get(t));return e}var g,b,v,p,m,y,_,w,x,B,k=window.kendo,C=k.Observable,S=k.data.ObservableObject,F=k.data.ObservableArray,D={}.toString,T={},A=k.Class,M=e.proxy,V=\"value\",I=\"source\",O=\"events\",H=\"checked\",N=\"css\",L=!0,P=\"function\",j=\"change\";!function(){var e=document.createElement(\"a\");try{delete e.test}catch(t){L=!1}}(),g=C.extend({init:function(e,t){var i=this;C.fn.init.call(i),i.source=e[0],i.parents=e,i.path=t,i.dependencies={},i.dependencies[t]=!0,i.observable=i.source instanceof C,i._access=function(e){i.dependencies[e.field]=!0},i.observable&&(i._change=function(e){i.change(e)},i.source.bind(j,i._change))},_parents:function(){var t,i=this.parents,n=this.get();return n&&\"function\"==typeof n.parent&&(t=n.parent(),e.inArray(t,i)<0&&(i=[t].concat(i))),i},change:function(e){var t,i,n=e.field,s=this;if(\"this\"===s.path)s.trigger(j,e);else for(t in s.dependencies)if(0===t.indexOf(n)&&(i=t.charAt(n.length),!i||\".\"===i||\"[\"===i)){s.trigger(j,e);break}},start:function(e){e.bind(\"get\",this._access)},stop:function(e){e.unbind(\"get\",this._access)},get:function(){var e=this,i=e.source,n=0,s=e.path,a=i;if(!e.observable)return a;for(e.start(e.source),a=i.get(s);a===t&&i;)i=e.parents[++n],i instanceof S&&(a=i.get(s));if(a===t)for(i=e.source;a===t&&i;)i=i.parent(),i instanceof S&&(a=i.get(s));return\"function\"==typeof a&&(n=s.lastIndexOf(\".\"),n>0&&(i=i.get(s.substring(0,n))),e.start(i),a=i!==e.source?a.call(i,e.source):a.call(i),e.stop(i)),i&&i!==e.source&&(e.currentSource=i,i.unbind(j,e._change).bind(j,e._change)),e.stop(e.source),a},set:function(e){var t=this.currentSource||this.source,i=k.getter(this.path)(t);\"function\"==typeof i?t!==this.source?i.call(t,this.source,e):i.call(t,e):t.set(this.path,e)},destroy:function(){this.observable&&(this.source.unbind(j,this._change),this.currentSource&&this.currentSource.unbind(j,this._change)),this.unbind()}}),b=g.extend({get:function(){var e,t=this.source,i=this.path,n=0;for(e=t.get(i);!e&&t;)t=this.parents[++n],t instanceof S&&(e=t.get(i));return M(e,t)}}),v=g.extend({init:function(e,t,i){var n=this;g.fn.init.call(n,e,t),n.template=i},render:function(e){var t;return this.start(this.source),t=k.render(this.template,e),this.stop(this.source),t}}),p=A.extend({init:function(e,t,i){this.element=e,this.bindings=t,this.options=i},bind:function(e,t){var i=this;e=t?e[t]:e,e.bind(j,function(e){i.refresh(t||e)}),i.refresh(t)},destroy:function(){}}),m=p.extend({dataType:function(){var e=this.element.getAttribute(\"data-type\")||this.element.type||\"text\";return e.toLowerCase()},parsedValue:function(){return this._parseValue(this.element.value,this.dataType())},_parseValue:function(e,t){return\"date\"==t?e=k.parseDate(e,\"yyyy-MM-dd\"):\"datetime-local\"==t?e=k.parseDate(e,[\"yyyy-MM-ddTHH:mm:ss\",\"yyyy-MM-ddTHH:mm\"]):\"number\"==t?e=k.parseFloat(e):\"boolean\"==t&&(e=e.toLowerCase(),e=null!==k.parseFloat(e)?!!k.parseFloat(e):\"true\"===e.toLowerCase()),e}}),T.attr=p.extend({refresh:function(e){this.element.setAttribute(e,this.bindings.attr[e].get())}}),T.css=p.extend({init:function(e,t,i){p.fn.init.call(this,e,t,i),this.classes={}},refresh:function(t){var i=e(this.element),n=this.bindings.css[t],s=this.classes[t]=n.get();s?i.addClass(t):i.removeClass(t)}}),T.style=p.extend({refresh:function(e){this.element.style[e]=this.bindings.style[e].get()||\"\"}}),T.enabled=p.extend({refresh:function(){this.bindings.enabled.get()?this.element.removeAttribute(\"disabled\"):this.element.setAttribute(\"disabled\",\"disabled\")}}),T.readonly=p.extend({refresh:function(){this.bindings.readonly.get()?this.element.setAttribute(\"readonly\",\"readonly\"):this.element.removeAttribute(\"readonly\")}}),T.disabled=p.extend({refresh:function(){this.bindings.disabled.get()?this.element.setAttribute(\"disabled\",\"disabled\"):this.element.removeAttribute(\"disabled\")}}),T.events=p.extend({init:function(e,t,i){p.fn.init.call(this,e,t,i),this.handlers={}},refresh:function(t){var i=e(this.element),n=this.bindings.events[t],s=this.handlers[t];s&&i.off(t,s),s=this.handlers[t]=n.get(),i.on(t,n.source,s)},destroy:function(){var t,i=e(this.element);for(t in this.handlers)i.off(t,this.handlers[t])}}),T.text=p.extend({refresh:function(){var t=this.bindings.text.get(),i=this.element.getAttribute(\"data-format\")||\"\";null==t&&(t=\"\"),e(this.element).text(k.toString(t,i))}}),T.visible=p.extend({refresh:function(){this.element.style.display=this.bindings.visible.get()?\"\":\"none\"}}),T.invisible=p.extend({refresh:function(){this.element.style.display=this.bindings.invisible.get()?\"none\":\"\"}}),T.html=p.extend({refresh:function(){this.element.innerHTML=this.bindings.html.get()}}),T.value=m.extend({init:function(t,i,n){m.fn.init.call(this,t,i,n),this._change=M(this.change,this),this.eventName=n.valueUpdate||j,e(this.element).on(this.eventName,this._change),this._initChange=!1},change:function(){this._initChange=this.eventName!=j,this.bindings[V].set(this.parsedValue()),this._initChange=!1},refresh:function(){var e,t;this._initChange||(e=this.bindings[V].get(),null==e&&(e=\"\"),t=this.dataType(),\"date\"==t?e=k.toString(e,\"yyyy-MM-dd\"):\"datetime-local\"==t&&(e=k.toString(e,\"yyyy-MM-ddTHH:mm:ss\")),this.element.value=e),this._initChange=!1},destroy:function(){e(this.element).off(this.eventName,this._change)}}),T.source=p.extend({init:function(e,t,i){p.fn.init.call(this,e,t,i);var n=this.bindings.source.get();n instanceof k.data.DataSource&&i.autoBind!==!1&&n.fetch()},refresh:function(e){var t=this,i=t.bindings.source.get();i instanceof F||i instanceof k.data.DataSource?(e=e||{},\"add\"==e.action?t.add(e.index,e.items):\"remove\"==e.action?t.remove(e.index,e.items):\"itemchange\"!=e.action&&t.render()):t.render()},container:function(){var e=this.element;return\"table\"==e.nodeName.toLowerCase()&&(e.tBodies[0]||e.appendChild(document.createElement(\"tbody\")),e=e.tBodies[0]),e},template:function(){var e=this.options,t=e.template,i=this.container().nodeName.toLowerCase();return t||(t=\"select\"==i?e.valueField||e.textField?k.format('<option value=\"#:{0}#\">#:{1}#</option>',e.valueField||e.textField,e.textField||e.valueField):\"<option>#:data#</option>\":\"tbody\"==i?\"<tr><td>#:data#</td></tr>\":\"ul\"==i||\"ol\"==i?\"<li>#:data#</li>\":\"#:data#\",t=k.template(t)),t},add:function(t,i){var n,s,a,o,d=this.container(),h=d.cloneNode(!1),l=d.children[t];if(e(h).html(k.render(this.template(),i)),h.children.length)for(n=this.bindings.source._parents(),s=0,a=i.length;a>s;s++)o=h.children[0],d.insertBefore(o,l||null),r(o,i[s],this.options.roles,[i[s]].concat(n))},remove:function(e,t){var i,n,s=this.container();for(i=0;t.length>i;i++)n=s.children[e],h(n,!0),n.parentNode==s&&s.removeChild(n)},render:function(){var t,i,n,s=this.bindings.source.get(),a=this.container(),o=this.template();if(null!=s)if(s instanceof k.data.DataSource&&(s=s.view()),s instanceof F||\"[object Array]\"===D.call(s)||(s=[s]),this.bindings.template){if(l(a,!0),e(a).html(this.bindings.template.render(s)),a.children.length)for(t=this.bindings.source._parents(),i=0,n=s.length;n>i;i++)r(a.children[i],s[i],this.options.roles,[s[i]].concat(t))}else e(a).html(k.render(o,s))}}),T.input={checked:m.extend({init:function(t,i,n){m.fn.init.call(this,t,i,n),this._change=M(this.change,this),e(this.element).change(this._change)},change:function(){var e,t,i,n=this.element,s=this.value();if(\"radio\"==n.type)s=this.parsedValue(),this.bindings[H].set(s);else if(\"checkbox\"==n.type)if(e=this.bindings[H].get(),e instanceof F){if(s=this.parsedValue(),s instanceof Date){for(i=0;e.length>i;i++)if(e[i]instanceof Date&&+e[i]===+s){t=i;break}}else t=e.indexOf(s);t>-1?e.splice(t,1):e.push(s)}else this.bindings[H].set(s)},refresh:function(){var e,t,i=this.bindings[H].get(),n=i,s=this.dataType(),a=this.element;if(\"checkbox\"==a.type)if(n instanceof F){if(e=-1,i=this.parsedValue(),i instanceof Date){for(t=0;n.length>t;t++)if(n[t]instanceof Date&&+n[t]===+i){e=t;break}}else e=n.indexOf(i);a.checked=e>=0}else a.checked=n;else\"radio\"==a.type&&null!=i&&(\"date\"==s?i=k.toString(i,\"yyyy-MM-dd\"):\"datetime-local\"==s&&(i=k.toString(i,\"yyyy-MM-ddTHH:mm:ss\")),a.checked=a.value===\"\"+i)},value:function(){var e=this.element,t=e.value;return\"checkbox\"==e.type&&(t=e.checked),t},destroy:function(){e(this.element).off(j,this._change)}})},T.select={source:T.source.extend({refresh:function(i){var n,s=this,a=s.bindings.source.get();a instanceof F||a instanceof k.data.DataSource?(i=i||{},\"add\"==i.action?s.add(i.index,i.items):\"remove\"==i.action?s.remove(i.index,i.items):\"itemchange\"!=i.action&&i.action!==t||(s.render(),s.bindings.value&&s.bindings.value&&(n=f(s.bindings.value.get(),e(s.element).data(\"valueField\")),null===n?s.element.selectedIndex=-1:s.element.value=n))):s.render()}}),value:m.extend({init:function(t,i,n){m.fn.init.call(this,t,i,n),this._change=M(this.change,this),e(this.element).change(this._change)},parsedValue:function(){var e,t,i,n,s=this.dataType(),a=[];for(i=0,n=this.element.options.length;n>i;i++)t=this.element.options[i],t.selected&&(e=t.attributes.value,e=e&&e.specified?t.value:t.text,a.push(this._parseValue(e,s)));return a},change:function(){var e,i,n,s,a,r,o,d,h=[],l=this.element,c=this.options.valueField||this.options.textField,u=this.options.valuePrimitive;for(a=0,r=l.options.length;r>a;a++)i=l.options[a],i.selected&&(s=i.attributes.value,s=s&&s.specified?i.value:i.text,h.push(c?s:this._parseValue(s,this.dataType())));if(c)for(e=this.bindings.source.get(),e instanceof k.data.DataSource&&(e=e.view()),n=0;h.length>n;n++)for(a=0,r=e.length;r>a;a++)if(o=e[a].get(c),d=o+\"\"===h[n]){h[n]=e[a];break}s=this.bindings[V].get(),s instanceof F?s.splice.apply(s,[0,s.length].concat(h)):this.bindings[V].set(u||!(s instanceof S||null===s||s===t)&&c?h[0].get(c):h[0])},refresh:function(){var e,t,i,n=this.element,s=n.options,a=this.bindings[V].get(),r=a,o=this.options.valueField||this.options.textField,d=!1,h=this.dataType();for(r instanceof F||(r=new F([a])),n.selectedIndex=-1,i=0;r.length>i;i++)for(a=r[i],o&&a instanceof S&&(a=a.get(o)),\"date\"==h?a=k.toString(r[i],\"yyyy-MM-dd\"):\"datetime-local\"==h&&(a=k.toString(r[i],\"yyyy-MM-ddTHH:mm:ss\")),e=0;s.length>e;e++)t=s[e].value,\"\"===t&&\"\"!==a&&(t=s[e].text),null!=a&&t==\"\"+a&&(s[e].selected=!0,d=!0)},destroy:function(){e(this.element).off(j,this._change)}})},T.widget={events:p.extend({init:function(e,t,i){p.fn.init.call(this,e.element[0],t,i),this.widget=e,this.handlers={}},refresh:function(e){var t=this.bindings.events[e],i=this.handlers[e];i&&this.widget.unbind(e,i),i=t.get(),this.handlers[e]=function(e){e.data=t.source,i(e),e.data===t.source&&delete e.data},this.widget.bind(e,this.handlers[e])},destroy:function(){var e;for(e in this.handlers)this.widget.unbind(e,this.handlers[e])}}),checked:p.extend({init:function(e,t,i){p.fn.init.call(this,e.element[0],t,i),this.widget=e,this._change=M(this.change,this),this.widget.bind(j,this._change)},change:function(){this.bindings[H].set(this.value())},refresh:function(){this.widget.check(this.bindings[H].get()===!0)},value:function(){var e=this.element,t=e.value;return\"on\"!=t&&\"off\"!=t||(t=e.checked),t},destroy:function(){this.widget.unbind(j,this._change)}}),visible:p.extend({init:function(e,t,i){p.fn.init.call(this,e.element[0],t,i),this.widget=e},refresh:function(){var e=this.bindings.visible.get();this.widget.wrapper[0].style.display=e?\"\":\"none\"}}),invisible:p.extend({init:function(e,t,i){p.fn.init.call(this,e.element[0],t,i),this.widget=e},refresh:function(){var e=this.bindings.invisible.get();this.widget.wrapper[0].style.display=e?\"none\":\"\"}}),enabled:p.extend({init:function(e,t,i){p.fn.init.call(this,e.element[0],t,i),this.widget=e},refresh:function(){this.widget.enable&&this.widget.enable(this.bindings.enabled.get())}}),disabled:p.extend({init:function(e,t,i){p.fn.init.call(this,e.element[0],t,i),this.widget=e},refresh:function(){this.widget.enable&&this.widget.enable(!this.bindings.disabled.get())}}),source:i(\"source\",\"dataSource\",\"setDataSource\"),value:p.extend({init:function(t,i,n){p.fn.init.call(this,t.element[0],i,n),this.widget=t,this._change=e.proxy(this.change,this),this.widget.first(j,this._change);var s=this.bindings.value.get();this._valueIsObservableObject=!n.valuePrimitive&&(null==s||s instanceof S),this._valueIsObservableArray=s instanceof F,this._initChange=!1},_source:function(){var e;return this.widget.dataItem&&(e=this.widget.dataItem(),e&&e instanceof S)?[e]:(this.bindings.source&&(e=this.bindings.source.get()),(!e||e instanceof k.data.DataSource)&&(e=this.widget.dataSource.flatView()),e)},change:function(){var e,t,i,n,s,a,r,o=this.widget.value(),d=this.options.dataValueField||this.options.dataTextField,h=\"[object Array]\"===D.call(o),l=this._valueIsObservableObject,c=[];if(this._initChange=!0,d)if(\"\"===o&&(l||this.options.valuePrimitive))o=null;else{for(r=this._source(),h&&(t=o.length,c=o.slice(0)),s=0,a=r.length;a>s;s++)if(i=r[s],n=i.get(d),h){for(e=0;t>e;e++)if(n==c[e]){c[e]=i;break}}else if(n==o){o=l?i:n;break}c[0]&&(o=this._valueIsObservableArray?c:l||!d?c[0]:c[0].get(d))}this.bindings.value.set(o),this._initChange=!1},refresh:function(){var e,i,n,s,a,r,o,d,h;if(!this._initChange){if(e=this.widget,i=e.options,n=i.dataTextField,s=i.dataValueField||n,a=this.bindings.value.get(),r=i.text||\"\",o=0,h=[],a===t&&(a=null),s)if(a instanceof F){for(d=a.length;d>o;o++)h[o]=a[o].get(s);a=h}else a instanceof S&&(r=a.get(n),a=a.get(s));i.autoBind!==!1||i.cascadeFrom||!e.listView||e.listView.bound()?e.value(a):(n!==s||r||(r=a),r||!a&&0!==a||!i.valuePrimitive?e._preselect(a,r):e.value(a))}this._initChange=!1},destroy:function(){this.widget.unbind(j,this._change)}}),gantt:{dependencies:i(\"dependencies\",\"dependencies\",\"setDependenciesDataSource\")},multiselect:{value:p.extend({init:function(t,i,n){p.fn.init.call(this,t.element[0],i,n),this.widget=t,this._change=e.proxy(this.change,this),this.widget.first(j,this._change),this._initChange=!1},change:function(){var e,i,n,s,a,r,o,d,h,l=this,c=l.bindings[V].get(),u=l.options.valuePrimitive,f=u?l.widget.value():l.widget.dataItems(),g=this.options.dataValueField||this.options.dataTextField;if(f=f.slice(0),l._initChange=!0,c instanceof F){for(e=[],i=f.length,n=0,s=0,a=c[n],r=!1;a!==t;){for(h=!1,s=0;i>s;s++)if(u?r=f[s]==a:(d=f[s],d=d.get?d.get(g):d,r=d==(a.get?a.get(g):a)),r){f.splice(s,1),i-=1,h=!0;break}h?n+=1:(e.push(a),y(c,n,1),o=n),a=c[n]}y(c,c.length,0,f),e.length&&c.trigger(\"change\",{action:\"remove\",items:e,index:o}),f.length&&c.trigger(\"change\",{action:\"add\",items:f,index:c.length-1})}else l.bindings[V].set(f);l._initChange=!1},refresh:function(){if(!this._initChange){var e,i,n=this.options,s=this.widget,a=n.dataValueField||n.dataTextField,r=this.bindings.value.get(),o=r,d=0,h=[];if(r===t&&(r=null),a)if(r instanceof F){for(e=r.length;e>d;d++)i=r[d],h[d]=i.get?i.get(a):i;r=h}else r instanceof S&&(r=r.get(a));n.autoBind!==!1||n.valuePrimitive===!0||s._isBound()?s.value(r):s._preselect(o,r)}},destroy:function(){this.widget.unbind(j,this._change)}})},scheduler:{source:i(\"source\",\"dataSource\",\"setDataSource\").extend({dataBound:function(e){var t,i,n,s,a=this.widget,o=e.addedItems||a.items();if(o.length)for(n=e.addedDataItems||a.dataItems(),s=this.bindings.source._parents(),t=0,i=n.length;i>t;t++)r(o[t],n[t],this._ns(e.ns),[n[t]].concat(s))}})}},y=function(e,t,i,n){var s,a,r,o,d;if(n=n||[],i=i||0,s=n.length,a=e.length,r=[].slice.call(e,t+i),o=r.length,s){for(s=t+s,d=0;s>t;t++)e[t]=n[d],d++;e.length=s}else if(i)for(e.length=t,i+=t;i>t;)delete e[--i];if(o){for(o=t+o,d=0;o>t;t++)e[t]=r[d],d++;e.length=o}for(t=e.length;a>t;)delete e[t],t++},_=A.extend({init:function(e,t){this.target=e,this.options=t,this.toDestroy=[]},bind:function(e){var t,i,n,s,a,r,o=this instanceof w,d=this.binders();for(t in e)t==V?i=!0:t==I?n=!0:t!=O||o?t==H?a=!0:t==N?r=!0:this.applyBinding(t,e,d):s=!0;n&&this.applyBinding(I,e,d),i&&this.applyBinding(V,e,d),a&&this.applyBinding(H,e,d),s&&!o&&this.applyBinding(O,e,d),r&&!o&&this.applyBinding(N,e,d)},binders:function(){return T[this.target.nodeName.toLowerCase()]||{}},applyBinding:function(e,t,i){var n,s=i[e]||T[e],a=this.toDestroy,r=t[e];if(s)if(s=new s(this.target,t,this.options),a.push(s),r instanceof g)s.bind(r),a.push(r);else for(n in r)s.bind(r,n),a.push(r[n]);else if(\"template\"!==e)throw Error(\"The \"+e+\" binding is not supported by the \"+this.target.nodeName.toLowerCase()+\" element\")},destroy:function(){var e,t,i=this.toDestroy;for(e=0,t=i.length;t>e;e++)i[e].destroy()}}),w=_.extend({binders:function(){return T.widget[this.target.options.name.toLowerCase()]||{}},applyBinding:function(e,t,i){var n,s=i[e]||T.widget[e],a=this.toDestroy,r=t[e];if(!s)throw Error(\"The \"+e+\" binding is not supported by the \"+this.target.options.name+\" widget\");if(s=new s(this.target,t,this.target.options),a.push(s),r instanceof g)s.bind(r),a.push(r);else for(n in r)s.bind(r,n),a.push(r[n])}}),x=/[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g,B=/\\s/g,k.unbind=c,k.bind=o,k.data.binders=T,k.data.Binder=p,k.notify=u,k.observable=function(e){return e instanceof S||(e=new S(e)),e},k.observableHierarchy=function(e){function t(e){var i,n;for(i=0;e.length>i;i++)e[i]._initChildren(),n=e[i].children,n.fetch(),e[i].items=n.data(),t(e[i].items)}var i=k.data.HierarchicalDataSource.create(e);return i.fetch(),t(i.data()),i._data._dataSource=i,i._data}}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,i){(i||t)()});\n//# sourceMappingURL=kendo.binder.min.js.map\n","import { ActionsUnion, createAction } from \"../Utils\";\n\nexport const SET_AUTHORIZED = \"@integrations/roofscope/SET_AUTHORIZED\";\n\nexport const Actions = {\n  setAuthorized: (authorized: boolean) => createAction(SET_AUTHORIZED, authorized),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","/* eslint-disable no-inner-declarations */\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport {\n  DocumentableType,\n  DocumentableTypeConversion,\n  IDocumentOptions,\n  combineDocuments,\n  create,\n  destroy,\n  directUpload,\n  importMeasurement,\n  list,\n  load,\n  update,\n  updateOrCreate,\n} from \"app2/src/api/document.service\";\nimport { DocumentRecord, IDocumentData, fromJSON } from \"app2/src/records/Document\";\nimport { IPageData, QueryParamsRecord } from \"app2/src/records/Page\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as estimateLineItemActions from \"app2/src/reducers/estimateLineItem.actions\";\nimport * as jobActions from \"app2/src/reducers/job.actions\";\nimport * as orgActions from \"app2/src/reducers/org.actions\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as taskActions from \"app2/src/reducers/task.actions\";\nimport * as signedDocumentActions from \"app2/src/reducers/signedDocument.actions\";\nimport { document, documentsSelectedIds } from \"app2/src/selectors/document.selectors\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { dirtyIds } from \"app2/src/selectors/pagination.selectors\";\nimport { toUnderscore } from \"app2/src/helpers/Format\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\nimport { query } from \"app2/src/selectors/router.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { List } from \"immutable\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { downloadFile } from \"../helpers/File\";\nimport { ActionsUnion, createAction } from \"./Utils\";\nimport { RootState } from \"./index\";\nimport { ITaskContext, ITaskData } from \"app2/src/records/Task\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { DateFormat } from \"app2/src/helpers/Format\";\n\n// SINGLE\nexport const FETCH_DOCUMENT = \"@documents/FETCH_DOCUMENT\";\nexport const RECEIVE_DOCUMENT = \"@documents/RECEIVE_DOCUMENT\";\nexport const RESET_DOCUMENT = \"@documents/RESET_DOCUMENT\";\nexport const SET_DOCUMENT_LOADED = \"@documents/SET_DOCUMENT_LOADED\";\nexport const DESTROY_DOCUMENT = \"@documents/DESTROY_DOCUMENT\";\nexport const EDIT_DOCUMENT = \"@documents/EDIT_DOCUMENT\";\nexport const EDIT_BOOLEAN = \"@documents/EDIT_BOOLEAN\";\nexport const UPDATE_SIGNED_DOCUMENT_STATUS = \"@documents/UPDATE_SIGNED_DOCUMENT_STATUS\";\n// MULTIPLE\nexport const FETCH_DOCUMENTS = \"@documents/FETCH_DOCUMENTS\";\nexport const RECEIVE_DOCUMENTS = \"@documents/RECEIVE_DOCUMENTS\";\nexport const RECEIVE_DOCUMENTS_BY_ID = \"@documents/RECEIVE_DOCUMENTS_BY_ID\";\nexport const SET_DOCUMENTS_LOADED = \"@documents/SET_DOCUMENTS_LOADED\";\nexport const BATCH_EDIT_BOOLEAN = \"@documents/BATCH_EDIT_BOOLEAN\";\nexport const BATCH_EDIT_FOLDER_ID = \"@documents/BATCH_EDIT_FOLDER_ID\";\nexport const BATCH_REMOVE_IDS = \"@documents/BATCH_REMOVE_IDS\";\n// JOB\nexport const CREATE_JOB_DOCUMENT = \"@documents/CREATE_JOB_DOCUMENT\";\nexport const CREATE_JOB_ERRORS = \"@documents/CREATE_JOB_ERRORS\";\n// ESTIMATE\nexport const DUPLICATE_LINE_ITEM_DOCUMENTS = \"@documents/DUPLICATE_LINE_ITEM_DOCUMENTS\";\n\nexport const Actions = {\n  // SINGLE\n  fetchDocument: (id: number) => createAction(FETCH_DOCUMENT, { id }),\n  receiveDocument: (document: Partial<IDocumentData>) => createAction(RECEIVE_DOCUMENT, { document }),\n  resetDocument: (id: number) => createAction(RESET_DOCUMENT, { id }),\n  setDocumentLoaded: (id: number) => createAction(SET_DOCUMENT_LOADED, { id }),\n  destroyDocument: (id: number) => createAction(DESTROY_DOCUMENT, { id }),\n  editSortOrder: (id: number, sortOrder: number) =>\n    createAction(EDIT_DOCUMENT, { id, name: \"sort_order\", value: sortOrder }),\n  editBoolean: (id: number, name: string, value: boolean) => createAction(EDIT_BOOLEAN, { id, name, value }),\n  editName: (id: number, name: string) => createAction(EDIT_DOCUMENT, { id, name: \"name\", value: name }),\n  editImportType: (id: number, importType: string) =>\n    createAction(EDIT_DOCUMENT, { id, name: \"import_type\", value: importType }),\n  updateSignedDocumentStatus: (id: number, status: string) =>\n    createAction(UPDATE_SIGNED_DOCUMENT_STATUS, { id, status }),\n  //  MULTIPLE\n  fetchDocuments: (ids: List<number>) => createAction(FETCH_DOCUMENTS, { ids }),\n  receiveDocuments: (documents: IDocumentData[]) => createAction(RECEIVE_DOCUMENTS, { documents }),\n  receiveDocumentsById: (ids: List<number>, documents: IDocumentData[]) =>\n    createAction(RECEIVE_DOCUMENTS_BY_ID, { ids, documents }),\n  setDocumentsLoaded: (ids: List<number>) => createAction(SET_DOCUMENTS_LOADED, { ids }),\n  batchEditBoolean: (documentIds: List<number>, name: string, value: boolean) =>\n    createAction(BATCH_EDIT_BOOLEAN, { documentIds, name, value }),\n  batchEditFolderId: (documentIds: List<number>, folderId: number) =>\n    createAction(BATCH_EDIT_FOLDER_ID, { documentIds, folderId }),\n  batchRemoveIds: (documentIds: List<number>) => createAction(BATCH_REMOVE_IDS, { documentIds }),\n  // JOB\n  createJobDocument: (jobId: number, document: DocumentRecord) =>\n    createAction(CREATE_JOB_DOCUMENT, { jobId, document }),\n  createJobDocumentErrors: (jobId: number, errors: string[]) => createAction(CREATE_JOB_ERRORS, { jobId, errors }),\n  // ESTIMATE\n  duplicateLineItemDocuments: (lineItemId: number, docIds: List<number>) =>\n    createAction(DUPLICATE_LINE_ITEM_DOCUMENTS, { lineItemId, docIds }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  checkAndLoadDocument: (documentId: number, options: IDocumentOptions): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      if (document(getState(), { documentId })) {\n        return;\n      }\n      dispatch(Actions.fetchDocument(documentId));\n      try {\n        const response = await load(documentId, options);\n        dispatch(Actions.receiveDocument(response.document));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setDocumentLoaded(documentId));\n      }\n    };\n  },\n  listDocuments: (\n    options: Partial<IDocumentOptions>,\n    queryParams: QueryParamsRecord,\n    modelName = \"document\",\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const mergedOptions = setOptionsId(options, getState());\n\n      dispatch(paginationActions.Actions.fetchPage(modelName, queryParams));\n\n      try {\n        const response = await list(mergedOptions, queryParams);\n        dispatch(Actions.receiveDocuments(response.documents));\n        const pageData: Partial<IPageData> = {\n          ids: List(response.documents.map((document: IDocumentData) => document.id)),\n          pagination: response.meta.pagination,\n        };\n        dispatch(paginationActions.Actions.receivePage(modelName, queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response, dispatch);\n        dispatch(paginationActions.Actions.receivePageError(modelName, queryParams, errors));\n      }\n    };\n  },\n  deleteDocument: (document: DocumentRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      await destroy(document);\n      dispatch(Actions.destroyDocument(document.id));\n    };\n  },\n  destroyDocument: (document: DocumentRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchDocument(document.id));\n\n      try {\n        await destroy(document);\n        dispatch(Actions.destroyDocument(document.id));\n        if (document.documentable_type === \"Job\") {\n          dispatch(jobActions.Actions.decreaseCount(\"document\", document.documentable_id));\n        }\n        if (document.documentable_type === \"Org\") {\n          dispatch(orgActions.AsyncActions.removeFromDocumentOrder(document.id));\n        }\n        await dispatch(AsyncActions.checkPageEmpty(toUnderscore(document.documentable_type), document.folder_id));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Document successfully deleted\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setDocumentLoaded(document.id));\n      }\n    };\n  },\n  updateOrCreateDocument: (document: DocumentRecord): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchDocument(document.id));\n\n      try {\n        const response = await updateOrCreate(document);\n        dispatch(Actions.receiveDocument(response.document));\n        if (document.id <= 0) {\n          dispatch(AsyncActions.processDocument(response.document));\n        }\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved document successfully\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setDocumentLoaded(document.id));\n      }\n    };\n  },\n  createCustomFormDocument: (customFormId: string): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const jobId = currentJobId(getState());\n      const pdfUrl = fetcher.joinUrls(\n        \"api/v1/jobs\",\n        jobId?.toString(),\n        \"custom_forms\",\n        `${customFormId}.pdf?save_tmp=true`,\n      );\n      const fileName = \"Finance Application - \" + DateFormat(new Date(), \"short-hyphenated\") + \".pdf\";\n\n      try {\n        const response = await fetcher.fetch(pdfUrl);\n        const pdfBlob = await response.blob();\n\n        const tempDocumentId = parseInt(response.headers.get(\"document-id\"));\n        dispatch(\n          Actions.receiveDocument({\n            name: fileName,\n            id: tempDocumentId,\n            display: \"do_not_display\",\n            documentable_id: jobId,\n            documentable_type: \"Job\",\n            file: { url: URL.createObjectURL(pdfBlob) },\n          }),\n        );\n\n        dispatch(\n          signedDocumentActions.Actions.updateForm({\n            rootPath: [\"signedDocuments\", \"byId\", -1],\n            name: \"document_id\",\n            value: tempDocumentId,\n          }),\n        );\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  batchCreateDocument: (files: any[], options: IDocumentOptions): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        options = setOptionsId(options, getState());\n        options = setPresignedOptions(options, getState());\n        const { documentableType, documentableId, presignedType, presignedId, display, folder_id, disableFlash } =\n          options;\n        const fileCount = files.length;\n        const { urls } = await directUpload(fileCount, presignedType, presignedId);\n\n        let docSuccess = 0;\n        await Promise.all(\n          urls.map(async (obj, index) => {\n            try {\n              const file = files[index];\n              await fetch(obj.url, { body: file, method: \"PUT\", headers: { \"Content-Type\": file.type } });\n\n              const record = fromJSON({\n                uuid: obj.id,\n                name: file.name,\n                display: display || \"do_not_display\",\n                documentable_id: documentableId,\n                documentable_type: DocumentableTypeConversion[documentableType],\n                folder_id: folder_id,\n              });\n              const response = await create(record);\n              if (_.isArray(response.documents)) {\n                const docs = response.documents;\n                dispatch(Actions.receiveDocuments(docs));\n                docs.forEach((doc) => {\n                  dispatch(AsyncActions.processDocument(doc));\n                });\n\n                docSuccess += 1;\n                return response;\n              } else {\n                dispatch(Actions.receiveDocument({ ...response.document, content_type: file.type }));\n                dispatch(AsyncActions.processDocument(response.document));\n                docSuccess += 1;\n                return response;\n              }\n            } catch (response) {\n              handleErrors(response, dispatch);\n            }\n          }),\n        );\n\n        let flashLevel = FlashLevels.warning;\n        if (docSuccess === files.length) {\n          flashLevel = FlashLevels.success;\n        }\n\n        if (!disableFlash) {\n          dispatch(\n            commonActions.Actions.flashAddAlert(\n              flashLevel,\n              docSuccess + \"/\" + files.length + \" Documents successfully uploaded\",\n            ),\n          );\n        }\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  batchUpdateDocument: (documentIds: List<number>, reject = false): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const promises = [];\n      dispatch(Actions.fetchDocuments(documentIds));\n\n      documentIds.forEach((documentId) => {\n        const updatedDocument = document(getState(), { documentId });\n        promises.push(update(updatedDocument));\n      });\n\n      try {\n        const responses = await Promise.all(promises);\n        const documents = responses.map((response) => response.document);\n        dispatch(Actions.receiveDocuments(documents));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved documents successfully\"));\n      } catch (response) {\n        dispatch(Actions.setDocumentsLoaded(documentIds));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, [\"Update failed, please try again.\"]));\n        if (reject) {\n          return Promise.reject();\n        }\n      }\n    };\n  },\n  importMeasurementDocument: (document: DocumentRecord): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const response = await importMeasurement(document);\n        dispatch(Actions.receiveDocument(response.document));\n        const { task } = response.document;\n        if (task) {\n          dispatch(taskActions.Actions.receiveTask(task));\n          await dispatch(taskActions.AsyncActions.pollTask(task));\n        }\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n      }\n    };\n  },\n  onSortEnd: (oldIndex: number, newIndex: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      await dispatch(paginationActions.AsyncActions.onSortEnd(\"document\", oldIndex, newIndex));\n\n      dispatch(AsyncActions.batchUpdateDocument(dirtyIds(getState())));\n      dispatch(paginationActions.Actions.setDirtyIds(null));\n    };\n  },\n  loadDocumentsById: (documentIds: List<number>, options: Partial<IDocumentOptions>): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const mergeOptions = setOptionsId(options, getState());\n\n      if (documentIds.size === 0) return;\n\n      dispatch(Actions.fetchDocuments(documentIds));\n\n      try {\n        const response = await list({ ...mergeOptions, document_ids: documentIds });\n        dispatch(Actions.receiveDocumentsById(documentIds, response.documents));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.setDocumentsLoaded(documentIds));\n      }\n    };\n  },\n  processDocument: (document: IDocumentData): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      if (document.documentable_type === \"Job\") {\n        dispatch(jobActions.Actions.increaseCount(\"document\", document.documentable_id));\n      }\n\n      if (document.documentable_type === \"EstimateLineItem\") {\n        dispatch(estimateLineItemActions.Actions.pushDocumentId(document.documentable_id, document.id));\n      }\n\n      const folderParentId = query(getState()).get(\"folder_parent_id\");\n      if (!folderParentId || document.folder_id === parseInt(folderParentId)) {\n        dispatch(paginationActions.Actions.pushId(document.id, \"document\"));\n      }\n\n      const { task } = document;\n      if (task) {\n        const contextObj: ITaskContext = {\n          model: \"document\",\n          action: \"taskHandler\",\n          action_payload: { id: document.id },\n          error_action: \"errorTaskHandler\",\n        };\n        task.context = contextObj;\n        dispatch(taskActions.Actions.receiveTask(task));\n      }\n    };\n  },\n\n  taskHandler: (task: ITaskData, payload: any = {}): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.editImportType(payload.id, task.results.import_type));\n    };\n  },\n\n  moveDocuments: (folderId: number): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const documentIds = documentsSelectedIds(getState(), {});\n      const doc = document(getState(), { documentId: documentIds.first() });\n\n      dispatch(Actions.batchEditFolderId(documentIds, folderId));\n      try {\n        await dispatch(AsyncActions.batchUpdateDocument(documentIds, true));\n\n        dispatch(Actions.batchRemoveIds(documentIds));\n        await dispatch(AsyncActions.checkPageEmpty(toUnderscore(doc.documentable_type), doc.folder_id));\n      } catch {\n        dispatch(Actions.batchEditFolderId(documentIds, doc.folder_id));\n      }\n    };\n  },\n  checkPageEmpty: (kind: DocumentableType, folder_id: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      return paginationActions.checkPageEmpty(getState(), \"document\", (newQueryParams) =>\n        dispatch(\n          AsyncActions.listDocuments(\n            {\n              documentableType: kind,\n              folder_id,\n              signed: \"unsigned\",\n            },\n            newQueryParams,\n          ),\n        ),\n      );\n    };\n  },\n  downloadDocument: (document: DocumentRecord, signed = false): ThunkResult<Promise<void>> => {\n    return async () => {\n      const url = signed ? document.signed_document.url : document.file.url;\n      return downloadFile(url, document.name);\n    };\n  },\n  combine: (document_ids: List<number>, name: string, jobId: number): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const document = (await combineDocuments(document_ids, name, jobId)).document;\n        const taskResponse: any = await dispatch(taskActions.AsyncActions.pollTask(document.task));\n        dispatch(Actions.receiveDocument(taskResponse.results.document));\n        return taskResponse.results.document.id;\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n      }\n    };\n  },\n  errorTaskHandler: (task: ITaskData, payload: any = {}): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      const errorMessage =\n        task?.results?.error_message ||\n        \"There were problems processing your task. Please try again. If the problem persists contact support.\";\n      dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errorMessage));\n\n      dispatch(Actions.destroyDocument(payload.id));\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nconst setOptionsId = (options: Partial<IDocumentOptions>, state: RootState): IDocumentOptions => {\n  if (isNullOrUndefined(options.documentableId)) {\n    switch (options.documentableType) {\n      case \"job\":\n        options.documentableId = currentJobId(state);\n        break;\n      case \"org\":\n        options.documentableId = currentOrgId(state);\n        break;\n    }\n  }\n\n  return options as IDocumentOptions;\n};\n\nconst setPresignedOptions = (options: Partial<IDocumentOptions>, state: RootState): IDocumentOptions => {\n  switch (options.documentableType) {\n    case \"estimate_line_item\":\n      options.presignedType = \"job\";\n      options.presignedId = currentJobId(state);\n      break;\n    default:\n      options.presignedType = options.documentableType;\n      options.presignedId = options.documentableId;\n      break;\n  }\n\n  return options as IDocumentOptions;\n};\n","import { ActionsUnion, createAction } from \"../Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"../index\";\nimport { IFinanceOptionData, FinanceOptionRecord, FinanceOptionProvider } from \"app2/src/records/FinanceOption\";\nimport { financeOptionService, FinanceOptionIndexOptions } from \"app2/src/api/financeOption.service\";\nimport { RootDispatchType } from \"../../store\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { List } from \"immutable\";\nimport { Nullable } from \"app2/src/records\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { currentJobOrgId } from \"app2/src/selectors/job.selectors\";\n\nexport const FETCH_ORG_FINANCE_OPTIONS = \"@financeOptions/FETCH_ORG_FINANCE_OPTIONS\";\nexport const FETCH_FINANCE_OPTION = \"@financeOptions/FETCH_FINANCE_OPTION\";\nexport const RECEIVE_ORG_FINANCE_OPTIONS = \"@financeOptions/RECEIVE_ORG_FINANCE_OPTIONS\";\nexport const RECEIVE_FINANCE_OPTION = \"@financeOptions/RECEIVE_FINANCE_OPTION\";\nexport const REMOVE_ORG_FINANCE_OPTION = \"@financeOptions/REMOVE_ORG_FINANCE_OPTION\";\nexport const REMOVE_FINANCE_OPTION = \"@financeOptions/REMOVE_FINANCE_OPTION\";\nexport const RECEIVE_ORG_ERRORS = \"@financeOptions/RECEIVE_ORG_ERRORS\";\nexport const RECEIVE_FINANCE_OPTION_ERROR = \"@financeOptions/RECEIVE_FINANCE_OPTION_ERROR\";\n\nexport const Actions = {\n  fetchFinanceOption: (orgId: number, financeOptionId: number) =>\n    createAction(FETCH_FINANCE_OPTION, { orgId: orgId, financeOptionId: financeOptionId }),\n  receiveFinanceOptionError: (orgId, financeOptionId: number, errors: string[]) =>\n    createAction(RECEIVE_FINANCE_OPTION_ERROR, { orgId: orgId, financeOptionId: financeOptionId, errors: errors }),\n  receiveFinanceOption: (financeOption: Partial<IFinanceOptionData>) =>\n    createAction(RECEIVE_FINANCE_OPTION, financeOption),\n  fetchFinanceOptions: (orgId: number) => createAction(FETCH_ORG_FINANCE_OPTIONS, orgId),\n  receiveErrors: (orgId, errors: string[]) => createAction(RECEIVE_ORG_ERRORS, { orgId: orgId, errors: errors }),\n  receiveFinanceOptions: (orgId: number, financeOptions: Partial<IFinanceOptionData>[]) =>\n    createAction(RECEIVE_ORG_FINANCE_OPTIONS, { orgId: orgId, financeOptions: financeOptions }),\n  removeOrgFinanceOption: (orgId: number, financeOptionId: number) =>\n    createAction(REMOVE_ORG_FINANCE_OPTION, { orgId: orgId, financeOptionId: financeOptionId }),\n  removeFinanceOption: (financeOptionId: number) => createAction(REMOVE_FINANCE_OPTION, financeOptionId),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  addFinanceOption: (\n    orgId: number,\n    financeOption: Partial<IFinanceOptionData>,\n  ): ThunkResult<Promise<IFinanceOptionData>> => {\n    return (dispatch: RootDispatchType) => {\n      const id = financeOption.id;\n      dispatch(Actions.fetchFinanceOption(orgId, financeOption.id));\n\n      return financeOptionService.create(orgId, financeOption).then(\n        (result) => {\n          dispatch(Actions.removeOrgFinanceOption(orgId, id));\n          dispatch(Actions.removeFinanceOption(id));\n          dispatch(Actions.receiveFinanceOption(result));\n\n          return result;\n        },\n        (errors) => {\n          dispatch(Actions.receiveFinanceOptionError(orgId, id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  updateFinanceOption: (financeOption: Partial<IFinanceOptionData>): ThunkResult<Promise<IFinanceOptionData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchFinanceOption(financeOption.org_id, financeOption.id));\n\n      return financeOptionService.update(financeOption.org_id, financeOption).then(\n        (financeOption) => {\n          dispatch(Actions.receiveFinanceOption(financeOption));\n          return financeOption;\n        },\n        (errors) => {\n          dispatch(Actions.receiveFinanceOptionError(financeOption.org_id, financeOption.id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  batchUpdateFinanceOptions: (financeOptions: List<IFinanceOptionData>): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      const promises = [];\n\n      financeOptions.forEach((financeOption) => {\n        promises.push(financeOptionService.update(financeOption.org_id, financeOption));\n      });\n\n      try {\n        const financeOptions = await Promise.all(promises);\n        dispatch(Actions.receiveFinanceOptions(financeOptions[0].org_id, financeOptions));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Finance Options successfully saved.\"));\n      } catch {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, [\"Sorting Failed, please try again.\"]));\n      }\n    };\n  },\n  archiveFinanceOption: (financeOption: FinanceOptionRecord): ThunkResult<Promise<IFinanceOptionData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchFinanceOption(financeOption.org_id, financeOption.id));\n\n      return financeOptionService.archive(financeOption.org_id, financeOption).then(\n        (archived) => {\n          dispatch(Actions.removeOrgFinanceOption(archived.org_id, archived.id));\n          dispatch(Actions.removeFinanceOption(archived.id));\n          return archived;\n        },\n        (errors) => {\n          dispatch(Actions.receiveFinanceOptionError(financeOption.org_id, financeOption.id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  listFinanceOptions: (\n    orgId: number,\n    options: FinanceOptionIndexOptions = {},\n  ): ThunkResult<Promise<IFinanceOptionData[]>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchFinanceOptions(orgId));\n\n      try {\n        const response = await financeOptionService.loadByOrg(orgId, options);\n\n        dispatch(Actions.receiveFinanceOptions(orgId, response.finance_options));\n        return response.finance_options;\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(Actions.receiveErrors(orgId, errors));\n        return Promise.reject(errors);\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { RootState } from \"../reducers\";\nimport { createSelector } from \"reselect\";\nimport { EstimateFinanceOptionRecord, IEstimateFinanceOptionData } from \"../records/EstimateFinanceOption\";\nimport { List } from \"immutable\";\nimport { calculatedFinancing } from \"app2/src/selectors/calculatedFinancing.selectors\";\n\nexport const estimateFinanceOptionsById = (state: RootState) => state.getIn([\"estimateFinanceOptions\", \"byId\"]);\nexport const lastSavedEstimateFinanceOptionsById = (state: RootState) =>\n  state.getIn([\"estimateFinanceOptions\", \"lastSavedById\"]);\nexport const estimateFinanceOption = (state: RootState, props: any): EstimateFinanceOptionRecord =>\n  state.getIn([\"estimateFinanceOptions\", \"byId\", props.estimateFinanceOptionId]);\nexport const financeOptionsById = (state: RootState) => state.getIn([\"orgs\", \"financeOptions\", \"byId\"]);\n\nexport const updateEstimateFinanceOptionPayments = createSelector(\n  [estimateFinanceOption, (state, props) => ({ state, props })],\n  (estimateFinanceOption, stateProps) => {\n    const { state, props } = stateProps;\n    const { financedAmount } = props;\n    const calcFinancing = calculatedFinancing(state, {\n      financeOptionId: estimateFinanceOption.finance_option_id,\n      financedAmount,\n    });\n\n    if (!calcFinancing || calcFinancing.loading) {\n      return estimateFinanceOption;\n    }\n\n    return estimateFinanceOption.merge({\n      monthly_payment: calcFinancing.get(\"monthly_payment\"),\n      promo_payment: calcFinancing.get(\"promo_payment\"),\n    });\n  },\n);\n\nexport const estimateFinanceOptions = createSelector(\n  [estimateFinanceOptionsById, (_: RootState, props: any) => props],\n  (\n    estimateFinanceOptionsById: Map<number, EstimateFinanceOptionRecord>,\n    props: any,\n  ): List<EstimateFinanceOptionRecord> => {\n    return estimateFinanceOptionsProcess(estimateFinanceOptionsById, props);\n  },\n);\n\nexport const lastSavedEstimateFinanceOptions = createSelector(\n  [lastSavedEstimateFinanceOptionsById, (_: RootState, props: any) => props],\n  (\n    estimateFinanceOptionsById: Map<number, EstimateFinanceOptionRecord>,\n    props: any,\n  ): List<EstimateFinanceOptionRecord> => {\n    return estimateFinanceOptionsProcess(estimateFinanceOptionsById, props);\n  },\n);\n\nconst estimateFinanceOptionsProcess = (estimateFinanceOptionsById, props) => {\n  const { estimateFinanceOptionIds, fullEstimate } = props;\n\n  return estimateFinanceOptionIds\n    .map((foId: number) => {\n      const fo = estimateFinanceOptionsById.get(foId) as EstimateFinanceOptionRecord;\n      return fo;\n    })\n    .filter((fo: EstimateFinanceOptionRecord) => {\n      return fullEstimate || !fo._destroy;\n    })\n    .toList();\n};\n\nexport const toEstimateFinanceOptionsJson = createSelector(\n  [estimateFinanceOptions],\n  (estimateFinanceOptions: List<EstimateFinanceOptionRecord>): IEstimateFinanceOptionData[] => {\n    return estimateFinanceOptions\n      .map((fo: EstimateFinanceOptionRecord) => {\n        const foData = fo.toJSON() as any;\n\n        if (!foData._destroy) {\n          delete foData._destroy;\n        }\n\n        return foData as IEstimateFinanceOptionData;\n      })\n      .toArray();\n  },\n);\n","import { Map, Record, List } from \"immutable\";\nimport { EstimateFinanceOptionRecord, fromJSON } from \"../records/EstimateFinanceOption\";\nimport { RootState, RootActions } from \".\";\nimport * as estimateFinanceOptionActions from \"./estimateFinanceOption.actions\";\nimport { updateEstimateFinanceOptionPayments } from \"../selectors/estimateFinanceOption.selectors\";\nimport { estimateFinancedAmount } from \"app2/src/selectors/estimate.selectors\";\nimport { model as estimateModel } from \"./estimate.reducer\";\n\nexport const EstimateFinanceOptionStateRecord = Record({\n  byId: Map<number, EstimateFinanceOptionRecord>(),\n  lastSavedById: Map<number, EstimateFinanceOptionRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = EstimateFinanceOptionStateRecord();\n\nexport type EstimateFinanceOptionState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"estimateFinanceOptions\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let estimateFinanceOption: EstimateFinanceOptionRecord;\n  let unsavedId: number;\n  switch (action.type) {\n    case estimateFinanceOptionActions.RECEIVE_ESTIMATE_FINANCE_OPTION:\n      estimateFinanceOption = fromJSON({ ...action.payload.estimateFinanceOption });\n\n      state = state.setIn([model, \"byId\", estimateFinanceOption.id], estimateFinanceOption);\n      return state.setIn([model, \"lastSavedById\", estimateFinanceOption.id], estimateFinanceOption);\n\n    case estimateFinanceOptionActions.DUPLICATE_ESTIMATE_FINANCE_OPTIONS:\n      const estimate = state.getIn([estimateModel, \"byId\", action.payload.estimateId]);\n\n      let financeOptionIds = List();\n      unsavedId = state.getIn([model, \"unsavedId\"]);\n      action.payload.financeOptionIds.map((foId: number) => {\n        let efo = state.getIn([model, \"byId\", foId]);\n        efo = efo.set(\"id\", unsavedId);\n        financeOptionIds = financeOptionIds.push(unsavedId);\n        state = state.setIn([model, \"byId\", efo.id], efo);\n        unsavedId -= 1;\n      });\n\n      return state\n        .setIn([estimateModel, \"byId\", estimate.id, \"finance_option_ids\"], financeOptionIds)\n        .setIn([model, \"unsavedId\"], unsavedId);\n\n    case estimateFinanceOptionActions.ADD_FINANCE_OPTION:\n      unsavedId = state.getIn([model, \"unsavedId\"]);\n      estimateFinanceOption = fromJSON({\n        id: unsavedId,\n        estimate_id: action.payload.estimateId,\n        finance_option_id: action.payload.financeOptionId,\n      });\n      state = state.setIn([model, \"byId\", estimateFinanceOption.id], estimateFinanceOption);\n      unsavedId -= 1;\n      return state.setIn([model, \"unsavedId\"], unsavedId);\n\n    case estimateFinanceOptionActions.REMOVE_FINANCE_OPTION:\n      return state.setIn([model, \"byId\", action.payload.estimateFinanceOptionId, \"_destroy\"], true);\n\n    case estimateFinanceOptionActions.CALCULATE_FINANCE_OPTION:\n      return state.setIn(\n        [model, \"byId\", action.payload.estimateFinanceOptionId],\n        updateEstimateFinanceOptionPayments(state, {\n          financedAmount: estimateFinancedAmount(state, { estimateId: action.payload.estimateId }),\n          estimateFinanceOptionId: action.payload.estimateFinanceOptionId,\n        }),\n      );\n\n    default:\n      return state;\n  }\n};\n","import { isNaN } from \"underscore\";\n\n/**\n * Safely parse a float value, returning 0 if the result is NaN\n */\nexport const parseFloatSafe = (value: any): number => {\n  const result = parseFloat(value);\n  if (isNaN(result)) {\n    return 0;\n  }\n  return result;\n};\n\n/**\n * Round a number to a specific number of decimal places\n * @param value - The number to round\n * @param exponent - The number of decimal places (negative for precision)\n * @returns The rounded number\n */\nexport const roundToDecimals = (value: number, exponent: number): number => {\n  let val = +value;\n  const exp = +exponent;\n  let parts = val.toString().split(\"e\");\n  val = Math.round(+(parts[0] + \"e\" + (parts[1] ? +parts[1] - exp : -exp)));\n  parts = val.toString().split(\"e\");\n  return +(parts[0] + \"e\" + (parts[1] ? +parts[1] + exp : exp));\n};\n","import { ElevationRecord } from \"app2/src/records/Elevation\";\nimport { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { List } from \"immutable\";\nimport { currentMeasurementId } from \"app2/src/selectors/measurementCommon.selectors\";\nimport { capitalize } from \"humanize-plus\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const rootKey = \"elevations\";\n\n/**\n * Returns an elevation record\n *\n * @param {RootState} state\n * @param {{ elevationId: number }} options\n * @returns {ElevationRecord}\n */\nexport const elevation = (state: RootState, props: any) => state.getIn([rootKey, \"byId\", props.elevationId]);\n\n/**\n * Returns elevations by id\n *\n * @param {RootState} state\n * @returns {Map<number, ElevationRecord>}\n */\nexport const elevationsById = (state: RootState, _props?: any) => state.getIn([rootKey, \"byId\"]);\n\n/**\n * Returns elevations using elevationIds\n *\n * @param {RootState} state\n * @param {{ elevationIds: List<number> }} options\n * @returns {List<ElevationRecord>}\n */\nexport const elevations = createSelector(\n  [(state, props) => ({ state, props })],\n  (stateProps: any): List<ElevationRecord> => {\n    const { state, props } = stateProps;\n    const { elevationIds } = props;\n    return elevationIds.map((id: number) => elevation(state, { elevationId: id }));\n  },\n);\n\n/**\n * Returns an elevationId if an elevation exists on an opening\n *\n * @param {RootState} state\n * @param {{ openingId: number, openingType: \"Door\" | \"Window\" }} options\n * @returns {number}\n */\nexport const annotation = (state: RootState, props: any) => {\n  return state.getIn([rootKey, `by${capitalize(props.openingType)}Id`, props.openingId]);\n};\n\n/**\n * Returns elevation ids by measurements\n *\n * @param {RootState} state\n * @param {{ measurementId: number }} options\n * @returns {List<number>}\n */\nexport const elevationIdsByMeasurement = (state: RootState, props?: any) =>\n  state.getIn([rootKey, \"byMeasurementId\", props.measurementId, \"ids\"], List());\n\n/**\n * Returns elevations by measurementId loading\n *\n * @param {RootState} state\n * @returns {boolean}\n */\nexport const elevationsLoadingByMeasurement = (state: RootState, props?: any) =>\n  state.getIn([rootKey, \"byMeasurementId\", props.measurementId, \"loading\"]);\n\n/**\n * Returns current elevations loading\n *\n * @param {RootState} state\n * @returns {boolean}\n */\nexport const currentElevationsLoading = createSelector(\n  [currentMeasurementId, (state: RootState, props: any) => ({ state, props })],\n  (measurementId, stateProps): boolean => {\n    const { state } = stateProps;\n    return elevationsLoadingByMeasurement(state, { measurementId });\n  },\n);\n\n/**\n * Returns elevations of currentMeasurement from list query\n *\n * @param {RootState} state\n * @returns {List<ElevationRecord>}\n */\nexport const currentElevations = createSelector(\n  [currentMeasurementId, elevationsById, (state: RootState, props: any) => ({ state, props })],\n  (measurementId, elevationsById, stateProps): List<ElevationRecord> => {\n    if (isNullOrUndefined(currentMeasurementId)) {\n      return List();\n    }\n    const { state } = stateProps;\n    return elevationIdsByMeasurement(state, { measurementId }).map((elevationId) => {\n      return elevationsById.get(elevationId);\n    });\n  },\n);\n\n/**\n * Returns elevation image source ids of currentElevations\n *\n * @param {RootState} state\n * @returns {List<number>}\n */\nexport const elevationSourceImageIds = createSelector(\n  [currentElevations],\n  (currentElevations: List<ElevationRecord>): List<number> => {\n    return currentElevations.map((elevation) => elevation.src_image_id);\n  },\n);\n\n/**\n * Returns elevation image rendered ids of currentElevations\n * @param {RootState} state\n * @returns {List<number>}\n */\nexport const renderedImageIds = createSelector(\n  [currentElevations],\n  (currentElevations: List<ElevationRecord>): List<number> => {\n    return currentElevations.map((elevation) => elevation.rendered_image_id);\n  },\n);\n\n/**\n * Checks if imageId has an associated elevation in currentElevations\n *\n * @param {RootState} state\n * @param {{ imageId: number }} options\n * @returns {boolean}\n */\nexport const elevationExists = createSelector(\n  [elevationSourceImageIds, renderedImageIds, (_: RootState, props: any) => props],\n  (elevationSourceImageIds: List<number>, renderedImageIds: List<number>, props: any): boolean => {\n    return elevationSourceImageIds.includes(props.imageId) || renderedImageIds.includes(props.imageId);\n  },\n);\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { IScreenShareData } from \"app2/src/records/ScreenShare\";\nimport { screenShareService } from \"app2/src/api/screenShare.service\";\nimport { RootDispatchType } from \"../store\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { getRemoteStorage } from \"app2/src/api/remoteStorage.service\";\nimport { RoomParams } from \"app2/src/components/VideoProvider/VideoProvider\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { ScreenShareKindValues, ScreenShareStatusValues } from \"./screenShare.reducer\";\n\nexport const SET_SCREEN_SHARE_STATUS = \"@screenShares/SET_SCREEN_SHARE_STATUS\";\nexport const SET_SCREEN_SHARE_KIND = \"@screenShares/SET_SCREEN_SHARE_KIND\";\nexport const SET_ACTIVE_SCREEN_SHARE_JOB = \"@screenShares/SET_ACTIVE_SCREEN_SHARE_JOB\";\nexport const FETCH_SCREEN_SHARE = \"@screenShares/FETCH_SCREEN_SHARE\";\nexport const RECEIVE_SCREEN_SHARE = \"@screenShares/RECEIVE_SCREEN_SHARE\";\nexport const RECEIVE_SCREEN_SHARE_TOKEN = \"@screenShares/RECEIVE_SCREEN_SHARE_TOKEN\";\nexport const RECEIVE_SCREEN_SHARE_ERROR = \"@screenShares/RECEIVE_SCREEN_SHARE_ERROR\";\nexport const RECEIVE_ROOM_STATUS = \"@screenShares/RECEIVE_ROOM_STATUS\";\n\nexport const Actions = {\n  setScreenShareStatus: (jobId: number, status: ScreenShareStatusValues) =>\n    createAction(SET_SCREEN_SHARE_STATUS, { jobId: jobId, status: status }),\n  setScreenShareKind: (jobId: number, kind: ScreenShareKindValues) =>\n    createAction(SET_SCREEN_SHARE_KIND, { jobId: jobId, kind: kind }),\n  setActiveScreenShareJob: (jobId: number) => createAction(SET_ACTIVE_SCREEN_SHARE_JOB, jobId),\n  fetchScreenShare: (jobId: number, id: number) => createAction(FETCH_SCREEN_SHARE, { id: id, jobId: jobId }),\n  receiveScreenShareError: (jobId: number, id: number, errors: string[]) =>\n    createAction(RECEIVE_SCREEN_SHARE_ERROR, {\n      id: id,\n      jobId: jobId,\n      errors: errors,\n    }),\n  receiveScreenShare: (jobId: number, screenShare: Partial<IScreenShareData>) =>\n    createAction(RECEIVE_SCREEN_SHARE, { jobId: jobId, screenShare: screenShare }),\n  receiveToken: (token: string) => createAction(RECEIVE_SCREEN_SHARE_TOKEN, token),\n  receiveRoomStatus: (status: boolean) => createAction(RECEIVE_ROOM_STATUS, status),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  setRemoteScreenShareStatus: (jobId: number, status: ScreenShareStatusValues): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.setScreenShareStatus(jobId, status));\n      const kind = getState().getIn([\"screenShares\", \"byJobId\", jobId, \"screenShareKind\"]);\n      if (\n        !(kind === \"basic\" && _.includes([\"start_requested\", \"stop_requested\"], status)) ||\n        !(kind === \"premium\" && _.includes([\"start_requested\"], status))\n      ) {\n        await getRemoteStorage().setItem(SET_SCREEN_SHARE_STATUS, { jobId: jobId, status: status });\n      }\n    };\n  },\n  setRemoteScreenShareKind: (jobId: number, kind: ScreenShareKindValues): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.setScreenShareKind(jobId, kind));\n      await getRemoteStorage().setItem(SET_SCREEN_SHARE_KIND, { jobId: jobId, kind: kind });\n    };\n  },\n  setRemoteActiveScreenShareJob: (jobId: number): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.setActiveScreenShareJob(jobId));\n      await getRemoteStorage().setItem(SET_ACTIVE_SCREEN_SHARE_JOB, jobId);\n    };\n  },\n  addScreenShare: (jobId: number, kind: ScreenShareKindValues): ThunkResult<Promise<IScreenShareData>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const result = await screenShareService.create(jobId, kind);\n        const activeJobId = getState().getIn([\"screenShares\", \"activeScreenShareJobId\"]);\n        if (activeJobId && activeJobId !== jobId) {\n          dispatch(AsyncActions.setRemoteScreenShareStatus(activeJobId, \"stop_requested\"));\n        }\n        dispatch(Actions.receiveScreenShare(jobId, result));\n        dispatch(AsyncActions.setRemoteActiveScreenShareJob(jobId));\n        dispatch(AsyncActions.setRemoteScreenShareKind(jobId, kind));\n        getRemoteStorage().setItem(RECEIVE_SCREEN_SHARE, result);\n\n        return result;\n      } catch (errors) {\n        return Promise.reject(errors);\n      }\n    };\n  },\n  joinOrAddScreenShareRoom: (jobId: number, roomParams: RoomParams): ThunkResult<Promise<string>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        await dispatch(AsyncActions.addScreenShare(jobId, \"premium\"));\n      } catch (e) {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.warning, \"Joining Existing Room\"));\n      }\n\n      try {\n        return await dispatch(\n          AsyncActions.getToken({\n            room: roomParams.roomUid,\n            identity: roomParams.identity,\n          }),\n        );\n      } catch (errors) {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors[0]));\n        return Promise.reject(errors);\n      }\n    };\n  },\n  getRoomStatus: (uid: string): ThunkResult<Promise<boolean>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const result = await screenShareService.getRoomStatus(uid);\n        dispatch(Actions.receiveRoomStatus(result));\n        return result;\n      } catch (errors) {\n        return Promise.reject(errors);\n      }\n    };\n  },\n  saveScreenShareStop: (jobId: number, id: number): ThunkResult<Promise<IScreenShareData>> => {\n    return async (dispatch: RootDispatchType) => {\n      if (id === 0) {\n        return Promise.reject([\"Error Stopping\"]);\n      }\n      dispatch(Actions.fetchScreenShare(jobId, id));\n      try {\n        const result = await screenShareService.stop(id);\n        dispatch(Actions.receiveScreenShare(jobId, null));\n        getRemoteStorage().setItem(RECEIVE_SCREEN_SHARE, { jobId: jobId, screenShare: null });\n        return result;\n      } catch (errors) {\n        dispatch(Actions.receiveScreenShareError(jobId, id, errors));\n        return Promise.reject(errors);\n      }\n    };\n  },\n  getToken: (params): ThunkResult<Promise<string>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const result = await screenShareService.loadToken(params);\n        dispatch(Actions.receiveToken(result));\n        return result;\n      } catch (errors) {\n        return errors;\n      }\n    };\n  },\n  startFallbackScreenShare: (jobId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      await dispatch(AsyncActions.setRemoteScreenShareStatus(jobId, \"stop_requested\"));\n      await dispatch(AsyncActions.addScreenShare(jobId, \"basic\"));\n      dispatch(AsyncActions.setRemoteScreenShareStatus(jobId, \"start_requested\"));\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { Record, List } from \"immutable\";\n\nexport const fromJSON = (data: Partial<IPresentationTemplateData>): PresentationTemplateRecord => {\n  const record: IPresentationTemplateRecord = { ...(data as any) };\n\n  return new PresentationTemplateRecord(record);\n};\n\nexport const toJSON = (record: PresentationTemplateRecord): IPresentationTemplateData => {\n  return record.toJS();\n};\n\nexport interface ITemplateData {\n  slides: Array<number>;\n}\n\nexport interface ITemplateRecord {\n  slides: List<number>;\n}\n\nconst defaultTemplateProps: ITemplateRecord = {\n  slides: List(),\n};\n\nexport class TemplateRecord extends Record(defaultTemplateProps) implements ITemplateRecord {\n  public slides!: List<number>;\n\n  public constructor(values?: Partial<TemplateRecord>) {\n    values ? super(values) : super();\n  }\n}\n\nexport interface IPresentationTemplateData {\n  id: number;\n  org_id: number;\n  name: string;\n  template: ITemplateData;\n  sort_order: number;\n  loading?: boolean;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IPresentationTemplateRecord {\n  id: number;\n  org_id: number;\n  name: string;\n  template: TemplateRecord;\n  sort_order: number;\n\n  created_at: Date;\n  updated_at: Date;\n\n  loading: boolean;\n  errors: List<string>;\n}\n\nconst defaultPresentationTemplateProps: IPresentationTemplateRecord = {\n  id: -1,\n  org_id: null,\n  name: \"\",\n  template: new TemplateRecord(),\n  sort_order: 0,\n  created_at: null,\n  updated_at: null,\n  loading: false,\n  errors: List<string>(),\n};\n\nexport class PresentationTemplateRecord\n  extends Record(defaultPresentationTemplateProps)\n  implements IPresentationTemplateRecord\n{\n  public readonly id!: number;\n  public readonly org_id!: number;\n  public readonly name!: string;\n  public readonly template!: any;\n  public readonly sort_order!: number;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public readonly loading!: boolean;\n  public readonly errors!: List<string>;\n\n  public constructor(values?: Partial<IPresentationTemplateRecord>) {\n    if (values) {\n      values.template = new TemplateRecord(values.template);\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { baseCleanProps } from \"app2/src/api/Api\";\nimport { fetcher } from \"../helpers/Fetcher\";\nimport { ISignedDocumentData, SignedDocumentRecord } from \"../records/SignedDocument\";\nimport { ISignedDocumentRecipient } from \"app/src/Models/SignedDocumentRecipient\";\nimport { DocumentRecord, IDocumentData, toFormData } from \"app2/src/records/Document\";\nimport { downloadFile } from \"app2/src/helpers/File\";\n\nconst url = \"api/v1/signed_documents/\";\n\nexport interface ISignedDocumentResponse {\n  signed_document: ISignedDocumentData;\n}\n\nexport interface IValidateSignedDocumentResponse {\n  document: Partial<IDocumentData>;\n  signature_validations: string;\n}\n\nexport interface ICreateOptions {\n  notify: boolean;\n  message: string;\n}\n\nexport const notify = (documentId: number, recipient?: number): Promise<void> => {\n  const actionUrl = new URL(url.concat(`${documentId.toString()}/notify`), fetcher.baseUrl);\n  if (recipient) actionUrl.searchParams.append(\"recipients[]\", recipient.toString());\n  return fetcher.post(actionUrl.toString());\n};\n\nexport const loadSigned = (documentId: number): Promise<{ signed_document: ISignedDocumentData }> => {\n  const actionUrl = url.concat(documentId.toString());\n  return fetcher.get(actionUrl, { \"include[]\": [\"document\", \"recipients\"] });\n};\n\nexport const validate = (document: DocumentRecord, isModified: boolean): Promise<IValidateSignedDocumentResponse> => {\n  if (isModified) {\n    const actionUrl = url.concat(\"validate\");\n    return fetcher.post(actionUrl.toString(), toFormData(document), { formData: true });\n  } else {\n    const actionUrl = url.concat(\"validate\");\n    return fetcher.post(actionUrl.toString(), { document_id: document.id });\n  }\n};\n\nexport const create = (\n  document: DocumentRecord,\n  signedDocument: SignedDocumentRecord,\n  options: ICreateOptions,\n): Promise<ISignedDocumentResponse> => {\n  const params = {\n    document: baseCleanProps(document.toJS()),\n    signed_document: cleanProps(signedDocument),\n    include: [\"document\", \"recipients\"],\n    ...options,\n  };\n  return fetcher.post(url, params);\n};\n\nexport const voidDocument = (documentId: number, reason: string): Promise<{ data: { status: string } }> => {\n  const actionUrl = fetcher.joinUrls(url, documentId.toString(), \"void\");\n  return fetcher.post(actionUrl.toString(), { reason });\n};\n\nexport const getHistoryReport = async (signedDocumentId: number, kind: \"standard\" | \"detailed\"): Promise<void> => {\n  const actionUrl = fetcher.joinUrls(url, `${signedDocumentId.toString()}/history_report.pdf`);\n  await downloadFile(actionUrl.concat(\"?kind=\", kind), `history_report_${kind}.pdf`);\n};\n\nexport const cleanProps = (signedDocument: SignedDocumentRecord): ISignedDocumentData => {\n  let signedDocumentParams: any = signedDocument.toJS();\n  signedDocumentParams = baseCleanProps(signedDocumentParams);\n  signedDocumentParams.recipients_attributes = signedDocumentParams.recipients.filter(\n    (rec) => (rec.required === true && rec.included === true) || rec.included === true,\n  );\n  delete signedDocumentParams.recipients;\n  delete signedDocumentParams.validation_status;\n\n  return signedDocumentParams as any as ISignedDocumentData;\n};\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(i,define){define(\"kendo.window.min\",[\"kendo.draganddrop.min\"],i)}(function(){return function(i,t){function e(i){return t!==i}function n(i,t,e){return Math.max(Math.min(parseInt(i,10),e===1/0?e:parseInt(e,10)),parseInt(t,10))}function o(){return!this.type||this.type.toLowerCase().indexOf(\"script\")>=0}function s(i){var t=this;t.owner=i,t._draggable=new d(i.wrapper,{filter:\">\"+z,group:i.wrapper.id+\"-resizing\",dragstart:p(t.dragstart,t),drag:p(t.drag,t),dragend:p(t.dragend,t)}),t._draggable.userEvents.bind(\"press\",p(t.addOverlay,t)),t._draggable.userEvents.bind(\"release\",p(t.removeOverlay,t))}function r(i,t){var e=this;e.owner=i,e._draggable=new d(i.wrapper,{filter:t,group:i.wrapper.id+\"-moving\",dragstart:p(e.dragstart,e),drag:p(e.drag,e),dragend:p(e.dragend,e),dragcancel:p(e.dragcancel,e)}),e._draggable.userEvents.stopPropagation=!1}var a=window.kendo,l=a.ui.Widget,d=a.ui.Draggable,c=i.isPlainObject,h=a._activeElement,p=i.proxy,f=i.extend,u=i.each,g=a.template,m=\"body\",w=\".kendoWindow\",v=\".k-window\",_=\".k-window-title\",k=_+\"bar\",b=\".k-window-content\",z=\".k-resize-handle\",x=\".k-overlay\",y=\"k-content-frame\",T=\"k-i-loading\",O=\"k-state-hover\",S=\"k-state-focused\",L=\"k-window-maximized\",M=\":visible\",I=\"hidden\",P=\"cursor\",W=\"open\",H=\"activate\",C=\"deactivate\",F=\"close\",j=\"refresh\",E=\"minimize\",D=\"maximize\",R=\"resize\",N=\"resizeEnd\",A=\"dragstart\",q=\"dragend\",G=\"error\",U=\"overflow\",K=\"zIndex\",V=\".k-window-actions .k-i-minimize,.k-window-actions .k-i-maximize\",B=\".k-i-pin\",Q=\".k-i-unpin\",J=B+\",\"+Q,X=\".k-window-titlebar .k-window-action\",Y=\".k-window-titlebar .k-i-refresh\",Z=a.isLocalUrl,$=l.extend({init:function(n,s){var r,d,h,f,u,g,m,z=this,x={},y=!1,T=s&&s.actions&&!s.actions.length;l.fn.init.call(z,n,s),s=z.options,f=s.position,n=z.element,u=s.content,T&&(s.actions=[]),z.appendTo=i(s.appendTo),u&&!c(u)&&(u=s.content={url:u}),n.find(\"script\").filter(o).remove(),n.parent().is(z.appendTo)||f.top!==t&&f.left!==t||(n.is(M)?(x=n.offset(),y=!0):(d=n.css(\"visibility\"),h=n.css(\"display\"),n.css({visibility:I,display:\"\"}),x=n.offset(),n.css({visibility:d,display:h})),f.top===t&&(f.top=x.top),f.left===t&&(f.left=x.left)),e(s.visible)&&null!==s.visible||(s.visible=n.is(M)),r=z.wrapper=n.closest(v),n.is(\".k-content\")&&r[0]||(n.addClass(\"k-window-content k-content\"),z._createWindow(n,s),r=z.wrapper=n.closest(v),z._dimensions()),z._position(),s.pinned&&z.pin(!0),u&&z.refresh(u),s.visible&&z.toFront(),g=r.children(b),z._tabindex(g),s.visible&&s.modal&&z._overlay(r.is(M)).css({opacity:.5}),r.on(\"mouseenter\"+w,X,p(z._buttonEnter,z)).on(\"mouseleave\"+w,X,p(z._buttonLeave,z)).on(\"click\"+w,\"> \"+X,p(z._windowActionHandler,z)),g.on(\"keydown\"+w,p(z._keydown,z)).on(\"focus\"+w,p(z._focus,z)).on(\"blur\"+w,p(z._blur,z)),this._resizable(),this._draggable(),m=n.attr(\"id\"),m&&(m+=\"_wnd_title\",r.children(k).children(_).attr(\"id\",m),g.attr({role:\"dialog\",\"aria-labelledby\":m})),r.add(r.children(\".k-resize-handle,\"+k)).on(\"mousedown\"+w,p(z.toFront,z)),z.touchScroller=a.touchScroller(n),z._resizeHandler=p(z._onDocumentResize,z),z._marker=a.guid().substring(0,8),i(window).on(\"resize\"+w+z._marker,z._resizeHandler),s.visible&&(z.trigger(W),z.trigger(H)),a.notify(z)},_buttonEnter:function(t){i(t.currentTarget).addClass(O)},_buttonLeave:function(t){i(t.currentTarget).removeClass(O)},_focus:function(){this.wrapper.addClass(S)},_blur:function(){this.wrapper.removeClass(S)},_dimensions:function(){var i,t,e=this.wrapper,o=this.options,s=o.width,r=o.height,a=o.maxHeight,l=[\"minWidth\",\"minHeight\",\"maxWidth\",\"maxHeight\"];for(this.title(o.title),i=0;l.length>i;i++)t=o[l[i]]||\"\",t!=1/0&&e.css(l[i],t);a!=1/0&&this.element.css(\"maxHeight\",a),e.width(s?(\"\"+s).indexOf(\"%\")>0?s:n(s,o.minWidth,o.maxWidth):\"\"),e.height(r?(\"\"+r).indexOf(\"%\")>0?r:n(r,o.minHeight,o.maxHeight):\"\"),o.visible||e.hide()},_position:function(){var i=this.wrapper,t=this.options.position;0===t.top&&(t.top=\"\"+t.top),0===t.left&&(t.left=\"\"+t.left),i.css({top:t.top||\"\",left:t.left||\"\"})},_animationOptions:function(i){var t=this.options.animation,e={open:{effects:{}},close:{hide:!0,effects:{}}};return t&&t[i]||e[i]},_resize:function(){a.resize(this.element.children())},_resizable:function(){var t=this.options.resizable,e=this.wrapper;this.resizing&&(e.off(\"dblclick\"+w).children(z).remove(),this.resizing.destroy(),this.resizing=null),t&&(e.on(\"dblclick\"+w,k,p(function(t){i(t.target).closest(\".k-window-action\").length||this.toggleMaximization()},this)),u(\"n e s w se sw ne nw\".split(\" \"),function(i,t){e.append(ii.resizeHandle(t))}),this.resizing=new s(this)),e=null},_draggable:function(){var i=this.options.draggable;this.dragging&&(this.dragging.destroy(),this.dragging=null),i&&(this.dragging=new r(this,i.dragHandle||k))},_actions:function(){var t=this.options.actions,e=this.wrapper.children(k),n=e.find(\".k-window-actions\");t=i.map(t,function(i){return{name:i}}),n.html(a.render(ii.action,t))},setOptions:function(i){var e,n;l.fn.setOptions.call(this,i),e=this.options.scrollable!==!1,this.restore(),this._dimensions(),this._position(),this._resizable(),this._draggable(),this._actions(),t!==i.modal&&(n=this.options.visible!==!1,this._overlay(i.modal&&n)),this.element.css(U,e?\"\":\"hidden\")},events:[W,H,C,F,E,D,j,R,N,A,q,G],options:{name:\"Window\",animation:{open:{effects:{zoom:{direction:\"in\"},fade:{direction:\"in\"}},duration:350},close:{effects:{zoom:{direction:\"out\",properties:{scale:.7}},fade:{direction:\"out\"}},duration:350,hide:!0}},title:\"\",actions:[\"Close\"],autoFocus:!0,modal:!1,resizable:!0,draggable:!0,minWidth:90,minHeight:50,maxWidth:1/0,maxHeight:1/0,pinned:!1,scrollable:!0,position:{},content:null,visible:null,height:null,width:null,appendTo:\"body\"},_closable:function(){return i.inArray(\"close\",i.map(this.options.actions,function(i){return i.toLowerCase()}))>-1},_keydown:function(i){var t,e,o,s,r,l,d=this,c=d.options,h=a.keys,p=i.keyCode,f=d.wrapper,u=10,g=d.options.isMaximized;i.target!=i.currentTarget||d._closing||(p==h.ESC&&d._closable()&&d._close(!1),!c.draggable||i.ctrlKey||g||(t=a.getOffset(f),p==h.UP?e=f.css(\"top\",t.top-u):p==h.DOWN?e=f.css(\"top\",t.top+u):p==h.LEFT?e=f.css(\"left\",t.left-u):p==h.RIGHT&&(e=f.css(\"left\",t.left+u))),c.resizable&&i.ctrlKey&&!g&&(p==h.UP?(e=!0,s=f.height()-u):p==h.DOWN&&(e=!0,s=f.height()+u),p==h.LEFT?(e=!0,o=f.width()-u):p==h.RIGHT&&(e=!0,o=f.width()+u),e&&(r=n(o,c.minWidth,c.maxWidth),l=n(s,c.minHeight,c.maxHeight),isNaN(r)||(f.width(r),d.options.width=r+\"px\"),isNaN(l)||(f.height(l),d.options.height=l+\"px\"),d.resize())),e&&i.preventDefault())},_overlay:function(t){var e=this.appendTo.children(x),n=this.wrapper;return e.length||(e=i(\"<div class='k-overlay' />\")),e.insertBefore(n[0]).toggle(t).css(K,parseInt(n.css(K),10)-1),e},_actionForIcon:function(i){var t=/\\bk-i-\\w+\\b/.exec(i[0].className)[0];return{\"k-i-close\":\"_close\",\"k-i-maximize\":\"maximize\",\"k-i-minimize\":\"minimize\",\"k-i-restore\":\"restore\",\"k-i-refresh\":\"refresh\",\"k-i-pin\":\"pin\",\"k-i-unpin\":\"unpin\"}[t]},_windowActionHandler:function(e){var n,o;if(!this._closing)return n=i(e.target).closest(\".k-window-action\").find(\".k-icon\"),o=this._actionForIcon(n),o?(e.preventDefault(),this[o](),!1):t},_modals:function(){var t=this,e=i(v).filter(function(){var e=i(this),n=t._object(e),o=n&&n.options;return o&&o.modal&&o.visible&&o.appendTo===t.options.appendTo&&e.is(M)}).sort(function(t,e){return+i(t).css(\"zIndex\")-+i(e).css(\"zIndex\")});return t=null,e},_object:function(i){var e=i.children(b),n=a.widgetInstance(e);return n instanceof $?n:t},center:function(){var t,e,n=this,o=n.options.position,s=n.wrapper,r=i(window),a=0,l=0;return n.options.isMaximized?n:(n.options.pinned||(a=r.scrollTop(),l=r.scrollLeft()),e=l+Math.max(0,(r.width()-s.width())/2),t=a+Math.max(0,(r.height()-s.height()-parseInt(s.css(\"paddingTop\"),10))/2),s.css({left:e,top:t}),o.top=t,o.left=e,n)},title:function(i){var t,e=this,n=e.wrapper,o=e.options,s=n.children(k),r=s.children(_);return arguments.length?(i===!1?(n.addClass(\"k-window-titleless\"),s.remove()):(s.length?r.html(i):(n.prepend(ii.titlebar(o)),e._actions(),s=n.children(k)),t=s.outerHeight(),n.css(\"padding-top\",t),s.css(\"margin-top\",-t)),e.options.title=i,e):r.html()},content:function(i,t){var n=this.wrapper.children(b),o=n.children(\".km-scroll-container\");return n=o[0]?o:n,e(i)?(this.angular(\"cleanup\",function(){return{elements:n.children()}}),a.destroy(this.element.children()),n.empty().html(i),this.angular(\"compile\",function(){var i,e=[];for(i=n.length;--i>=0;)e.push({dataItem:t});return{elements:n.children(),data:e}}),this):n.html()},open:function(){var t,e,n,o=this,s=o.wrapper,r=o.options,l=this._animationOptions(\"open\"),d=s.children(b),c=i(document);return o.trigger(W)||(o._closing&&s.kendoStop(!0,!0),o._closing=!1,o.toFront(),r.autoFocus&&o.element.focus(),r.visible=!0,r.modal&&(e=!!o._modals().length,t=o._overlay(e),t.kendoStop(!0,!0),l.duration&&a.effects.Fade&&!e?(n=a.fx(t).fadeIn(),n.duration(l.duration||0),n.endValue(.5),n.play()):t.css(\"opacity\",.5),t.show()),s.is(M)||(d.css(U,I),s.show().kendoStop().kendoAnimate({effects:l.effects,duration:l.duration,complete:p(this._activate,this)}))),r.isMaximized&&(o._documentScrollTop=c.scrollTop(),o._documentScrollLeft=c.scrollLeft(),i(\"html, body\").css(U,I)),o},_activate:function(){var i=this.options.scrollable!==!1;this.options.autoFocus&&this.element.focus(),this.element.css(U,i?\"\":\"hidden\"),a.resize(this.element.children()),this.trigger(H)},_removeOverlay:function(e){var n,o=this._modals(),s=this.options,r=s.modal&&!o.length,l=s.modal?this._overlay(!0):i(t),d=this._animationOptions(\"close\");r?!e&&d.duration&&a.effects.Fade?(n=a.fx(l).fadeOut(),n.duration(d.duration||0),n.startValue(.5),n.play()):this._overlay(!1).remove():o.length&&this._object(o.last())._overlay(!0)},_close:function(t){var e=this,n=e.wrapper,o=e.options,s=this._animationOptions(\"open\"),r=this._animationOptions(\"close\"),a=i(document);if(n.is(M)&&!e.trigger(F,{userTriggered:!t})){if(e._closing)return;e._closing=!0,o.visible=!1,i(v).each(function(t,e){var o=i(e).children(b);e!=n&&o.find(\"> .\"+y).length>0&&o.children(x).remove()}),this._removeOverlay(),n.kendoStop().kendoAnimate({effects:r.effects||s.effects,reverse:r.reverse===!0,duration:r.duration,complete:p(this._deactivate,this)})}e.options.isMaximized&&(i(\"html, body\").css(U,\"\"),e._documentScrollTop&&e._documentScrollTop>0&&a.scrollTop(e._documentScrollTop),e._documentScrollLeft&&e._documentScrollLeft>0&&a.scrollLeft(e._documentScrollLeft))},_deactivate:function(){var i,t=this;t.wrapper.hide().css(\"opacity\",\"\"),t.trigger(C),t.options.modal&&(i=t._object(t._modals().last()),i&&i.toFront())},close:function(){return this._close(!0),this},_actionable:function(t){return i(t).is(X+\",\"+X+\" .k-icon,:input,a\")},_shouldFocus:function(t){var e=h(),n=this.element;return this.options.autoFocus&&!i(e).is(n)&&!this._actionable(t)&&(!n.find(e).length||!n.find(t).length)},toFront:function(t){var e,n,o=this,s=o.wrapper,r=s[0],a=+s.css(K),l=a,d=t&&t.target||null;return i(v).each(function(t,e){var n=i(e),o=n.css(K),s=n.children(b);isNaN(o)||(a=Math.max(+o,a)),e!=r&&s.find(\"> .\"+y).length>0&&s.append(ii.overlay)}),(!s[0].style.zIndex||a>l)&&s.css(K,a+2),o.element.find(\"> .k-overlay\").remove(),o._shouldFocus(d)&&(o.element.focus(),e=i(window).scrollTop(),n=parseInt(s.position().top,10),n>0&&e>n&&(e>0?i(window).scrollTop(n):s.css(\"top\",e))),s=null,o},toggleMaximization:function(){return this._closing?this:this[this.options.isMaximized?\"restore\":\"maximize\"]()},restore:function(){var t=this,e=t.options,n=e.minHeight,o=t.restoreOptions,s=i(document);return e.isMaximized||e.isMinimized?(n&&n!=1/0&&t.wrapper.css(\"min-height\",n),t.wrapper.css({position:e.pinned?\"fixed\":\"absolute\",left:o.left,top:o.top,width:o.width,height:o.height}).removeClass(L).find(\".k-window-content,.k-resize-handle\").show().end().find(\".k-window-titlebar .k-i-restore\").parent().remove().end().end().find(V).parent().show().end().end().find(J).parent().show(),t.options.width=o.width,t.options.height=o.height,i(\"html, body\").css(U,\"\"),this._documentScrollTop&&this._documentScrollTop>0&&s.scrollTop(this._documentScrollTop),this._documentScrollLeft&&this._documentScrollLeft>0&&s.scrollLeft(this._documentScrollLeft),e.isMaximized=e.isMinimized=!1,t.resize(),t):t},_sizingAction:function(i,t){var e=this,n=e.wrapper,o=n[0].style,s=e.options;return s.isMaximized||s.isMinimized?e:(e.restoreOptions={width:o.width,height:o.height},n.children(z).hide().end().children(k).find(V).parent().hide().eq(0).before(ii.action({name:\"Restore\"})),t.call(e),e.wrapper.children(k).find(J).parent().toggle(\"maximize\"!==i),e.trigger(i),e)},maximize:function(){return this._sizingAction(\"maximize\",function(){var t=this,e=t.wrapper,n=e.position(),o=i(document);f(t.restoreOptions,{left:n.left,top:n.top}),e.css({left:0,top:0,position:\"fixed\"}).addClass(L),this._documentScrollTop=o.scrollTop(),this._documentScrollLeft=o.scrollLeft(),i(\"html, body\").css(U,I),t.options.isMaximized=!0,t._onDocumentResize()}),this},minimize:function(){return this._sizingAction(\"minimize\",function(){var i=this;i.wrapper.css({height:\"\",minHeight:\"\"}),i.element.hide(),i.options.isMinimized=!0}),this},pin:function(t){var e=this,n=i(window),o=e.wrapper,s=parseInt(o.css(\"top\"),10),r=parseInt(o.css(\"left\"),10);(t||!e.options.pinned&&!e.options.isMaximized)&&(o.css({position:\"fixed\",top:s-n.scrollTop(),left:r-n.scrollLeft()}),o.children(k).find(B).addClass(\"k-i-unpin\").removeClass(\"k-i-pin\"),e.options.pinned=!0)},unpin:function(){var t=this,e=i(window),n=t.wrapper,o=parseInt(n.css(\"top\"),10),s=parseInt(n.css(\"left\"),10);t.options.pinned&&!t.options.isMaximized&&(n.css({position:\"\",top:o+e.scrollTop(),left:s+e.scrollLeft()}),n.children(k).find(Q).addClass(\"k-i-pin\").removeClass(\"k-i-unpin\"),t.options.pinned=!1)},_onDocumentResize:function(){var t,e,n=this,o=n.wrapper,s=i(window),r=a.support.zoomLevel();n.options.isMaximized&&(t=s.width()/r,e=s.height()/r-parseInt(o.css(\"padding-top\"),10),o.css({width:t,height:e}),n.options.width=t,n.options.height=e,n.resize())},refresh:function(t){var n,o,s,r=this,a=r.options,l=i(r.element);return c(t)||(t={url:t}),t=f({},a.content,t),o=e(a.iframe)?a.iframe:t.iframe,s=t.url,s?(e(o)||(o=!Z(s)),o?(n=l.find(\".\"+y)[0],n?n.src=s||n.src:l.html(ii.contentFrame(f({},a,{content:t}))),l.find(\".\"+y).unbind(\"load\"+w).on(\"load\"+w,p(this._triggerRefresh,this))):r._ajaxRequest(t)):(t.template&&r.content(g(t.template)({})),r.trigger(j)),l.toggleClass(\"k-window-iframecontent\",!!o),r},_triggerRefresh:function(){this.trigger(j)},_ajaxComplete:function(){clearTimeout(this._loadingIconTimeout),this.wrapper.find(Y).removeClass(T)},_ajaxError:function(i,t){this.trigger(G,{status:t,xhr:i})},_ajaxSuccess:function(i){return function(t){var e=t;i&&(e=g(i)(t||{})),this.content(e,t),this.element.prop(\"scrollTop\",0),this.trigger(j)}},_showLoading:function(){this.wrapper.find(Y).addClass(T)},_ajaxRequest:function(t){this._loadingIconTimeout=setTimeout(p(this._showLoading,this),100),i.ajax(f({type:\"GET\",dataType:\"html\",cache:!1,error:p(this._ajaxError,this),complete:p(this._ajaxComplete,this),success:p(this._ajaxSuccess(t.template),this)},t))},_destroy:function(){this.resizing&&this.resizing.destroy(),this.dragging&&this.dragging.destroy(),this.wrapper.off(w).children(b).off(w).end().find(\".k-resize-handle,.k-window-titlebar\").off(w),i(window).off(\"resize\"+w+this._marker),clearTimeout(this._loadingIconTimeout),l.fn.destroy.call(this),this.unbind(t),a.destroy(this.wrapper),this._removeOverlay(!0)},destroy:function(){this._destroy(),this.wrapper.empty().remove(),this.wrapper=this.appendTo=this.element=i()},_createWindow:function(){var t,e,n=this.element,o=this.options,s=a.support.isRtl(n);o.scrollable===!1&&n.css(\"overflow\",\"hidden\"),e=i(ii.wrapper(o)),t=n.find(\"iframe:not(.k-content)\").map(function(){var i=this.getAttribute(\"src\");return this.src=\"\",i}),e.toggleClass(\"k-rtl\",s).appendTo(this.appendTo).append(n).find(\"iframe:not(.k-content)\").each(function(i){this.src=t[i]}),e.find(\".k-window-title\").css(s?\"left\":\"right\",e.find(\".k-window-actions\").outerWidth()+10),n.css(\"visibility\",\"\").show(),n.find(\"[data-role=editor]\").each(function(){var t=i(this).data(\"kendoEditor\");t&&t.refresh()}),e=n=null}}),ii={wrapper:g(\"<div class='k-widget k-window' />\"),action:g(\"<a role='button' href='\\\\#' class='k-window-action k-link' aria-label='#= name #'><span class='k-icon k-i-#= name.toLowerCase() #'></span></a>\"),titlebar:g(\"<div class='k-window-titlebar k-header'>&nbsp;<span class='k-window-title'>#= title #</span><div class='k-window-actions' /></div>\"),overlay:\"<div class='k-overlay' />\",contentFrame:g(\"<iframe frameborder='0' title='#= title #' class='\"+y+\"' src='#= content.url #'>This page requires frames in order to show content</iframe>\"),resizeHandle:g(\"<div class='k-resize-handle k-resize-#= data #'></div>\")};s.prototype={addOverlay:function(){this.owner.wrapper.append(ii.overlay)},removeOverlay:function(){this.owner.wrapper.find(x).remove()},dragstart:function(t){var e=this,n=e.owner,o=n.wrapper;e.elementPadding=parseInt(o.css(\"padding-top\"),10),e.initialPosition=a.getOffset(o,\"position\"),e.resizeDirection=t.currentTarget.prop(\"className\").replace(\"k-resize-handle k-resize-\",\"\"),e.initialSize={width:o.width(),height:o.height()},e.containerOffset=a.getOffset(n.appendTo,\"position\"),o.children(z).not(t.currentTarget).hide(),i(m).css(P,t.currentTarget.css(P))},drag:function(i){var t,e,o,s,r=this,a=r.owner,l=a.wrapper,d=a.options,c=r.resizeDirection,h=r.containerOffset,p=r.initialPosition,f=r.initialSize,u=Math.max(i.x.location,0),g=Math.max(i.y.location,0);c.indexOf(\"e\")>=0?(t=u-p.left-h.left,l.width(n(t,d.minWidth,d.maxWidth))):c.indexOf(\"w\")>=0&&(s=p.left+f.width+h.left,t=n(s-u,d.minWidth,d.maxWidth),l.css({left:s-t-h.left,width:t})),c.indexOf(\"s\")>=0?(e=g-p.top-r.elementPadding-h.top,l.height(n(e,d.minHeight,d.maxHeight))):c.indexOf(\"n\")>=0&&(o=p.top+f.height+h.top,e=n(o-g,d.minHeight,d.maxHeight),l.css({top:o-e-h.top,height:e})),t&&(a.options.width=t+\"px\"),e&&(a.options.height=e+\"px\"),a.resize()},dragend:function(t){var e=this,n=e.owner,o=n.wrapper;return o.children(z).not(t.currentTarget).show(),i(m).css(P,\"\"),n.touchScroller&&n.touchScroller.reset(),27==t.keyCode&&o.css(e.initialPosition).css(e.initialSize),n.trigger(N),!1},destroy:function(){this._draggable&&this._draggable.destroy(),this._draggable=this.owner=null}},r.prototype={dragstart:function(t){var e=this.owner,n=e.element,o=n.find(\".k-window-actions\"),s=a.getOffset(e.appendTo);e.trigger(A),e.initialWindowPosition=a.getOffset(e.wrapper,\"position\"),e.initialPointerPosition={left:t.x.client,top:t.y.client},e.startPosition={left:t.x.client-e.initialWindowPosition.left,top:t.y.client-e.initialWindowPosition.top},e.minLeftPosition=o.length>0?o.outerWidth()+parseInt(o.css(\"right\"),10)-n.outerWidth():20-n.outerWidth(),e.minLeftPosition-=s.left,e.minTopPosition=-s.top,e.wrapper.append(ii.overlay).children(z).hide(),i(m).css(P,t.currentTarget.css(P))},drag:function(t){var e=this.owner,n=e.options.position;n.top=Math.max(t.y.client-e.startPosition.top,e.minTopPosition),n.left=Math.max(t.x.client-e.startPosition.left,e.minLeftPosition),a.support.transforms?i(e.wrapper).css(\"transform\",\"translate(\"+(t.x.client-e.initialPointerPosition.left)+\"px, \"+(t.y.client-e.initialPointerPosition.top)+\"px)\"):i(e.wrapper).css(n)},_finishDrag:function(){var t=this.owner;t.wrapper.children(z).toggle(!t.options.isMinimized).end().find(x).remove(),i(m).css(P,\"\")},dragcancel:function(i){this._finishDrag(),i.currentTarget.closest(v).css(this.owner.initialWindowPosition)},dragend:function(){return i(this.owner.wrapper).css(this.owner.options.position).css(\"transform\",\"\"),this._finishDrag(),this.owner.trigger(q),!1},destroy:function(){this._draggable&&this._draggable.destroy(),this._draggable=this.owner=null}},a.ui.plugin($)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(i,t,e){(e||t)()});\n//# sourceMappingURL=kendo.window.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(n,define){define(\"kendo.mobile.loader.min\",[\"kendo.core.min\"],n)}(function(){return function(n,t){var e=window.kendo,i=e.mobile.ui,o=i.Widget,a=n.map(e.eventMap,function(n){return n}).join(\" \").split(\" \"),s=o.extend({init:function(t,e){var i=this,a=n('<div class=\"km-loader\"><span class=\"km-loading km-spin\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span></div>');o.fn.init.call(i,a,e),i.container=t,i.captureEvents=!1,i._attachCapture(),a.append(i.options.loading).hide().appendTo(t)},options:{name:\"Loader\",loading:\"<h1>Loading...</h1>\",timeout:100},show:function(){var n=this;clearTimeout(n._loading),n.options.loading!==!1&&(n.captureEvents=!0,n._loading=setTimeout(function(){n.element.show()},n.options.timeout))},hide:function(){this.captureEvents=!1,clearTimeout(this._loading),this.element.hide()},changeMessage:function(n){this.options.loading=n,this.element.find(\">h1\").html(n)},transition:function(){this.captureEvents=!0,this.container.css(\"pointer-events\",\"none\")},transitionDone:function(){this.captureEvents=!1,this.container.css(\"pointer-events\",\"\")},_attachCapture:function(){function n(n){e.captureEvents&&n.preventDefault()}var t,e=this;for(e.captureEvents=!1,t=0;a.length>t;t++)e.container[0].addEventListener(a[t],n,!0)}});i.plugin(s)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(n,t,e){(e||t)()});\n//# sourceMappingURL=kendo.mobile.loader.min.js.map\n","import { IActivatedPriceListData } from \"app2/src/records/ActivatedPriceList\";\nimport { IPriceListData } from \"app2/src/records/PriceList\";\nimport { fetcher } from \"../helpers/Fetcher\";\n\nexport interface IActivatedPriceListResponse {\n  activated_price_list: IActivatedPriceListData;\n}\n\nexport interface ICachedPriceListResponse {\n  price_list: IPriceListData;\n}\n\nclass ActivatedPriceListService {\n  public url = \"api/v1/orgs/:org_id/activated_price_lists\";\n\n  public loadCached(orgId: number, id: number): Promise<IActivatedPriceListResponse> {\n    const actionUrl = fetcher.joinUrls(this.url.replace(\":org_id\", orgId.toString()), id.toString(), \"cached\");\n\n    return fetcher.get<IActivatedPriceListResponse>(actionUrl);\n  }\n\n  public loadFile(url: string): Promise<ICachedPriceListResponse> {\n    return fetch(url, {}).then(fetcher.standardStatus).then(fetcher.json);\n  }\n}\n\nexport const activatedPriceListService = new ActivatedPriceListService();\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { activatedPriceListService } from \"../api/activatedPriceList.service\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { RootDispatchType } from \"../store\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { IActivatedPriceListData } from \"app2/src/records/ActivatedPriceList\";\nimport { IPriceListData } from \"app2/src/records/PriceList\";\nimport { activatedPriceList } from \"app2/src/selectors/activatedPriceList.selectors\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\n\nexport const FETCH_ACTIVATED_PRICE_LIST = \"@activatedPriceLists/FETCH_ACTIVATED_PRICE_LIST\";\nexport const RECEIVE_ACTIVATED_PRICE_LIST = \"@activatedPriceLists/RECEIVE_ACTIVATED_PRICE_LIST\";\nexport const SET_LOADED = \"@activatedPriceLists/SET_LOADED\";\n\nexport const Actions = {\n  fetchActivatedPriceList: (activatedPriceListId: number) =>\n    createAction(FETCH_ACTIVATED_PRICE_LIST, { activatedPriceListId }),\n  receiveActivatedPriceList: (activatedPriceList: IActivatedPriceListData, cachedPriceList: IPriceListData) =>\n    createAction(RECEIVE_ACTIVATED_PRICE_LIST, { activatedPriceList, cachedPriceList }),\n  setLoaded: (activatedPriceListId: number) => createAction(SET_LOADED, { activatedPriceListId }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  getCached: (orgId: number, activatedPriceListId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const apl = activatedPriceList(getState(), { activatedPriceListId });\n      if (apl.id) {\n        return;\n      }\n\n      dispatch(Actions.fetchActivatedPriceList(activatedPriceListId));\n\n      try {\n        const responseApl = await activatedPriceListService.loadCached(orgId, activatedPriceListId);\n        const responseCachedPriceList = await activatedPriceListService.loadFile(\n          responseApl.activated_price_list.file.file.url,\n        );\n        dispatch(\n          Actions.receiveActivatedPriceList(responseApl.activated_price_list, responseCachedPriceList.price_list),\n        );\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.setLoaded(activatedPriceListId));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { RootActions, RootState } from \"app2/src/reducers\";\nimport { FormUpdateEvent } from \"app2/src/reducers/rsfForm.actions\";\nimport { createAction, ActionsUnion } from \"app2/src/reducers/UtilsTypes\";\nimport { currentJobId, selectedEstimateId as selectedEstimateIdSelector } from \"app2/src/selectors/job.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { List, Map } from \"immutable\";\nimport { ThunkAction } from \"redux-thunk\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { estimate, estimateUnsavedId } from \"app2/src/selectors/estimate.selectors\";\nimport { currentOrgId, currentOrgPrefConfig } from \"app2/src/selectors/org.selectors\";\nimport * as uuid from \"uuid/v4\";\nimport { downPayment } from \"app2/src/selectors/pricePresentation.selectors\";\nimport { push } from \"connected-react-router\";\nimport { StoreRegistry } from \"app2/src/storeRegistry\";\nimport { RsfRootScope } from \"app/src/Common/RsfRootScope\";\nimport { discounts } from \"app2/src/selectors/discount.selectors\";\nimport { toDiscountData } from \"app2/src/records/EstimateDiscount\";\nimport { paymentTermTemplate } from \"app2/src/selectors/paymentTermTemplate.selectors\";\nimport { fromJSON } from \"app2/src/records/PaymentTermTemplate\";\nimport { getAuthorization } from \"app2/src/selectors/token.selectors\";\nimport { hasOneLookMetadata } from \"app2/src/selectors/oneLook.selectors\";\nimport { isSlideEnabled } from \"../isSlideEnabled\";\n\nexport const SET_SLIDE_ESTIMATE_IDS = \"@pricePresentation/SET_SLIDE_ESTIMATE_IDS\";\nexport const UPDATE_PRICE_PRESENTATION = \"@pricePresentation/UPDATE_PRICE_PRESENTATION\";\nexport const RESET_PRICE_PRESENTATION = \"@pricePresentation/RESET_PRICE_PRESENTATION\";\nexport const UPDATE_FINANCING = \"@pricePresentation/UPDATE_FINANCING\";\nexport const SET_CURRENT_SLIDE_INDEX = \"@pricePresentation/SET_CURRENT_SLIDE_INDEX\";\nexport const ADD_DISCOUNT_GROUP = \"@pricePresentation/ADD_DISCOUNT_GROUP\";\nexport const CLEAR_DISCOUNT_GROUPS = \"@pricePresentation/CLEAR_DISCOUNT_GROUPS\";\n\nexport const PricePresentationActions = {\n  setSlideEstimateIds: (ids: List<number>) => createAction(SET_SLIDE_ESTIMATE_IDS, { ids }),\n  updatePricePresentation: (event: FormUpdateEvent) => createAction(UPDATE_PRICE_PRESENTATION, { event }),\n  resetPricePresentation: () => createAction(RESET_PRICE_PRESENTATION, {}),\n  updateFinancing: (total: number) => createAction(UPDATE_FINANCING, { total }),\n  setCurrentSlideIndex: (index: number) => createAction(\"@pricePresentation/SET_CURRENT_SLIDE_INDEX\", { index }),\n  addDiscountGroup: (group: Map<number, string>) => createAction(ADD_DISCOUNT_GROUP, { group }),\n  clearDiscountGroups: () => createAction(CLEAR_DISCOUNT_GROUPS, {}),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, {}, RootActions>;\n\nexport const paymentTermTemplateData = (id: number, org_id: number, uuid1: string, uuid2: string, amount: number) =>\n  fromJSON({\n    id,\n    org_id,\n    name: \"Price Presentation\",\n    description: \"Price Presentation\",\n    breakdown: {\n      items: [\n        {\n          uuid: uuid1,\n          amount,\n          description: \"Down Payment\",\n          type: \"amount\",\n          calculated: 0,\n          paymentMethod: \"cash\",\n        },\n        {\n          uuid: uuid2,\n          amount: 100,\n          description: \"Remaining Balance\",\n          type: \"percent\",\n          calculated: 0,\n          paymentMethod: \"financed\",\n        },\n      ],\n    },\n  });\n\nexport const flatDiscountData = (name: string, amount: number) => ({\n  uuid: null,\n  kind: \"flat\",\n  name,\n  amount,\n  calculated: 0,\n  totalAfter: 0,\n  discountId: 0,\n  discountRev: \"\",\n  limit: 0,\n});\n\nexport const PricePresentationAsyncActions = {\n  setupPricePresentation: (estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const newEstimateId = estimateUnsavedId(getState());\n      const fromEstimate = estimate(getState(), { estimateId });\n      const paymentTermItemsSize = fromEstimate?.getIn([\"payment_terms\", \"payment_term_items\"], List())?.size || 0;\n      const config = currentOrgPrefConfig(getState(), {\n        path: [\"enhanced_price_presentation\"],\n      });\n      const allSlides: List<Map<string, any>> = config?.get(\"slides\") || List();\n      const enabledSlides = allSlides.filter(isSlideEnabled);\n\n      dispatch(\n        PricePresentationActions.updatePricePresentation({\n          rootPath: [\"pricePresentation\"],\n          name: \"showExactValues\",\n          value: !config?.get(\"round_by_default\"),\n        }),\n      );\n\n      let estimateIds = List();\n      let firstEstimateId = newEstimateId;\n      for (const slide of enabledSlides.toArray()) {\n        estimateIds = estimateIds.push(firstEstimateId);\n        dispatch(estimateActions.Actions.duplicateEstimate(estimateId));\n        dispatch(estimateActions.Actions.resetDiscounts(firstEstimateId));\n        if (paymentTermItemsSize === 0) {\n          dispatch(estimateActions.Actions.resetPaymentTerms(firstEstimateId));\n        }\n        // call updateEstimateTotal before since resetDiscounts and resetPaymentTerms\n        //  discountable_total needs to be updated before the discounts are added back in\n        await dispatch(estimateActions.AsyncActions.updateEstimateTotal(firstEstimateId));\n\n        const orgDiscounts = discounts(getState(), { discountIds: slide.get(\"discount_ids\") });\n        for (const discount of orgDiscounts.toArray()) {\n          await dispatch(estimateActions.AsyncActions.addDiscount(firstEstimateId, toDiscountData(discount)));\n        }\n        const paymentTerm = paymentTermTemplate(getState(), { id: slide.get(\"payment_term_id\") });\n        if (paymentTerm && paymentTermItemsSize === 0) {\n          await dispatch(estimateActions.AsyncActions.addPaymentTermTemplate(firstEstimateId, paymentTerm));\n        }\n\n        firstEstimateId = firstEstimateId - 1;\n      }\n      dispatch(PricePresentationActions.setSlideEstimateIds(estimateIds));\n    };\n  },\n  select: (estimateId: number, type: \"cash\" | \"same_as_cash\" | \"payment_range\"): ThunkResult<void> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const selectedEstimateId = selectedEstimateIdSelector(getState());\n      const fromEstimate = estimate(getState(), { estimateId });\n      const paymentTermItemsSize = fromEstimate?.getIn([\"payment_terms\", \"payment_term_items\"], List())?.size || 0;\n      dispatch(estimateActions.Actions.resetDiscounts(selectedEstimateId));\n      if (type !== \"cash\" || paymentTermItemsSize === 0) {\n        dispatch(estimateActions.Actions.resetPaymentTerms(selectedEstimateId));\n      }\n\n      dispatch(estimateActions.AsyncActions.updateEstimateTotal(selectedEstimateId));\n\n      const discounts = (fromEstimate.get(\"discounts\") || List()).map((discount) => discount.toJS());\n      for (const discount of discounts.toArray()) {\n        await dispatch(estimateActions.AsyncActions.addDiscount(selectedEstimateId, discount));\n      }\n\n      let paymentTerm;\n      switch (type) {\n        case \"cash\":\n          paymentTerm =\n            paymentTermItemsSize === 0\n              ? paymentTermTemplate(getState(), { id: fromEstimate.get(\"payment_terms\").get(\"id\") })\n              : null;\n          break;\n        case \"same_as_cash\": {\n          paymentTerm = paymentTermTemplateData(-1, currentOrgId(getState()), uuid(), uuid(), downPayment(getState()));\n          break;\n        }\n        case \"payment_range\": {\n          paymentTerm = paymentTermTemplateData(-2, currentOrgId(getState()), uuid(), uuid(), downPayment(getState()));\n          break;\n        }\n      }\n\n      if (paymentTerm) {\n        await dispatch(estimateActions.AsyncActions.addPaymentTermTemplate(selectedEstimateId, paymentTerm));\n      }\n\n      await dispatch(estimateActions.AsyncActions.updateOrCreateEstimate(selectedEstimateId));\n\n      const jobId = currentJobId(getState());\n      const orgId = currentOrgId(getState());\n      const authorized = getAuthorization(getState(), { integration: \"one_look\", orgId });\n      const hasMetadata = hasOneLookMetadata(getState(), { estimateId: selectedEstimateId });\n      const $rootScope: RsfRootScope = StoreRegistry.get(\"$rootScope\");\n\n      if (authorized && [\"payment_range\", \"same_as_cash\"].includes(type) && !hasMetadata) {\n        dispatch(push(`/jobs/${jobId}/estimates/${selectedEstimateId}/finance_application`));\n      } else {\n        dispatch(push(`/jobs/${jobId}/contracts/${selectedEstimateId}`));\n      }\n      $rootScope.$digest();\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof PricePresentationActions>;\n","import { RootState } from \"../reducers\";\n\nexport const authorizationRecord = (state: RootState, orgId: number) => {\n  return state.getIn([\"integrations\", \"paysimple\", \"authorization\", orgId]);\n};\n","import { Record, List, Map, fromJS } from \"immutable\";\nimport { PaySimplePaymentKeys } from \"../components/Payments/PaySimple/PaySimple.service\";\n\nexport const fromJSON = (json: Partial<IPaymentData>): PaymentRecord => {\n  if (json.payload) {\n    if (json.payload.receipt && typeof json.payload.receipt === \"string\") {\n      try {\n        json.payload.receipt = JSON.parse(json.payload.receipt);\n      } catch (_e) {}\n    }\n    json.payload = fromJS(json.payload);\n  }\n\n  return new PaymentRecord(json);\n};\n\nexport type PaymentChargeType = \"ach\" | \"credit_card\";\n\nexport interface IMakePaymentData {\n  first_name: string;\n  last_name: string;\n  description: string;\n  zipCode?: string;\n  charge_type?: PaymentChargeType;\n  postal?: string;\n  amount: number;\n  email: string;\n  user_id: number;\n  job_id: number;\n  estimate_id?: number;\n}\n\nexport interface IPaymentData {\n  id: number;\n  first_name: string;\n  last_name: string;\n  email: string;\n  description: string;\n\n  charge_type: PaymentChargeType;\n  amount: number;\n  status: string;\n  kind: string;\n  payment_date: Date;\n  is_debit: boolean;\n  payload: any;\n\n  job_id: number;\n  org_id: number;\n  user_id: number;\n  estimate_id: number;\n  pay_simple_customer_id: number;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IPaymentRecord extends IPaymentData {\n  payload: Map<string, PaySimplePaymentKeys>;\n\n  loading: boolean;\n  errors: List<string>;\n}\n\nconst defaultPaymentProps: IPaymentRecord = {\n  id: -1,\n  first_name: \"\",\n  last_name: \"\",\n  email: \"\",\n  description: \"\",\n  charge_type: \"credit_card\",\n  amount: 0,\n  status: \"created\",\n  kind: \"\",\n  is_debit: false,\n  payload: Map<string, any>(),\n  payment_date: null,\n\n  org_id: null,\n  job_id: null,\n  user_id: null,\n  estimate_id: null,\n  pay_simple_customer_id: null,\n\n  created_at: null,\n  updated_at: null,\n\n  loading: false,\n  errors: List<string>(),\n};\n\nexport class PaymentRecord extends Record(defaultPaymentProps) implements IPaymentRecord {\n  public id!: number;\n\n  public charge_type!: PaymentChargeType;\n  public amount!: number;\n  public status!: string;\n  public kind!: string;\n  public payment_date!: Date;\n  public is_debit!: boolean;\n  public payload!: Map<string, any>;\n\n  public org_id!: number;\n  public job_id!: number;\n  public user_id!: number;\n  public estimate_id!: number;\n  public pay_simple_customer_id!: number;\n\n  public created_at!: Date;\n  public updated_at!: Date;\n\n  public loading!: boolean;\n  public errors!: List<string>;\n\n  public constructor(values?: Partial<IPaymentRecord>) {\n    if (values) {\n      if (values.amount) {\n        values.amount = parseFloat(values.amount as any);\n      }\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { createSelector } from \"reselect\";\nimport { OpeningEstimationRecord, IOpeningEstimationData } from \"../records/OpeningEstimation\";\nimport { List } from \"immutable\";\nimport { RootState } from \"../reducers\";\n\nexport const openingEstimationsById = (state: RootState) => state.getIn([\"openingEstimations\", \"byId\"]);\nexport const lastSavedOpeningEstimationsById = (state: RootState) =>\n  state.getIn([\"openingEstimations\", \"lastSavedById\"]);\n\nexport const openingEstimations = createSelector(\n  [openingEstimationsById, (_: RootState, props: any) => props],\n  (openingEstimationsById, props: any): List<OpeningEstimationRecord> => {\n    return openingEstimationsProcess(openingEstimationsById, props);\n  },\n);\n\nexport const lastSavedOpeningEstimations = createSelector(\n  [openingEstimationsById, (_: RootState, props: any) => props],\n  (openingEstimationsById, props: any): List<OpeningEstimationRecord> => {\n    return openingEstimationsProcess(openingEstimationsById, props);\n  },\n);\n\nconst openingEstimationsProcess = (openingEstimationsById, props) => {\n  const { openingEstimationIds } = props;\n  let { fullEstimate } = props;\n  if (_.isUndefined(fullEstimate)) {\n    fullEstimate = false;\n  }\n  return openingEstimationIds\n    .map((openingEstimationId: number) => {\n      return openingEstimationsById.get(openingEstimationId);\n    })\n    .filter((openingEstimation: OpeningEstimationRecord) => {\n      return fullEstimate || !openingEstimation._destroy;\n    })\n    .toList();\n};\n\nexport const toOpeningEstimationsJson = createSelector(\n  [openingEstimations],\n  (openingEstimations: List<OpeningEstimationRecord>): IOpeningEstimationData[] => {\n    return openingEstimations\n      .map((opening: OpeningEstimationRecord) => {\n        const openingData = opening.toJSON() as any;\n\n        if (!openingData._destroy) {\n          delete openingData._destroy;\n        }\n\n        return openingData as IOpeningEstimationData;\n      })\n      .toArray();\n  },\n);\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IProductData } from \"app2/src/records/Product\";\nimport { Map } from \"immutable\";\n\nexport const RECEIVE_PRODUCT = \"@products/RECEIVE_PRODUCT\";\n\nexport const Actions = {\n  receiveProduct: (product: IProductData, options: any = Map()) => createAction(RECEIVE_PRODUCT, { product, options }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { ActionsUnion, createAction } from \"../Utils\";\n\nexport const SET_PAYMENT_OPTION_EDITOR_VISIBLE = \"@components/common/SET_PAYMENT_OPTION_EDITOR_VISIBLE\";\nexport const SET_PRICING_DRAWER_VISIBLE = \"@components/common/SET_PRICING_DRAWER_VISIBLE\";\n\nexport const Actions = {\n  setPaymentOptionEditorVisible: (visible: boolean) => createAction(SET_PAYMENT_OPTION_EDITOR_VISIBLE, { visible }),\n  setPricingDrawerVisible: (visible: boolean) => createAction(SET_PRICING_DRAWER_VISIBLE, { visible }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import * as estimateLineItemActions from \"./estimateLineItem.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { EstimateLineItemRecord, fromJSON } from \"../records/EstimateLineItem\";\nimport { RootState, RootActions } from \".\";\nimport * as estimateLineItemOptionActions from \"./estimateLineItemOption.actions\";\nimport { reducer as estimateLineItemOptionReducer } from \"./estimateLineItemOption.reducer\";\nimport * as openingEstimationActions from \"./openingEstimation.actions\";\nimport { reducer as openingEstimationReducer } from \"./openingEstimation.reducer\";\nimport * as documentActions from \"./document.actions\";\nimport { reducer as documentReducer } from \"./document.reducer\";\nimport * as imageActions from \"./image.actions\";\nimport { reducer as imageReducer } from \"./image.reducer\";\n\nexport const EstimateLineItemStateRecord = Record({\n  byId: Map<number, EstimateLineItemRecord>(),\n  lastSavedById: Map<number, EstimateLineItemRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = EstimateLineItemStateRecord();\n\nexport type EstimateState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"estimateLineItems\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let estimateLineItem: EstimateLineItemRecord;\n  switch (action.type) {\n    case estimateLineItemActions.RECEIVE_ESTIMATE_LINE_ITEM:\n      action.payload.estimateLineItem.options.map((li) => {\n        state = estimateLineItemOptionReducer(\n          state,\n          estimateLineItemOptionActions.Actions.receiveEstimateLineItemOption(li),\n        );\n      });\n\n      action.payload.estimateLineItem.opening_estimations.map((oe) => {\n        state = openingEstimationReducer(state, openingEstimationActions.Actions.receiveOpeningEstimation(oe));\n      });\n\n      action.payload.estimateLineItem.documents.map((doc) => {\n        state = documentReducer(state, documentActions.Actions.receiveDocument(doc));\n      });\n\n      action.payload.estimateLineItem.images.map((img) => {\n        state = imageReducer(state, imageActions.Actions.receiveImage(img));\n      });\n\n      estimateLineItem = fromJSON(action.payload.estimateLineItem);\n\n      return state\n        .setIn([model, \"byId\", estimateLineItem.id], estimateLineItem)\n        .setIn([model, \"lastSavedById\", estimateLineItem.id], estimateLineItem);\n\n    case estimateLineItemActions.DUPLICATE_ESTIMATE_LINE_ITEMS:\n      const group = state.getIn([\"estimateGroups\", \"byId\", action.payload.groupId]);\n\n      let lineItemIds = List();\n      let unsavedId = state.getIn([model, \"unsavedId\"]);\n      action.payload.lineItemIds.map((lid: number) => {\n        let lineItem = state.getIn([model, \"byId\", lid]);\n        lineItem = lineItem.set(\"id\", unsavedId).set(\"estimate_group_id\", group.id);\n        lineItemIds = lineItemIds.push(unsavedId);\n        state = state.setIn([model, \"byId\", lineItem.id], lineItem);\n\n        state = estimateLineItemOptionReducer(\n          state,\n          estimateLineItemOptionActions.Actions.duplicateEstimateLineItemOptions(lineItem.id, lineItem.option_ids),\n        );\n\n        state = openingEstimationReducer(\n          state,\n          openingEstimationActions.Actions.duplicateOpeningEstimations(lineItem.id, lineItem.opening_estimation_ids),\n        );\n\n        state = documentReducer(\n          state,\n          documentActions.Actions.duplicateLineItemDocuments(lineItem.id, lineItem.document_ids),\n        );\n\n        state = imageReducer(state, imageActions.Actions.duplicateLineItemImages(lineItem.id, lineItem.image_ids));\n\n        unsavedId -= 1;\n      });\n\n      return state\n        .setIn([\"estimateGroups\", \"byId\", group.id, \"line_item_ids\"], lineItemIds)\n        .setIn([model, \"unsavedId\"], unsavedId);\n\n    case estimateLineItemActions.PUSH_DOCUMENT_ID:\n      const { estimateLineItemId, documentId } = action.payload;\n      let ids = state.getIn([model, \"byId\", estimateLineItemId, \"document_ids\"], List());\n      if (ids.indexOf(documentId) < 0) {\n        ids = ids.push(documentId);\n      }\n      return state.setIn([model, \"byId\", estimateLineItemId, \"document_ids\"], ids);\n    default:\n      return state;\n  }\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IWallFacadeData } from \"../records/WallFacade\";\n\nexport const RECEIVE_WALL_FACADE = \"@wallFacades/RECEIVE_WALL_FACADE\";\nexport const EDIT_WALL_FACADE = \"@wallFacades/EDIT_WALL_FACADE\";\n\nexport const Actions = {\n  receiveWallFacade: (wallFacade: Partial<IWallFacadeData>) => createAction(RECEIVE_WALL_FACADE, { wallFacade }),\n  editWallFacade: (wallFacade: Partial<IWallFacadeData>) => createAction(EDIT_WALL_FACADE, { wallFacade }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { Map, List } from \"immutable\";\nimport { FenceRecord } from \"app2/src/records/measurements/Fence\";\nimport { FenceSegmentRecord } from \"app2/src/records/measurements/Segment\";\nimport { createSelector } from \"reselect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { segmentsById, dirty as fenceDirty } from \"./segment.selectors\";\n\nexport const rootKey = \"measurementsFences\";\n\n/**\n * Returns the byId map\n *\n * @param {RootState} state\n * @returns Map<number, FenceRecord>\n */\nexport const fencesById = (state: RootState) => state.getIn([rootKey, \"byId\"]);\n/**\n * returns the lastSavedById map\n * @param {RootState} state\n * @returns Map<number, FenceRecord>\n */\nexport const fencesLastSavedById = (state: RootState) => state.getIn([rootKey, \"lastSavedById\"]);\n\n/**\n * Takes a fenceId and returns that fences List of segmentIds\n * @param {RootState} state\n * @param {{ fenceId: number }} props\n * @returns List<number>\n */\nexport const fenceSegmentIds = (state: RootState, props: { fenceId: number }) =>\n  state.getIn([rootKey, \"byId\", props.fenceId, \"segmentIds\"], List());\n\n/**\n * Takes a fenceId and returns that fences SegmentRecords\n *\n * @param {RootState} state\n * @param {{ fenceId: number }} props\n * @returns List<FenceSegementRecord>\n */\nexport const fenceSegments = createSelector(\n  fenceSegmentIds,\n  segmentsById,\n  (segmentIds: List<number>, byId: Map<number, FenceSegmentRecord>) => {\n    return (segmentIds || List()).map((id) => byId.get(id));\n  },\n);\n\n/**\n * Takes a fenceId and returns the FenceRecord (normalized)\n *\n * @param {RootState} state\n * @param {{fenceId: number}} props\n * @returns FenceRecord\n */\nexport const fence = (state: RootState, props: { fenceId: number }) => state.getIn([rootKey, \"byId\", props.fenceId]);\n\n/**\n * Takes a fenceId and returns the FenceRecord from the lastSavedById map (normalized)\n *\n * @param {RootState} state\n * @param {{ fenceId: number }} props\n * @returns FenceRecord\n */\nexport const fenceLastSaved = (state: RootState, props: { fenceId: number }) =>\n  state.getIn([rootKey, \"lastSavedById\", props.fenceId]);\n\n/**\n * Takes a fenceId and finds the fencingId if the fenceId exists in the byId map\n *\n * @param {RootState} state\n * @param {{ fenceId: number }} props\n * @returns {number} fencingId\n */\nexport const fenceFencingId = (state: RootState, props: { fenceId }) =>\n  state.getIn([rootKey, \"byId\", props.fenceId, \"fencingId\"]);\n\n/**\n * Takes a fenceId and checks to see if the FenceRecord is dirty\n * This does NOT look down the tree to Segments.\n *\n * @param {RootState} state\n * @param {{ fenceId: number }} params\n * @returns {boolean} dirty\n */\nexport const dirty = createSelector(fence, fenceLastSaved, (fence: FenceRecord, lastSaved: FenceRecord) => {\n  if (!fence) return false;\n\n  return !fence.equals(lastSaved);\n});\n\n/**\n * Takes a fenceId and checks to see if the FenceRecord is dirty\n * This DOES look down the tree to Segments.\n *\n * @param {RootState} state\n * @param {{ fenceId: number }} params\n * @returns {boolean} dirty\n */\nexport const dirtyTree = createSelector(\n  dirty,\n  fenceSegmentIds,\n  (state, _) => ({ state }),\n  (dirty: boolean, segmentIds: List<number>, stateProps: { state: RootState }) => {\n    if (dirty) return dirty;\n\n    const segmentsDirty = segmentIds.every((segmentId) => !fenceDirty(stateProps.state, { segmentId }));\n    return !segmentsDirty;\n  },\n);\n","import { FolderRecord } from \"app2/src/records/Folder\";\nimport { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\n\nexport const folder = (state: RootState, props: any): FolderRecord => state.getIn([\"folders\", \"byId\", props.folderId]);\nexport const lastSavedFolder = (state: RootState, props: any): FolderRecord =>\n  state.getIn([\"folders\", \"lastSavedById\", props.folderId]);\n\nexport const ancestors = createSelector(\n  [folder, (state: RootState, props: any) => ({ state, props })],\n  (childFolder, stateProps: any): List<FolderRecord> => {\n    const { state, props } = stateProps;\n    let folders = List();\n    if (!childFolder) {\n      return folders;\n    }\n\n    if (childFolder.parent_id) {\n      folders = folders.concat(ancestors(state, { ...props, folderId: childFolder.parent_id }));\n    }\n    folders = folders.push(childFolder);\n    return folders;\n  },\n);\n\nexport const folderChanged = createSelector(\n  [folder, lastSavedFolder],\n  (folder: FolderRecord, lastSavedFolder: FolderRecord) => {\n    if (!lastSavedFolder) {\n      return true;\n    }\n    if (folder.equals(lastSavedFolder)) {\n      return false;\n    } else {\n      return true;\n    }\n  },\n);\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IEstimateGroupData } from \"../records/EstimateGroup\";\nimport { List } from \"immutable\";\n\nexport const RECEIVE_ESTIMATE_GROUP = \"@estimateGroups/RECEIVE_ESTIMATE\";\nexport const DUPLICATE_ESTIMATE_GROUPS = \"@estimateGroups/DUPLICATE_ESTIMATE_GROUPS\";\nexport const UPDATE_BASE_TOTAL = \"@estimateGroups/UPDATE_BASE_TOTAL\";\n\nexport const Actions = {\n  receiveEstimateGroup: (estimateGroup: Partial<IEstimateGroupData>) =>\n    createAction(RECEIVE_ESTIMATE_GROUP, { estimateGroup }),\n  duplicateGroups: (estimateId: number, groupIds: List<number>) =>\n    createAction(DUPLICATE_ESTIMATE_GROUPS, { estimateId, groupIds }),\n  updateBaseTotal: (estimateGroupId: number) => createAction(UPDATE_BASE_TOTAL, { estimateGroupId }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IEstimateLineItemOptionData } from \"../records/EstimateLineItemOption\";\nimport { List } from \"immutable\";\n\nexport const RECEIVE_ESTIMATE_LINE_ITEM_OPTION = \"@estimateLineItemOptions/RECEIVE_ESTIMATE_LINE_ITEM_OPTION\";\nexport const DUPLICATE_ESTIMATE_LINE_ITEM_OPTIONS = \"@estimateLineItemOptions/DUPLICATE_ESTIMATE_LINE_ITEM_OPTIONS\";\n\nexport const Actions = {\n  receiveEstimateLineItemOption: (estimateLineItemOption: Partial<IEstimateLineItemOptionData>) =>\n    createAction(RECEIVE_ESTIMATE_LINE_ITEM_OPTION, estimateLineItemOption),\n  duplicateEstimateLineItemOptions: (lineItemId: number, optionIds: List<number>) =>\n    createAction(DUPLICATE_ESTIMATE_LINE_ITEM_OPTIONS, { lineItemId, optionIds }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","export class Deferred<T> {\n  public resolved = false;\n\n  public get promise(): Promise<T> {\n    return this._promise;\n  }\n\n  private _reject: (value: T) => void;\n  private _resolve: (value: T) => void;\n  private _promise: Promise<T>;\n\n  private constructor() {\n    this._promise = new Promise((resolve, reject) => {\n      this._resolve = resolve;\n      this._reject = reject;\n    });\n  }\n\n  public resolve(value: T) {\n    this.resolved = true;\n    this._resolve(value);\n  }\n\n  public reject(value: T) {\n    this.resolved = true;\n    this._reject(value);\n  }\n  public static defer<T>(): Deferred<T> {\n    return new Deferred<T>();\n  }\n}\n","import { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { PoolRecord } from \"app2/src/records/Pool\";\n\nexport const pool = (state: RootState, props: any) => state.getIn([\"pools\", \"byId\", props.poolId]);\n\nexport const pools = createSelector([(state, props) => ({ state, props })], (stateProps: any): List<PoolRecord> => {\n  const { state, props } = stateProps;\n  const { poolIds } = props;\n  return poolIds.map((id: number) => pool(state, { poolId: id }));\n});\n","import {\n  MeasurementRecord,\n  objects,\n  properties,\n  propertiesMapping,\n  hasMeasurementProperties,\n  MeasurementHydratedRecord,\n} from \"app2/src/records/Measurement\";\nimport { List, getIn } from \"immutable\";\nimport { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { FencingRecord } from \"../records/measurements/Fencing\";\nimport { MeasurementLocation, MeasurementSection, OrgRecord } from \"../records/OrgRecord\";\nimport { measurementFencing } from \"./measurements/fencing.selectors\";\nimport { currentOrg } from \"./org.selectors\";\nimport { roofFaces } from \"app2/src/selectors/roofFace.selectors\";\nimport { wallFacades } from \"app2/src/selectors/wallFacade.selectors\";\nimport { windows } from \"app2/src/selectors/window.selectors\";\nimport { doors } from \"app2/src/selectors/door.selectors\";\nimport { rooms } from \"app2/src/selectors/room.selectors\";\nimport { decks } from \"app2/src/selectors/deck.selectors\";\nimport { pools } from \"app2/src/selectors/pool.selectors\";\nimport { elevations } from \"app2/src/selectors/elevation.selectors\";\nimport { currentMeasurement, currentMeasurementId } from \"app2/src/selectors/measurementCommon.selectors\";\n\nexport const rootKey = \"measurements\";\nexport { currentMeasurement, currentMeasurementId };\n\n/**\n * Loads a measurement by ID\n * @param {RootState} state The RootState\n * @param {{ measurementId: number }} props The id of the measurement object\n * @returns {MeasurementRecord} MeasurementRecord\n */\nexport const measurement = (state: RootState, props: any) => state.getIn([rootKey, \"byId\", props.measurementId]);\n\n/**\n * Loads a last saved measurement by ID\n * @param {RootState} state The RootState\n * @param {{ measurementId: number }} props The id of the measurement object\n * @returns {MeasurementRecord} MeasurementRecord\n */\nexport const lastSavedMeasurement = (state: RootState, props: any) =>\n  state.getIn([rootKey, \"lastSavedById\", props.measurementId]);\n\n/**\n * Loads whether global editing is enabled\n * @param {RootState} state The RootState\n * @returns {boolean}\n */\nexport const measurementEditing = (state: RootState, props?: any) => state.getIn([rootKey, \"editing\"]);\n\n/**\n * Loads the measurement form\n * @param {RootState} state The RootState\n * @returns {Map}\n */\nexport const addMeasurementForm = (state: RootState, props?: any) => state.getIn([rootKey, \"addMeasurementForm\"]);\n\nexport const getMeasurementSystem = (state: RootState, props: any) =>\n  state.getIn([\"orgs\", \"orgsById\", props.orgId, \"preferences\", \"config\", \"measurement\", \"system\"]);\n\n/**\n * Rehydrates a measurement with the relationships\n *\n * @param {RootState} state The RootState\n * @param {{ measurementId: number }} props The id of the measurement object\n * @returns {MeasurementHydratedRecord} MeasurementHydratedRecord\n */\nexport const getMeasurementHydrated = createSelector(\n  [measurement, (state, props) => ({ state, props })],\n  (measurement: MeasurementRecord, stateProps): MeasurementHydratedRecord => {\n    const { state, props } = stateProps;\n    const measurementHydrated = new MeasurementHydratedRecord(measurement.toJS());\n\n    return measurementHydrated\n      .set(\"elevations\", elevations(state, { ...props, elevationIds: measurement.elevation_ids }))\n      .set(\"roof_faces\", roofFaces(state, { ...props, roofFaceIds: measurement.roof_face_ids }))\n      .set(\"wall_facades\", wallFacades(state, { ...props, wallFacadeIds: measurement.wall_facade_ids }))\n      .set(\"windows\", windows(state, { ...props, windowIds: measurement.window_ids }))\n      .set(\"doors\", doors(state, { ...props, doorIds: measurement.door_ids }))\n      .set(\"rooms\", rooms(state, { ...props, roomIds: measurement.room_ids }))\n      .set(\"decks\", decks(state, { ...props, deckIds: measurement.deck_ids }))\n      .set(\"pools\", pools(state, { ...props, poolIds: measurement.pool_ids }));\n  },\n);\n\n/**\n * Fetches org preference for showing the different sections of measurements\n *\n * @param {RootState} state\n * @param {{location: MeasurementLocation, section: MeasurementSection}} options\n * @returns boolean\n */\nexport const showMeasurementSection = createSelector(\n  [currentOrg, (_, props) => props],\n  (org: OrgRecord, options: { location: MeasurementLocation; section: MeasurementSection }) => {\n    const { location, section } = options;\n    return (getIn(org, [\"preferences\", \"config\", \"measurement\", location], List()) as List<string>).includes(section);\n  },\n);\n\n/**\n * Looks at the measurement record values & related associations to see if any values are present\n * * If all values are 0 or associations do not exist, false is returned.\n * * If the MeasurementSection is disabled for the org, even if it has values, false is returned.\n *\n * @param {RootState} state\n * @param {location: MeasurementLocation}} options\n * @returns boolean\n */\nexport const hasMeasurements = createSelector(\n  [currentMeasurement, currentOrg, measurementFencing, (_, props) => props.location, (state, _) => state],\n  (measurement: MeasurementRecord, org: OrgRecord, fencing: FencingRecord, location: string, state: RootState) => {\n    if (!measurement) {\n      return false;\n    }\n\n    const prop = properties.find((mp, index) => {\n      return (\n        hasMeasurementProperties(measurement, propertiesMapping.get(index)) &&\n        showMeasurementSection(state, { section: mp, location })\n      );\n    });\n\n    if (prop) {\n      return true;\n    }\n\n    const object = objects.find((obj) => {\n      return (\n        measurement.get(`${obj}_ids` as any).size > 0 && showMeasurementSection(state, { section: `${obj}s`, location })\n      );\n    });\n\n    if (object) {\n      return true;\n    }\n\n    if (fencing && fencing.linePosts4 > 0) {\n      return true;\n    }\n\n    return false;\n  },\n);\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"util/main.min\",[\"kendo.core.min\"],t)}(function(){return function(){function t(t){return typeof t!==F}function e(t,e){var i=n(e);return z.round(t*i)/i}function n(t){return t?z.pow(10,t):1}function i(t,e,n){return z.max(z.min(t,n),e)}function r(t){return t*D}function o(t){return t/D}function s(t){return\"number\"==typeof t&&!isNaN(t)}function a(e,n){return t(e)?e:n}function h(t){return t*t}function l(t){var e,n=[];for(e in t)n.push(e+t[e]);return n.sort().join(\"\")}function c(t){var e,n=2166136261;for(e=0;t.length>e;++e)n+=(n<<1)+(n<<4)+(n<<7)+(n<<8)+(n<<24),n^=t.charCodeAt(e);return n>>>0}function u(t){return c(l(t))}function f(t){var e,n=t.length,i=L,r=I;for(e=0;n>e;e++)r=z.max(r,t[e]),i=z.min(i,t[e]);return{min:i,max:r}}function d(t){return f(t).min}function p(t){return f(t).max}function m(t){return v(t).min}function g(t){return v(t).max}function v(t){var e,n,i,r=L,o=I;for(e=0,n=t.length;n>e;e++)i=t[e],null!==i&&isFinite(i)&&(r=z.min(r,i),o=z.max(o,i));return{min:r===L?void 0:r,max:o===I?void 0:o}}function x(t){return t?t[t.length-1]:void 0}function y(t,e){return t.push.apply(t,e),t}function w(t){return M.template(t,{useWithBlock:!1,paramName:\"d\"})}function b(e,n){return t(n)&&null!==n?\" \"+e+\"='\"+n+\"' \":\"\"}function _(t){var e,n=\"\";for(e=0;t.length>e;e++)n+=b(t[e][0],t[e][1]);return n}function C(e){var n,i,r=\"\";for(n=0;e.length>n;n++)i=e[n][1],t(i)&&(r+=e[n][0]+\":\"+i+\";\");return\"\"!==r?r:void 0}function T(t){return\"string\"!=typeof t&&(t+=\"px\"),t}function k(t){var e,n,i=[];if(t)for(e=M.toHyphens(t).split(\"-\"),n=0;e.length>n;n++)i.push(\"k-pos-\"+e[n]);return i.join(\" \")}function S(e){return\"\"===e||null===e||\"none\"===e||\"transparent\"===e||!t(e)}function E(t){for(var e={1:\"i\",10:\"x\",100:\"c\",2:\"ii\",20:\"xx\",200:\"cc\",3:\"iii\",30:\"xxx\",300:\"ccc\",4:\"iv\",40:\"xl\",400:\"cd\",5:\"v\",50:\"l\",500:\"d\",6:\"vi\",60:\"lx\",600:\"dc\",7:\"vii\",70:\"lxx\",700:\"dcc\",8:\"viii\",80:\"lxxx\",800:\"dccc\",9:\"ix\",90:\"xc\",900:\"cm\",1e3:\"m\"},n=[1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],i=\"\";t>0;)n[0]>t?n.shift():(i+=e[n[0]],t-=n[0]);return i}function P(t){var e,n,i,r,o;for(t=t.toLowerCase(),e={i:1,v:5,x:10,l:50,c:100,d:500,m:1e3},n=0,i=0,r=0;t.length>r;++r){if(o=e[t.charAt(r)],!o)return null;n+=o,o>i&&(n-=2*i),i=o}return n}function A(t){var e=Object.create(null);return function(){var n,i=\"\";for(n=arguments.length;--n>=0;)i+=\":\"+arguments[n];return i in e?e[i]:t.apply(this,arguments)}}function O(t){for(var e,n,i=[],r=0,o=t.length;o>r;)e=t.charCodeAt(r++),e>=55296&&56319>=e&&o>r?(n=t.charCodeAt(r++),56320==(64512&n)?i.push(((1023&e)<<10)+(1023&n)+65536):(i.push(e),r--)):i.push(e);return i}function N(t){return t.map(function(t){var e=\"\";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t)}).join(\"\")}function R(t,e){function n(t,n){for(var i=[],r=0,o=0,s=0;t.length>r&&n.length>o;)e(t[r],n[o])<=0?i[s++]=t[r++]:i[s++]=n[o++];return t.length>r&&i.push.apply(i,t.slice(r)),n.length>o&&i.push.apply(i,n.slice(o)),i}return 2>t.length?t.slice():function i(t){var e,r,o;return 1>=t.length?t:(e=Math.floor(t.length/2),r=t.slice(0,e),o=t.slice(e),r=i(r),o=i(o),n(r,o))}(t)}var z=Math,M=window.kendo,B=M.deepExtend,D=z.PI/180,L=Number.MAX_VALUE,I=-Number.MAX_VALUE,F=\"undefined\",G=Date.now;G||(G=function(){return(new Date).getTime()}),B(M,{util:{MAX_NUM:L,MIN_NUM:I,append:y,arrayLimits:f,arrayMin:d,arrayMax:p,defined:t,deg:o,hashKey:c,hashObject:u,isNumber:s,isTransparent:S,last:x,limitValue:i,now:G,objectKey:l,round:e,rad:r,renderAttr:b,renderAllAttr:_,renderPos:k,renderSize:T,renderStyle:C,renderTemplate:w,sparseArrayLimits:v,sparseArrayMin:m,sparseArrayMax:g,sqr:h,valueOrDefault:a,romanToArabic:P,arabicToRoman:E,memoize:A,ucs2encode:N,ucs2decode:O,mergeSort:R}}),M.drawing.util=M.util,M.dataviz.util=M.util}(),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"util/text-metrics.min\",[\"kendo.core.min\",\"util/main.min\"],t)}(function(){!function(t){function e(){return{width:0,height:0,baseline:0}}function n(t,e,n){return u.current.measure(t,e,n)}function i(t,e){var n=[];if(t.length>0&&document.fonts){try{n=t.map(function(t){return document.fonts.load(t)})}catch(i){o.logToConsole(i)}Promise.all(n).then(e,e)}else e()}var r=document,o=window.kendo,s=o.Class,a=o.util,h=a.defined,l=s.extend({init:function(t){this._size=t,this._length=0,this._map={}},put:function(t,e){var n=this,i=n._map,r={key:t,value:e};i[t]=r,n._head?(n._tail.newer=r,r.older=n._tail,n._tail=r):n._head=n._tail=r,n._length>=n._size?(i[n._head.key]=null,n._head=n._head.newer,n._head.older=null):n._length++},get:function(t){var e=this,n=e._map[t];return n?(n===e._head&&n!==e._tail&&(e._head=n.newer,e._head.older=null),n!==e._tail&&(n.older&&(n.older.newer=n.newer,n.newer.older=n.older),n.older=e._tail,n.newer=null,e._tail.newer=n,e._tail=n),n.value):void 0}}),c=t(\"<div style='position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;padding: 0 !important; margin: 0 !important; border: 0 !important;line-height: normal !important; visibility: hidden !important; white-space: nowrap!important;' />\")[0],u=s.extend({init:function(t){this._cache=new l(1e3),this._initOptions(t)},options:{baselineMarkerSize:1},measure:function(n,i,o){var s,l,u,f,d,p,m,g;if(!n)return e();if(s=a.objectKey(i),l=a.hashKey(n+s),u=this._cache.get(l),u)return u;f=e(),d=o?o:c,p=this._baselineMarker().cloneNode(!1);for(m in i)g=i[m],h(g)&&(d.style[m]=g);return t(d).text(n),d.appendChild(p),r.body.appendChild(d),(n+\"\").length&&(f.width=d.offsetWidth-this.options.baselineMarkerSize,f.height=d.offsetHeight,f.baseline=p.offsetTop+this.options.baselineMarkerSize),f.width>0&&f.height>0&&this._cache.put(l,f),d.parentNode.removeChild(d),f},_baselineMarker:function(){return t(\"<div class='k-baseline-marker' style='display: inline-block; vertical-align: baseline;width: \"+this.options.baselineMarkerSize+\"px; height: \"+this.options.baselineMarkerSize+\"px;overflow: hidden;' />\")[0]}});u.current=new u,o.util.TextMetrics=u,o.util.LRUCache=l,o.util.loadFonts=i,o.util.measureText=n}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"util/base64.min\",[\"util/main.min\"],t)}(function(){return function(){function t(t){var n,i,r,s,a,h,l,c=\"\",u=0;for(t=e(t);t.length>u;)n=t.charCodeAt(u++),i=t.charCodeAt(u++),r=t.charCodeAt(u++),s=n>>2,a=(3&n)<<4|i>>4,h=(15&i)<<2|r>>6,l=63&r,isNaN(i)?h=l=64:isNaN(r)&&(l=64),c=c+o.charAt(s)+o.charAt(a)+o.charAt(h)+o.charAt(l);return c}function e(t){var e,n,i=\"\";for(e=0;t.length>e;e++)n=t.charCodeAt(e),128>n?i+=r(n):2048>n?(i+=r(192|n>>>6),i+=r(128|63&n)):65536>n&&(i+=r(224|n>>>12),i+=r(128|n>>>6&63),i+=r(128|63&n));return i}var n=window.kendo,i=n.deepExtend,r=String.fromCharCode,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";i(n.util,{encodeBase64:t,encodeUTF8:e})}(),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"mixins/observers.min\",[\"kendo.core.min\"],t)}(function(){return function(t){var e=Math,n=window.kendo,i=n.deepExtend,r=t.inArray,o={observers:function(){return this._observers=this._observers||[]},addObserver:function(t){return this._observers?this._observers.push(t):this._observers=[t],this},removeObserver:function(t){var e=this.observers(),n=r(t,e);return-1!=n&&e.splice(n,1),this},trigger:function(t,e){var n,i,r=this._observers;if(r&&!this._suspended)for(i=0;r.length>i;i++)n=r[i],n[t]&&n[t](e);return this},optionsChange:function(t){t=t||{},t.element=this,this.trigger(\"optionsChange\",t)},geometryChange:function(){this.trigger(\"geometryChange\",{element:this})},suspend:function(){return this._suspended=(this._suspended||0)+1,this},resume:function(){return this._suspended=e.max((this._suspended||0)-1,0),this},_observerField:function(t,e){this[t]&&this[t].removeObserver(this),this[t]=e,e.addObserver(this)}};i(n,{mixins:{ObserversMixin:o}})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/geometry.min\",[\"util/main.min\",\"mixins/observers.min\"],t)}(function(){return function(){function t(t){return null===t?null:t instanceof E?t:new E(t)}function e(t){return t&&N.isFunction(t.matrix)?t.matrix():t}function n(t,e,n,i){var r=0,o=0;return i&&(r=A.atan2(i.c*n,i.a*e),0!==i.b&&(o=A.atan2(i.d*n,i.b*e))),{x:r,y:o}}function i(t,e){for(;e>t;)t+=90;return t}function r(t,e){var n,i,r;for(n=0;e.length>n;n++)i=e[n],r=i.charAt(0).toUpperCase()+i.substring(1,i.length),t[\"set\"+r]=o(i),t[\"get\"+r]=s(i)}function o(t){return function(e){return this[t]!==e&&(this[t]=e,this.geometryChange()),this}}function s(t){return function(){return this[t]}}function a(t,e,n){t>e&&(e+=360);var i=A.abs(e-t);return n||(i=360-i),i}function h(t,e,n,i,r,o){var s=F((r-t)/n,3),a=F((o-e)/i,3);return F(I(A.atan2(a,s)))}function l(t,e,n,i,r,o,s,l){var c,u,f,d,p,m,g,v,x,y,w,b,_,C,T,k,S,E;if(e!==i)x=n-t,y=i-e,w=O(r,2),b=O(o,2),_=(b*x*(t+n)+w*y*(e+i))/(2*w*y),C=_-i,T=-(x*b)/(w*y),p=1/w+O(T,2)/b,m=2*(T*C/b-n/w),g=O(n,2)/w+O(C,2)/b-1,v=A.sqrt(O(m,2)-4*p*g),c=(-m-v)/(2*p),u=_+T*c,f=(-m+v)/(2*p),d=_+T*f;else{if(t===n)return!1;m=-2*i,g=O((n-t)*o/(2*r),2)+O(i,2)-O(o,2),v=A.sqrt(O(m,2)-4*g),c=f=(t+n)/2,u=(-m-v)/2,d=(-m+v)/2}return k=h(c,u,r,o,t,e),S=h(c,u,r,o,n,i),E=a(k,S,l),(s&&180>=E||!s&&E>180)&&(c=f,u=d,k=h(c,u,r,o,t,e),S=h(c,u,r,o,n,i)),{center:new $(c,u),startAngle:k,endAngle:S}}function c(t,e,n,i){if(0===t)return b(e,n,i);var r,o,s,a,h,l,c,u=(3*t*n-A.pow(e,2))/(3*A.pow(t,2)),f=(2*A.pow(e,3)-9*t*e*n+27*A.pow(t,2)*i)/(27*A.pow(t,3)),d=A.pow(u/3,3)+A.pow(f/2,2),p=new P(0,1),m=-e/(3*t),g=[];return 0>d?(r=new P(-f/2,A.sqrt(-d)).nthRoot(3),o=new P(-f/2,-A.sqrt(-d)).nthRoot(3)):(r=-f/2+A.sqrt(d),r=new P(x(r)*A.pow(A.abs(r),1/3)),o=-f/2-A.sqrt(d),o=new P(x(o)*A.pow(A.abs(o),1/3))),s=r.add(o),l=r.add(o).multiplyConstant(-0.5),c=r.add(o.negate()).multiplyConstant(A.sqrt(3)/2),a=l.add(p.multiply(c)),h=l.add(p.negate().multiply(c)),s.isReal()&&g.push(F(s.real+m,q)),a.isReal()&&g.push(F(a.real+m,q)),h.isReal()&&g.push(F(h.real+m,q)),g}function u(t,e){return[-t[0][e]+3*t[1][e]-3*t[2][e]+t[3][e],3*(t[0][e]-2*t[1][e]+t[2][e]),3*(-t[0][e]+t[1][e]),t[0][e]]}function f(t,e,n){var i=1-t;return A.pow(i,3)*n[0][e]+3*A.pow(i,2)*t*n[1][e]+3*A.pow(t,2)*i*n[2][e]+A.pow(t,3)*n[3][e]}function d(t,e,n){var i,r,o,s=u(t,\"x\"),a=c(s[0],s[1],s[2],s[3]-e.x),h=0;for(o=0;a.length>o;o++)i=f(a[o],\"y\",t),r=g(i,e.y)||i>e.y,r&&((0===a[o]||1===a[o])&&n.bottomRight().x>e.x||a[o]>0&&1>a[o])&&h++;return h}function p(t,e,n){var i,r,o,s,a,h;return t.x!=e.x&&(r=A.min(t.x,e.x),o=A.max(t.x,e.x),s=A.min(t.y,e.y),a=A.max(t.y,e.y),h=n.x>=r&&o>n.x,i=s==a?s>=n.y&&h:h&&(a-s)*((t.x-e.x)*(t.y-e.y)>0?n.x-r:o-n.x)/(o-r)+s-n.y>=0),i?1:0}function m(t,e,n,i){var r=e.x-t.x,o=i.x-n.x,s=e.y-t.y,a=i.y-n.y,h=t.x-n.x,l=t.y-n.y,c=r*a-o*s,u=(r*l-s*h)/c,f=(o*l-a*h)/c;return u>=0&&1>=u&&f>=0&&1>=f?new $(t.x+f*r,t.y+f*s):void 0}function g(t,e,n){return 0===F(A.abs(t-e),n||q)}function v(t,e,n){return e>t||g(t,e,n)}function x(t){return 0>t?-1:1}function y(e,n,i){var r=B.deg(A.atan2(n.y-e.y,n.x-e.x)),o=i.transformCopy(t().rotate(-r,e));return e.x>o.x}function w(t,e,n,i,r){var o,s,a=u(t,i),h=c(a[0],a[1],a[2],a[3]-e[i]);for(s=0;h.length>s;s++)if(h[s]>=0&&1>=h[s]&&(o=f(h[s],n,t),A.abs(o-e[n])<=r))return!0}function b(t,e,n){var i=A.sqrt(A.pow(e,2)-4*t*n);return[(-e+i)/(2*t),(-e-i)/(2*t)]}var _,C,T,k,S,E,P,A=Math,O=A.pow,N=window.kendo,R=N.Class,z=N.deepExtend,M=N.mixins.ObserversMixin,B=N.util,D=B.defined,L=B.rad,I=B.deg,F=B.round,G=A.PI/2,j=B.MIN_NUM,H=B.MAX_NUM,q=10,$=R.extend({init:function(t,e){this.x=t||0,this.y=e||0},equals:function(t){return t&&t.x===this.x&&t.y===this.y},clone:function(){return new $(this.x,this.y)},rotate:function(e,n){return this.transform(t().rotate(e,n))},translate:function(t,e){return this.x+=t,this.y+=e,this.geometryChange(),this},translateWith:function(t){return this.translate(t.x,t.y)},move:function(t,e){return this.x=this.y=0,this.translate(t,e)},scale:function(t,e){return D(e)||(e=t),this.x*=t,this.y*=e,this.geometryChange(),this},scaleCopy:function(t,e){return this.clone().scale(t,e)},transform:function(t){var n=e(t),i=this.x,r=this.y;return this.x=n.a*i+n.c*r+n.e,this.y=n.b*i+n.d*r+n.f,this.geometryChange(),this},transformCopy:function(t){var e=this.clone();return t&&e.transform(t),e},distanceTo:function(t){var e=this.x-t.x,n=this.y-t.y;return A.sqrt(e*e+n*n)},round:function(t){return this.x=F(this.x,t),this.y=F(this.y,t),this.geometryChange(),this},toArray:function(t){var e=D(t),n=e?F(this.x,t):this.x,i=e?F(this.y,t):this.y;return[n,i]}});r($.fn,[\"x\",\"y\"]),z($.fn,M),$.fn.toString=function(t,e){var n=this.x,i=this.y;return D(t)&&(n=F(n,t),i=F(i,t)),e=e||\" \",n+e+i},$.create=function(t,e){return D(t)?t instanceof $?t:1===arguments.length&&2===t.length?new $(t[0],t[1]):new $(t,e):void 0},$.min=function(){var t,e,n=B.MAX_NUM,i=B.MAX_NUM;for(t=0;arguments.length>t;t++)e=arguments[t],n=A.min(e.x,n),i=A.min(e.y,i);return new $(n,i)},$.max=function(){var t,e,n=B.MIN_NUM,i=B.MIN_NUM;for(t=0;arguments.length>t;t++)e=arguments[t],n=A.max(e.x,n),i=A.max(e.y,i);return new $(n,i)},$.minPoint=function(){return new $(j,j)},$.maxPoint=function(){return new $(H,H)},$.ZERO=new $(0,0),_=R.extend({init:function(t,e){this.width=t||0,this.height=e||0},equals:function(t){return t&&t.width===this.width&&t.height===this.height},clone:function(){return new _(this.width,this.height)},toArray:function(t){var e=D(t),n=e?F(this.width,t):this.width,i=e?F(this.height,t):this.height;return[n,i]}}),r(_.fn,[\"width\",\"height\"]),z(_.fn,M),_.create=function(t,e){return D(t)?t instanceof _?t:1===arguments.length&&2===t.length?new _(t[0],t[1]):new _(t,e):void 0},_.ZERO=new _(0,0),C=R.extend({init:function(t,e){this.setOrigin(t||new $),this.setSize(e||new _)},clone:function(){return new C(this.origin.clone(),this.size.clone())},equals:function(t){return t&&t.origin.equals(this.origin)&&t.size.equals(this.size)},setOrigin:function(t){return this._observerField(\"origin\",$.create(t)),this.geometryChange(),this},getOrigin:function(){return this.origin},setSize:function(t){return this._observerField(\"size\",_.create(t)),this.geometryChange(),this},getSize:function(){return this.size},width:function(){return this.size.width},height:function(){return this.size.height},topLeft:function(){return this.origin.clone()},bottomRight:function(){return this.origin.clone().translate(this.width(),this.height())},topRight:function(){return this.origin.clone().translate(this.width(),0)},bottomLeft:function(){return this.origin.clone().translate(0,this.height())},center:function(){return this.origin.clone().translate(this.width()/2,this.height()/2)},bbox:function(t){var e=this.topLeft().transformCopy(t),n=this.topRight().transformCopy(t),i=this.bottomRight().transformCopy(t),r=this.bottomLeft().transformCopy(t);return C.fromPoints(e,n,i,r)},transformCopy:function(t){return C.fromPoints(this.topLeft().transform(t),this.bottomRight().transform(t))},expand:function(t,e){return D(e)||(e=t),this.size.width+=2*t,this.size.height+=2*e,this.origin.translate(-t,-e),this},expandCopy:function(t,e){return this.clone().expand(t,e)},containsPoint:function(t){var e=this.origin,n=this.bottomRight();return!(e.x>t.x||e.y>t.y||t.x>n.x||t.y>n.y)},_isOnPath:function(t,e){var n=this.expandCopy(e,e),i=this.expandCopy(-e,-e);return n.containsPoint(t)&&!i.containsPoint(t)}}),z(C.fn,M),C.fromPoints=function(){var t=$.min.apply(this,arguments),e=$.max.apply(this,arguments),n=new _(e.x-t.x,e.y-t.y);return new C(t,n)},C.union=function(t,e){return C.fromPoints($.min(t.topLeft(),e.topLeft()),$.max(t.bottomRight(),e.bottomRight()))},C.intersect=function(t,e){return t={left:t.topLeft().x,top:t.topLeft().y,right:t.bottomRight().x,bottom:t.bottomRight().y},e={left:e.topLeft().x,top:e.topLeft().y,right:e.bottomRight().x,bottom:e.bottomRight().y},e.right>=t.left&&t.right>=e.left&&e.bottom>=t.top&&t.bottom>=e.top?C.fromPoints(new $(A.max(t.left,e.left),A.max(t.top,e.top)),new $(A.min(t.right,e.right),A.min(t.bottom,e.bottom))):void 0},T=R.extend({init:function(t,e){this.setCenter(t||new $),this.setRadius(e||0)},setCenter:function(t){return this._observerField(\"center\",$.create(t)),this.geometryChange(),this},getCenter:function(){return this.center},equals:function(t){return t&&t.center.equals(this.center)&&t.radius===this.radius},clone:function(){return new T(this.center.clone(),this.radius)},pointAt:function(t){return this._pointAt(L(t))},bbox:function(t){var e,i,r,o,s=$.maxPoint(),a=$.minPoint(),h=n(this.center,this.radius,this.radius,t);for(e=0;4>e;e++)i=this._pointAt(h.x+e*G).transformCopy(t),r=this._pointAt(h.y+e*G).transformCopy(t),o=new $(i.x,r.y),s=$.min(s,o),a=$.max(a,o);return C.fromPoints(s,a)},_pointAt:function(t){var e=this.center,n=this.radius;return new $(e.x-n*A.cos(t),e.y-n*A.sin(t))},containsPoint:function(t){var e=this.center,n=A.pow(t.x-e.x,2)+A.pow(t.y-e.y,2)<=A.pow(this.radius,2);return n},_isOnPath:function(t,e){var n=this.center,i=this.radius,r=n.distanceTo(t);return r>=i-e&&i+e>=r}}),r(T.fn,[\"radius\"]),z(T.fn,M),k=R.extend({init:function(t,e){this.setCenter(t||new $),e=e||{},this.radiusX=e.radiusX,this.radiusY=e.radiusY||e.radiusX,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.anticlockwise=e.anticlockwise||!1},clone:function(){return new k(this.center,{radiusX:this.radiusX,radiusY:this.radiusY,startAngle:this.startAngle,endAngle:this.endAngle,anticlockwise:this.anticlockwise})},setCenter:function(t){return this._observerField(\"center\",$.create(t)),this.geometryChange(),this},getCenter:function(){return this.center},MAX_INTERVAL:45,pointAt:function(t){var e=this.center,n=L(t);return new $(e.x+this.radiusX*A.cos(n),e.y+this.radiusY*A.sin(n))},curvePoints:function(){var t,e,n,i=this.startAngle,r=this.anticlockwise?-1:1,o=[this.pointAt(i)],s=i,a=this._arcInterval(),h=a.endAngle-a.startAngle,l=A.ceil(h/this.MAX_INTERVAL),c=h/l;for(t=1;l>=t;t++)e=s+r*c,n=this._intervalCurvePoints(s,e),o.push(n.cp1,n.cp2,n.p2),s=e;return o},bbox:function(t){for(var e,r,o=this,s=o._arcInterval(),a=s.startAngle,h=s.endAngle,l=n(this.center,this.radiusX,this.radiusY,t),c=I(l.x),u=I(l.y),f=o.pointAt(a).transformCopy(t),d=o.pointAt(h).transformCopy(t),p=$.min(f,d),m=$.max(f,d),g=i(c,a),v=i(u,a);h>g||h>v;)h>g&&(e=o.pointAt(g).transformCopy(t),g+=90),h>v&&(r=o.pointAt(v).transformCopy(t),v+=90),f=new $(e.x,r.y),p=$.min(p,f),m=$.max(m,f);return C.fromPoints(p,m)},_arcInterval:function(){var t,e=this.startAngle,n=this.endAngle,i=this.anticlockwise;return i&&(t=e,e=n,n=t),(e>n||i&&e===n)&&(n+=360),{startAngle:e,endAngle:n}},_intervalCurvePoints:function(t,e){var n=this,i=n.pointAt(t),r=n.pointAt(e),o=n._derivativeAt(t),s=n._derivativeAt(e),a=(L(e)-L(t))/3,h=new $(i.x+a*o.x,i.y+a*o.y),l=new $(r.x-a*s.x,r.y-a*s.y);return{p1:i,cp1:h,cp2:l,p2:r}},_derivativeAt:function(t){var e=this,n=L(t);return new $(-e.radiusX*A.sin(n),e.radiusY*A.cos(n))},containsPoint:function(t){var e,n,i,r=this._arcInterval(),o=r.endAngle-r.startAngle,s=this.center,a=s.distanceTo(t),l=A.atan2(t.y-s.y,t.x-s.x),c=this.radiusX*this.radiusY/A.sqrt(A.pow(this.radiusX,2)*A.pow(A.sin(l),2)+A.pow(this.radiusY,2)*A.pow(A.cos(l),2)),u=this.pointAt(this.startAngle).round(q),f=this.pointAt(this.endAngle).round(q),d=m(s,t.round(q),u,f);return 180>o?e=d&&v(s.distanceTo(d),a)&&v(a,c):(n=h(s.x,s.y,this.radiusX,this.radiusY,t.x,t.y),360!=n&&(n=(360+n)%360),i=n>=r.startAngle&&r.endAngle>=n,e=i&&v(a,c)||!i&&(!d||d.equals(t))),e},_isOnPath:function(t,e){var n,i=this._arcInterval(),r=this.center,o=h(r.x,r.y,this.radiusX,this.radiusY,t.x,t.y);return 360!=o&&(o=(360+o)%360),n=o>=i.startAngle&&i.endAngle>=o,n&&this.pointAt(o).distanceTo(t)<=e}}),r(k.fn,[\"radiusX\",\"radiusY\",\"startAngle\",\"endAngle\",\"anticlockwise\"]),z(k.fn,M),k.fromPoints=function(t,e,n,i,r,o){var s=l(t.x,t.y,e.x,e.y,n,i,r,o);return new k(s.center,{startAngle:s.startAngle,endAngle:s.endAngle,radiusX:n,radiusY:i,anticlockwise:0===o})},S=R.extend({init:function(t,e,n,i,r,o){this.a=t||0,this.b=e||0,this.c=n||0,this.d=i||0,this.e=r||0,this.f=o||0},multiplyCopy:function(t){return new S(this.a*t.a+this.c*t.b,this.b*t.a+this.d*t.b,this.a*t.c+this.c*t.d,this.b*t.c+this.d*t.d,this.a*t.e+this.c*t.f+this.e,this.b*t.e+this.d*t.f+this.f)},invert:function(){var t=this.a,e=this.b,n=this.c,i=this.d,r=this.e,o=this.f,s=t*i-e*n;return 0===s?null:new S(i/s,-e/s,-n/s,t/s,(n*o-i*r)/s,(e*r-t*o)/s)},clone:function(){return new S(this.a,this.b,this.c,this.d,this.e,this.f)},equals:function(t){return t?this.a===t.a&&this.b===t.b&&this.c===t.c&&this.d===t.d&&this.e===t.e&&this.f===t.f:!1},round:function(t){return this.a=F(this.a,t),this.b=F(this.b,t),this.c=F(this.c,t),this.d=F(this.d,t),this.e=F(this.e,t),this.f=F(this.f,t),this},toArray:function(t){var e,n=[this.a,this.b,this.c,this.d,this.e,this.f];if(D(t))for(e=0;n.length>e;e++)n[e]=F(n[e],t);return n}}),S.fn.toString=function(t,e){return this.toArray(t).join(e||\",\")},S.translate=function(t,e){return new S(1,0,0,1,t,e)},S.unit=function(){return new S(1,0,0,1,0,0)},S.rotate=function(t,e,n){var i=new S;return i.a=A.cos(L(t)),i.b=A.sin(L(t)),i.c=-i.b,i.d=i.a,i.e=e-e*i.a+n*i.b||0,i.f=n-n*i.a-e*i.b||0,i},S.scale=function(t,e){return new S(t,0,0,e,0,0)},S.IDENTITY=S.unit(),E=R.extend({init:function(t){this._matrix=t||S.unit()},clone:function(){return new E(this._matrix.clone())},equals:function(t){return t&&t._matrix.equals(this._matrix)},_optionsChange:function(){this.optionsChange({field:\"transform\",value:this})},translate:function(t,e){return this._matrix=this._matrix.multiplyCopy(S.translate(t,e)),this._optionsChange(),this},scale:function(t,e,n){return D(e)||(e=t),n&&(n=$.create(n),this._matrix=this._matrix.multiplyCopy(S.translate(n.x,n.y))),this._matrix=this._matrix.multiplyCopy(S.scale(t,e)),n&&(this._matrix=this._matrix.multiplyCopy(S.translate(-n.x,-n.y))),this._optionsChange(),this},rotate:function(t,e){return e=$.create(e)||$.ZERO,this._matrix=this._matrix.multiplyCopy(S.rotate(t,e.x,e.y)),this._optionsChange(),this},multiply:function(t){var n=e(t);return this._matrix=this._matrix.multiplyCopy(n),this._optionsChange(),this},matrix:function(t){return t?(this._matrix=t,this._optionsChange(),this):this._matrix}}),z(E.fn,M),P=function(t,e){this.real=t||0,this.img=e||0},P.fn=P.prototype={add:function(t){return new P(F(this.real+t.real,q),F(this.img+t.img,q))},addConstant:function(t){return new P(this.real+t,this.img)},negate:function(){return new P(-this.real,-this.img)},multiply:function(t){return new P(this.real*t.real-this.img*t.img,this.real*t.img+this.img*t.real)},multiplyConstant:function(t){return new P(this.real*t,this.img*t)},nthRoot:function(t){var e=A.atan2(this.img,this.real),n=A.sqrt(A.pow(this.img,2)+A.pow(this.real,2)),i=A.pow(n,1/t);return new P(i*A.cos(e/t),i*A.sin(e/t))},equals:function(t){return this.real===t.real&&this.img===t.img},isReal:function(){return 0===this.img}},z(N,{geometry:{Arc:k,Circle:T,curveIntersectionsCount:d,lineIntersectionsCount:p,Matrix:S,Point:$,Rect:C,Size:_,Transformation:E,transform:t,toMatrix:e,isOutOfEndPoint:y,hasRootsInRange:w}}),N.dataviz.geometry=N.geometry}(),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/core.min\",[\"drawing/geometry.min\",\"kendo.popup.min\"],t)}(function(){!function(t){function e(t){var e,n;return t.touch?(e=t.x.location,n=t.y.location):(e=t.pageX||t.clientX||0,n=t.pageY||t.clientY||0),{x:e,y:n}}var n,i,r,o,s=t.noop,a=Object.prototype.toString,h=window.kendo,l=h.Class,c=h.ui.Widget,u=h.deepExtend,f=h.util,d=f.defined,p=f.limitValue,m=h.geometry,g=t.proxy,v=\".kendo\",x='<div class=\"k-tooltip\"><div class=\"k-tooltip-content\"></div></div>',y='<div class=\"k-tooltip-button\"><a href=\"\\\\#\" class=\"k-icon k-i-close\">close</a></div>',w=c.extend({init:function(t,e){this.options=u({},this.options,e),c.fn.init.call(this,t,this.options),this._click=this._handler(\"click\"),this._mouseenter=this._handler(\"mouseenter\"),this._mouseleave=this._handler(\"mouseleave\"),this._mousemove=this._handler(\"mousemove\"),this._visual=new h.drawing.Group,this.options.width&&this.element.css(\"width\",this.options.width),this.options.height&&this.element.css(\"height\",this.options.height),this._enableTracking()},options:{name:\"Surface\",tooltip:{}},events:[\"click\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"resize\",\"tooltipOpen\",\"tooltipClose\"],draw:function(t){this._visual.children.push(t)},clear:function(){this._visual.children=[],this.hideTooltip()},destroy:function(){this._visual=null,this._tooltip&&(this._tooltip.destroy(),delete this._tooltip),c.fn.destroy.call(this)},exportVisual:function(){return this._visual},getSize:function(){return{width:this.element.width(),height:this.element.height()}},setSize:function(t){this.element.css({width:t.width,height:t.height}),this._size=t,this._resize()},eventTarget:function(e){for(var n,i=t(e.touch?e.touch.initialTouch:e.target);!n&&i.length>0&&(n=i[0]._kendoNode,!i.is(this.element)&&0!==i.length);)i=i.parent();return n?n.srcElement:void 0},showTooltip:function(t,e){this._tooltip&&this._tooltip.show(t,e)},hideTooltip:function(){this._tooltip&&this._tooltip.hide()},suspendTracking:function(){this._suspendedTracking=!0,this.hideTooltip()},resumeTracking:function(){this._suspendedTracking=!1},_resize:s,_handler:function(t){var e=this;return function(n){var i=e.eventTarget(n);i&&!e._suspendedTracking&&e.trigger(t,{element:i,originalEvent:n,type:t})}},_enableTracking:function(){h.ui.Popup&&(this._tooltip=new o(this,this.options.tooltip||{}))},_elementOffset:function(){var t=this.element,e=t.offset(),n=parseInt(t.css(\"paddingLeft\"),10),i=parseInt(t.css(\"paddingTop\"),10);return{left:e.left+n,top:e.top+i}},_surfacePoint:function(t){var n=this._elementOffset(),i=e(t),r=i.x-n.left,o=i.y-n.top;return new m.Point(r,o)}});h.ui.plugin(w),w.create=function(t,e){return r.current.create(t,e)},n=l.extend({init:function(t){this.childNodes=[],this.parent=null,t&&(this.srcElement=t,this.observe())},destroy:function(){var t,e;for(this.srcElement&&this.srcElement.removeObserver(this),t=this.childNodes,e=0;t.length>e;e++)this.childNodes[e].destroy();this.parent=null},load:s,observe:function(){this.srcElement&&this.srcElement.addObserver(this)},append:function(t){this.childNodes.push(t),t.parent=this},insertAt:function(t,e){this.childNodes.splice(e,0,t),t.parent=this},remove:function(t,e){var n,i=t+e;for(n=t;i>n;n++)this.childNodes[n].removeSelf();this.childNodes.splice(t,e)},removeSelf:function(){this.clear(),this.destroy()},clear:function(){this.remove(0,this.childNodes.length)},invalidate:function(){this.parent&&this.parent.invalidate()},geometryChange:function(){this.invalidate()},optionsChange:function(){this.invalidate()},childrenChange:function(t){\"add\"===t.action?this.load(t.items,t.index):\"remove\"===t.action&&this.remove(t.index,t.items.length),this.invalidate()}}),i=l.extend({init:function(t,e){var n,i;this.prefix=e||\"\";for(n in t)i=t[n],i=this._wrap(i,n),this[n]=i},get:function(t){return h.getter(t,!0)(this)},set:function(t,e){var n,i=h.getter(t,!0)(this);i!==e&&(n=this._set(t,this._wrap(e,t)),n||this.optionsChange({field:this.prefix+t,value:e}))},_set:function(t,e){var n,r,o,s=t.indexOf(\".\")>=0;if(s)for(n=t.split(\".\"),r=\"\";n.length>1;){if(r+=n.shift(),o=h.getter(r,!0)(this),o||(o=new i({},r+\".\"),o.addObserver(this),this[r]=o),o instanceof i)return o.set(n.join(\".\"),e),s;r+=\".\"}return this._clear(t),h.setter(t)(this,e),s},_clear:function(t){var e=h.getter(t,!0)(this);e&&e.removeObserver&&e.removeObserver(this)},_wrap:function(t,e){var n=a.call(t);return null!==t&&d(t)&&\"[object Object]\"===n&&(t instanceof i||t instanceof l||(t=new i(t,this.prefix+e+\".\")),t.addObserver(this)),t}}),u(i.fn,h.mixins.ObserversMixin),r=function(){this._items=[]},r.prototype={register:function(t,e,n){var i=this._items,r=i[0],o={name:t,type:e,order:n};!r||r.order>n?i.unshift(o):i.push(o)},create:function(t,e){var n,i,r=this._items,o=r[0];if(e&&e.type)for(n=e.type.toLowerCase(),i=0;r.length>i;i++)if(r[i].name===n){o=r[i];break}return o?new o.type(t,e):void h.logToConsole(\"Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n- The browser does not support SVG, VML and Canvas. User agent: \"+navigator.userAgent+\"\\n- The Kendo UI scripts are not fully loaded\")}},r.current=new r,o=l.extend({init:function(e,n){this.element=t(x),this.content=this.element.children(\".k-tooltip-content\"),n=n||{},this.options=u({},this.options,this._tooltipOptions(n)),this.popup=new h.ui.Popup(this.element,{appendTo:n.appendTo,animation:n.animation,copyAnchorStyles:!1,collision:\"fit fit\"}),this._openPopupHandler=t.proxy(this._openPopup,this),this.surface=e,this._bindEvents()},options:{position:\"top\",showOn:\"mouseenter\",offset:7,autoHide:!0,hideDelay:0,showAfter:100},_bindEvents:function(){this._showHandler=g(this._showEvent,this),this._surfaceLeaveHandler=g(this._surfaceLeave,this),this._mouseleaveHandler=g(this._mouseleave,this),this._mousemoveHandler=g(this._mousemove,this),this.surface.bind(\"click\",this._showHandler),this.surface.bind(\"mouseenter\",this._showHandler),this.surface.bind(\"mouseleave\",this._mouseleaveHandler),this.surface.bind(\"mousemove\",this._mousemoveHandler),this.surface.element.on(\"mouseleave\"+v,this._surfaceLeaveHandler),this.element.on(\"click\"+v,\".k-tooltip-button\",g(this._hideClick,this))},destroy:function(){var t=this.popup;this.surface.unbind(\"click\",this._showHandler),this.surface.unbind(\"mouseenter\",this._showHandler),this.surface.unbind(\"mouseleave\",this._mouseleaveHandler),this.surface.unbind(\"mousemove\",this._mousemoveHandler),this.surface.element.off(\"mouseleave\"+v,this._surfaceLeaveHandler),this.element.off(\"click\"+v),t&&(t.destroy(),delete this.popup),clearTimeout(this._timeout),delete this.popup,delete this.element,delete this.content,delete this.surface},_tooltipOptions:function(t){return t=t||{},{position:t.position,showOn:t.showOn,offset:t.offset,autoHide:t.autoHide,width:t.width,height:t.height,content:t.content,shared:t.shared,hideDelay:t.hideDelay,showAfter:t.showAfter}},_tooltipShape:function(t){for(;t&&!t.options.tooltip;)t=t.parent;return t},_updateContent:function(t,e,n){var i=n.content;return h.isFunction(i)&&(i=i({element:e,target:t})),i?(this.content.html(i),!0):void 0},_position:function(t,n,i,r){var o,s=n.position,a=n.offset||0,h=this.surface,l=h._elementOffset(),c=h.getSize(),u=h._offset,f=t.bbox(),d=i.width,m=i.height,g=0,v=0;return f.origin.translate(l.left,l.top),u&&f.origin.translate(-u.x,-u.y),\"cursor\"==s&&r?(o=e(r),g=o.x-d/2,v=o.y-m-a):\"left\"==s?(g=f.origin.x-d-a,v=f.center().y-m/2):\"right\"==s?(g=f.bottomRight().x+a,v=f.center().y-m/2):\"bottom\"==s?(g=f.center().x-d/2,v=f.bottomRight().y+a):(g=f.center().x-d/2,v=f.origin.y-m-a),{left:p(g,l.left,l.left+c.width),top:p(v,l.top,l.top+c.height)}},show:function(t,e){this._show(t,t,u({},this.options,this._tooltipOptions(t.options.tooltip),e))},hide:function(){var t=this._current;delete this._current,clearTimeout(this._showTimeout),this.popup.visible()&&t&&!this.surface.trigger(\"tooltipClose\",{element:t.shape,target:t.target,popup:this.popup})&&this.popup.close()},_hideClick:function(t){t.preventDefault(),this.hide()},_show:function(t,e,n,i,r){var o,s,a=this._current;clearTimeout(this._timeout),a&&(a.shape===e&&n.shared||a.target===t)||(clearTimeout(this._showTimeout),!this.surface.trigger(\"tooltipOpen\",{element:e,target:t,popup:this.popup})&&this._updateContent(t,e,n)&&(this._autoHide(n),o=this._measure(n),s=this.popup,s.visible()&&s.close(!0),this._current={options:n,elementSize:o,shape:e,target:t,position:this._position(n.shared?e:t,n,o,i)},r?this._showTimeout=setTimeout(this._openPopupHandler,n.showAfter||0):this._openPopup()))},_openPopup:function(){var t=this._current,e=t.position;this.popup.open(e.left,e.top)},_autoHide:function(e){e.autoHide&&this._closeButton&&(this.element.removeClass(\"k-tooltip-closable\"),this._closeButton.remove(),delete this._closeButton),e.autoHide||this._closeButton||(this.element.addClass(\"k-tooltip-closable\"),\nthis._closeButton=t(y).prependTo(this.element))},_showEvent:function(t){var e,n=this._tooltipShape(t.element);n&&(e=u({},this.options,this._tooltipOptions(n.options.tooltip)),e&&e.showOn==t.type&&this._show(t.element,n,e,t.originalEvent,!0))},_measure:function(t){var e,n,i;return this.element.css({width:\"auto\",height:\"auto\"}),i=this.popup.visible(),i||this.popup.wrapper.show(),this.element.css({width:d(t.width)?t.width:\"auto\",height:d(t.height)?t.height:\"auto\"}),e=this.element.outerWidth(),n=this.element.outerHeight(),i||this.popup.wrapper.hide(),{width:e,height:n}},_mouseleave:function(t){var e,n;this._popupRelatedTarget(t.originalEvent)||(e=this,n=e._current,n&&n.options.autoHide&&(e._timeout=setTimeout(function(){clearTimeout(e._showTimeout),e.hide()},n.options.hideDelay||0)))},_mousemove:function(t){var e,n,i=this._current;i&&t.element&&(e=i.options,\"cursor\"==e.position&&(n=this._position(t.element,e,i.elementSize,t.originalEvent),i.position=n,this.popup.wrapper.css({left:n.left,top:n.top})))},_surfaceLeave:function(t){this._popupRelatedTarget(t)||(clearTimeout(this._showTimeout),this.hide())},_popupRelatedTarget:function(e){return e.relatedTarget&&t(e.relatedTarget).closest(this.popup.wrapper).length}}),u(h,{drawing:{DASH_ARRAYS:{dot:[1.5,3.5],dash:[4,3.5],longdash:[8,3.5],dashdot:[3.5,3.5,1.5,3.5],longdashdot:[8,3.5,1.5,3.5],longdashdotdot:[8,3.5,1.5,3.5,1.5,3.5]},Color:h.Color,BaseNode:n,OptionsStore:i,Surface:w,SurfaceFactory:r,SurfaceTooltip:o}}),h.dataviz.drawing=h.drawing}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/mixins.min\",[\"drawing/core.min\"],t)}(function(){!function(){var t=window.kendo,e=t.deepExtend,n=t.util.defined,i=t.geometry,r=\"gradient\",o=\"\"+i.Matrix.IDENTITY,s={extend:function(t){t.fill=this.fill,t.stroke=this.stroke},fill:function(t,e){var i,o=this.options;return n(t)?(t&&t.nodeType!=r?(i={color:t},n(e)&&(i.opacity=e),o.set(\"fill\",i)):o.set(\"fill\",t),this):o.get(\"fill\")},stroke:function(t,e,i){return n(t)?(this.options.set(\"stroke.color\",t),n(e)&&this.options.set(\"stroke.width\",e),n(i)&&this.options.set(\"stroke.opacity\",i),this):this.options.get(\"stroke\")}},a={extend:function(t,e){t.traverse=function(t){var n,i,r=this[e];for(n=0;r.length>n;n++)i=r[n],i.traverse?i.traverse(t):t(i);return this}}},h={extend:function(t){t.bbox=this.bbox,t.geometryChange=this.geometryChange},bbox:function(t){var e,n,r=i.toMatrix(this.currentTransform(t)),s=r?\"\"+r:o;return this._bboxCache&&this._matrixHash==s?e=this._bboxCache.clone():(e=this._bbox(r),this._bboxCache=e?e.clone():null,this._matrixHash=s),n=this.options.get(\"stroke.width\"),n&&e&&e.expand(n/2),e},geometryChange:function(){delete this._bboxCache,this.trigger(\"geometryChange\",{element:this})}};e(t.drawing,{mixins:{Paintable:s,Traversable:a,Measurable:h}})}()},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/shapes.min\",[\"drawing/core.min\",\"drawing/mixins.min\",\"util/text-metrics.min\",\"mixins/observers.min\"],t)}(function(){!function(t){function e(t,e,n){var i,r,o,s;for(r=0;t.length>r;r++)o=t[r],o.visible()&&(s=e?o.bbox(n):o.rawBBox(),s&&(i=i?X.Rect.union(i,s):s));return i}function n(t,e){var n,i,r,o;for(i=0;t.length>i;i++)r=t[i],r.visible()&&(o=r.clippedBBox(e),o&&(n=n?X.Rect.union(n,o):o));return n}function i(t,e){for(var n=0;e.length>n;n++)t[e[n]]=r(e[n])}function r(t){var e=\"_\"+t;return function(t){return it(t)?(this._observerField(e,t),this.geometryChange(),this):this[e]}}function o(t,e){for(var n=0;e.length>n;n++)t[e[n]]=s(e[n])}function s(t){var e=\"_\"+t;return function(t){return it(t)?(this._observerField(e,U.create(t)),this.geometryChange(),this):this[e]}}function a(t,e){for(var n=0;e.length>n;n++)t[e[n]]=h(e[n])}function h(t){return function(e){return it(e)?(this.options.set(t,e),this):this.options.get(t)}}function l(){return\"kdef\"+pt++}function c(t,e,n){b(t,e,n,\"x\",\"width\")}function u(t,e,n){b(t,e,n,\"y\",\"height\")}function f(t){w(y(t),\"x\",\"y\",\"width\")}function d(t){w(y(t),\"y\",\"x\",\"height\")}function p(t,e){return g(t,e,\"x\",\"y\",\"width\")}function m(t,e){return g(t,e,\"y\",\"x\",\"height\")}function g(t,e,n,i,r){var o,s,a,h,l=[],c=x(t,e,r),u=e.origin.clone();for(h=0;c.length>h;h++)for(a=c[h],o=a[0],u[i]=o.bbox.origin[i],T(u,o.bbox,o.element),o.bbox.origin[n]=u[n],w(a,n,i,r),l.push([]),s=0;a.length>s;s++)l[h].push(a[s].element);return l}function v(t,e){var n,i,r=t.clippedBBox(),o=r.size,s=e.size;(o.width>s.width||o.height>s.height)&&(n=J.min(s.width/o.width,s.height/o.height),i=t.transform()||X.transform(),i.scale(n,n),t.transform(i))}function x(t,e,n){var i,r,o,s,a=e.size[n],h=0,l=[],c=[],u=function(){c.push({element:i,bbox:o})};for(s=0;t.length>s;s++)i=t[s],o=i.clippedBBox(),o&&(r=o.size[n],h+r>a?c.length?(l.push(c),c=[],u(),h=r):(u(),l.push(c),c=[],h=0):(u(),h+=r));return c.length&&l.push(c),l}function y(t){var e,n,i,r=[];for(i=0;t.length>i;i++)e=t[i],n=e.clippedBBox(),n&&r.push({element:e,bbox:n});return r}function w(t,e,n,i){var r,o,s,a,h;if(t.length>1)for(r=t[0].bbox,o=new U,h=1;t.length>h;h++)s=t[h].element,a=t[h].bbox,o[e]=r.origin[e]+r.size[i],o[n]=a.origin[n],T(o,a,s),a.origin[e]=o[e],r=a}function b(t,e,n,i,r){var o,s,a;for(n=n||\"start\",a=0;t.length>a;a++)o=t[a].clippedBBox(),o&&(s=o.origin.clone(),s[i]=_(o.size[r],e,n,i,r),T(s,o,t[a]))}function _(t,e,n,i,r){var o;return o=n==mt?e.origin[i]:n==gt?e.origin[i]+e.size[r]-t:e.origin[i]+(e.size[r]-t)/2}function C(t,e,n){var i=n.transform()||X.transform(),r=i.matrix();r.e+=t,r.f+=e,i.matrix(r),n.transform(i)}function T(t,e,n){C(t.x-e.origin.x,t.y-e.origin.y,n)}var k,S,E,P,A,O,N,R,z,M,B,D,L,I,F,G,j,H=window.kendo,q=H.Class,$=H.deepExtend,X=H.geometry,U=X.Point,Y=X.Size,V=X.Matrix,W=X.toMatrix,Q=H.drawing,Z=Q.OptionsStore,J=Math,K=J.pow,tt=H.util,et=tt.append,nt=tt.arrayLimits,it=tt.defined,rt=tt.last,ot=tt.valueOrDefault,st=H.mixins.ObserversMixin,at=t.inArray,ht=[].push,lt=[].pop,ct=[].splice,ut=[].shift,ft=[].slice,dt=[].unshift,pt=1,mt=\"start\",gt=\"end\",vt=\"horizontal\",xt=q.extend({nodeType:\"Element\",init:function(t){this._initOptions(t)},_initOptions:function(t){var e,n;t=t||{},e=t.transform,n=t.clip,e&&(t.transform=X.transform(e)),n&&!n.id&&(n.id=l()),this.options=new Z(t),this.options.addObserver(this)},transform:function(t){return it(t)?void this.options.set(\"transform\",X.transform(t)):this.options.get(\"transform\")},parentTransform:function(){for(var t,e,n=this;n.parent;)n=n.parent,t=n.transform(),t&&(e=t.matrix().multiplyCopy(e||V.unit()));return e?X.transform(e):void 0},currentTransform:function(t){var e,n,i=this.transform(),r=W(i);return it(t)||(t=this.parentTransform()),e=W(t),n=r&&e?e.multiplyCopy(r):r||e,n?X.transform(n):void 0},visible:function(t){return it(t)?(this.options.set(\"visible\",t),this):this.options.get(\"visible\")!==!1},clip:function(t){var e=this.options;return it(t)?(t&&!t.id&&(t.id=l()),e.set(\"clip\",t),this):e.get(\"clip\")},opacity:function(t){return it(t)?(this.options.set(\"opacity\",t),this):ot(this.options.get(\"opacity\"),1)},clippedBBox:function(t){var e,n=this._clippedBBox(t);return n?(e=this.clip(),e?X.Rect.intersect(n,e.bbox(t)):n):void 0},containsPoint:function(t,e){if(this.visible()){var n=this.currentTransform(e);return n&&(t=t.transformCopy(n.matrix().invert())),this._hasFill()&&this._containsPoint(t)||this._isOnPath&&this._hasStroke()&&this._isOnPath(t)}return!1},_hasFill:function(){var t=this.options.fill;return t&&!tt.isTransparent(t.color)},_hasStroke:function(){var t=this.options.stroke;return t&&t.width>0&&!tt.isTransparent(t.color)},_clippedBBox:function(t){return this.bbox(t)}});$(xt.fn,st),k=q.extend({init:function(t){t=t||[],this.length=0,this._splice(0,t.length,t)},elements:function(t){return t?(this._splice(0,this.length,t),this._change(),this):this.slice(0)},push:function(){var t=arguments,e=ht.apply(this,t);return this._add(t),e},slice:ft,pop:function(){var t=this.length,e=lt.apply(this);return t&&this._remove([e]),e},splice:function(t,e){var n=ft.call(arguments,2),i=this._splice(t,e,n);return this._change(),i},shift:function(){var t=this.length,e=ut.apply(this);return t&&this._remove([e]),e},unshift:function(){var t=arguments,e=dt.apply(this,t);return this._add(t),e},indexOf:function(t){var e,n,i=this;for(e=0,n=i.length;n>e;e++)if(i[e]===t)return e;return-1},_splice:function(t,e,n){var i=ct.apply(this,[t,e].concat(n));return this._clearObserver(i),this._setObserver(n),i},_add:function(t){this._setObserver(t),this._change()},_remove:function(t){this._clearObserver(t),this._change()},_setObserver:function(t){for(var e=0;t.length>e;e++)t[e].addObserver(this)},_clearObserver:function(t){for(var e=0;t.length>e;e++)t[e].removeObserver(this)},_change:function(){}}),$(k.fn,st),S=xt.extend({nodeType:\"Group\",init:function(t){xt.fn.init.call(this,t),this.children=[]},childrenChange:function(t,e,n){this.trigger(\"childrenChange\",{action:t,items:e,index:n})},append:function(){return et(this.children,arguments),this._reparent(arguments,this),this.childrenChange(\"add\",arguments),this},insert:function(t,e){return this.children.splice(t,0,e),e.parent=this,this.childrenChange(\"add\",[e],t),this},insertAt:function(t,e){return this.insert(e,t)},remove:function(t){var e=at(t,this.children);return e>=0&&(this.children.splice(e,1),t.parent=null,this.childrenChange(\"remove\",[t],e)),this},removeAt:function(t){if(t>=0&&this.children.length>t){var e=this.children[t];this.children.splice(t,1),e.parent=null,this.childrenChange(\"remove\",[e],t)}return this},clear:function(){var t=this.children;return this.children=[],this._reparent(t,null),this.childrenChange(\"remove\",t,0),this},bbox:function(t){return e(this.children,!0,this.currentTransform(t))},rawBBox:function(){return e(this.children,!1)},_clippedBBox:function(t){return n(this.children,this.currentTransform(t))},currentTransform:function(t){return xt.fn.currentTransform.call(this,t)||null},containsPoint:function(t,e){var n,i,r;if(this.visible())for(n=this.children,i=this.currentTransform(e),r=0;n.length>r;r++)if(n[r].containsPoint(t,i))return!0;return!1},_reparent:function(t,e){var n,i,r;for(n=0;t.length>n;n++)i=t[n],r=i.parent,r&&r!=this&&r.remove&&r.remove(i),i.parent=e}}),Q.mixins.Traversable.extend(S.fn,\"children\"),E=xt.extend({nodeType:\"Text\",init:function(t,e,n){xt.fn.init.call(this,n),this.content(t),this.position(e||new X.Point),this.options.font||(this.options.font=\"12px sans-serif\"),it(this.options.fill)||this.fill(\"#000\")},content:function(t){return it(t)?(this.options.set(\"content\",t),this):this.options.get(\"content\")},measure:function(){var t=tt.measureText(this.content(),{font:this.options.get(\"font\")});return t},rect:function(){var t=this.measure(),e=this.position().clone();return new X.Rect(e,[t.width,t.height])},bbox:function(t){var e=W(this.currentTransform(t));return this.rect().bbox(e)},rawBBox:function(){return this.rect().bbox()},_containsPoint:function(t){return this.rect().containsPoint(t)}}),Q.mixins.Paintable.extend(E.fn),o(E.fn,[\"position\"]),P=xt.extend({nodeType:\"Circle\",init:function(t,e){xt.fn.init.call(this,e),this.geometry(t||new X.Circle),it(this.options.stroke)||this.stroke(\"#000\")},_bbox:function(t){return this._geometry.bbox(t)},rawBBox:function(){return this._geometry.bbox()},_containsPoint:function(t){return this.geometry().containsPoint(t)},_isOnPath:function(t){return this.geometry()._isOnPath(t,this.options.stroke.width/2)}}),Q.mixins.Paintable.extend(P.fn),Q.mixins.Measurable.extend(P.fn),i(P.fn,[\"geometry\"]),A=xt.extend({nodeType:\"Arc\",init:function(t,e){xt.fn.init.call(this,e),this.geometry(t||new X.Arc),it(this.options.stroke)||this.stroke(\"#000\")},_bbox:function(t){return this._geometry.bbox(t)},rawBBox:function(){return this.geometry().bbox()},toPath:function(){var t,e=new R,n=this.geometry().curvePoints();if(n.length>0)for(e.moveTo(n[0].x,n[0].y),t=1;n.length>t;t+=3)e.curveTo(n[t],n[t+1],n[t+2]);return e},_containsPoint:function(t){return this.geometry().containsPoint(t)},_isOnPath:function(t){return this.geometry()._isOnPath(t,this.options.stroke.width/2)}}),Q.mixins.Paintable.extend(A.fn),Q.mixins.Measurable.extend(A.fn),i(A.fn,[\"geometry\"]),O=k.extend({_change:function(){this.geometryChange()}}),N=q.extend({init:function(t,e,n){this.anchor(t||new U),this.controlIn(e),this.controlOut(n)},bboxTo:function(t,e){var n,i=this.anchor().transformCopy(e),r=t.anchor().transformCopy(e);return n=this.controlOut()&&t.controlIn()?this._curveBoundingBox(i,this.controlOut().transformCopy(e),t.controlIn().transformCopy(e),r):this._lineBoundingBox(i,r)},_lineBoundingBox:function(t,e){return X.Rect.fromPoints(t,e)},_curveBoundingBox:function(t,e,n,i){var r=[t,e,n,i],o=this._curveExtremesFor(r,\"x\"),s=this._curveExtremesFor(r,\"y\"),a=nt([o.min,o.max,t.x,i.x]),h=nt([s.min,s.max,t.y,i.y]);return X.Rect.fromPoints(new U(a.min,h.min),new U(a.max,h.max))},_curveExtremesFor:function(t,e){var n=this._curveExtremes(t[0][e],t[1][e],t[2][e],t[3][e]);return{min:this._calculateCurveAt(n.min,e,t),max:this._calculateCurveAt(n.max,e,t)}},_calculateCurveAt:function(t,e,n){var i=1-t;return K(i,3)*n[0][e]+3*K(i,2)*t*n[1][e]+3*K(t,2)*i*n[2][e]+K(t,3)*n[3][e]},_curveExtremes:function(t,e,n,i){var r,o,s=t-3*e+3*n-i,a=-2*(t-2*e+n),h=t-e,l=J.sqrt(a*a-4*s*h),c=0,u=1;return 0===s?0!==a&&(c=u=-h/a):isNaN(l)||(c=(-a+l)/(2*s),u=(-a-l)/(2*s)),r=J.max(J.min(c,u),0),(0>r||r>1)&&(r=0),o=J.min(J.max(c,u),1),(o>1||0>o)&&(o=1),{min:r,max:o}},_intersectionsTo:function(t,e){var n;return n=this.controlOut()&&t.controlIn()?X.curveIntersectionsCount([this.anchor(),this.controlOut(),t.controlIn(),t.anchor()],e,this.bboxTo(t)):X.lineIntersectionsCount(this.anchor(),t.anchor(),e)},_isOnCurveTo:function(t,e,n,i){var r,o,s,a,h,l,c,u,f=this.bboxTo(t).expand(n,n);return f.containsPoint(e)?(r=this.anchor(),o=this.controlOut(),s=t.controlIn(),a=t.anchor(),\"start\"==i&&r.distanceTo(e)<=n?!X.isOutOfEndPoint(r,o,e):\"end\"==i&&a.distanceTo(e)<=n?!X.isOutOfEndPoint(a,s,e):(h=X.hasRootsInRange,l=[r,o,s,a],h(l,e,\"x\",\"y\",n)||h(l,e,\"y\",\"x\",n)?!0:(c=X.transform().rotate(45,e),u=[r.transformCopy(c),o.transformCopy(c),s.transformCopy(c),a.transformCopy(c)],h(u,e,\"x\",\"y\",n)||h(u,e,\"y\",\"x\",n)))):void 0},_isOnLineTo:function(t,e,n){var i=this.anchor(),r=t.anchor(),o=tt.deg(J.atan2(r.y-i.y,r.x-i.x)),s=new X.Rect([i.x,i.y-n/2],[i.distanceTo(r),n]);return s.containsPoint(e.transformCopy(X.transform().rotate(-o,i)))},_isOnPathTo:function(t,e,n,i){var r;return r=this.controlOut()&&t.controlIn()?this._isOnCurveTo(t,e,n/2,i):this._isOnLineTo(t,e,n)}}),o(N.fn,[\"anchor\",\"controlIn\",\"controlOut\"]),$(N.fn,st),R=xt.extend({nodeType:\"Path\",init:function(t){xt.fn.init.call(this,t),this.segments=new O,this.segments.addObserver(this),it(this.options.stroke)||(this.stroke(\"#000\"),it(this.options.stroke.lineJoin)||this.options.set(\"stroke.lineJoin\",\"miter\"))},moveTo:function(t,e){return this.suspend(),this.segments.elements([]),this.resume(),this.lineTo(t,e),this},lineTo:function(t,e){var n=it(e)?new U(t,e):t,i=new N(n);return this.segments.push(i),this},curveTo:function(t,e,n){var i,r;return this.segments.length>0&&(i=rt(this.segments),r=new N(n,e),this.suspend(),i.controlOut(t),this.resume(),this.segments.push(r)),this},arc:function(t,e,n,i,r){var o,s,a,h,l;return this.segments.length>0&&(o=rt(this.segments),s=o.anchor(),a=tt.rad(t),h=new U(s.x-n*J.cos(a),s.y-i*J.sin(a)),l=new X.Arc(h,{startAngle:t,endAngle:e,radiusX:n,radiusY:i,anticlockwise:r}),this._addArcSegments(l)),this},arcTo:function(t,e,n,i,r){var o,s,a;return this.segments.length>0&&(o=rt(this.segments),s=o.anchor(),a=X.Arc.fromPoints(s,t,e,n,i,r),this._addArcSegments(a)),this},_addArcSegments:function(t){var e,n;for(this.suspend(),e=t.curvePoints(),n=1;e.length>n;n+=3)this.curveTo(e[n],e[n+1],e[n+2]);this.resume(),this.geometryChange()},close:function(){return this.options.closed=!0,this.geometryChange(),this},rawBBox:function(){return this._bbox()},_containsPoint:function(t){var e,n,i,r=this.segments,o=r.length,s=0;for(i=1;o>i;i++)e=r[i-1],n=r[i],s+=e._intersectionsTo(n,t);return!this.options.closed&&r[0].anchor().equals(r[o-1].anchor())||(s+=X.lineIntersectionsCount(r[0].anchor(),r[o-1].anchor(),t)),s%2!==0},_isOnPath:function(t,e){var n,i=this.segments,r=i.length;if(e=e||this.options.stroke.width,r>1){if(i[0]._isOnPathTo(i[1],t,e,\"start\"))return!0;for(n=2;r-2>=n;n++)if(i[n-1]._isOnPathTo(i[n],t,e))return!0;if(i[r-2]._isOnPathTo(i[r-1],t,e,\"end\"))return!0}return!1},_bbox:function(t){var e,n,i,r,o=this.segments,s=o.length;if(1===s)n=o[0].anchor().transformCopy(t),e=new X.Rect(n,Y.ZERO);else if(s>0)for(i=1;s>i;i++)r=o[i-1].bboxTo(o[i],t),e=e?X.Rect.union(e,r):r;return e}}),Q.mixins.Paintable.extend(R.fn),Q.mixins.Measurable.extend(R.fn),R.fromRect=function(t,e){return new R(e).moveTo(t.topLeft()).lineTo(t.topRight()).lineTo(t.bottomRight()).lineTo(t.bottomLeft()).close()},R.fromPoints=function(t,e){var n,i,r;if(t){for(n=new R(e),i=0;t.length>i;i++)r=U.create(t[i]),r&&(0===i?n.moveTo(r):n.lineTo(r));return n}},R.fromArc=function(t,e){var n=new R(e),i=t.startAngle,r=t.pointAt(i);return n.moveTo(r.x,r.y),n.arc(i,t.endAngle,t.radiusX,t.radiusY,t.anticlockwise),n},z=xt.extend({nodeType:\"MultiPath\",init:function(t){xt.fn.init.call(this,t),this.paths=new O,this.paths.addObserver(this),it(this.options.stroke)||this.stroke(\"#000\")},moveTo:function(t,e){var n=new R;return n.moveTo(t,e),this.paths.push(n),this},lineTo:function(t,e){return this.paths.length>0&&rt(this.paths).lineTo(t,e),this},curveTo:function(t,e,n){return this.paths.length>0&&rt(this.paths).curveTo(t,e,n),this},arc:function(t,e,n,i,r){return this.paths.length>0&&rt(this.paths).arc(t,e,n,i,r),this},arcTo:function(t,e,n,i,r){return this.paths.length>0&&rt(this.paths).arcTo(t,e,n,i,r),this},close:function(){return this.paths.length>0&&rt(this.paths).close(),this},_bbox:function(t){return e(this.paths,!0,t)},rawBBox:function(){return e(this.paths,!1)},_containsPoint:function(t){var e,n=this.paths;for(e=0;n.length>e;e++)if(n[e]._containsPoint(t))return!0;return!1},_isOnPath:function(t){var e,n=this.paths,i=this.options.stroke.width;for(e=0;n.length>e;e++)if(n[e]._isOnPath(t,i))return!0;return!1},_clippedBBox:function(t){return n(this.paths,this.currentTransform(t))}}),Q.mixins.Paintable.extend(z.fn),Q.mixins.Measurable.extend(z.fn),M=xt.extend({nodeType:\"Image\",init:function(t,e,n){xt.fn.init.call(this,n),this.src(t),this.rect(e||new X.Rect)},src:function(t){return it(t)?(this.options.set(\"src\",t),this):this.options.get(\"src\")},bbox:function(t){var e=W(this.currentTransform(t));return this._rect.bbox(e)},rawBBox:function(){return this._rect.bbox()},_containsPoint:function(t){return this._rect.containsPoint(t)},_hasFill:function(){return this.src()}}),i(M.fn,[\"rect\"]),B=q.extend({init:function(t,e,n){this.options=new Z({offset:t,color:e,opacity:it(n)?n:1}),this.options.addObserver(this)}}),a(B.fn,[\"offset\",\"color\",\"opacity\"]),$(B.fn,st),B.create=function(t){if(it(t)){var e;return e=t instanceof B?t:t.length>1?new B(t[0],t[1],t[2]):new B(t.offset,t.color,t.opacity)}},D=k.extend({_change:function(){this.optionsChange({field:\"stops\"})}}),L=q.extend({nodeType:\"gradient\",init:function(t){this.stops=new D(this._createStops(t.stops)),this.stops.addObserver(this),this._userSpace=t.userSpace,this.id=l()},userSpace:function(t){return it(t)?(this._userSpace=t,this.optionsChange(),this):this._userSpace},_createStops:function(t){var e,n=[];for(t=t||[],e=0;t.length>e;e++)n.push(B.create(t[e]));return n},addStop:function(t,e,n){this.stops.push(new B(t,e,n))},removeStop:function(t){var e=this.stops.indexOf(t);e>=0&&this.stops.splice(e,1)}}),$(L.fn,st,{optionsChange:function(t){this.trigger(\"optionsChange\",{field:\"gradient\"+(t?\".\"+t.field:\"\"),value:this})},geometryChange:function(){this.optionsChange()}}),I=L.extend({init:function(t){t=t||{},L.fn.init.call(this,t),this.start(t.start||new U),this.end(t.end||new U(1,0))}}),o(I.fn,[\"start\",\"end\"]),F=L.extend({init:function(t){t=t||{},L.fn.init.call(this,t),this.center(t.center||new U),this._radius=it(t.radius)?t.radius:1,this._fallbackFill=t.fallbackFill},radius:function(t){return it(t)?(this._radius=t,this.geometryChange(),this):this._radius},fallbackFill:function(t){return it(t)?(this._fallbackFill=t,this.optionsChange(),this):this._fallbackFill}}),o(F.fn,[\"center\"]),G=xt.extend({nodeType:\"Rect\",init:function(t,e){xt.fn.init.call(this,e),this.geometry(t||new X.Rect),it(this.options.stroke)||this.stroke(\"#000\")},_bbox:function(t){return this._geometry.bbox(t)},rawBBox:function(){return this._geometry.bbox()},_containsPoint:function(t){return this._geometry.containsPoint(t)},_isOnPath:function(t){return this.geometry()._isOnPath(t,this.options.stroke.width/2)}}),Q.mixins.Paintable.extend(G.fn),Q.mixins.Measurable.extend(G.fn),i(G.fn,[\"geometry\"]),j=S.extend({init:function(t,e){S.fn.init.call(this,H.deepExtend({},this._defaults,e)),this._rect=t,this._fieldMap={}},_defaults:{alignContent:mt,justifyContent:mt,alignItems:mt,spacing:0,orientation:vt,lineSpacing:0,wrap:!0},rect:function(t){return t?(this._rect=t,this):this._rect},_initMap:function(){var t=this.options,e=this._fieldMap;t.orientation==vt?(e.sizeField=\"width\",e.groupsSizeField=\"height\",e.groupAxis=\"x\",e.groupsAxis=\"y\"):(e.sizeField=\"height\",e.groupsSizeField=\"width\",e.groupAxis=\"y\",e.groupsAxis=\"x\")},reflow:function(){var t,e,n,i,r,o,s,a,h,l,c,u,f,d,p,m,g,v,x,y,w,b,C,k,S,E;if(this._rect&&0!==this.children.length){for(this._initMap(),this.options.transform&&this.transform(null),t=this.options,e=this._fieldMap,n=this._rect,i=this._initGroups(),r=i.groups,o=i.groupsSize,s=e.sizeField,a=e.groupsSizeField,h=e.groupAxis,l=e.groupsAxis,c=_(o,n,t.alignContent,l,a),u=new U,f=new U,d=new X.Size,y=0;r.length>y;y++){for(v=r[y],u[h]=p=_(v.size,n,t.justifyContent,h,s),u[l]=c,d[s]=v.size,d[a]=v.lineSize,x=new X.Rect(u,d),w=0;v.bboxes.length>w;w++)g=v.elements[w],m=v.bboxes[w],f[h]=p,f[l]=_(m.size[a],x,t.alignItems,l,a),T(f,m,g),p+=m.size[s]+t.spacing;c+=v.lineSize+t.lineSpacing}!t.wrap&&v.size>n.size[s]&&(b=n.size[s]/x.size[s],C=x.topLeft().scale(b,b),k=x.size[a]*b,S=_(k,n,t.alignContent,l,a),E=X.transform(),\"x\"===h?E.translate(n.origin.x-C.x,S-C.y):E.translate(S-C.x,n.origin.y-C.y),E.scale(b,b),this.transform(E))}},_initGroups:function(){var t,e,n,i=this.options,r=this.children,o=i.lineSpacing,s=this._fieldMap.sizeField,a=-o,h=[],l=this._newGroup(),c=function(){h.push(l),a+=l.lineSize+o};for(n=0;r.length>n;n++)e=r[n],t=r[n].clippedBBox(),e.visible()&&t&&(i.wrap&&l.size+t.size[s]+i.spacing>this._rect.size[s]?0===l.bboxes.length?(this._addToGroup(l,t,e),c(),l=this._newGroup()):(c(),l=this._newGroup(),this._addToGroup(l,t,e)):this._addToGroup(l,t,e));return l.bboxes.length&&c(),{groups:h,groupsSize:a}},_addToGroup:function(t,e,n){t.size+=e.size[this._fieldMap.sizeField]+this.options.spacing,t.lineSize=Math.max(e.size[this._fieldMap.groupsSizeField],t.lineSize),t.bboxes.push(e),t.elements.push(n)},_newGroup:function(){return{lineSize:0,size:-this.options.spacing,bboxes:[],elements:[]}}}),$(Q,{align:c,Arc:A,Circle:P,Element:xt,ElementsArray:k,fit:v,Gradient:L,GradientStop:B,Group:S,Image:M,Layout:j,LinearGradient:I,MultiPath:z,Path:R,RadialGradient:F,Rect:G,Segment:N,stack:f,Text:E,vAlign:u,vStack:d,vWrap:m,wrap:p})}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/parser.min\",[\"drawing/shapes.min\"],t)}(function(){!function(t){function e(t){var e=[];return t.replace(m,function(t,n){e.push(parseFloat(n))}),e}function n(t,e,n){var i,r=e?0:1;for(i=0;t.length>i;i+=2)t.splice(i+r,0,n)}function i(t,e){return t&&e?e.scaleCopy(2).translate(-t.x,-t.y):void 0}function r(t,e,n){var i=1/3;return e=e.clone().scale(2/3),{controlOut:e.clone().translateWith(t.scaleCopy(i)),controlIn:e.translateWith(n.scaleCopy(i))}}var o=window.kendo,s=o.drawing,a=o.geometry,h=o.Class,l=a.Point,c=o.deepExtend,u=t.trim,f=o.util,d=f.last,p=/([a-df-z]{1})([^a-df-z]*)(z)?/gi,m=/[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g,g=\"m\",v=\"z\",x=h.extend({parse:function(t,n){var i,r=new s.MultiPath(n),o=new l;return t.replace(p,function(t,n,s,a){var h=n.toLowerCase(),l=h===n,c=e(u(s));if(h===g&&(l?(o.x+=c[0],o.y+=c[1]):(o.x=c[0],o.y=c[1]),r.moveTo(o.x,o.y),c.length>2&&(h=\"l\",c.splice(0,2))),y[h])y[h](r,{parameters:c,position:o,isRelative:l,previousCommand:i}),a&&a.toLowerCase()===v&&r.close();else if(h!==g)throw Error(\"Error while parsing SVG path. Unsupported command: \"+h);i=h}),r}}),y={l:function(t,e){var n,i,r=e.parameters,o=e.position;for(n=0;r.length>n;n+=2)i=new l(r[n],r[n+1]),e.isRelative&&i.translateWith(o),t.lineTo(i.x,i.y),o.x=i.x,o.y=i.y},c:function(t,e){var n,i,r,o,s=e.parameters,a=e.position;for(o=0;s.length>o;o+=6)n=new l(s[o],s[o+1]),i=new l(s[o+2],s[o+3]),r=new l(s[o+4],s[o+5]),e.isRelative&&(i.translateWith(a),n.translateWith(a),r.translateWith(a)),t.curveTo(n,i,r),a.x=r.x,a.y=r.y},v:function(t,e){var i=e.isRelative?0:e.position.x;n(e.parameters,!0,i),this.l(t,e)},h:function(t,e){var i=e.isRelative?0:e.position.y;n(e.parameters,!1,i),this.l(t,e)},a:function(t,e){var n,i,r,o,s,a,h=e.parameters,c=e.position;for(n=0;h.length>n;n+=7)i=h[n],r=h[n+1],o=h[n+3],s=h[n+4],a=new l(h[n+5],h[n+6]),e.isRelative&&a.translateWith(c),t.arcTo(a,i,r,o,s),c.x=a.x,c.y=a.y},s:function(t,e){var n,r,o,s,a,h=e.parameters,c=e.position,u=e.previousCommand;for(\"s\"!=u&&\"c\"!=u||(s=d(d(t.paths).segments).controlIn()),a=0;h.length>a;a+=4)o=new l(h[a],h[a+1]),r=new l(h[a+2],h[a+3]),e.isRelative&&(o.translateWith(c),r.translateWith(c)),n=s?i(s,c):c.clone(),s=o,t.curveTo(n,o,r),c.x=r.x,c.y=r.y},q:function(t,e){var n,i,o,s,a=e.parameters,h=e.position;for(s=0;a.length>s;s+=4)o=new l(a[s],a[s+1]),i=new l(a[s+2],a[s+3]),e.isRelative&&(o.translateWith(h),i.translateWith(h)),n=r(h,o,i),t.curveTo(n.controlOut,n.controlIn,i),h.x=i.x,h.y=i.y},t:function(t,e){var n,o,s,a,h,c=e.parameters,u=e.position,f=e.previousCommand;for(\"q\"!=f&&\"t\"!=f||(a=d(d(t.paths).segments),o=a.controlIn().clone().translateWith(u.scaleCopy(-1/3)).scale(1.5)),h=0;c.length>h;h+=2)s=new l(c[h],c[h+1]),e.isRelative&&s.translateWith(u),o=o?i(o,u):u.clone(),n=r(u,o,s),t.curveTo(n.controlOut,n.controlIn,s),u.x=s.x,u.y=s.y}};x.current=new x,s.Path.parse=function(t,e){return x.current.parse(t,e)},c(s,{PathParser:x})}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/search.min\",[\"drawing/shapes.min\"],t)}(function(){!function(t){function e(t,e){return e._zIndex>t._zIndex?1:t._zIndex>e._zIndex?-1:0}var n=window.kendo,i=n.drawing,r=n.geometry,o=n.Class,s=r.Rect,a=n.deepExtend,h=t.isArray,l=t.inArray,c=Math,u=1e4,f=75,d=o.extend({init:function(){this.shapes=[]},_add:function(t,e){this.shapes.push({bbox:e,shape:t}),t._quadNode=this},pointShapes:function(t){var e,n=this.shapes,i=n.length,r=[];for(e=0;i>e;e++)n[e].bbox.containsPoint(t)&&r.push(n[e].shape);return r},insert:function(t,e){this._add(t,e)},remove:function(t){var e,n=this.shapes,i=n.length;for(e=0;i>e;e++)if(n[e].shape===t){n.splice(e,1);break}}}),p=d.extend({init:function(t){d.fn.init.call(this),this.children=[],this.rect=t},inBounds:function(t){var e=this.rect,n=e.bottomRight(),i=t.bottomRight(),r=t.origin.x>=e.origin.x&&t.origin.y>=e.origin.y&&n.x>=i.x&&n.y>=i.y;return r},pointShapes:function(t){var e,n=this.children,i=n.length,r=d.fn.pointShapes.call(this,t);for(e=0;i>e;e++)r=r.concat(n[e].pointShapes(t));return r},insert:function(t,e){var n,i=!1,r=this.children;if(this.inBounds(e)){if(4>this.shapes.length)this._add(t,e);else{for(r.length||this._initChildren(),n=0;r.length>n;n++)if(r[n].insert(t,e)){i=!0;break}i||this._add(t,e)}i=!0}return i},_initChildren:function(){var t=this.rect,e=this.children,n=t.center(),i=t.width()/2,r=t.height()/2;e.push(new p(new s([t.origin.x,t.origin.y],[i,r])),new p(new s([n.x,t.origin.y],[i,r])),new p(new s([t.origin.x,n.y],[i,r])),new p(new s([n.x,n.y],[i,r])))}}),m=o.extend({ROOT_SIZE:1e3,init:function(){this.initRoots()},initRoots:function(){this.rootMap={},this.root=new d,this.rootElements=[]},clear:function(){var t,e=this,n=e.rootElements;for(t=0;n.length>t;t++)this.remove(n[t]);this.initRoots()},pointShape:function(t){var n,i=this.ROOT_SIZE,r=this.root.pointShapes(t),o=(this.rootMap[c.floor(t.x/i)]||{})[c.floor(t.y/i)];for(o&&(r=r.concat(o.pointShapes(t))),this.assignZindex(r),r.sort(e),n=0;r.length>n;n++)if(r[n].containsPoint(t))return r[n]},assignZindex:function(t){var e,n,i,r,o;for(o=0;t.length>o;o++){for(e=t[o],i=0,n=c.pow(u,f),r=[];e;)r.push(e),e=e.parent;for(;r.length;)e=r.pop(),i+=(l(e,e.parent?e.parent.children:this.rootElements)+1)*n,n/=u;t[o]._zIndex=i}},optionsChange:function(t){\"transform\"!=t.field&&\"stroke.width\"!=t.field||this.bboxChange(t.element)},geometryChange:function(t){this.bboxChange(t.element)},bboxChange:function(t){if(\"Group\"===t.nodeType)for(var e=0;t.children.length>e;e++)this.bboxChange(t.children[e]);else t._quadNode&&t._quadNode.remove(t),this._insertShape(t)},add:function(t){var e=h(t)?t.slice(0):[t];this.rootElements.push.apply(this.rootElements,e),this._insert(e)},childrenChange:function(t){if(\"remove\"==t.action)for(var e=0;t.items.length>e;e++)this.remove(t.items[e]);else this._insert(Array.prototype.slice.call(t.items,0))},_insert:function(t){for(var e;t.length>0;)e=t.pop(),e.addObserver(this),\"Group\"==e.nodeType?t.push.apply(t,e.children):this._insertShape(e)},_insertShape:function(t){var e,n,i,r,o=t.bbox();o&&(e=this.ROOT_SIZE,n=this.getSectors(o),i=n[0][0],r=n[1][0],this.inRoot(n)?this.root.insert(t,o):(this.rootMap[i]||(this.rootMap[i]={}),this.rootMap[i][r]||(this.rootMap[i][r]=new p(new s([i*e,r*e],[e,e]))),this.rootMap[i][r].insert(t,o)))},remove:function(t){var e,n;if(t.removeObserver(this),\"Group\"==t.nodeType)for(e=t.children,n=0;e.length>n;n++)this.remove(e[n]);else t._quadNode&&(t._quadNode.remove(t),delete t._quadNode)},inRoot:function(t){return t[0].length>1||t[1].length>1},getSectors:function(t){var e,n,i=this.ROOT_SIZE,r=t.bottomRight(),o=c.floor(r.x/i),s=c.floor(r.y/i),a=[[],[]];for(e=c.floor(t.origin.x/i);o>=e;e++)a[0].push(e);for(n=c.floor(t.origin.y/i);s>=n;n++)a[1].push(n);return a}});a(i,{ShapesQuadTree:m,QuadNode:p})}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/svg.min\",[\"drawing/shapes.min\",\"util/main.min\"],t)}(function(){!function(t){function e(t){var e,n,i,r;try{e=t.getScreenCTM?t.getScreenCTM():null}catch(o){}e&&(n=-e.e%1,i=-e.f%1,r=t.style,0===n&&0===i||(r.left=n+\"px\",r.top=i+\"px\"))}function n(){var t=document.getElementsByTagName(\"base\")[0],e=\"\",n=document.location.href,i=n.indexOf(\"#\");return t&&!c.support.browser.msie&&(-1!==i&&(n=n.substring(0,i)),e=n),e}function i(t){return\"url(\"+n()+\"#\"+t+\")\"}function r(t){var e,n,i,r=new M,o=t.clippedBBox();return o&&(e=o.getOrigin(),n=new d.Group,n.transform(f.transform().translate(-e.x,-e.y)),n.children.push(t),t=n),r.load([t]),i=\"<?xml version='1.0' ?><svg xmlns='\"+A+\"' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1'>\"+r.render()+\"</svg>\",r.destroy(),i}function o(e,n){var i=r(e);return n&&n.raw||(i=\"data:image/svg+xml;base64,\"+m.encodeBase64(i)),t.Deferred().resolve(i).promise()}function s(t,e){return\"clip\"==t||\"fill\"==t&&(!e||e.nodeType==T)}function a(t){if(!t||!t.indexOf||t.indexOf(\"&\")<0)return t;var e=a._element;return e.innerHTML=t,e.textContent||e.innerText}var h,l=document,c=window.kendo,u=c.deepExtend,f=c.geometry,d=c.drawing,p=d.BaseNode,m=c.util,g=m.defined,v=m.isTransparent,x=m.renderAttr,y=m.renderAllAttr,w=m.renderTemplate,b=t.inArray,_=\"butt\",C=d.DASH_ARRAYS,T=\"gradient\",k=\"none\",S=\".kendo\",E=\"solid\",P=\" \",A=\"http://www.w3.org/2000/svg\",O=\"transform\",N=\"undefined\",R=d.Surface.extend({init:function(t,n){d.Surface.fn.init.call(this,t,n),this._root=new M(this.options),Q(this.element[0],this._template(this)),this._rootElement=this.element[0].firstElementChild,e(this._rootElement),this._root.attachTo(this._rootElement),this.element.on(\"click\"+S,this._click),this.element.on(\"mouseover\"+S,this._mouseenter),this.element.on(\"mouseout\"+S,this._mouseleave),\nthis.element.on(\"mousemove\"+S,this._mousemove),this.resize()},type:\"svg\",destroy:function(){this._root&&(this._root.destroy(),this._root=null,this._rootElement=null,this.element.off(S)),d.Surface.fn.destroy.call(this)},translate:function(t){var e=c.format(\"{0} {1} {2} {3}\",Math.round(t.x),Math.round(t.y),this._size.width,this._size.height);this._offset=t,this._rootElement.setAttribute(\"viewBox\",e)},draw:function(t){d.Surface.fn.draw.call(this,t),this._root.load([t])},clear:function(){d.Surface.fn.clear.call(this),this._root.clear()},svg:function(){return\"<?xml version='1.0' ?>\"+this._template(this)},exportVisual:function(){var t,e=this._visual,n=this._offset;return n&&(t=new d.Group,t.children.push(e),t.transform(f.transform().translate(-n.x,-n.y)),e=t),e},_resize:function(){this._offset&&this.translate(this._offset)},_template:w(\"<svg style='width: 100%; height: 100%; overflow: hidden;' xmlns='\"+A+\"' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1'>#= d._root.render() #</svg>\")}),z=p.extend({init:function(t){p.fn.init.call(this,t),this.definitions={}},destroy:function(){this.element&&(this.element._kendoNode=null,this.element=null),this.clearDefinitions(),p.fn.destroy.call(this)},load:function(t,e){var n,i,r,o,s=this,a=s.element;for(o=0;t.length>o;o++)i=t[o],r=i.children,n=new W[i.nodeType](i),g(e)?s.insertAt(n,e):s.append(n),n.createDefinitions(),r&&r.length>0&&n.load(r),a&&n.attachTo(a,e)},root:function(){for(var t=this;t.parent;)t=t.parent;return t},attachTo:function(t,e){var n,i=l.createElement(\"div\");Q(i,\"<svg xmlns='\"+A+\"' version='1.1'>\"+this.render()+\"</svg>\"),n=i.firstChild.firstChild,n&&(g(e)?t.insertBefore(n,t.childNodes[e]||null):t.appendChild(n),this.setElement(n))},setElement:function(t){var e,n,i=this.childNodes;for(this.element&&(this.element._kendoNode=null),this.element=t,this.element._kendoNode=this,n=0;i.length>n;n++)e=t.childNodes[n],i[n].setElement(e)},clear:function(){var t,e;for(this.clearDefinitions(),this.element&&(this.element.innerHTML=\"\"),t=this.childNodes,e=0;t.length>e;e++)t[e].destroy();this.childNodes=[]},removeSelf:function(){if(this.element){var t=this.element.parentNode;t&&t.removeChild(this.element),this.element=null}p.fn.removeSelf.call(this)},template:w(\"#= d.renderChildren() #\"),render:function(){return this.template(this)},renderChildren:function(){var t,e=this.childNodes,n=\"\";for(t=0;e.length>t;t++)n+=e[t].render();return n},optionsChange:function(t){var e=t.field,n=t.value;\"visible\"===e?this.css(\"display\",n?\"\":k):h[e]&&s(e,n)?this.updateDefinition(e,n):\"opacity\"===e&&this.attr(\"opacity\",n),p.fn.optionsChange.call(this,t)},attr:function(t,e){this.element&&this.element.setAttribute(t,e)},allAttr:function(t){for(var e=0;t.length>e;e++)this.attr(t[e][0],t[e][1])},css:function(t,e){this.element&&(this.element.style[t]=e)},allCss:function(t){for(var e=0;t.length>e;e++)this.css(t[e][0],t[e][1])},removeAttr:function(t){this.element&&this.element.removeAttribute(t)},mapTransform:function(t){var e=[];return t&&e.push([O,\"matrix(\"+t.matrix().toString(6)+\")\"]),e},renderTransform:function(){return y(this.mapTransform(this.srcElement.transform()))},transformChange:function(t){t?this.allAttr(this.mapTransform(t)):this.removeAttr(O)},mapStyle:function(){var t=this.srcElement.options,e=[[\"cursor\",t.cursor]];return t.visible===!1&&e.push([\"display\",k]),e},renderStyle:function(){return x(\"style\",m.renderStyle(this.mapStyle(!0)))},renderOpacity:function(){return x(\"opacity\",this.srcElement.options.opacity)},createDefinitions:function(){var t,e,n,i,r=this.srcElement,o=this.definitions;if(r){n=r.options;for(e in h)t=n.get(e),t&&s(e,t)&&(o[e]=t,i=!0);i&&this.definitionChange({action:\"add\",definitions:o})}},definitionChange:function(t){this.parent&&this.parent.definitionChange(t)},updateDefinition:function(t,e){var n=this.definitions,r=n[t],o=h[t],s={};r&&(s[t]=r,this.definitionChange({action:\"remove\",definitions:s}),delete n[t]),e?(s[t]=e,this.definitionChange({action:\"add\",definitions:s}),n[t]=e,this.attr(o,i(e.id))):r&&this.removeAttr(o)},clearDefinitions:function(){var t,e=this.definitions;for(t in e){this.definitionChange({action:\"remove\",definitions:e}),this.definitions={};break}},renderDefinitions:function(){return y(this.mapDefinitions())},mapDefinitions:function(){var t,e=this.definitions,n=[];for(t in e)n.push([h[t],i(e[t].id)]);return n}}),M=z.extend({init:function(t){z.fn.init.call(this),this.options=t,this.defs=new B},attachTo:function(t){this.element=t,this.defs.attachTo(t.firstElementChild)},clear:function(){p.fn.clear.call(this)},template:w(\"#=d.defs.render()##= d.renderChildren() #\"),definitionChange:function(t){this.defs.definitionChange(t)}}),B=z.extend({init:function(){z.fn.init.call(this),this.definitionMap={}},attachTo:function(t){this.element=t},template:w(\"<defs>#= d.renderChildren()#</defs>\"),definitionChange:function(t){var e=t.definitions,n=t.action;\"add\"==n?this.addDefinitions(e):\"remove\"==n&&this.removeDefinitions(e)},createDefinition:function(t,e){var n;return\"clip\"==t?n=D:\"fill\"==t&&(e instanceof d.LinearGradient?n=U:e instanceof d.RadialGradient&&(n=Y)),new n(e)},addDefinitions:function(t){for(var e in t)this.addDefinition(e,t[e])},addDefinition:function(t,e){var n,i=this.definitionMap,r=e.id,o=this.element,s=i[r];s?s.count++:(n=this.createDefinition(t,e),i[r]={element:n,count:1},this.append(n),o&&n.attachTo(this.element))},removeDefinitions:function(t){for(var e in t)this.removeDefinition(t[e])},removeDefinition:function(t){var e=this.definitionMap,n=t.id,i=e[n];i&&(i.count--,0===i.count&&(this.remove(b(i.element,this.childNodes),1),delete e[n]))}}),D=z.extend({init:function(t){z.fn.init.call(this),this.srcElement=t,this.id=t.id,this.load([t])},template:w(\"<clipPath id='#=d.id#'>#= d.renderChildren()#</clipPath>\")}),L=z.extend({template:w(\"<g#= d.renderTransform() + d.renderStyle() + d.renderOpacity() + d.renderDefinitions()#>#= d.renderChildren() #</g>\"),optionsChange:function(t){t.field==O&&this.transformChange(t.value),z.fn.optionsChange.call(this,t)}}),I=z.extend({geometryChange:function(){this.attr(\"d\",this.renderData()),this.invalidate()},optionsChange:function(t){switch(t.field){case\"fill\":t.value?this.allAttr(this.mapFill(t.value)):this.removeAttr(\"fill\");break;case\"fill.color\":this.allAttr(this.mapFill({color:t.value}));break;case\"stroke\":t.value?this.allAttr(this.mapStroke(t.value)):this.removeAttr(\"stroke\");break;case O:this.transformChange(t.value);break;default:var e=this.attributeMap[t.field];e&&this.attr(e,t.value)}z.fn.optionsChange.call(this,t)},attributeMap:{\"fill.opacity\":\"fill-opacity\",\"stroke.color\":\"stroke\",\"stroke.width\":\"stroke-width\",\"stroke.opacity\":\"stroke-opacity\"},content:function(){this.element&&(this.element.textContent=this.srcElement.content())},renderData:function(){return this.printPath(this.srcElement)},printPath:function(t){var e,n,i,r,o,s=t.segments,a=s.length;if(a>0){for(e=[],o=1;a>o;o++)i=this.segmentType(s[o-1],s[o]),i!==r&&(r=i,e.push(i)),e.push(\"L\"===i?this.printPoints(s[o].anchor()):this.printPoints(s[o-1].controlOut(),s[o].controlIn(),s[o].anchor()));return n=\"M\"+this.printPoints(s[0].anchor())+P+e.join(P),t.options.closed&&(n+=\"Z\"),n}},printPoints:function(){var t,e=arguments,n=e.length,i=[];for(t=0;n>t;t++)i.push(e[t].toString(3));return i.join(P)},segmentType:function(t,e){return t.controlOut()&&e.controlIn()?\"C\":\"L\"},mapStroke:function(t){var e=[];return t&&!v(t.color)?(e.push([\"stroke\",t.color]),e.push([\"stroke-width\",t.width]),e.push([\"stroke-linecap\",this.renderLinecap(t)]),e.push([\"stroke-linejoin\",t.lineJoin]),g(t.opacity)&&e.push([\"stroke-opacity\",t.opacity]),g(t.dashType)&&e.push([\"stroke-dasharray\",this.renderDashType(t)])):e.push([\"stroke\",k]),e},renderStroke:function(){return y(this.mapStroke(this.srcElement.options.stroke))},renderDashType:function(t){var e,n,i,r=t.width||1,o=t.dashType;if(o&&o!=E){for(e=C[o.toLowerCase()],n=[],i=0;e.length>i;i++)n.push(e[i]*r);return n.join(\" \")}},renderLinecap:function(t){var e=t.dashType,n=t.lineCap;return e&&e!=E?_:n},mapFill:function(t){var e=[];return t&&t.nodeType==T||(t&&!v(t.color)?(e.push([\"fill\",t.color]),g(t.opacity)&&e.push([\"fill-opacity\",t.opacity])):e.push([\"fill\",k])),e},renderFill:function(){return y(this.mapFill(this.srcElement.options.fill))},template:w(\"<path #= d.renderStyle() # #= d.renderOpacity() # #= kendo.util.renderAttr('d', d.renderData()) # #= d.renderStroke() # #= d.renderFill() # #= d.renderDefinitions() # #= d.renderTransform() #></path>\")}),F=I.extend({renderData:function(){return this.printPath(this.srcElement.toPath())}}),G=I.extend({renderData:function(){var t,e,n=this.srcElement.paths;if(n.length>0){for(t=[],e=0;n.length>e;e++)t.push(this.printPath(n[e]));return t.join(\" \")}}}),j=I.extend({geometryChange:function(){var t=this.center();this.attr(\"cx\",t.x),this.attr(\"cy\",t.y),this.attr(\"r\",this.radius()),this.invalidate()},center:function(){return this.srcElement.geometry().center},radius:function(){return this.srcElement.geometry().radius},template:w(\"<circle #= d.renderStyle() # #= d.renderOpacity() # cx='#= d.center().x #' cy='#= d.center().y #' r='#= d.radius() #' #= d.renderStroke() # #= d.renderFill() # #= d.renderDefinitions() # #= d.renderTransform() # ></circle>\")}),H=I.extend({geometryChange:function(){var t=this.pos();this.attr(\"x\",t.x),this.attr(\"y\",t.y),this.invalidate()},optionsChange:function(t){\"font\"===t.field?(this.attr(\"style\",m.renderStyle(this.mapStyle())),this.geometryChange()):\"content\"===t.field&&I.fn.content.call(this,this.srcElement.content()),I.fn.optionsChange.call(this,t)},mapStyle:function(t){var e=I.fn.mapStyle.call(this,t),n=this.srcElement.options.font;return t&&(n=c.htmlEncode(n)),e.push([\"font\",n]),e},pos:function(){var t=this.srcElement.position(),e=this.srcElement.measure();return t.clone().setY(t.y+e.baseline)},renderContent:function(){var t=this.srcElement.content();return t=a(t),t=c.htmlEncode(t)},template:w(\"<text #= d.renderStyle() # #= d.renderOpacity() # x='#= this.pos().x #' y='#= this.pos().y #' #= d.renderStroke() # #= d.renderTransform() # #= d.renderDefinitions() # #= d.renderFill() #>#= d.renderContent() #</text>\")}),q=I.extend({geometryChange:function(){this.allAttr(this.mapPosition()),this.invalidate()},optionsChange:function(t){\"src\"===t.field&&this.allAttr(this.mapSource()),I.fn.optionsChange.call(this,t)},mapPosition:function(){var t=this.srcElement.rect(),e=t.topLeft();return[[\"x\",e.x],[\"y\",e.y],[\"width\",t.width()+\"px\"],[\"height\",t.height()+\"px\"]]},renderPosition:function(){return y(this.mapPosition())},mapSource:function(t){var e=this.srcElement.src();return t&&(e=c.htmlEncode(e)),[[\"xlink:href\",e]]},renderSource:function(){return y(this.mapSource(!0))},template:w(\"<image preserveAspectRatio='none' #= d.renderStyle() # #= d.renderTransform()# #= d.renderOpacity() # #= d.renderPosition() # #= d.renderSource() # #= d.renderDefinitions()#></image>\")}),$=z.extend({template:w(\"<stop #=d.renderOffset()# #=d.renderStyle()# />\"),renderOffset:function(){return x(\"offset\",this.srcElement.offset())},mapStyle:function(){var t=this.srcElement;return[[\"stop-color\",t.color()],[\"stop-opacity\",t.opacity()]]},optionsChange:function(t){\"offset\"==t.field?this.attr(t.field,t.value):\"color\"!=t.field&&\"opacity\"!=t.field||this.css(\"stop-\"+t.field,t.value)}}),X=z.extend({init:function(t){z.fn.init.call(this,t),this.id=t.id,this.loadStops()},loadStops:function(){var t,e,n=this.srcElement,i=n.stops,r=this.element;for(e=0;i.length>e;e++)t=new $(i[e]),this.append(t),r&&t.attachTo(r)},optionsChange:function(t){\"gradient.stops\"==t.field?(p.fn.clear.call(this),this.loadStops()):t.field==T&&this.allAttr(this.mapCoordinates())},renderCoordinates:function(){return y(this.mapCoordinates())},mapSpace:function(){return[\"gradientUnits\",this.srcElement.userSpace()?\"userSpaceOnUse\":\"objectBoundingBox\"]}}),U=X.extend({template:w(\"<linearGradient id='#=d.id#' #=d.renderCoordinates()#>#= d.renderChildren()#</linearGradient>\"),mapCoordinates:function(){var t=this.srcElement,e=t.start(),n=t.end(),i=[[\"x1\",e.x],[\"y1\",e.y],[\"x2\",n.x],[\"y2\",n.y],this.mapSpace()];return i}}),Y=X.extend({template:w(\"<radialGradient id='#=d.id#' #=d.renderCoordinates()#>#= d.renderChildren()#</radialGradient>\"),mapCoordinates:function(){var t=this.srcElement,e=t.center(),n=t.radius(),i=[[\"cx\",e.x],[\"cy\",e.y],[\"r\",n],this.mapSpace()];return i}}),V=I.extend({geometryChange:function(){var t=this.srcElement.geometry();this.attr(\"x\",t.origin.x),this.attr(\"y\",t.origin.y),this.attr(\"width\",t.size.width),this.attr(\"height\",t.size.height),this.invalidate()},size:function(){return this.srcElement.geometry().size},origin:function(){return this.srcElement.geometry().origin},template:w(\"<rect #= d.renderStyle() # #= d.renderOpacity() # x='#= d.origin().x #' y='#= d.origin().y #' width='#= d.size().width #' height='#= d.size().height #'#= d.renderStroke() # #= d.renderFill() # #= d.renderDefinitions() # #= d.renderTransform() # />\")}),W={Group:L,Text:H,Path:I,MultiPath:G,Circle:j,Arc:F,Image:q,Rect:V},Q=function(t,e){t.innerHTML=e};!function(){var t=\"<svg xmlns='\"+A+\"'></svg>\",e=l.createElement(\"div\"),n=typeof DOMParser!=N;e.innerHTML=t,n&&e.firstChild.namespaceURI!=A&&(Q=function(t,e){var n=new DOMParser,i=n.parseFromString(e,\"text/xml\"),r=l.adoptNode(i.documentElement);t.innerHTML=\"\",t.appendChild(r)})}(),a._element=document.createElement(\"span\"),h={clip:\"clip-path\",fill:\"fill\"},c.support.svg=function(){return l.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")}(),c.support.svg&&d.SurfaceFactory.current.register(\"svg\",R,10),u(d,{exportSVG:o,svg:{ArcNode:F,CircleNode:j,ClipNode:D,DefinitionNode:B,GradientStopNode:$,GroupNode:L,ImageNode:q,LinearGradientNode:U,MultiPathNode:G,Node:z,PathNode:I,RadialGradientNode:Y,RectNode:V,RootNode:M,Surface:R,TextNode:H,_exportGroup:r}})}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/canvas.min\",[\"drawing/search.min\",\"kendo.color.min\"],t)}(function(){!function(t){function e(e,n){var i,r,o,s,a,h,l={width:\"800px\",height:\"600px\",cors:\"Anonymous\"},c=e.clippedBBox();return c&&(i=c.getOrigin(),r=new b.Group,r.transform(w.transform().translate(-i.x,-i.y)),r.children.push(e),e=r,o=c.getSize(),l.width=o.width+\"px\",l.height=o.height+\"px\"),n=p(l,n),s=t(\"<div />\").css({display:\"none\",width:n.width,height:n.height}).appendTo(document.body),a=new A(s,n),a.suspendTracking(),a.draw(e),h=a.image(),h.always(function(){a.destroy(),s.remove()}),h}function n(t,e){var n,i,r;for(r=0;e.length>r;r++)i=e[r],n=d.parseColor(i.color()),n.a*=i.opacity(),t.addColorStop(i.offset(),n.toCssRgba())}var i,r,o,s,a,h,l,c,u,f=document,d=window.kendo,p=d.deepExtend,m=d.util,g=m.defined,v=m.isTransparent,x=m.renderTemplate,y=m.valueOrDefault,w=d.geometry,b=d.drawing,_=b.BaseNode,C=t.proxy,T=\"butt\",k=b.DASH_ARRAYS,S=1e3/60,E=\"solid\",P=\".kendo\",A=b.Surface.extend({init:function(e,n){b.Surface.fn.init.call(this,e,n),this.element[0].innerHTML=this._template(this);var r=this.element[0].firstElementChild;r.width=t(e).width(),r.height=t(e).height(),this._rootElement=r,this._root=new i(r)},destroy:function(){b.Surface.fn.destroy.call(this),this._root&&(this._root.destroy(),this._root=null),this._searchTree&&(this._searchTree.clear(),delete this._searchTree),this.element.off(P)},type:\"canvas\",draw:function(t){b.Surface.fn.draw.call(this,t),this._root.load([t],void 0,this.options.cors),this._searchTree&&this._searchTree.add([t])},clear:function(){b.Surface.fn.clear.call(this),this._root.clear(),this._searchTree&&this._searchTree.clear()},eventTarget:function(t){var e,n;return this._searchTree?(e=this._surfacePoint(t),n=this._searchTree.pointShape(e)):void 0},image:function(){var e,n=this._root,i=this._rootElement,r=[];return n.traverse(function(t){t.loading&&r.push(t.loading)}),e=t.Deferred(),t.when.apply(t,r).done(function(){n._invalidate();try{var t=i.toDataURL();e.resolve(t)}catch(r){e.reject(r)}}).fail(function(t){e.reject(t)}),e.promise()},suspendTracking:function(){b.Surface.fn.suspendTracking.call(this),this._searchTree&&(this._searchTree.clear(),delete this._searchTree)},resumeTracking:function(){var t,e,n;if(b.Surface.fn.resumeTracking.call(this),!this._searchTree){for(this._searchTree=new b.ShapesQuadTree,t=this._root.childNodes,e=[],n=0;t.length>n;n++)e.push(t[n].srcElement);this._searchTree.add(e)}},_resize:function(){this._rootElement.width=this._size.width,this._rootElement.height=this._size.height,this._root.invalidate()},_template:x(\"<canvas style='width: 100%; height: 100%;'></canvas>\"),_enableTracking:function(){this._searchTree=new b.ShapesQuadTree,this._mouseTrackHandler=C(this._trackMouse,this),this.element.on(\"click\"+P,this._mouseTrackHandler),this.element.on(\"mousemove\"+P,this._mouseTrackHandler),b.Surface.fn._enableTracking.call(this)},_trackMouse:function(t){var e,n;this._suspendedTracking||(e=this.eventTarget(t),\"click\"!=t.type?(n=this._currentShape,n&&n!==e&&this.trigger(\"mouseleave\",{element:n,originalEvent:t,type:\"mouseleave\"}),e&&n!==e&&this.trigger(\"mouseenter\",{element:e,originalEvent:t,type:\"mouseenter\"}),this.trigger(\"mousemove\",{element:e,originalEvent:t,type:\"mousemove\"}),this._currentShape=e):e&&this.trigger(\"click\",{element:e,originalEvent:t,type:\"click\"}))}}),O=_.extend({init:function(t){_.fn.init.call(this,t),t&&this.initClip()},initClip:function(){var t=this.srcElement.clip();t&&(this.clip=t,t.addObserver(this))},clear:function(){this.srcElement&&this.srcElement.removeObserver(this),this.clearClip(),_.fn.clear.call(this)},clearClip:function(){this.clip&&(this.clip.removeObserver(this),delete this.clip)},setClip:function(t){this.clip&&(t.beginPath(),r.fn.renderPoints(t,this.clip),t.clip())},optionsChange:function(t){\"clip\"==t.field&&(this.clearClip(),this.initClip()),_.fn.optionsChange.call(this,t)},setTransform:function(t){if(this.srcElement){var e=this.srcElement.transform();e&&t.transform.apply(t,e.matrix().toArray(6))}},loadElements:function(t,e,n){var i,r,o,s,a=this;for(s=0;t.length>s;s++)r=t[s],o=r.children,i=new u[r.nodeType](r,n),o&&o.length>0&&i.load(o,e,n),g(e)?a.insertAt(i,e):a.append(i)},load:function(t,e,n){this.loadElements(t,e,n),this.invalidate()},setOpacity:function(t){if(this.srcElement){var e=this.srcElement.opacity();g(e)&&this.globalAlpha(t,e)}},globalAlpha:function(t,e){e&&t.globalAlpha&&(e*=t.globalAlpha),t.globalAlpha=e},visible:function(){var t=this.srcElement;return!t||t&&t.options.visible!==!1}}),N=O.extend({renderTo:function(t){var e,n,i;if(this.visible()){for(t.save(),this.setTransform(t),this.setClip(t),this.setOpacity(t),e=this.childNodes,n=0;e.length>n;n++)i=e[n],i.visible()&&i.renderTo(t);t.restore()}}});b.mixins.Traversable.extend(N.fn,\"childNodes\"),i=N.extend({init:function(t){N.fn.init.call(this),this.canvas=t,this.ctx=t.getContext(\"2d\");var e=C(this._invalidate,this);this.invalidate=d.throttle(function(){d.animationFrame(e)},S)},destroy:function(){N.fn.destroy.call(this),this.canvas=null,this.ctx=null},load:function(t,e,n){this.loadElements(t,e,n),this._invalidate()},_invalidate:function(){this.ctx&&(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.renderTo(this.ctx))}}),b.mixins.Traversable.extend(i.fn,\"childNodes\"),r=O.extend({renderTo:function(t){t.save(),this.setTransform(t),this.setClip(t),this.setOpacity(t),t.beginPath(),this.renderPoints(t,this.srcElement),this.setLineDash(t),this.setLineCap(t),this.setLineJoin(t),this.setFill(t),this.setStroke(t),t.restore()},setFill:function(t){var e=this.srcElement.options.fill,n=!1;return e&&(\"gradient\"==e.nodeType?(this.setGradientFill(t,e),n=!0):v(e.color)||(t.fillStyle=e.color,t.save(),this.globalAlpha(t,e.opacity),t.fill(),t.restore(),n=!0)),n},setGradientFill:function(t,e){var i,r,o,s,a=this.srcElement.rawBBox();e instanceof b.LinearGradient?(r=e.start(),o=e.end(),i=t.createLinearGradient(r.x,r.y,o.x,o.y)):e instanceof b.RadialGradient&&(s=e.center(),i=t.createRadialGradient(s.x,s.y,0,s.x,s.y,e.radius())),n(i,e.stops),t.save(),e.userSpace()||t.transform(a.width(),0,0,a.height(),a.origin.x,a.origin.y),t.fillStyle=i,t.fill(),t.restore()},setStroke:function(t){var e=this.srcElement.options.stroke;return e&&!v(e.color)&&e.width>0?(t.strokeStyle=e.color,t.lineWidth=y(e.width,1),t.save(),this.globalAlpha(t,e.opacity),t.stroke(),t.restore(),!0):void 0},dashType:function(){var t=this.srcElement.options.stroke;return t&&t.dashType?t.dashType.toLowerCase():void 0},setLineDash:function(t){var e,n=this.dashType();n&&n!=E&&(e=k[n],t.setLineDash?t.setLineDash(e):(t.mozDash=e,t.webkitLineDash=e))},setLineCap:function(t){var e=this.dashType(),n=this.srcElement.options.stroke;e&&e!==E?t.lineCap=T:n&&n.lineCap&&(t.lineCap=n.lineCap)},setLineJoin:function(t){var e=this.srcElement.options.stroke;e&&e.lineJoin&&(t.lineJoin=e.lineJoin)},renderPoints:function(t,e){var n,i,r,o,s,a,h=e.segments;if(0!==h.length){for(n=h[0],i=n.anchor(),t.moveTo(i.x,i.y),r=1;h.length>r;r++)n=h[r],i=n.anchor(),o=h[r-1],s=o.controlOut(),a=n.controlIn(),s&&a?t.bezierCurveTo(s.x,s.y,a.x,a.y,i.x,i.y):t.lineTo(i.x,i.y);e.options.closed&&t.closePath()}}}),o=r.extend({renderPoints:function(t){var e,n=this.srcElement.paths;for(e=0;n.length>e;e++)r.fn.renderPoints(t,n[e])}}),s=r.extend({renderPoints:function(t){var e=this.srcElement.geometry(),n=e.center,i=e.radius;t.arc(n.x,n.y,i,0,2*Math.PI)}}),a=r.extend({renderPoints:function(t){var e=this.srcElement.toPath();r.fn.renderPoints.call(this,t,e)}}),h=r.extend({renderTo:function(t){var e=this.srcElement,n=e.position(),i=e.measure();t.save(),this.setTransform(t),this.setClip(t),this.setOpacity(t),t.beginPath(),t.font=e.options.font,this.setFill(t)&&t.fillText(e.content(),n.x,n.y+i.baseline),this.setStroke(t)&&(this.setLineDash(t),t.strokeText(e.content(),n.x,n.y+i.baseline)),t.restore()}}),l=r.extend({init:function(e,n){r.fn.init.call(this,e),this.onLoad=C(this.onLoad,this),this.onError=C(this.onError,this),this.loading=t.Deferred();var i=this.img=new Image;n&&!/^data:/i.test(e.src())&&(i.crossOrigin=n),i.src=e.src(),i.complete?this.onLoad():(i.onload=this.onLoad,i.onerror=this.onError)},renderTo:function(t){\"resolved\"===this.loading.state()&&(t.save(),this.setTransform(t),this.setClip(t),this.drawImage(t),t.restore())},optionsChange:function(e){\"src\"===e.field?(this.loading=t.Deferred(),this.img.src=this.srcElement.src()):r.fn.optionsChange.call(this,e)},onLoad:function(){this.loading.resolve(),this.invalidate()},onError:function(){this.loading.reject(Error(\"Unable to load image '\"+this.img.src+\"'. Check for connectivity and verify CORS headers.\"))},drawImage:function(t){var e=this.srcElement.rect(),n=e.topLeft();t.drawImage(this.img,n.x,n.y,e.width(),e.height())}}),c=r.extend({renderPoints:function(t){var e=this.srcElement.geometry(),n=e.origin,i=e.size;t.rect(n.x,n.y,i.width,i.height)}}),u={Group:N,Text:h,Path:r,MultiPath:o,Circle:s,Arc:a,Image:l,Rect:c},d.support.canvas=function(){return!!f.createElement(\"canvas\").getContext}(),d.support.canvas&&b.SurfaceFactory.current.register(\"canvas\",A,20),p(d.drawing,{exportImage:e,canvas:{ArcNode:a,CircleNode:s,GroupNode:N,ImageNode:l,MultiPathNode:o,Node:O,PathNode:r,RectNode:c,RootNode:i,Surface:A,TextNode:h}})}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/vml.min\",[\"drawing/shapes.min\",\"kendo.color.min\"],t)}(function(){!function(t){function e(){if(u.namespaces&&!u.namespaces.kvml){u.namespaces.add(\"kvml\",\"urn:schemas-microsoft-com:vml\");var t=u.styleSheets.length>30?u.styleSheets[0]:u.createStyleSheet();t.addRule(\".kvml\",\"behavior:url(#default#VML)\")}}function n(t){var e=u.createElement(\"kvml:\"+t);return e.className=\"kvml\",e}function i(t){var e,n=t.length,i=[];for(e=0;n>e;e++)i.push(t[e].scaleCopy(R).toString(0,\",\"));return i.join(\" \")}function r(t,e){var n,r,s,a,h,l=t.segments,c=l.length;if(c>0){for(n=[],h=1;c>h;h++)s=o(l[h-1],l[h]),s!==a&&(a=s,n.push(s)),n.push(\"l\"===s?i([l[h].anchor()]):i([l[h-1].controlOut(),l[h].controlIn(),l[h].anchor()]));return r=\"m \"+i([l[0].anchor()])+\" \"+n.join(\" \"),t.options.closed&&(r+=\" x\"),e!==!0&&(r+=\" e\"),r}}function o(t,e){return t.controlOut()&&e.controlIn()?\"c\":\"l\"}function s(t){return 0===t.indexOf(\"fill\")||0===t.indexOf(M)}function a(t,e,n){var i,r=n*A(e.opacity(),1);return i=t?h(t,e.color(),r):h(e.color(),\"#fff\",1-r)}function h(t,e,n){var i=new C(t),r=new C(e),o=l(i.r,r.r,n),s=l(i.g,r.g,n),a=l(i.b,r.b,n);return new C(o,s,a).toHex()}function l(t,e,n){return f.round(n*e+(1-n)*t)}var c,u=document,f=Math,d=f.atan2,p=f.ceil,m=f.sqrt,g=window.kendo,v=g.deepExtend,x=t.noop,y=g.drawing,w=y.BaseNode,b=g.geometry,_=b.toMatrix,C=g.Color,T=g.util,k=T.isTransparent,S=T.defined,E=T.deg,P=T.round,A=T.valueOrDefault,O=\"none\",N=\".kendo\",R=100,z=R*R,M=\"gradient\",B=4,D=y.Surface.extend({init:function(t,n){y.Surface.fn.init.call(this,t,n),e(),this.element.empty(),this._root=new I,this._root.attachTo(this.element[0]),this.element.on(\"click\"+N,this._click),this.element.on(\"mouseover\"+N,this._mouseenter),this.element.on(\"mouseout\"+N,this._mouseleave),this.element.on(\"mousemove\"+N,this._mousemove)},type:\"vml\",destroy:function(){this._root&&(this._root.destroy(),this._root=null,this.element.off(N)),y.Surface.fn.destroy.call(this)},draw:function(t){y.Surface.fn.draw.call(this,t),this._root.load([t],void 0,null)},clear:function(){y.Surface.fn.clear.call(this),this._root.clear()}}),L=w.extend({init:function(t){w.fn.init.call(this,t),this.createElement(),this.attachReference()},observe:x,destroy:function(){this.element&&(this.element._kendoNode=null,this.element=null),w.fn.destroy.call(this)},clear:function(){var t,e;for(this.element&&(this.element.innerHTML=\"\"),t=this.childNodes,e=0;t.length>e;e++)t[e].destroy();this.childNodes=[]},removeSelf:function(){this.element&&(this.element.parentNode.removeChild(this.element),this.element=null),w.fn.removeSelf.call(this)},createElement:function(){this.element=u.createElement(\"div\")},attachReference:function(){this.element._kendoNode=this},load:function(t,e,n,i){var r,o,s,a,h,l;for(i=A(i,1),this.srcElement&&(i*=A(this.srcElement.options.opacity,1)),r=0;t.length>r;r++)o=t[r],s=o.children,a=o.currentTransform(n),h=i*A(o.options.opacity,1),l=new ht[o.nodeType](o,a,h),s&&s.length>0&&l.load(s,e,a,i),S(e)?this.insertAt(l,e):this.append(l),l.attachTo(this.element,e)},attachTo:function(t,e){S(e)?t.insertBefore(this.element,t.children[e]||null):t.appendChild(this.element)},optionsChange:function(t){\"visible\"==t.field&&this.css(\"display\",t.value!==!1?\"\":O)},setStyle:function(){this.allCss(this.mapStyle())},mapStyle:function(){var t=[];return this.srcElement&&this.srcElement.options.visible===!1&&t.push([\"display\",O]),t},mapOpacityTo:function(t,e){var n=A(this.opacity,1);n*=A(e,1),t.push([\"opacity\",n])},attr:function(t,e){this.element&&(this.element[t]=e)},allAttr:function(t){for(var e=0;t.length>e;e++)this.attr(t[e][0],t[e][1])},css:function(t,e){this.element&&(this.element.style[t]=e)},allCss:function(t){for(var e=0;t.length>e;e++)this.css(t[e][0],t[e][1])}}),I=L.extend({createElement:function(){L.fn.createElement.call(this),this.allCss([[\"width\",\"100%\"],[\"height\",\"100%\"],[\"position\",\"relative\"],[\"visibility\",\"visible\"]])},attachReference:x}),F=g.Class.extend({init:function(t,e){this.srcElement=t,this.observer=e,t.addObserver(this)},geometryChange:function(){this.observer.optionsChange({field:\"clip\",value:this.srcElement})},clear:function(){this.srcElement.removeObserver(this)}}),G=L.extend({init:function(t){L.fn.init.call(this,t),t&&this.initClip()},observe:function(){w.fn.observe.call(this)},mapStyle:function(){var t=L.fn.mapStyle.call(this);return this.srcElement&&this.srcElement.clip()&&t.push([\"clip\",this.clipRect()]),t},optionsChange:function(t){\"clip\"==t.field&&(this.clearClip(),this.initClip(),this.setClip()),L.fn.optionsChange.call(this,t)},clear:function(){this.clearClip(),L.fn.clear.call(this)},initClip:function(){this.srcElement.clip()&&(this.clip=new F(this.srcElement.clip(),this),this.clip.observer=this)},clearClip:function(){this.clip&&(this.clip.clear(),this.clip=null,this.css(\"clip\",this.clipRect()))},setClip:function(){this.clip&&this.css(\"clip\",this.clipRect())},clipRect:function(){var t,e,n,i=c,r=this.srcElement.clip();return r&&(t=this.clipBBox(r),e=t.topLeft(),n=t.bottomRight(),i=g.format(\"rect({0}px {1}px {2}px {3}px)\",e.y,n.x,n.y,e.x)),i},clipBBox:function(t){var e=this.srcElement.rawBBox().topLeft(),n=t.rawBBox();return n.origin.translate(-e.x,-e.y),n}}),j=G.extend({createElement:function(){L.fn.createElement.call(this),this.setStyle()},attachTo:function(t,e){this.css(\"display\",O),L.fn.attachTo.call(this,t,e),this.srcElement.options.visible!==!1&&this.css(\"display\",\"\")},_attachTo:function(t){var e=document.createDocumentFragment();e.appendChild(this.element),t.appendChild(e)},mapStyle:function(){var t=G.fn.mapStyle.call(this);return t.push([\"position\",\"absolute\"]),t.push([\"white-space\",\"nowrap\"]),t},optionsChange:function(t){\"transform\"===t.field&&this.refreshTransform(),\"opacity\"===t.field&&this.refreshOpacity(),G.fn.optionsChange.call(this,t)},refreshTransform:function(t){var e,n=this.srcElement.currentTransform(t),i=this.childNodes,r=i.length;for(this.setClip(),e=0;r>e;e++)i[e].refreshTransform(n)},currentOpacity:function(){var t=A(this.srcElement.options.opacity,1);return this.parent&&this.parent.currentOpacity&&(t*=this.parent.currentOpacity()),t},refreshOpacity:function(){var t,e=this.childNodes,n=e.length,i=this.currentOpacity();for(t=0;n>t;t++)e[t].refreshOpacity(i)},initClip:function(){if(G.fn.initClip.call(this),this.clip){var t=this.clip.srcElement.bbox(this.srcElement.currentTransform());t&&(this.css(\"width\",t.width()+t.origin.x),this.css(\"height\",t.height()+t.origin.y))}},clipBBox:function(t){return t.bbox(this.srcElement.currentTransform())},clearClip:function(){G.fn.clearClip.call(this)}}),H=L.extend({init:function(t,e){this.opacity=e,L.fn.init.call(this,t)},createElement:function(){this.element=n(\"stroke\"),this.setOpacity()},optionsChange:function(t){0===t.field.indexOf(\"stroke\")&&this.setStroke()},refreshOpacity:function(t){this.opacity=t,this.setStroke()},setStroke:function(){this.allAttr(this.mapStroke())},setOpacity:function(){this.setStroke()},mapStroke:function(){var t,e=this.srcElement.options.stroke,n=[];return e&&!k(e.color)&&0!==e.width?(n.push([\"on\",\"true\"]),n.push([\"color\",e.color]),n.push([\"weight\",(e.width||1)+\"px\"]),this.mapOpacityTo(n,e.opacity),S(e.dashType)&&n.push([\"dashstyle\",e.dashType]),S(e.lineJoin)&&n.push([\"joinstyle\",e.lineJoin]),S(e.lineCap)&&(t=e.lineCap.toLowerCase(),\"butt\"===t&&(t=\"butt\"===t?\"flat\":t),n.push([\"endcap\",t]))):n.push([\"on\",\"false\"]),n}}),q=L.extend({init:function(t,e,n){this.opacity=n,L.fn.init.call(this,t)},createElement:function(){this.element=n(\"fill\"),this.setFill()},optionsChange:function(t){s(t.field)&&this.setFill()},refreshOpacity:function(t){this.opacity=t,this.setOpacity()},setFill:function(){this.allAttr(this.mapFill())},setOpacity:function(){this.setFill()},attr:function(t,e){var n,i=this.element;if(i){for(n=t.split(\".\");n.length>1;)i=i[n.shift()];i[n[0]]=e}},mapFill:function(){var t=this.srcElement.fill(),e=[[\"on\",\"false\"]];return t&&(t.nodeType==M?e=this.mapGradient(t):k(t.color)||(e=this.mapFillColor(t))),e},mapFillColor:function(t){var e=[[\"on\",\"true\"],[\"color\",t.color]];return this.mapOpacityTo(e,t.opacity),e},mapGradient:function(t){var e,n=this.srcElement.options,i=n.fallbackFill||t.fallbackFill&&t.fallbackFill();return e=t instanceof y.LinearGradient?this.mapLinearGradient(t):t instanceof y.RadialGradient&&t.supportVML?this.mapRadialGradient(t):i?this.mapFillColor(i):[[\"on\",\"false\"]]},mapLinearGradient:function(t){var e=t.start(),n=t.end(),i=T.deg(d(n.y-e.y,n.x-e.x)),r=[[\"on\",\"true\"],[\"type\",M],[\"focus\",0],[\"method\",\"none\"],[\"angle\",270-i]];return this.addColors(r),r},mapRadialGradient:function(t){var e=this.srcElement.rawBBox(),n=t.center(),i=(n.x-e.origin.x)/e.width(),r=(n.y-e.origin.y)/e.height(),o=[[\"on\",\"true\"],[\"type\",\"gradienttitle\"],[\"focus\",\"100%\"],[\"focusposition\",i+\" \"+r],[\"method\",\"none\"]];\nreturn this.addColors(o),o},addColors:function(t){var e,n,i=this.srcElement.options,r=A(this.opacity,1),o=[],s=i.fill.stops,h=i.baseColor,l=this.element.colors?\"colors.value\":\"colors\",c=a(h,s[0],r),u=a(h,s[s.length-1],r);for(n=0;s.length>n;n++)e=s[n],o.push(f.round(100*e.offset())+\"% \"+a(h,e,r));t.push([l,o.join(\",\")],[\"color\",c],[\"color2\",u])}}),$=L.extend({init:function(t,e){this.transform=e,L.fn.init.call(this,t)},createElement:function(){this.element=n(\"skew\"),this.setTransform()},optionsChange:function(t){\"transform\"===t.field&&this.refresh(this.srcElement.currentTransform())},refresh:function(t){this.transform=t,this.setTransform()},transformOrigin:function(){return\"-0.5,-0.5\"},setTransform:function(){this.allAttr(this.mapTransform())},mapTransform:function(){var t=this.transform,e=[],n=_(t);return n?(n.round(B),e.push([\"on\",\"true\"],[\"matrix\",[n.a,n.c,n.b,n.d,0,0].join(\",\")],[\"offset\",n.e+\"px,\"+n.f+\"px\"],[\"origin\",this.transformOrigin()])):e.push([\"on\",\"false\"]),e}}),X=G.extend({init:function(t,e,n){this.fill=this.createFillNode(t,e,n),this.stroke=new H(t,n),this.transform=this.createTransformNode(t,e),G.fn.init.call(this,t)},attachTo:function(t,e){this.fill.attachTo(this.element),this.stroke.attachTo(this.element),this.transform.attachTo(this.element),L.fn.attachTo.call(this,t,e)},createFillNode:function(t,e,n){return new q(t,e,n)},createTransformNode:function(t,e){return new $(t,e)},createElement:function(){this.element=n(\"shape\"),this.setCoordsize(),this.setStyle()},optionsChange:function(t){s(t.field)?this.fill.optionsChange(t):0===t.field.indexOf(\"stroke\")?this.stroke.optionsChange(t):\"transform\"===t.field?this.transform.optionsChange(t):\"opacity\"===t.field&&(this.fill.setOpacity(),this.stroke.setOpacity()),G.fn.optionsChange.call(this,t)},refreshTransform:function(t){this.transform.refresh(this.srcElement.currentTransform(t))},refreshOpacity:function(t){t*=A(this.srcElement.options.opacity,1),this.fill.refreshOpacity(t),this.stroke.refreshOpacity(t)},mapStyle:function(t,e){var n,i=G.fn.mapStyle.call(this);return t&&e||(t=e=R),i.push([\"position\",\"absolute\"],[\"width\",t+\"px\"],[\"height\",e+\"px\"]),n=this.srcElement.options.cursor,n&&i.push([\"cursor\",n]),i},setCoordsize:function(){this.allAttr([[\"coordorigin\",\"0 0\"],[\"coordsize\",z+\" \"+z]])}}),U=L.extend({createElement:function(){this.element=n(\"path\"),this.setPathData()},geometryChange:function(){this.setPathData()},setPathData:function(){this.attr(\"v\",this.renderData())},renderData:function(){return r(this.srcElement)}}),Y=X.extend({init:function(t,e,n){this.pathData=this.createDataNode(t),X.fn.init.call(this,t,e,n)},attachTo:function(t,e){this.pathData.attachTo(this.element),X.fn.attachTo.call(this,t,e)},createDataNode:function(t){return new U(t)},geometryChange:function(){this.pathData.geometryChange(),X.fn.geometryChange.call(this)}}),V=U.extend({renderData:function(){var t,e,n,i=this.srcElement.paths;if(i.length>0){for(t=[],e=0;i.length>e;e++)n=i.length-1>e,t.push(r(i[e],n));return t.join(\" \")}}}),W=Y.extend({createDataNode:function(t){return new V(t)}}),Q=$.extend({transformOrigin:function(){var t=this.srcElement.geometry().bbox(),e=t.center(),n=-p(e.x)/p(t.width()),i=-p(e.y)/p(t.height());return n+\",\"+i}}),Z=X.extend({createElement:function(){this.element=n(\"oval\"),this.setStyle()},createTransformNode:function(t,e){return new Q(t,e)},geometryChange:function(){X.fn.geometryChange.call(this),this.setStyle(),this.refreshTransform()},mapStyle:function(){var t=this.srcElement.geometry(),e=t.radius,n=t.center,i=p(2*e),r=X.fn.mapStyle.call(this,i,i);return r.push([\"left\",p(n.x-e)+\"px\"],[\"top\",p(n.y-e)+\"px\"]),r}}),J=U.extend({renderData:function(){return r(this.srcElement.toPath())}}),K=Y.extend({createDataNode:function(t){return new J(t)}}),tt=U.extend({createElement:function(){U.fn.createElement.call(this),this.attr(\"textpathok\",!0)},renderData:function(){var t=this.srcElement.rect(),e=t.center();return\"m \"+i([new b.Point(t.topLeft().x,e.y)])+\" l \"+i([new b.Point(t.bottomRight().x,e.y)])}}),et=L.extend({createElement:function(){this.element=n(\"textpath\"),this.attr(\"on\",!0),this.attr(\"fitpath\",!1),this.setStyle(),this.setString()},optionsChange:function(t){\"content\"===t.field?this.setString():this.setStyle(),L.fn.optionsChange.call(this,t)},mapStyle:function(){return[[\"font\",this.srcElement.options.font]]},setString:function(){this.attr(\"string\",this.srcElement.content())}}),nt=Y.extend({init:function(t,e,n){this.path=new et(t),Y.fn.init.call(this,t,e,n)},createDataNode:function(t){return new tt(t)},attachTo:function(t,e){this.path.attachTo(this.element),Y.fn.attachTo.call(this,t,e)},optionsChange:function(t){\"font\"!==t.field&&\"content\"!==t.field||(this.path.optionsChange(t),this.pathData.geometryChange(t)),Y.fn.optionsChange.call(this,t)}}),it=U.extend({renderData:function(){var t=this.srcElement.rect(),e=(new y.Path).moveTo(t.topLeft()).lineTo(t.topRight()).lineTo(t.bottomRight()).lineTo(t.bottomLeft()).close();return r(e)}}),rt=$.extend({init:function(t,e,n){this.opacity=n,$.fn.init.call(this,t,e)},createElement:function(){this.element=n(\"fill\"),this.attr(\"type\",\"frame\"),this.attr(\"rotate\",!0),this.setOpacity(),this.setSrc(),this.setTransform()},optionsChange:function(t){\"src\"===t.field&&this.setSrc(),$.fn.optionsChange.call(this,t)},geometryChange:function(){this.refresh()},refreshOpacity:function(t){this.opacity=t,this.setOpacity()},setOpacity:function(){var t=[];this.mapOpacityTo(t,this.srcElement.options.opacity),this.allAttr(t)},setSrc:function(){this.attr(\"src\",this.srcElement.src())},mapTransform:function(){var t,e,n,i,r,o,s,a,h=this.srcElement,l=h.rawBBox(),c=l.center(),u=R/2,f=R,p=l.width()/f,g=l.height()/f,v=0,x=this.transform;return x?(n=_(x),i=m(n.a*n.a+n.b*n.b),r=m(n.c*n.c+n.d*n.d),p*=i,g*=r,o=E(d(n.b,n.d)),s=E(d(-n.c,n.a)),v=(o+s)/2,0!==v?(a=h.bbox().center(),t=(a.x-u)/f,e=(a.y-u)/f):(t=(c.x*i+n.e-u)/f,e=(c.y*r+n.f-u)/f)):(t=(c.x-u)/f,e=(c.y-u)/f),p=P(p,B),g=P(g,B),t=P(t,B),e=P(e,B),v=P(v,B),[[\"size\",p+\",\"+g],[\"position\",t+\",\"+e],[\"angle\",v]]}}),ot=Y.extend({createFillNode:function(t,e,n){return new rt(t,e,n)},createDataNode:function(t){return new it(t)},optionsChange:function(t){\"src\"!==t.field&&\"transform\"!==t.field||this.fill.optionsChange(t),Y.fn.optionsChange.call(this,t)},geometryChange:function(){this.fill.geometryChange(),Y.fn.geometryChange.call(this)},refreshTransform:function(t){Y.fn.refreshTransform.call(this,t),this.fill.refresh(this.srcElement.currentTransform(t))}}),st=U.extend({renderData:function(){var t=this.srcElement.geometry(),e=[\"m\",i([t.topLeft()]),\"l\",i([t.topRight(),t.bottomRight(),t.bottomLeft()]),\"x e\"];return e.join(\" \")}}),at=Y.extend({createDataNode:function(t){return new st(t)}}),ht={Group:j,Text:nt,Path:Y,MultiPath:W,Circle:Z,Arc:K,Image:ot,Rect:at};g.support.vml=function(){var t=g.support.browser;return t.msie&&9>t.version}(),c=\"inherit\",g.support.browser.msie&&8>g.support.browser.version&&(c=\"rect(auto auto auto auto)\"),g.support.vml&&y.SurfaceFactory.current.register(\"vml\",D,30),v(y,{vml:{ArcDataNode:J,ArcNode:K,CircleTransformNode:Q,CircleNode:Z,FillNode:q,GroupNode:j,ImageNode:ot,ImageFillNode:rt,ImagePathDataNode:it,MultiPathDataNode:V,MultiPathNode:W,Node:L,PathDataNode:U,PathNode:Y,RectDataNode:st,RectNode:at,RootNode:I,StrokeNode:H,Surface:D,TextNode:nt,TextPathNode:et,TextPathDataNode:tt,TransformNode:$}})}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/html.min\",[\"kendo.color.min\",\"drawing/shapes.min\",\"util/main.min\",\"util/text-metrics.min\"],t)}(function(){!function(t,e,n){\"use strict\";function i(t){return\"number\"==typeof t?{x:t,y:t}:Array.isArray(t)?{x:t[0],y:t[1]}:{x:t.x,y:t.y}}function r(n,r){function s(e){var n=new at.Group,i=e.getBoundingClientRect();return R(n,[u.x,0,0,u.y,-i.left*u.x,-i.top*u.y]),mt._clipbox=!1,mt._matrix=ht.Matrix.unit(),mt._stackingContext={element:e,group:n},mt._avoidLinks=r.avoidLinks===!0?\"a\":r.avoidLinks,t(e).addClass(\"k-pdf-export\"),et(e,n),t(e).removeClass(\"k-pdf-export\"),n}function a(e){return null!=e?(\"string\"==typeof e&&(e=kendo.template(e.replace(/^\\s+|\\s+$/g,\"\"))),\"function\"==typeof e?function(n){var i=e(n);return i?(\"string\"==typeof i&&(i=i.replace(/^\\s+|\\s+$/g,\"\")),t(i)[0]):void 0}:function(){return t(e).clone()[0]}):void 0}function h(e){var n,i,r,o,s=e.cloneNode(!1);if(1==e.nodeType){n=t(e),i=t(s),o=n.data();for(r in o)i.data(r,o[r]);if(/^canvas$/i.test(e.tagName))s.getContext(\"2d\").drawImage(e,0,0);else if(/^input$/i.test(e.tagName))e.removeAttribute(\"name\");else for(r=e.firstChild;r;r=r.nextSibling)s.appendChild(h(r))}return s}function l(n,i,r,o,s,l,c){function u(){function t(){d(k,function(){n({pages:k,container:E})})}var e,i;(\"-\"!=r||s)&&m(S),e=x(),S.parentNode.insertBefore(e,S),e.appendChild(S),C?(i=k.length,k.forEach(function(e,n){var r=C({element:e,pageNum:n+1,totalPages:k.length});r&&(e.appendChild(r),p(r,function(){0===--i&&t()}))})):t()}function f(t){return c.keepTogether&&t.is(c.keepTogether)&&t.height()<=s-P?!0:t.data(\"kendoChart\")||/^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(t[0].tagName)}function m(n){var i,o,a,h,l=b(n),c=e(_(l,\"padding-bottom\")),u=e(_(l,\"border-bottom-width\")),d=P;for(P+=c+u,i=!0,o=n.firstChild;o;o=o.nextSibling)if(1==o.nodeType){if(i=!1,a=t(o),a.is(r)){v(o);continue}if(!s){m(o);continue}if(!/^(?:static|relative)$/.test(_(b(o),\"position\")))continue;h=y(o),1==h?v(o):h&&f(a)?v(o):m(o)}else 3==o.nodeType&&s&&(w(o,i),i=!1);P=d}function g(t){var e=t.parentNode,n=e.firstChild;if(t===n)return!0;if(t===e.children[0]){if(7==n.nodeType||8==n.nodeType)return!0;if(3==n.nodeType)return!/\\S/.test(n.data)}return!1}function v(e){var n,i,r,o,s,a,h;return 1==e.nodeType&&e!==S&&g(e)?v(e.parentNode):(n=t(e).closest(\"table\"),i=n.find(\"colgroup:first\"),c.repeatHeaders&&(r=n.find(\"thead:first\"),o=t(e).closest('.k-grid[data-role=\"grid\"]'),o[0]&&o[0].querySelector(\".k-auto-scrollable\")&&(s=o.find(\".k-grid-header:first\"))),a=x(),h=T.createRange(),h.setStartBefore(S),h.setEndBefore(e),a.appendChild(h.extractContents()),S.parentNode.insertBefore(a,S),n[0]&&(n=t(e).closest(\"table\"),c.repeatHeaders&&r[0]&&r.clone().prependTo(n),i[0]&&i.clone().prependTo(n)),void(c.repeatHeaders&&s&&s[0]&&(o=t(e).closest('.k-grid[data-role=\"grid\"]'),s[0]&&s.clone().prependTo(o))))}function x(){var e=T.createElement(\"KENDO-PDF-PAGE\");return t(e).css({display:\"block\",boxSizing:\"content-box\",width:o||\"auto\",padding:l.top+\"px \"+l.right+\"px \"+l.bottom+\"px \"+l.left+\"px\",position:\"relative\",height:s||\"auto\",overflow:s||o?\"hidden\":\"visible\",clear:\"both\"}),c&&c.pageClassName&&(e.className=c.pageClassName),k.push(e),e}function y(t){var e,n,i=t.getBoundingClientRect();return 0===i.width||0===i.height?0:(e=S.getBoundingClientRect().top,n=s-P,i.height>n?3:i.top-e>n?1:i.bottom-e>n?2:0)}function w(t,e){var n,i,r,o,s;/\\S/.test(t.data)&&(n=t.data.length,i=T.createRange(),i.selectNodeContents(t),r=y(i),r&&(o=t,1==r?v(e?t.parentNode:t):(!function a(e,n,r){return i.setEnd(t,n),e==n||n==r?n:y(i)?a(e,e+n>>1,n):a(n,n+r>>1,r)}(0,n>>1,n),!/\\S/.test(\"\"+i)&&e?v(t.parentNode):(o=t.splitText(i.endOffset),s=x(),i.setStartBefore(S),s.appendChild(i.extractContents()),S.parentNode.insertBefore(s,S))),w(o)))}var C=a(c.template),T=i.ownerDocument,k=[],S=c._destructive?i:h(i),E=T.createElement(\"KENDO-PDF-DOCUMENT\"),P=0;t(S).find(\"tfoot\").each(function(){this.parentNode.appendChild(this)}),t(S).find(\"ol\").each(function(){t(this).children().each(function(t){this.setAttribute(\"kendo-split-index\",t)})}),t(E).css({display:\"block\",position:\"absolute\",boxSizing:\"content-box\",left:\"-10000px\",top:\"-10000px\"}),o&&(t(E).css({width:o,paddingLeft:l.left,paddingRight:l.right}),t(S).css({overflow:\"hidden\"})),i.parentNode.insertBefore(E,i),E.appendChild(S),c.beforePageBreak?setTimeout(function(){c.beforePageBreak(E,u)},15):setTimeout(u,15)}var c,u;if(r||(r={}),c=t.Deferred(),n=t(n)[0],!n)return c.reject(\"No element to export\");if(\"function\"!=typeof window.getComputedStyle)throw Error(\"window.getComputedStyle is missing.  You are using an unsupported browser, or running in IE8 compatibility mode.  Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.\");return kendo.pdf&&kendo.pdf.defineFont(o(n.ownerDocument)),u=i(r.scale||1),p(n,function(){var t,e=r&&r.forcePageBreak,i=r&&r.paperSize&&\"auto\"!=r.paperSize,o=kendo.pdf.getPaperOptions(function(t,e){return\"paperSize\"==t?i?r[t]:\"A4\":t in r?r[t]:e}),a=i&&o.paperSize[0],h=i&&o.paperSize[1],f=r.margin&&o.margin,d=!!f;e||h?(f||(f={left:0,top:0,right:0,bottom:0}),a&&(a/=u.x),h&&(h/=u.y),f.left/=u.x,f.right/=u.x,f.top/=u.y,f.bottom/=u.y,t=new at.Group({pdf:{multiPage:!0,paperSize:i?o.paperSize:\"auto\",_ignoreMargin:d}}),l(function(e){if(r.progress){var n=!1,i=0;!function o(){if(e.pages.length>i){var a=s(e.pages[i]);t.append(a),r.progress({page:a,pageNum:++i,totalPages:e.pages.length,cancel:function(){n=!0}}),n?e.container.parentNode.removeChild(e.container):setTimeout(o)}else e.container.parentNode.removeChild(e.container),c.resolve(t)}()}else e.pages.forEach(function(e){t.append(s(e))}),e.container.parentNode.removeChild(e.container),c.resolve(t)},n,e,a?a-f.left-f.right:null,h?h-f.top-f.bottom:null,f,r)):c.resolve(s(n))}),c.promise()}function o(t){function e(t){if(t){var e=null;try{e=t.cssRules}catch(n){}e&&i(t,e)}}function n(t){var e,n=_(t.style,\"src\");return n?ot(n).reduce(function(t,e){var n=st(e);return n&&t.push(n),t},[]):(e=st(t.cssText),e?[e]:[])}function i(t,i){var o,s,a,h,l,c,u;for(o=0;i.length>o;++o)switch(s=i[o],s.type){case 3:e(s.styleSheet);break;case 5:a=s.style,h=ot(_(a,\"font-family\")),l=/^([56789]00|bold)$/i.test(_(a,\"font-weight\")),c=\"italic\"==_(a,\"font-style\"),u=n(s),u.length>0&&r(t,h,l,c,u[0])}}function r(t,e,n,i,r){/^data:/i.test(r)||/^[^\\/:]+:\\/\\//.test(r)||/^\\//.test(r)||(r=(t.href+\"\").replace(/[^\\/]*$/,\"\")+r),e.forEach(function(t){t=t.replace(/^(['\"]?)(.*?)\\1$/,\"$2\"),n&&(t+=\"|bold\"),i&&(t+=\"|italic\"),o[t]=r})}var o,s;for(null==t&&(t=document),o={},s=0;t.styleSheets.length>s;++s)e(t.styleSheets[s]);return o}function s(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function a(t){return t=\"_counter_\"+t,mt[t]}function h(t){var e=[],n=mt;for(t=\"_counter_\"+t;n;)s(n,t)&&e.push(n[t]),n=Object.getPrototypeOf(n);return e.reverse()}function l(t,e){var n=mt;for(t=\"_counter_\"+t;n&&!s(n,t);)n=Object.getPrototypeOf(n);n||(n=mt._root),n[t]=(n[t]||0)+(null==e?1:e)}function c(t,e){t=\"_counter_\"+t,mt[t]=null==e?0:e}function u(t,n,i){var r,o,s;for(r=0;t.length>r;)o=t[r++],s=e(t[r]),isNaN(s)?n(o,i):(n(o,s),++r)}function f(t,e){var n=kendo.parseColor(t);return n&&(n=n.toRGB(),e?n=n.toCssRgba():0===n.a&&(n=null)),n}function d(t,e){function n(){--i<=0&&e()}var i=0;t.forEach(function(t){var e,r,o=t.querySelectorAll(\"img\");for(e=0;o.length>e;++e)r=o[e],r.complete||(i++,r.onload=r.onerror=n)}),i||n()}function p(t,e){function n(t){pt[t]||(pt[t]=!0,o.push(t))}function i(){--r<=0&&e()}var r,o=[];!function s(t){/^img$/i.test(t.tagName)&&n(t.src),rt(_(b(t),\"background-image\")).forEach(function(t){\"url\"==t.type&&n(t.url)}),t.children&&lt.call(t.children).forEach(s)}(t),r=o.length,0===r&&i(),o.forEach(function(t){var e=pt[t]=new Image;/^data:/i.test(t)||(e.crossOrigin=\"Anonymous\"),e.src=t,e.complete?i():(e.onload=i,e.onerror=function(){pt[t]=null,i()})})}function m(t){var e,i=\"\";do e=t%26,i=String.fromCharCode(97+e)+i,t=n.floor(t/26);while(t>0);return i}function g(t,e,n){var i,r;mt=Object.create(mt),mt[t.tagName.toLowerCase()]={element:t,style:e},i=_(e,\"text-decoration\"),i&&\"none\"!=i&&(r=_(e,\"color\"),i.split(/\\s+/g).forEach(function(t){mt[t]||(mt[t]=r)})),w(e)&&(mt._stackingContext={element:t,group:n})}function v(){mt=Object.getPrototypeOf(mt)}function x(t){if(null!=mt._clipbox){var e=t.bbox(mt._matrix);mt._clipbox=mt._clipbox?ht.Rect.intersect(mt._clipbox,e):e}}function y(){var t=mt._clipbox;return null==t?!0:t?0===t.width()||0===t.height():void 0}function w(t){function e(e){return _(t,e)}return\"none\"!=e(\"transform\")||\"static\"!=e(\"position\")&&\"auto\"!=e(\"z-index\")||e(\"opacity\")<1?!0:void 0}function b(t,e){return window.getComputedStyle(t,e||null)}function _(t,e){var n=t.getPropertyValue(e);return null!=n&&\"\"!==n||(ct.webkit?n=t.getPropertyValue(\"-webkit-\"+e):ct.mozilla?n=t.getPropertyValue(\"-moz-\"+e):ct.opera?n=t.getPropertyValue(\"-o-\"+e):ct.msie&&(n=t.getPropertyValue(\"-ms-\"+e))),n}function C(t,e,n,i){t.setProperty(e,n,i),ct.webkit?t.setProperty(\"-webkit-\"+e,n,i):ct.mozilla?t.setProperty(\"-moz-\"+e,n,i):ct.opera?t.setProperty(\"-o-\"+e,n,i):ct.msie&&(t.setProperty(\"-ms-\"+e,n,i),e=\"ms\"+e.replace(/(^|-)([a-z])/g,function(t,e,n){return e+n.toUpperCase()}),t[e]=n)}function T(t,n){return n=\"border-\"+n,{width:e(_(t,n+\"-width\")),style:_(t,n+\"-style\"),color:f(_(t,n+\"-color\"),!0)}}function k(t,e){var n=t.style.cssText,i=e();return t.style.cssText=n,i}function S(t,n){var i=_(t,\"border-\"+n+\"-radius\").split(/\\s+/g).map(e);return 1==i.length&&i.push(i[0]),B({x:i[0],y:i[1]})}function E(t){var e=t.getBoundingClientRect();return e=P(e,\"border-*-width\",t),e=P(e,\"padding-*\",t)}function P(t,n,i){var r,o,s,a,h;return\"string\"==typeof n?(r=b(i),o=e(_(r,n.replace(\"*\",\"top\"))),s=e(_(r,n.replace(\"*\",\"right\"))),a=e(_(r,n.replace(\"*\",\"bottom\"))),h=e(_(r,n.replace(\"*\",\"left\")))):\"number\"==typeof n&&(o=s=a=h=n),{top:t.top+o,right:t.right-s,bottom:t.bottom-a,left:t.left+h,width:t.right-t.left-s-h,height:t.bottom-t.top-a-o}}function A(t){var n,i,r=_(t,\"transform\");return\"none\"==r?null:(n=/^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(r),n?(i=_(t,\"transform-origin\"),n=n[1].split(/\\s*,\\s*/g).map(e),i=i.split(/\\s+/g).map(e),{matrix:n,origin:i}):void 0)}function O(t){return 180*t/n.PI%360}function N(t){var i=e(t);return/grad$/.test(t)?n.PI*i/200:/rad$/.test(t)?i:/turn$/.test(t)?n.PI*i*2:/deg$/.test(t)?n.PI*i/180:void 0}function R(t,e){return e=new ht.Matrix(e[0],e[1],e[2],e[3],e[4],e[5]),t.transform(e),e}function z(t,e){t.clip(e)}function M(t,e,n,i){for(var r=new ht.Arc([e,n],i).curvePoints(),o=1;r.length>o;)t.curveTo(r[o++],r[o++],r[o++])}function B(t){return(0>=t.x||0>=t.y)&&(t.x=t.y=0),t}function D(t,e,i,r,o){var s=n.max(0,e.x),a=n.max(0,e.y),h=n.max(0,i.x),l=n.max(0,i.y),c=n.max(0,r.x),u=n.max(0,r.y),f=n.max(0,o.x),d=n.max(0,o.y),p=n.min(t.width/(s+h),t.height/(l+u),t.width/(c+f),t.height/(d+a));return 1>p&&(s*=p,a*=p,h*=p,l*=p,c*=p,u*=p,f*=p,d*=p),{tl:{x:s,y:a},tr:{x:h,y:l},br:{x:c,y:u},bl:{x:f,y:d}}}function L(t,n,i){var r,o,s,a,h,l,c,u,f=b(t),d=S(f,\"top-left\"),p=S(f,\"top-right\"),m=S(f,\"bottom-left\"),g=S(f,\"bottom-right\");return\"padding\"!=i&&\"content\"!=i||(r=T(f,\"top\"),o=T(f,\"right\"),s=T(f,\"bottom\"),a=T(f,\"left\"),d.x-=a.width,d.y-=r.width,p.x-=o.width,p.y-=r.width,g.x-=o.width,g.y-=s.width,m.x-=a.width,m.y-=s.width,\"content\"==i&&(h=e(_(f,\"padding-top\")),l=e(_(f,\"padding-right\")),c=e(_(f,\"padding-bottom\")),u=e(_(f,\"padding-left\")),d.x-=u,d.y-=h,p.x-=l,p.y-=h,g.x-=l,g.y-=c,m.x-=u,m.y-=c)),\"number\"==typeof i&&(d.x-=i,d.y-=i,p.x-=i,p.y-=i,g.x-=i,g.y-=i,m.x-=i,m.y-=i),I(n,d,p,g,m)}function I(t,e,n,i,r){var o=D(t,e,n,i,r),s=o.tl,a=o.tr,h=o.br,l=o.bl,c=new at.Path({fill:null,stroke:null});return c.moveTo(t.left,t.top+s.y),s.x&&M(c,t.left+s.x,t.top+s.y,{startAngle:-180,endAngle:-90,radiusX:s.x,radiusY:s.y}),c.lineTo(t.right-a.x,t.top),a.x&&M(c,t.right-a.x,t.top+a.y,{startAngle:-90,endAngle:0,radiusX:a.x,radiusY:a.y}),c.lineTo(t.right,t.bottom-h.y),h.x&&M(c,t.right-h.x,t.bottom-h.y,{startAngle:0,endAngle:90,radiusX:h.x,radiusY:h.y}),c.lineTo(t.left+l.x,t.bottom),l.x&&M(c,t.left+l.x,t.bottom-l.y,{startAngle:90,endAngle:180,radiusX:l.x,radiusY:l.y}),c.close()}function F(t,n){var i=e(t)+\"\";switch(n){case\"decimal-leading-zero\":return 2>i.length&&(i=\"0\"+i),i;case\"lower-roman\":return ut(t).toLowerCase();case\"upper-roman\":return ut(t).toUpperCase();case\"lower-latin\":case\"lower-alpha\":return m(t-1);case\"upper-latin\":case\"upper-alpha\":return m(t-1).toUpperCase();default:return i}}function G(t,e){function n(t,e,n){return n?(n=n.replace(/^\\s*([\"'])(.*)\\1\\s*$/,\"$2\"),h(t).map(function(t){return F(t,e)}).join(n)):F(a(t)||0,e)}var i,r=ot(e,/^\\s+/),o=[];return r.forEach(function(e){var r;(i=/^\\s*([\"'])(.*)\\1\\s*$/.exec(e))?o.push(i[2].replace(/\\\\([0-9a-f]{4})/gi,function(t,e){return String.fromCharCode(parseInt(e,16))})):(i=/^\\s*counter\\((.*?)\\)\\s*$/.exec(e))?(r=ot(i[1]),o.push(n(r[0],r[1]))):(i=/^\\s*counters\\((.*?)\\)\\s*$/.exec(e))?(r=ot(i[1]),o.push(n(r[0],r[2],r[1]))):o.push((i=/^\\s*attr\\((.*?)\\)\\s*$/.exec(e))?t.getAttribute(i[1])||\"\":e)}),o.join(\"\")}function j(t){var e,n;if(t.cssText)return t.cssText;for(e=[],n=0;t.length>n;++n)e.push(t[n]+\": \"+_(t,t[n]));return e.join(\";\\n\")}function H(t,e){function n(e,n){var r,o=b(t,e);o.content&&\"normal\"!=o.content&&\"none\"!=o.content&&\"0px\"!=o.width&&(r=t.ownerDocument.createElement(dt),r.style.cssText=j(o),r.textContent=G(t,o.content),t.insertBefore(r,n),i.push(r))}var i,r;return t.tagName==dt?void q(t,e):(i=[],n(\":before\",t.firstChild),n(\":after\",null),r=t.className,t.className+=\" kendo-pdf-hide-pseudo-elements\",q(t,e),t.className=r,void i.forEach(function(e){t.removeChild(e)}))}function q(i,r){function o(t){var e,n,r,o,s,a;if(/^td$/i.test(i.tagName)&&(e=mt.table,e&&\"collapse\"==_(e.style,\"border-collapse\"))){if(n=T(e.style,\"left\").width,r=T(e.style,\"top\").width,0===n&&0===r)return t;if(o=e.element.getBoundingClientRect(),s=e.element.rows[0].cells[0],a=s.getBoundingClientRect(),a.top==o.top||a.left==o.left)return lt.call(t).map(function(t){return{left:t.left+n,top:t.top+r,right:t.right+n,bottom:t.bottom+r,height:t.height,width:t.width}})}return t}function s(t,e,i,o,s,a,h,l){function c(e,r,o){var s=n.PI/2*e/(e+i),a={x:r.x-e,y:r.y-i},h=new at.Path({fill:{color:t},stroke:null}).moveTo(0,0);R(h,o),M(h,0,r.y,{startAngle:-90,endAngle:-O(s),radiusX:r.x,radiusY:r.y}),a.x>0&&a.y>0?(h.lineTo(a.x*n.cos(s),r.y-a.y*n.sin(s)),M(h,0,r.y,{startAngle:-O(s),endAngle:-90,radiusX:a.x,radiusY:a.y,anticlockwise:!0})):a.x>0?h.lineTo(a.x,i).lineTo(0,i):h.lineTo(a.x,i).lineTo(a.x,0),f.append(h.close())}if(!(0>=i)){var u,f=new at.Group;R(f,l),r.append(f),B(a),B(h),u=new at.Path({fill:{color:t},stroke:null}),f.append(u),u.moveTo(a.x?n.max(a.x,o):0,0).lineTo(e-(h.x?n.max(h.x,s):0),0).lineTo(e-n.max(h.x,s),i).lineTo(n.max(a.x,o),i).close(),a.x&&c(o,a,[-1,0,0,1,a.x,0]),h.x&&c(s,h,[1,0,0,1,e-h.x,0])}}function a(e){var n,o,s=new at.Group;for(z(s,I(e,q,U,W,Y)),r.append(s),\"A\"==i.tagName&&i.href&&!/^#?$/.test(t(i).attr(\"href\"))&&(mt._avoidLinks&&t(i).is(mt._avoidLinks)||(s._pdfLink={url:i.href,top:e.top,right:e.right,bottom:e.bottom,left:e.left})),Z&&(n=new at.Path({fill:{color:Z.toCssRgba()},stroke:null}),n.moveTo(e.left,e.top).lineTo(e.right,e.top).lineTo(e.right,e.bottom).lineTo(e.left,e.bottom).close(),s.append(n)),o=u.length;--o>=0;)h(s,e,u[o],d[o%d.length],p[o%p.length],g[o%g.length],v[o%v.length])}function h(t,r,o,s,a,h,l){function c(t,r,o,c,u){function f(){for(;x.origin.x>r.left;)x.origin.x-=o}function d(){for(;x.origin.y>r.top;)x.origin.y-=c}function p(){for(;r.right>x.origin.x;)u(t,x.clone()),x.origin.x+=o}var m,g,v,x,y,w=o/c,b=r;if(\"content-box\"==h?(b=P(b,\"border-*-width\",i),b=P(b,\"padding-*\",i)):\"padding-box\"==h&&(b=P(b,\"border-*-width\",i)),/^\\s*auto(\\s+auto)?\\s*$/.test(l)||(\"contain\"==l?(m=n.min(b.width/o,b.height/c),o*=m,c*=m):\"cover\"==l?(m=n.max(b.width/o,b.height/c),o*=m,c*=m):(g=l.split(/\\s+/g),o=/%$/.test(g[0])?b.width*e(g[0])/100:e(g[0]),c=1==g.length||\"auto\"==g[1]?o/w:/%$/.test(g[1])?b.height*e(g[1])/100:e(g[1]))),v=(a+\"\").split(/\\s+/),1==v.length&&(v[1]=\"50%\"),v[0]=/%$/.test(v[0])?e(v[0])/100*(b.width-o):e(v[0]),v[1]=/%$/.test(v[1])?e(v[1])/100*(b.height-c):e(v[1]),x=new ht.Rect([b.left+v[0],b.top+v[1]],[o,c]),\"no-repeat\"==s)u(t,x);else if(\"repeat-x\"==s)f(),p();else if(\"repeat-y\"==s)for(d();r.bottom>x.origin.y;)u(t,x.clone()),x.origin.y+=c;else if(\"repeat\"==s)for(f(),d(),y=x.origin.clone();r.bottom>x.origin.y;)x.origin.x=y.x,p(),x.origin.y+=c}if(o&&\"none\"!=o)if(\"url\"==o.type){if(/^url\\(\\\"data:image\\/svg/i.test(o.url))return;var u=pt[o.url];u&&u.width>0&&u.height>0&&c(t,r,u.width,u.height,function(t,e){t.append(new at.Image(o.url,e))})}else{if(\"linear\"!=o.type)return;c(t,r,r.width,r.height,$(o))}}function l(){function t(t){k(i,function(){i.style.position=\"relative\";var e=i.ownerDocument.createElement(dt);e.style.position=\"absolute\",e.style.boxSizing=\"border-box\",\"outside\"==n?(e.style.width=\"6em\",e.style.left=\"-6.8em\",e.style.textAlign=\"right\"):e.style.left=\"0px\",t(e),i.insertBefore(e,i.firstChild),et(e,r),i.removeChild(e)})}function e(t){var e,n=i.parentNode.children,r=i.getAttribute(\"kendo-split-index\");if(null!=r)return t(0|r,n.length);for(e=0;n.length>e;++e)if(n[e]===i)return t(e,n.length)}var n,o=_(N,\"list-style-type\");if(\"none\"!=o)switch(n=_(N,\"list-style-position\"),o){case\"circle\":case\"disc\":case\"square\":t(function(t){t.style.fontSize=\"60%\",t.style.lineHeight=\"200%\",t.style.paddingRight=\"0.5em\",t.style.fontFamily=\"DejaVu Serif\",t.innerHTML={disc:\"●\",circle:\"◯\",square:\"■\"}[o]});break;case\"decimal\":case\"decimal-leading-zero\":t(function(t){e(function(e){++e,\"decimal-leading-zero\"==o&&2>(e+\"\").length&&(e=\"0\"+e),t.innerHTML=e+\".\"})});break;case\"lower-roman\":case\"upper-roman\":t(function(t){e(function(e){e=ut(e+1),\"upper-roman\"==o&&(e=e.toUpperCase()),t.innerHTML=e+\".\"})});break;case\"lower-latin\":case\"lower-alpha\":case\"upper-latin\":case\"upper-alpha\":t(function(t){e(function(e){e=m(e),/^upper/i.test(o)&&(e=e.toUpperCase()),t.innerHTML=e+\".\"})})}}function c(t,e,n){function o(t){return{x:t.y,y:t.x}}var h,l,c,u,f,d,p,m;if(0!==t.width&&0!==t.height&&(a(t),h=H.width>0&&(e&&\"ltr\"==Q||n&&\"rtl\"==Q),l=G.width>0&&(n&&\"ltr\"==Q||e&&\"rtl\"==Q),0!==F.width||0!==H.width||0!==G.width||0!==j.width)){if(F.color==G.color&&F.color==j.color&&F.color==H.color&&F.width==G.width&&F.width==j.width&&F.width==H.width&&h&&l)return t=P(t,F.width/2),c=L(i,t,F.width/2),c.options.stroke={color:F.color,width:F.width},void r.append(c);if(0===q.x&&0===U.x&&0===W.x&&0===Y.x&&2>F.width&&2>H.width&&2>G.width&&2>j.width)return F.width>0&&r.append(new at.Path({stroke:{width:F.width,color:F.color}}).moveTo(t.left,t.top+F.width/2).lineTo(t.right,t.top+F.width/2)),j.width>0&&r.append(new at.Path({stroke:{width:j.width,color:j.color}}).moveTo(t.left,t.bottom-j.width/2).lineTo(t.right,t.bottom-j.width/2)),h&&r.append(new at.Path({stroke:{width:H.width,color:H.color}}).moveTo(t.left+H.width/2,t.top).lineTo(t.left+H.width/2,t.bottom)),void(l&&r.append(new at.Path({stroke:{width:G.width,color:G.color}}).moveTo(t.right-G.width/2,t.top).lineTo(t.right-G.width/2,t.bottom)));u=D(t,q,U,W,Y),f=u.tl,d=u.tr,p=u.br,m=u.bl,s(F.color,t.width,F.width,H.width,G.width,f,d,[1,0,0,1,t.left,t.top]),s(j.color,t.width,j.width,G.width,H.width,p,m,[-1,0,0,-1,t.right,t.bottom]),s(H.color,t.height,H.width,j.width,F.width,o(m),o(f),[0,-1,1,0,t.left,t.bottom]),s(G.color,t.height,G.width,F.width,j.width,o(d),o(p),[0,1,-1,0,t.right,t.top])}}var u,d,p,g,v,y,w,C,E,A,N=b(i),F=T(N,\"top\"),G=T(N,\"right\"),j=T(N,\"bottom\"),H=T(N,\"left\"),q=S(N,\"top-left\"),U=S(N,\"top-right\"),Y=S(N,\"bottom-left\"),W=S(N,\"bottom-right\"),Q=_(N,\"direction\"),Z=_(N,\"background-color\");if(Z=f(Z),u=rt(_(N,\"background-image\")),d=ot(_(N,\"background-repeat\")),p=ot(_(N,\"background-position\")),g=ot(_(N,\"background-origin\")),v=ot(_(N,\"background-size\")),ct.msie&&10>ct.version&&(p=ot(i.currentStyle.backgroundPosition)),y=P(i.getBoundingClientRect(),\"border-*-width\",i),function(){var t,n,i,o,s,a,h,l=_(N,\"clip\"),c=/^\\s*rect\\((.*)\\)\\s*$/.exec(l);c&&(t=c[1].split(/[ ,]+/g),n=\"auto\"==t[0]?y.top:e(t[0])+y.top,i=\"auto\"==t[1]?y.right:e(t[1])+y.left,o=\"auto\"==t[2]?y.bottom:e(t[2])+y.top,s=\"auto\"==t[3]?y.left:e(t[3])+y.left,a=new at.Group,h=(new at.Path).moveTo(s,n).lineTo(i,n).lineTo(i,o).lineTo(s,o).close(),z(a,h),r.append(a),r=a,x(h))}(),A=_(N,\"display\"),\"table-row\"==A)for(w=[],C=0,E=i.children;E.length>C;++C)w.push(E[C].getBoundingClientRect());else w=i.getClientRects(),1==w.length&&(w=[i.getBoundingClientRect()]);for(w=o(w),C=0;w.length>C;++C)c(w[C],0===C,C==w.length-1);return w.length>0&&\"list-item\"==A&&l(w[0]),function(){function t(){var t=L(i,y,\"padding\"),e=new at.Group;z(e,t),r.append(e),r=e,x(t)}V(i)?t():/^(hidden|auto|scroll)/.test(_(N,\"overflow\"))?t():/^(hidden|auto|scroll)/.test(_(N,\"overflow-x\"))?t():/^(hidden|auto|scroll)/.test(_(N,\"overflow-y\"))&&t()}(),X(i,r)||J(i,r),r}function $(t){return function(i,r){var o,s,a,h,l,c,u,f,d,p,m,g,v,x=r.width(),y=r.height();switch(t.type){case\"linear\":switch(o=null!=t.angle?t.angle:n.PI,t.to){case\"top\":o=0;break;case\"left\":o=-n.PI/2;break;case\"bottom\":o=n.PI;break;case\"right\":o=n.PI/2;break;case\"top left\":case\"left top\":o=-n.atan2(y,x);break;case\"top right\":case\"right top\":o=n.atan2(y,x);break;case\"bottom left\":case\"left bottom\":o=n.PI+n.atan2(y,x);break;case\"bottom right\":case\"right bottom\":o=n.PI-n.atan2(y,x)}t.reverse&&(o-=n.PI),o%=2*n.PI,0>o&&(o+=2*n.PI),s=n.abs(x*n.sin(o))+n.abs(y*n.cos(o)),a=n.atan(x*n.tan(o)/y),h=n.sin(a),l=n.cos(a),c=n.abs(h)+n.abs(l),u=c/2*h,f=c/2*l,o>n.PI/2&&3*n.PI/2>=o&&(u=-u,f=-f),d=[],p=0,m=t.stops.map(function(n,i){var r,o=n.percent;return o?o=e(o)/100:n.length?o=e(n.length)/s:0===i?o=0:i==t.stops.length-1&&(o=1),r={color:n.color.toCssRgba(),offset:o},null!=o?(p=o,d.forEach(function(t,e){var n=t.stop;n.offset=t.left+(p-t.left)*(e+1)/(d.length+1)}),d=[]):d.push({left:p,stop:r}),r}),g=[.5-u,.5+f],v=[.5+u,.5-f],i.append(at.Path.fromRect(r).stroke(null).fill(new at.LinearGradient({start:g,end:v,stops:m,userSpace:!1})));break;case\"radial\":window.console&&window.console.log&&window.console.log(\"Radial gradients are not yet supported in HTML renderer\")}}}function X(e,n){var i,r,o,s;return e.getAttribute(kendo.attr(\"role\"))&&(i=kendo.widgetInstance(t(e)),i&&(i.exportDOMVisual||i.exportVisual))?(r=i.exportDOMVisual?i.exportDOMVisual():i.exportVisual())?(o=new at.Group,o.children.push(r),s=e.getBoundingClientRect(),o.transform(ht.transform().translate(s.left,s.top)),n.append(o),!0):!1:void 0}function U(t,e,n){var i=E(t),r=new ht.Rect([i.left,i.top],[i.width,i.height]),o=new at.Image(e,r);z(o,L(t,i,\"content\")),n.append(o)}function Y(t,n){var i=b(t),r=b(n),o=e(_(i,\"z-index\")),s=e(_(r,\"z-index\")),a=_(i,\"position\"),h=_(r,\"position\");return isNaN(o)&&isNaN(s)?/static|absolute/.test(a)&&/static|absolute/.test(h)?0:\"static\"==a?-1:\"static\"==h?1:0:isNaN(o)?0===s?0:s>0?-1:1:isNaN(s)?0===o?0:o>0?1:-1:e(o)-e(s)}function V(t){return/^(?:textarea|select|input)$/i.test(t.tagName)}function W(t){return t.selectedOptions&&t.selectedOptions.length>0?t.selectedOptions[0]:t.options[t.selectedIndex]}function Q(t,e){var i=b(t),r=_(i,\"color\"),o=t.getBoundingClientRect();\"checkbox\"==t.type?(e.append(at.Path.fromRect(new ht.Rect([o.left+1,o.top+1],[o.width-2,o.height-2])).stroke(r,1)),t.checked&&e.append((new at.Path).stroke(r,1.2).moveTo(o.left+.22*o.width,o.top+.55*o.height).lineTo(o.left+.45*o.width,o.top+.75*o.height).lineTo(o.left+.78*o.width,o.top+.22*o.width))):(e.append(new at.Circle(new ht.Circle([(o.left+o.right)/2,(o.top+o.bottom)/2],n.min(o.width-2,o.height-2)/2)).stroke(r,1)),t.checked&&e.append(new at.Circle(new ht.Circle([(o.left+o.right)/2,(o.top+o.bottom)/2],n.min(o.width-8,o.height-8)/2)).fill(r).stroke(null)))}function Z(t,e){var n,i,r,o,s,a=t.tagName.toLowerCase();if(\"input\"==a&&(\"checkbox\"==t.type||\"radio\"==t.type))return Q(t,e);if(n=t.parentNode,i=t.ownerDocument,r=i.createElement(dt),r.style.cssText=j(b(t)),\"input\"==a&&(r.style.whiteSpace=\"pre\"),\"select\"!=a&&\"textarea\"!=a||(r.style.overflow=\"auto\"),\"select\"==a)if(t.multiple)for(s=0;t.options.length>s;++s)o=i.createElement(dt),o.style.cssText=j(b(t.options[s])),o.style.display=\"block\",o.textContent=t.options[s].textContent,r.appendChild(o);else o=W(t),o&&(r.textContent=o.textContent);else r.textContent=t.value;n.insertBefore(r,t),r.scrollLeft=t.scrollLeft,r.scrollTop=t.scrollTop,t.style.display=\"none\",J(r,e),t.style.display=\"\",n.removeChild(r)}function J(t,e){var n,i,r,o,s,a,h,l,c;switch(mt._stackingContext.element===t&&(mt._stackingContext.group=e),t.tagName.toLowerCase()){case\"img\":U(t,t.src,e);break;case\"canvas\":try{U(t,t.toDataURL(\"image/png\"),e)}catch(u){}break;case\"textarea\":case\"input\":\ncase\"select\":Z(t,e);break;default:for(n=[],i=[],r=[],o=[],s=t.firstChild;s;s=s.nextSibling)switch(s.nodeType){case 3:/\\S/.test(s.data)&&K(t,s,e);break;case 1:a=b(s),h=_(a,\"display\"),l=_(a,\"float\"),c=_(a,\"position\"),\"static\"!=c?o.push(s):\"inline\"!=h?\"none\"!=l?i.push(s):n.push(s):r.push(s)}ft(n,Y).forEach(function(t){et(t,e)}),ft(i,Y).forEach(function(t){et(t,e)}),ft(r,Y).forEach(function(t){et(t,e)}),ft(o,Y).forEach(function(t){et(t,e)})}}function K(t,i,r){function o(t){var e,i,r,o;if(ct.msie||ct.chrome){for(e=t.getClientRects(),i={top:+(1/0),right:-(1/0),bottom:-(1/0),left:+(1/0)},r=0;e.length>r;++r)o=e[r],1>=o.width||o.bottom===E||(i.left=n.min(o.left,i.left),i.top=n.min(o.top,i.top),i.right=n.max(o.right,i.right),i.bottom=n.max(o.bottom,i.bottom));return i.width=i.right-i.left,i.height=i.bottom-i.top,i}return t.getBoundingClientRect()}function s(){var t,e,r,s,h,l,d,p=u,m=c.substr(u).search(/\\S/);if(u+=m,0>m||u>=f)return!0;if(v.setStart(i,u),v.setEnd(i,u+1),t=o(v),e=!1,w&&(m=c.substr(u).search(/\\s/),m>=0&&(v.setEnd(i,u+m),r=o(v),r.bottom==t.bottom&&(t=r,e=!0,u+=m))),!e){if(m=function g(e,n,r){v.setEnd(i,n);var s=o(v);return s.bottom!=t.bottom&&n>e?g(e,e+n>>1,n):s.right!=t.right?(t=s,r>n?g(n,n+r>>1,r):n):n}(u,n.min(f,u+S),f),m==u)return!0;if(u=m,m=(\"\"+v).search(/\\s+$/),0===m)return;m>0&&(v.setEnd(i,v.startOffset+m),t=o(v))}if(ct.msie&&(t=v.getClientRects()[0]),s=\"\"+v,/^(?:pre|pre-wrap)$/i.test(C)){if(/\\t/.test(s)){for(h=0,m=p;v.startOffset>m;++m)l=c.charCodeAt(m),9==l?h+=8-h%8:10==l||13==l?h=0:h++;for(;(m=s.search(\"\t\"))>=0;)d=\"        \".substr(0,8-(h+m)%8),s=s.substr(0,m)+d+s.substr(m+1)}}else s=s.replace(/\\s+/g,\" \");e||(E=t.bottom),a(s,t)}function a(t,e){var n,i,o;ct.msie&&!isNaN(p)&&(n=kendo.util.measureText(t,{font:m}),i=(e.top+e.bottom-n.height)/2,e={top:i,right:e.right,bottom:i+n.height,left:e.left,height:n.height,width:e.right-e.left}),o=new it(t,new ht.Rect([e.left,e.top],[e.width,e.height]),{font:m,fill:{color:g}}),r.append(o),h(e)}function h(t){function e(e,n){var i,o;e&&(i=d/12,o=new at.Path({stroke:{width:i,color:e}}),n-=i,o.moveTo(t.left,n).lineTo(t.right,n),r.append(o))}e(mt.underline,t.bottom),e(mt[\"line-through\"],t.bottom-t.height/2.7),e(mt.overline,t.top)}var l,c,u,f,d,p,m,g,v,x,w,C,T,k,S,E;if(!y()&&(l=b(t),!(e(_(l,\"text-indent\"))<-500)&&(c=i.data,u=0,f=c.search(/\\S\\s*$/)+1,f&&(d=_(l,\"font-size\"),p=_(l,\"line-height\"),m=[_(l,\"font-style\"),_(l,\"font-variant\"),_(l,\"font-weight\"),d,_(l,\"font-family\")].join(\" \"),d=e(d),p=e(p),0!==d)))){for(g=_(l,\"color\"),v=t.ownerDocument.createRange(),x=_(l,\"text-align\"),w=\"justify\"==x,C=_(l,\"white-space\"),ct.msie&&(T=l.textOverflow,\"ellipsis\"==T&&(k=t.style.textOverflow,t.style.textOverflow=\"clip\")),S=t.getBoundingClientRect().width/d*5,0===S&&(S=500),E=null;!s(););ct.msie&&\"ellipsis\"==T&&(t.style.textOverflow=k)}}function tt(t,n,i){var r,o,s,a,h,l;for(\"auto\"!=i?(r=mt._stackingContext.group,i=e(i)):(r=n,i=0),o=r.children,s=0;o.length>s&&!(null!=o[s]._dom_zIndex&&o[s]._dom_zIndex>i);++s);return a=new at.Group,r.insertAt(a,s),a._dom_zIndex=i,r!==n&&mt._clipbox&&(h=mt._matrix.invert(),l=mt._clipbox.transformCopy(h),z(a,at.Path.fromRect(l))),a}function et(t,n){var i,r,o,s,a,h,f,d=b(t),p=_(d,\"counter-reset\");p&&u(ot(p,/^\\s+/),c,0),i=_(d,\"counter-increment\"),i&&u(ot(i,/^\\s+/),l,1),/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(t.tagName)||null!=mt._clipbox&&(r=e(_(d,\"opacity\")),o=_(d,\"visibility\"),s=_(d,\"display\"),0!==r&&\"hidden\"!=o&&\"none\"!=s&&(a=A(d),f=_(d,\"z-index\"),(a||1>r)&&\"auto\"==f&&(f=0),h=tt(t,n,f),1>r&&h.opacity(r*h.opacity()),g(t,d,h),a?k(t,function(){var e,n,i,r;C(t.style,\"transform\",\"none\",\"important\"),C(t.style,\"transition\",\"none\",\"important\"),\"static\"==_(d,\"position\")&&C(t.style,\"position\",\"relative\",\"important\"),e=t.getBoundingClientRect(),n=e.left+a.origin[0],i=e.top+a.origin[1],r=[1,0,0,1,-n,-i],r=nt(r,a.matrix),r=nt(r,[1,0,0,1,n,i]),r=R(h,r),mt._matrix=mt._matrix.multiplyCopy(r),H(t,h)}):H(t,h),v()))}function nt(t,e){var n=t[0],i=t[1],r=t[2],o=t[3],s=t[4],a=t[5],h=e[0],l=e[1],c=e[2],u=e[3],f=e[4],d=e[5];return[n*h+i*c,n*l+i*u,r*h+o*c,r*l+o*u,s*h+a*c+f,s*l+a*u+d]}var it,rt,ot,st,at=kendo.drawing,ht=kendo.geometry,lt=Array.prototype.slice,ct=kendo.support.browser,ut=kendo.util.arabicToRoman,ft=kendo.util.mergeSort,dt=\"KENDO-PSEUDO-ELEMENT\",pt={},mt={};mt._root=mt,it=at.Text.extend({nodeType:\"Text\",init:function(t,e,n){at.Text.fn.init.call(this,t,e.getOrigin(),n),this._pdfRect=e},rect:function(){return this._pdfRect},rawBBox:function(){return this._pdfRect}}),at.drawDOM=r,r.getFontFaces=o,rt=function(){function t(t){function p(){var e=a.exec(t);e&&(t=t.substr(e[1].length))}function m(e){p();var n=e.exec(t);return n?(t=t.substr(n[1].length),n[1]):void 0}function g(){var e,r,o=kendo.parseColor(t,!0);return o?(t=t.substr(o.match[0].length),o=o.toRGB(),(e=m(i))||(r=m(n)),{color:o,length:e,percent:r}):void 0}function v(e){var i,s,a,u,f,d,p=[],v=!1;if(m(h)){for(i=m(o),i?(i=N(i),m(c)):(s=m(r),\"to\"==s?s=m(r):s&&/^-/.test(e)&&(v=!0),a=m(r),m(c)),/-moz-/.test(e)&&null==i&&null==s&&(u=m(n),f=m(n),v=!0,\"0%\"==u?s=\"left\":\"100%\"==u&&(s=\"right\"),\"0%\"==f?a=\"top\":\"100%\"==f&&(a=\"bottom\"),m(c));t&&!m(l)&&(d=g());)p.push(d),m(c);return{type:\"linear\",angle:i,to:s&&a?s+\" \"+a:s?s:a?a:null,stops:p,reverse:v}}}function x(){if(m(h)){var t=m(f);return t=t.replace(/^['\"]+|[\"']+$/g,\"\"),m(l),{type:\"url\",url:t}}}var y,w=t;return s(d,w)?d[w]:((y=m(e))?y=v(y):(y=m(u))&&(y=x()),d[w]=y||{type:\"none\"})}var e=/^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/,n=/^([-0-9.]+%)/,i=/^([-0-9.]+px)/,r=/^(left|right|top|bottom|to|center)\\W/,o=/^([-0-9.]+(deg|grad|rad|turn))/,a=/^(\\s+)/,h=/^(\\()/,l=/^(\\))/,c=/^(,)/,u=/^(url)\\(/,f=/^(.*?)\\)/,d={},p={};return function(e){return s(p,e)?p[e]:p[e]=ot(e).map(t)}}(),ot=function(){var t={};return function(e,n){function i(t){return f=t.exec(e.substr(l))}function r(t){return t.replace(/^\\s+|\\s+$/g,\"\")}var o,a,h,l,c,u,f;if(n||(n=/^\\s*,\\s*/),o=e+n,s(t,o))return t[o];for(a=[],h=0,l=0,c=0,u=!1;e.length>l;)!u&&i(/^[\\(\\[\\{]/)?(c++,l++):!u&&i(/^[\\)\\]\\}]/)?(c--,l++):!u&&i(/^[\\\"\\']/)?(u=f[0],l++):\"'\"==u&&i(/^\\\\\\'/)?l+=2:'\"'==u&&i(/^\\\\\\\"/)?l+=2:\"'\"==u&&i(/^\\'/)?(u=!1,l++):'\"'==u&&i(/^\\\"/)?(u=!1,l++):i(n)?(!u&&!c&&l>h&&(a.push(r(e.substring(h,l))),h=l+f[0].length),l+=f[0].length):l++;return l>h&&a.push(r(e.substring(h,l))),t[o]=a}}(),st=function(){var t={};return function(e){var n,i=t[e];return i||((n=/url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(e))?i=t[e]=n[2]:(n=/url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(e))&&(i=t[e]=n[2])),i}}()}(window.kendo.jQuery,parseFloat,Math)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"drawing/animation.min\",[\"drawing/geometry.min\",\"drawing/core.min\"],t)}(function(){!function(t){var e=t.noop,n=window.kendo,i=n.Class,r=n.util,o=n.animationFrame,s=n.deepExtend,a=i.extend({init:function(t,e){var n=this;n.options=s({},n.options,e),n.element=t},options:{duration:500,easing:\"swing\"},setup:e,step:e,play:function(){var e=this,n=e.options,i=t.easing[n.easing],s=n.duration,a=n.delay||0,h=r.now()+a,l=h+s;0===s?(e.step(1),e.abort()):setTimeout(function(){var t=function(){var n,a,c,u;e._stopped||(n=r.now(),a=r.limitValue(n-h,0,s),c=a/s,u=i(c,a,0,1,s),e.step(u),l>n?o(t):e.abort())};t()},a)},abort:function(){this._stopped=!0},destroy:function(){this.abort()}}),h=function(){this._items=[]};h.prototype={register:function(t,e){this._items.push({name:t,type:e})},create:function(t,e){var n,i,r,o=this._items;if(e&&e.type)for(i=e.type.toLowerCase(),r=0;o.length>r;r++)if(o[r].name.toLowerCase()===i){n=o[r];break}return n?new n.type(t,e):void 0}},h.current=new h,a.create=function(t,e,n){return h.current.create(t,e,n)},s(n.drawing,{Animation:a,AnimationFactory:h})}(window.kendo.jQuery)},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()}),function(t,define){define(\"kendo.drawing.min\",[\"kendo.color.min\",\"util/main.min\",\"util/text-metrics.min\",\"util/base64.min\",\"mixins/observers.min\",\"drawing/geometry.min\",\"drawing/core.min\",\"drawing/mixins.min\",\"drawing/shapes.min\",\"drawing/parser.min\",\"drawing/search.min\",\"drawing/svg.min\",\"drawing/canvas.min\",\"drawing/vml.min\",\"drawing/html.min\",\"drawing/animation.min\"],t)}(function(){},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()});\n//# sourceMappingURL=kendo.drawing.min.js.map\n","import { baseCleanProps } from \"app2/src/api/Api\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\nimport {\n  IJobObjectData,\n  ILevelData,\n  ILocationData,\n  JobAttributeLinkRecordType,\n  JobAttributeRecordType,\n} from \"app2/src/records/JobAttribute\";\nimport { orgJobAttributeLinkKey, JobAttributeTypes } from \"app2/src/records/OrgRecord\";\nimport { JobAttribute } from \"../records/JobAttribute\";\n\nexport interface IJobTypeIndexResponse {\n  job_types: IJobObjectData[];\n}\nexport interface ILevelIndexResponse {\n  levels: ILevelData[];\n}\nexport interface ILocationIndexResponse {\n  locations: ILocationData[];\n}\nexport interface IJobTypeResponse {\n  job_type: IJobObjectData;\n}\nexport interface ILevelResponse {\n  level: ILevelData;\n}\nexport interface ILocationResponse {\n  location: ILocationData;\n}\n\nexport const orgUrl = \"api/v1/orgs/:org_id/\";\n\nexport const load = async <T>(orgId: number, jobAttrType: JobAttributeTypes): Promise<T> => {\n  const actionUrl = fetcher.joinUrls(orgUrl.replace(\":org_id\", orgId.toString()), `${jobAttrType}s`);\n  return fetcher.get<T>(actionUrl, {});\n};\n\nexport const create = async <T>(\n  orgId: number,\n  jobAttributeRecord: JobAttributeRecordType,\n  jobAttrType: JobAttributeTypes,\n): Promise<T> => {\n  const actionUrl = fetcher.joinUrls(orgUrl.replace(\":org_id\", orgId.toString()), `${jobAttrType}s`);\n  const object = cleanProps(jobAttributeRecord);\n  const data = {};\n  data[jobAttrType] = object;\n  return fetcher.post<T>(actionUrl, { ...data });\n};\n\nexport const update = async <T>(\n  orgId: number,\n  jobAttributeRecord: JobAttributeRecordType,\n  jobAttributeLinkRecord: JobAttributeLinkRecordType,\n  jobAttrType: JobAttributeTypes,\n): Promise<T> => {\n  const actionUrl = fetcher.joinUrls(\n    orgUrl.replace(\":org_id\", orgId.toString()),\n    `${jobAttrType}s/${jobAttributeRecord.id.toString()}`,\n  );\n  const object = cleanProps(jobAttributeRecord);\n\n  if (jobAttributeLinkRecord) {\n    const link = cleanProps(jobAttributeLinkRecord);\n    object[`${orgJobAttributeLinkKey(jobAttrType)}s_attributes`] = [link];\n  }\n\n  const data = {};\n  data[jobAttrType] = object;\n  return fetcher.patch<T>(actionUrl, { ...data });\n};\n\nexport const removeJobAttribute = async <T>(\n  orgId: number,\n  jobAttributeId: number | string,\n  jobAttrType: JobAttributeTypes,\n): Promise<T> => {\n  const actionUrl = fetcher.joinUrls(\n    orgUrl.replace(\":org_id\", orgId.toString()),\n    `${jobAttrType}s/${jobAttributeId}`,\n    \"remove\",\n  );\n  return fetcher.delete(actionUrl);\n};\n\nexport const addJobAttribute = async <T>(\n  orgId: number,\n  jobAttributeId: number | string,\n  jobAttrType: JobAttributeTypes,\n): Promise<T> => {\n  const actionUrl = fetcher.joinUrls(\n    orgUrl.replace(\":org_id\", orgId.toString()),\n    `${jobAttrType}s/${jobAttributeId}`,\n    \"add\",\n  );\n  return fetcher.post(actionUrl);\n};\n\nexport const destroy = async <T>(\n  orgId: number,\n  jobAttrId: number | string,\n  jobAttrType: JobAttributeTypes,\n): Promise<T> => {\n  const actionUrl = fetcher.joinUrls(\n    orgUrl.replace(\":org_id\", orgId.toString()),\n    `${jobAttrType}s/${jobAttrId.toString()}`,\n  );\n\n  return fetcher.delete<T>(actionUrl);\n};\n\nexport const cleanProps = (jobAttributeRecord: JobAttributeRecordType | JobAttributeLinkRecordType): JobAttribute => {\n  let jobAttribute = jobAttributeRecord.toJS() as any;\n  jobAttribute = baseCleanProps(jobAttribute);\n\n  return jobAttribute;\n};\n","import { handleErrors } from \"app2/src/reducers/Utils\";\nimport * as jobAttributeService from \"app2/src/api/jobAttribute.service\";\nimport { RootDispatchType } from \"../store\";\nimport { ThunkResult } from \"./index\";\nimport { ActionsUnion, createAction } from \"./Utils\";\nimport { Actions as viewActions } from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { JobAttributeTypes } from \"app2/src/records/OrgRecord\";\nimport {\n  JobAttribute,\n  JobAttributeRecordType,\n  JobAttributeLinkRecordType,\n  JobAttributeLink,\n} from \"../records/JobAttribute\";\nimport { toTitleCase } from \"app2/src/helpers/Format\";\n\nexport const FETCH_JOB_ATTRIBUTES = \"@job_attribute/FETCH_JOB_ATTRIBUTES\";\nexport const FETCH_JOB_ATTRIBUTE = \"@job_attribute/FETCH_JOB_ATTRIBUTE\";\nexport const RECEIVE_JOB_ATTRIBUTES = \"@job_attribute/RECEIVE_JOB_ATTRIBUTES\";\nexport const RECEIVE_JOB_ATTRIBUTE = \"@job_attribute/RECEIVE_JOB_ATTRIBUTE\";\nexport const RECEIVE_ACTIVE_ORG_JOB_ATTRIBUTE = \"@job_attribute/RECEIVE_ACTIVE_ORG_JOB_ATTRIBUTE\";\nexport const RECEIVE_AVAILABLE_ORG_JOB_ATTRIBUTE = \"@job_attribute/RECEIVE_AVAILABLE_ORG_JOB_ATTRIBUTE\";\nexport const REMOVE_AVAILABLE_ORG_JOB_ATTRIBUTE = \"@job_attribute/REMOVE_AVAILABLE_ORG_JOB_ATTRIBUTE\";\nexport const REMOVE_ACTIVE_JOB_ATTRIBUTE = \"@job_attribute/REMOVE_JOB_ATTRIBUTE\";\nexport const ADD_JOB_ATTRIBUTE = \"@job_attribute/ADD_JOB_ATTRIBUTE\";\nexport const RESET_JOB_ATTRIBUTE = \"@job_attribute/RESET_JOB_ATTRIBUTE\";\nexport const RECEIVE_JOB_ATTRIBUTE_ERROR = \"@job_attribute/RECEIVE_JOB_ATTRIBUTE_ERROR\";\nexport const UPDATE_FORM = \"@job_attribute/UPDATE_FORM\";\n\nexport const Actions = {\n  fetchJobAttributes: (orgId: number, jobAttrType: JobAttributeTypes) =>\n    createAction(FETCH_JOB_ATTRIBUTES, { orgId, jobAttrType }),\n  fetchJobAttribute: (jobAttributeId: number | string, jobAttrType: JobAttributeTypes) =>\n    createAction(FETCH_JOB_ATTRIBUTE, { jobAttributeId, jobAttrType }),\n  receiveJobAttributes: (orgId: number, jobAttributes: JobAttribute[], jobAttrType: JobAttributeTypes) =>\n    createAction(RECEIVE_JOB_ATTRIBUTES, { orgId, jobAttributes, jobAttrType }),\n  receiveJobAttribute: (jobAttribute: Partial<JobAttribute>, orgId: number, jobAttrType: JobAttributeTypes) =>\n    createAction(RECEIVE_JOB_ATTRIBUTE, { jobAttribute, orgId, jobAttrType }),\n  receiveActiveOrgJobAttribute: (orgId: number, linkData: JobAttributeLink, jobAttrType: JobAttributeTypes) =>\n    createAction(RECEIVE_ACTIVE_ORG_JOB_ATTRIBUTE, { orgId, linkData, jobAttrType }),\n  receiveAvailableOrgJobAttribute: (orgId: number, jobAttributeId: number | string, jobAttrType: JobAttributeTypes) =>\n    createAction(RECEIVE_AVAILABLE_ORG_JOB_ATTRIBUTE, { orgId, jobAttributeId, jobAttrType }),\n  removeAvailableOrgJobAttribute: (orgId: number, jobAttributeId: number | string, jobAttrType: JobAttributeTypes) =>\n    createAction(REMOVE_AVAILABLE_ORG_JOB_ATTRIBUTE, { orgId, jobAttributeId, jobAttrType }),\n  removeActiveJobAttribute: (orgId: number, jobAttributeId: number | string, jobAttrType: JobAttributeTypes) =>\n    createAction(REMOVE_ACTIVE_JOB_ATTRIBUTE, { orgId, jobAttributeId, jobAttrType }),\n  updateForm: (event: { rootPath: (string | number)[]; name: string; value: string }) =>\n    createAction(UPDATE_FORM, { event }),\n  receiveJobAttributeErrors: (jobAttrType: JobAttributeTypes, id: number | string) =>\n    createAction(RECEIVE_JOB_ATTRIBUTE_ERROR, { jobAttrType, id }),\n  resetJobAttribute: (jobAttrType: JobAttributeTypes, id: number | string) =>\n    createAction(RESET_JOB_ATTRIBUTE, { jobAttrType, id }),\n};\n\nexport const AsyncActions = {\n  getJobAttributes: (orgId: number, jobAttrType: JobAttributeTypes): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchJobAttributes(orgId, jobAttrType));\n      try {\n        const response = (await jobAttributeService.load(orgId, jobAttrType))[`${jobAttrType}s`];\n        dispatch(Actions.receiveJobAttributes(orgId, response, jobAttrType));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  createJobAttribute: (\n    orgId: number,\n    object: JobAttributeRecordType,\n    jobAttrType: JobAttributeTypes,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      const id = object.id || 0;\n      dispatch(Actions.fetchJobAttribute(id, jobAttrType));\n      try {\n        const response = (\n          await jobAttributeService.create<jobAttributeService.ILocationResponse>(orgId, object, jobAttrType)\n        )[jobAttrType];\n        dispatch(Actions.receiveJobAttribute(response, orgId, jobAttrType));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.receiveJobAttributeErrors(jobAttrType, -1));\n        dispatch(Actions.resetJobAttribute(jobAttrType, -1));\n      }\n    };\n  },\n  updateJobAttribute: (\n    orgId: number,\n    jobAttr: JobAttributeRecordType,\n    jobAttrLink: JobAttributeLinkRecordType | null,\n    jobAttrType: JobAttributeTypes,\n    displayFlash = true,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchJobAttribute(jobAttr.id, jobAttrType));\n      try {\n        const response = (\n          await jobAttributeService.update<jobAttributeService.ILocationResponse>(\n            orgId,\n            jobAttr,\n            jobAttrLink,\n            jobAttrType,\n          )\n        )[jobAttrType];\n        dispatch(Actions.receiveJobAttributes(orgId, [response], jobAttrType));\n        if (displayFlash) {\n          dispatch(viewActions.flashAddAlert(FlashLevels.success, `Edited ${toTitleCase(jobAttrType)} Successfully`));\n        }\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.receiveJobAttributeErrors(jobAttrType, jobAttr.get(\"id\", 0)));\n        dispatch(Actions.resetJobAttribute(jobAttrType, jobAttr.get(\"id\", 0)));\n      }\n    };\n  },\n  activateJobAttribute: (\n    orgId: number,\n    jobAttributeId: number | string,\n    jobAttrType: JobAttributeTypes,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchJobAttribute(jobAttributeId, jobAttrType));\n\n      try {\n        const response = (await jobAttributeService.addJobAttribute(orgId, jobAttributeId, jobAttrType))[jobAttrType];\n\n        dispatch(Actions.receiveJobAttribute(response, orgId, jobAttrType));\n        dispatch(Actions.removeAvailableOrgJobAttribute(orgId, jobAttributeId, jobAttrType));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.receiveJobAttributeErrors(jobAttrType, jobAttributeId));\n      }\n    };\n  },\n  removeJobAttribute: (\n    orgId: number,\n    jobAttributeId: string | number,\n    jobAttrType: JobAttributeTypes,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(Actions.fetchJobAttribute(jobAttributeId, jobAttrType));\n\n        await jobAttributeService.removeJobAttribute(orgId, jobAttributeId, jobAttrType);\n\n        dispatch(Actions.removeActiveJobAttribute(orgId, jobAttributeId, jobAttrType));\n        dispatch(Actions.receiveAvailableOrgJobAttribute(orgId, jobAttributeId, jobAttrType));\n\n        dispatch(viewActions.flashAddAlert(FlashLevels.success, `Removed ${toTitleCase(jobAttrType)} Successfully`));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.receiveJobAttributeErrors(jobAttrType, jobAttributeId));\n      }\n    };\n  },\n  destroyJobAttribute: (\n    orgId: number,\n    jobAttributeId: string | number,\n    jobAttrType: JobAttributeTypes,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(Actions.fetchJobAttribute(jobAttributeId, jobAttrType));\n\n        await jobAttributeService.destroy(orgId, jobAttributeId, jobAttrType);\n\n        dispatch(Actions.removeAvailableOrgJobAttribute(orgId, jobAttributeId, jobAttrType));\n\n        dispatch(viewActions.flashAddAlert(FlashLevels.success, `Deleted ${toTitleCase(jobAttrType)} Successfully`));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.receiveJobAttributeErrors(jobAttrType, jobAttributeId));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { ILocationData } from \"app2/src/records/Location\";\nimport { ActionsUnion, createAction } from \"./Utils\";\n\nexport const LOCATION_CHANGE = \"@routers/LOCATION_CHANGE\";\n\nexport const Actions = {\n  locationChange: (action: string, location: Partial<ILocationData>) =>\n    createAction(LOCATION_CHANGE, { location, action }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nexport const push = _.partial(Actions.locationChange, \"push\");\nexport const replace = _.partial(Actions.locationChange, \"replace\");\n\nexport const routerActions = { push, replace };\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { Map, List, get, getIn } from \"immutable\";\nimport { AccessRecord, UserRecord, emptyAccessValue } from \"app2/src/records/UserRecord\";\nimport { OrgRecord } from \"app2/src/records/OrgRecord\";\nimport { byId as orgsById } from \"app2/src/selectors/org.selectors\";\nimport { user, currentUser } from \"./userCommon.selectors\";\n\n// legacy code requires these\nexport { user, currentUser };\n\n/**\n * Loads the accesses byId\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {Map<number, AccessRecord>} byId\n */\nexport const byId = (state: RootState) => state.getIn([\"accesses\", \"byId\"]);\n\n/**\n * Loads the accesses from lastSavedByID\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {Map<number, AccessRecord>} lastSavedById\n */\nexport const lastSavedById = (state: RootState) => state.getIn([\"accesses\", \"lastSavedById\"]);\n\n/**\n * Loads an access from byId\n *\n * @param {RootState} state The RootState\n * @param {{accessId: number}} options\n * @returns {AccessRecord} access\n */\nexport const selectById = createSelector(\n  [byId, (state, props) => ({ state, props })],\n  (accessesById: Map<number, AccessRecord>, stateProps: any) => {\n    return get(accessesById, stateProps.props.accessId, emptyAccessValue);\n  },\n);\n\n/**\n * this selector should only be used for old code that expects\n * denormalized redux state. no new code (components) should be using this.\n * new code should instead access redux state in a normalized fashion\n * using selectors\n */\nexport const currentUserAccesses = createSelector(\n  [currentUser, byId, orgsById],\n  (\n    currentUser: UserRecord,\n    accessesById: Map<number, AccessRecord>,\n    orgsById: Map<number, OrgRecord>,\n  ): List<AccessRecord> => {\n    if (!currentUser || currentUser.accesses.size === 0) {\n      return List();\n    }\n\n    return List(\n      currentUser.accesses.map((accessId: number) => {\n        let access = accessesById.get(accessId);\n        access = access.set(\"org\", orgsById.get(access.org_id));\n\n        return access;\n      }),\n    );\n  },\n);\n\n/**\n * Returns a list of all the user's accesses\n *\n * @param {RootState} state The RootState\n * @param {{userId: number}} options\n * @returns {List<AccessRecord>} accesses\n */\nexport const userAccesses = createSelector(\n  [user, byId],\n  (user: UserRecord, accessesById: Map<number, AccessRecord>): List<AccessRecord> => {\n    if (!user) {\n      return List();\n    }\n\n    return user.get(\"accesses\", List()).map((accessId: number) => accessesById.get(accessId));\n  },\n);\n\n/**\n * hydrates a user's accesses ( should only be used when you know it's limited, e.g. on a 'new user')\n *\n * @param {RootState} state The RootState\n * @param {{userId: number}} options\n * @returns {List<AccessRecord>} list of accesses\n */\nexport const hydratedUserAccesses = createSelector(\n  [userAccesses, orgsById],\n  (userAccesses, orgsById: Map<number, OrgRecord>): List<AccessRecord> => {\n    if (userAccesses.size === 0) {\n      return List();\n    }\n\n    return List(userAccesses.map((access: AccessRecord) => access.set(\"org\", orgsById.get(access.org_id))));\n  },\n);\n\n/**\n * hydrates a users w/ any access that have been changed (are dirty).\n * For usage when saving back to the server and it's needed in 1 object.\n *\n * @param {RootState} state The RootState\n * @param {{userId: number}} options\n * @returns {UserRecord} user\n */\nexport const dirtyUserAccesses = createSelector(\n  [user, byId, lastSavedById],\n  (\n    user: UserRecord,\n    accessesById: Map<number, AccessRecord>,\n    lastSavedById: Map<number, AccessRecord>,\n  ): List<AccessRecord> => {\n    if (!user || user.accesses.size === 0) {\n      return List();\n    }\n\n    return List<AccessRecord>(\n      user.accesses\n        .map((accessId: number) => {\n          const access = accessesById.get(accessId);\n          const lastSaved = lastSavedById.get(accessId);\n\n          if (access.equals(lastSaved)) {\n            return null;\n          }\n\n          return access;\n        })\n        .filter((a: AccessRecord | null) => a !== null),\n    );\n  },\n);\n\n/**\n * Gets the access that matches the given org and user id\n *\n * @param {RootState} state The RootState\n * @param {{userId: number, orgId: number}} options\n * @returns {AccessRecord} access\n */\nexport const accessByOrgId = createSelector(\n  [userAccesses, (state, props) => ({ state, props })],\n  (userAccesses: List<AccessRecord>, { props }: any): AccessRecord => {\n    return userAccesses.find((access) => access.get(\"org_id\") === props.orgId);\n  },\n);\n\n/**\n * Gets the access config using accessByOrgId\n *\n * @param {RootState} state The RootState\n * @param {{userId: number, orgId: number}} options\n * @returns config value\n */\nexport const accessConfig = createSelector(\n  [accessByOrgId, (state, props) => ({ state, props })],\n  (access: AccessRecord, { props }: any) => {\n    if (props?.path) {\n      return getIn(access, [\"config\"].concat(props.path), props?.notSet) || props?.notSet;\n    }\n    return access?.get(\"config\");\n  },\n);\n","import { Record, Map } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IDefaultsData>): DefaultsRecord => {\n  const record: IDefaultsRecord = { ...(json as any) };\n\n  if (json.options) {\n    record.options = Map(json.options).map((opt) => defaultOptionFromJSON(opt));\n  }\n\n  return new DefaultsRecord(record);\n};\n\nexport interface IDefaultsData {\n  options: { string: IDefaultOptionData };\n}\n\nexport interface IDefaultsRecord {\n  options: Map<string, DefaultOptionRecord>;\n}\n\nconst defaultDefaultsRecordProps: IDefaultsRecord = {\n  options: Map<string, DefaultOptionRecord>(),\n};\n\nexport class DefaultsRecord extends Record(defaultDefaultsRecordProps) implements IDefaultsRecord {}\n\nexport const defaultOptionFromJSON = (json: Partial<IDefaultOptionData>): DefaultOptionRecord => {\n  const record: IDefaultOptionRecord = { ...(json as any) };\n\n  return new DefaultOptionRecord(record);\n};\n\nexport interface IDefaultOptionData {\n  option_group_uuid: string;\n  quantity: number;\n}\n\nexport interface IDefaultOptionRecord {\n  option_group_uuid: string;\n  quantity: number;\n}\n\nconst defaultDefaultOptionProps: IDefaultOptionRecord = {\n  option_group_uuid: \"\",\n  quantity: 0,\n};\n\nexport class DefaultOptionRecord extends Record(defaultDefaultOptionProps) implements IDefaultOptionRecord {}\n","import { Record, List, fromJS, Map } from \"immutable\";\nimport {\n  fromJSON as discountFromJson,\n  IEstimateDiscountData,\n  EstimateDiscountRecord,\n  calculate,\n} from \"./EstimateDiscount\";\nimport { IEstimateGroupData } from \"./EstimateGroup\";\nimport { fromJSON as defaultFromJSON, DefaultsRecord, IDefaultsData } from \"./Defaults\";\nimport { fromJSON as paymentTermsFromJSON, PaymentTermRecord, IPaymentTermData } from \"./PaymentTerm\";\nimport { IJobData, JobRecord } from \"./Job\";\nimport { IEstimateFinanceOptionData } from \"./EstimateFinanceOption\";\nimport { IDocumentData } from \"./Document\";\nimport { Nullable } from \"./index\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport const fromJSON = (json: Partial<IEstimateData>): EstimateRecord => {\n  const record: IEstimateRecord = { ...(json as any) };\n\n  if (json.estimated_start && typeof json.estimated_start === \"string\") {\n    const timezoneDate = new Date(json.estimated_start);\n    record.estimated_start = new Date(\n      `${json.estimated_start}T00:00:00.000${getTimezoneString(timezoneDate.getTimezoneOffset())}`,\n    );\n  }\n  if (json.estimated_end && typeof json.estimated_end === \"string\") {\n    const timezoneDate = new Date(json.estimated_end);\n    record.estimated_end = new Date(\n      `${json.estimated_end}T00:00:00.000${getTimezoneString(timezoneDate.getTimezoneOffset())}`,\n    );\n  }\n\n  if (json.payment_terms && !Record.isRecord(json.payment_terms)) {\n    record.payment_terms = paymentTermsFromJSON(json.payment_terms);\n  }\n\n  if (json.groups) {\n    record.group_ids = List(json.groups.map((g) => g.id));\n  }\n\n  if (json.discounts) {\n    record.discounts = List(json.discounts.map((d) => discountFromJson(d)));\n  }\n\n  if (json.finance_options) {\n    record.finance_option_ids = List(json.finance_options.map((o) => o.id));\n  }\n\n  if (json.defaults) {\n    record.defaults = defaultFromJSON(json.defaults);\n  }\n\n  if (json.metadata) {\n    record.metadata = fromJS(json.metadata);\n  }\n\n  return new EstimateRecord(record);\n};\n\nexport const getCreatedLineItemDocuments = (\n  rawEstimateData: Partial<IEstimateData>,\n  duplicatedEstimate: Partial<IEstimateData>,\n): IDocumentData[] => {\n  const documentsArray: IDocumentData[] = [];\n\n  _.each(rawEstimateData.groups, (group) => {\n    const g_sort_order = group.sort_order;\n    const duplicatedGroup = duplicatedEstimate.groups.find((dGroup) => dGroup.sort_order === g_sort_order);\n    if (duplicatedGroup) {\n      _.each(group.line_items, (lineItem) => {\n        const li_sort_order = lineItem.sort_order;\n        const duplicatedLineItem = duplicatedGroup.line_items.find(\n          (dLineItem) => dLineItem.sort_order === li_sort_order,\n        );\n        const rawDocuments = lineItem.documents || [];\n        if (rawDocuments.length && duplicatedLineItem) {\n          rawDocuments\n            .filter((doc) => doc.id < 0)\n            .forEach((doc) => {\n              doc.documentable_id = duplicatedLineItem.id;\n              delete doc.id;\n\n              documentsArray.push(doc);\n            });\n        }\n      });\n    }\n  });\n\n  return documentsArray;\n};\n\nexport const getTimezoneString = (timezoneOffset: number): string => {\n  let timezoneString = \"\";\n\n  if (timezoneOffset > 0) {\n    timezoneString += \"-\";\n  } else {\n    timezoneString += \"+\";\n  }\n  const hours = Math.abs(timezoneOffset) / 60;\n  if (hours < 10) {\n    timezoneString += \"0\";\n  }\n  timezoneString += `${hours.toString()}:00`;\n\n  return timezoneString;\n};\n\nexport const markupMultiplier = (markup: number): number => {\n  return (markup || 0) / 100 + 1;\n};\n\nexport const addDiscount = (estimate: EstimateRecord, discount: Partial<IEstimateDiscountData>): EstimateRecord => {\n  estimate = estimate.update(\"discounts\", (discounts: List<EstimateDiscountRecord>) => {\n    return discounts.push(calculate(discount, estimate.running_discountable));\n  });\n\n  return estimate;\n};\n\nexport const updateDiscount = (estimate: EstimateRecord, discount: EstimateDiscountRecord): EstimateRecord => {\n  estimate = estimate.update(\"discounts\", (discounts: List<EstimateDiscountRecord>) => {\n    return discounts.map((d) => {\n      if (d.uuid === discount.uuid) {\n        return discount;\n      }\n      return d;\n    });\n  });\n\n  return updateDiscounts(estimate);\n};\n\nexport const removeDiscount = (estimate: EstimateRecord, uuid: string): EstimateRecord => {\n  estimate = estimate.update(\"discounts\", (discounts: List<EstimateDiscountRecord>) => {\n    return discounts.filter((d) => d.uuid !== uuid);\n  });\n\n  return updateDiscounts(estimate);\n};\n\nexport const updateDiscounts = (estimate: EstimateRecord) => {\n  const totals = { running_discountable: estimate.discountable_total };\n  estimate = estimate.update(\"discounts\", (discounts: List<EstimateDiscountRecord>) => {\n    return discounts.map((d) => {\n      const discount = calculate(d.toJSON(), totals.running_discountable);\n      totals.running_discountable = roundToDecimals(totals.running_discountable - discount.calculated, -2);\n      return discount;\n    });\n  });\n\n  return estimate.merge(totals);\n};\n\nexport interface IBaseTotals {\n  subtotal: number;\n  total: number;\n  labor_total: number;\n  product_total: number;\n  discountable_total: number;\n}\n\nexport interface IDiscountTotals {\n  discount: number;\n  running_discountable: number;\n}\n\nexport interface ITaxTotals {\n  taxable_amount: number;\n  tax_total: number;\n  total: number;\n}\n\nexport interface IEstimateData {\n  id: number;\n  activated_price_list_id: number;\n  price_list_id: number;\n  customer_name: string;\n  name: string;\n  calc_method: \"standard\" | \"estimate_group\";\n  kind: \"default\" | \"inspection\" | \"survey\";\n  customer_phone: string;\n  org_uid: string;\n  uid: string;\n  payment_terms: IPaymentTermData;\n  estimated_start: Date;\n  estimated_end: Date;\n  groups: IEstimateGroupData[];\n  discounts: IEstimateDiscountData[];\n  job_id: number;\n  job: IJobData;\n  discount: number;\n  subtotal: number;\n  total: number;\n  labor_total: number;\n  product_total: number;\n  discountable_total: number;\n  created_at: Date;\n  updated_at: Date;\n  tax_rate: number;\n  tax_total: number;\n  taxable_amount: number;\n  default_taxable_amount: string;\n  defaults: IDefaultsData;\n  loading?: boolean;\n  finance_options: IEstimateFinanceOptionData[];\n  product_markup: number;\n  labor_markup: number;\n  metadata?: any;\n}\n\nexport interface IEstimateRecord {\n  id: number;\n  activated_price_list_id: number;\n  price_list_id: number;\n  customer_name: string;\n  name: string;\n  calc_method: \"standard\" | \"estimate_group\";\n  kind: \"default\" | \"inspection\" | \"survey\";\n  customer_phone: string;\n  org_uid: string;\n  uid: string;\n  payment_terms: PaymentTermRecord;\n  estimated_start: Date;\n  estimated_end: Date;\n  group_ids: List<number>;\n  discounts: List<EstimateDiscountRecord>;\n  job_id: number;\n  job: JobRecord;\n  discount: number;\n  subtotal: number;\n  total: number;\n  labor_total: number;\n  product_total: number;\n  discountable_total: number;\n  running_discountable: number;\n  created_at: Date;\n  updated_at: Date;\n  tax_rate: number;\n  tax_total: number;\n  taxable_amount: number;\n  default_taxable_amount: string;\n  defaults: DefaultsRecord;\n  loading: boolean;\n  finance_option_ids: List<number>;\n  product_markup: number;\n  labor_markup: number;\n  tempDocumentId: string;\n  metadata: Map<string, any>;\n}\n\nconst defaultEstimateProps: IEstimateRecord = {\n  id: 0,\n  activated_price_list_id: 0,\n  price_list_id: null,\n  customer_name: \"\",\n  name: \"\",\n  calc_method: \"standard\",\n  kind: \"default\",\n  customer_phone: \"\",\n  org_uid: \"\",\n  uid: \"\",\n  payment_terms: paymentTermsFromJSON({}),\n  estimated_start: null,\n  estimated_end: null,\n  group_ids: List<number>(),\n  discounts: List<EstimateDiscountRecord>(),\n  job_id: 0,\n  job: null,\n  discount: null,\n  subtotal: 0,\n  total: 0,\n  labor_total: 0,\n  product_total: 0,\n  discountable_total: 0,\n  running_discountable: 0,\n  created_at: null,\n  updated_at: null,\n  tax_rate: 0,\n  tax_total: 0,\n  taxable_amount: 0,\n  default_taxable_amount: \"\",\n  defaults: new DefaultsRecord(),\n  loading: false,\n  finance_option_ids: List<number>(),\n  product_markup: 1,\n  labor_markup: 1,\n  tempDocumentId: null,\n  metadata: Map<string, any>(),\n};\n\nexport class EstimateRecord extends Record(defaultEstimateProps) implements IEstimateRecord {}\n\nexport type DocType = \"estimate\" | \"contract\" | \"inspection\";\n\nexport enum CommissionMethod {\n  marginWithOverhead = \"margin_with_overhead\",\n  greenline = \"greenline\",\n  formula = \"formula\",\n  custom = \"custom\",\n}\n","import { IOpening } from \"app/src/Models/Opening\";\nimport { ActivatedPriceListRecord } from \"app2/src/records/ActivatedPriceList\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\nimport { findProductBracket, ProductRecord } from \"app2/src/records/Product\";\nimport { RootState } from \"app2/src/reducers\";\nimport { ProductReducerState } from \"app2/src/reducers/product.reducer\";\nimport { activatedPriceList } from \"app2/src/selectors/activatedPriceList.selectors\";\nimport { priceList } from \"app2/src/selectors/priceList.selectors\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\n\nexport const product = (state: ProductReducerState, props: any) => state.getIn([\"products\", \"byId\", props.productId]);\nexport const productsById = (state: ProductReducerState, props: any) => state.getIn([\"products\", \"byId\"]);\n\nexport const cachedProduct = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): ProductRecord => {\n    return product(activatedPriceList, props);\n  },\n);\n\nexport const cachedProductByUuid = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): ProductRecord => {\n    const { productUuid } = props;\n    return productsById(activatedPriceList, {}).find((product: ProductRecord) => {\n      return product.uuid === productUuid;\n    });\n  },\n);\n\nexport const cachedProductChildren = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): List<ProductRecord> => {\n    const parent = product(activatedPriceList, props);\n    return products(activatedPriceList, { ...props, productIds: parent.children_ids });\n  },\n);\n\nexport const cachedRootProducts = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): List<ProductRecord> => {\n    const parent = priceList(activatedPriceList, { ...props, priceListId: activatedPriceList.price_list_id });\n    return products(activatedPriceList, { ...props, productIds: parent.product_ids });\n  },\n);\n\nexport const cachedProducts = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): List<ProductRecord> => {\n    const { productIds } = props;\n    return products(activatedPriceList, { ...props, productIds });\n  },\n);\n\nexport const cachedOpeningParentProducts = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): List<ProductRecord> => {\n    const { openings } = props;\n    let { kinds } = props;\n    if (!kinds) {\n      kinds = [\"window\", \"door\"];\n    }\n\n    if (openings.length === 0) {\n      return List();\n    }\n\n    const parentProducts = productsById(activatedPriceList, {})\n      .filter((product: ProductRecord) => {\n        return kinds.includes(product.kind) && product.children_ids.size > 0;\n      })\n      .map((product) => {\n        return product;\n      })\n      .toList();\n\n    return parentProducts.filter((parent: ProductRecord) => {\n      let matchedCount = 0;\n      openings.forEach((opening: IOpening) => {\n        const children = products(activatedPriceList, { productIds: parent.children_ids });\n        if (findProductBracket(parent, children, opening)) {\n          matchedCount += 1;\n        }\n      });\n      return openings.length === matchedCount;\n    });\n  },\n);\n\nexport const cachedProductLeaves = createSelector(\n  [activatedPriceList],\n  (activatedPriceList: ActivatedPriceListRecord): List<ProductRecord> => {\n    return productsById(activatedPriceList, {})\n      .filter((product: ProductRecord) => {\n        return product.children_ids.size === 0;\n      })\n      .toList();\n  },\n);\n\nexport const products = createSelector(\n  [(state, props) => ({ state, props })],\n  (stateProps: any): List<ProductRecord> => {\n    const { state, props } = stateProps;\n    const { productIds } = props;\n    let { includeParent } = props;\n    if (_.isUndefined(includeParent)) {\n      includeParent = true;\n    }\n    return productIds\n      .map((id: number) => product(state, { productId: id }))\n      .filter((product: ProductRecord) => includeParent || product.children_ids.size === 0);\n  },\n);\n\nexport const cachedAncestors = createSelector(\n  [activatedPriceList, (_: RootState, props: any) => props],\n  (activatedPriceList: ActivatedPriceListRecord, props: any): List<ProductRecord> => {\n    return ancestors(activatedPriceList, props);\n  },\n);\n\nexport const cachedAncestorDocuments = createSelector(\n  [cachedAncestors, (_: RootState, props: any) => props],\n  (cachedAncestors: List<ProductRecord>, props: any): List<DocumentRecord> => {\n    const { display } = props;\n    return cachedAncestors\n      .map((product: ProductRecord) => {\n        return product.documents.filter((doc) => {\n          return doc.display === \"both\" || doc.display === display || display === \"both\";\n        });\n      })\n      .flatten()\n      .groupBy((doc) => doc.md5_sum)\n      .map((x) => x.first())\n      .toList();\n  },\n);\n\nexport const ancestors = createSelector(\n  [(state: ProductReducerState, props: any) => ({ state, props })],\n  (stateProps: any): List<ProductRecord> => {\n    const { state, props } = stateProps;\n    let products = List();\n    const p = product(state, props);\n    products = products.push(p);\n    if (p.parent_id) {\n      products = products.concat(ancestors(state, { ...props, productId: p.parent_id }));\n    }\n    return products;\n  },\n);\n\nexport const ancestralName = createSelector(\n  [ancestors, (_: ProductReducerState, props: any) => props],\n  (ancestors: List<ProductRecord>, props: any): string => {\n    let ancestralName = \"\";\n    let ipn = true;\n    ancestors.forEach((product: ProductRecord, idx: number) => {\n      if (idx === 0) {\n        ancestralName = product.name;\n      } else if (!ipn) {\n        return;\n      } else {\n        ancestralName = product.name + \" > \" + ancestralName;\n      }\n\n      ipn = _.isUndefined(product.include_parent_names) || product.include_parent_names;\n    });\n    return ancestralName;\n  },\n);\n","import { ActivatedPriceListRecord } from \"app2/src/records/ActivatedPriceList\";\nimport { RootState } from \"app2/src/reducers\";\n\nexport const priceList = (state: RootState | ActivatedPriceListRecord, props: any) =>\n  state.getIn([\"priceLists\", \"byId\", props.priceListId]);\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IScreenShareData } from \"../records/ScreenShare\";\n\ninterface IScreenShareResponse {\n  screen_share: IScreenShareData;\n}\n\ninterface IScreenShareTokenResponse {\n  token: string;\n}\n\nclass ScreenShareService {\n  public url = \"api/v1/screen_shares/:id\";\n  public tokenUrl = \"api/v1/screen_shares/token\";\n\n  public create(jobId: number, kind: string): Promise<IScreenShareData> {\n    const actionUrl = this.url.replace(\":id\", \"\");\n\n    return fetcher.post<IScreenShareResponse>(actionUrl, { job_id: jobId, kind: kind }).then(\n      (response) => response.screen_share,\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public load(id: number): Promise<IScreenShareData> {\n    const actionUrl = this.url.replace(\":id\", id.toString());\n\n    return fetcher.get<IScreenShareResponse>(actionUrl).then(\n      (response) => response.screen_share,\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public stop(id: number): Promise<IScreenShareData> {\n    const actionUrl = `${this.url.replace(\":id\", id.toString())}/stop`;\n\n    return fetcher.patch<IScreenShareResponse>(actionUrl).then(\n      (response) => response.screen_share,\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public loadToken(params): Promise<string> {\n    return fetcher.get<IScreenShareTokenResponse>(this.tokenUrl, params).then(\n      (response) => response.token,\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public removeParticipant(id: number, participant_id: string): Promise<boolean> {\n    const actionUrl = `${this.url.replace(\":id\", id.toString())}/remove_participant`;\n    return fetcher\n      .patch<IScreenShareTokenResponse>(actionUrl, {\n        participant_id: participant_id,\n      })\n      .then(\n        () => true,\n        () => false,\n      );\n  }\n\n  public getRoomStatus(uid: string): Promise<boolean> {\n    const actionUrl = `api/v1/screen_shares/room_status/${uid}`;\n    return fetcher.get(actionUrl).then(\n      (result: { exists: boolean }) => {\n        return result.exists;\n      },\n      () => false,\n    );\n  }\n}\n\nexport const screenShareService = new ScreenShareService();\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\nimport { fromJSON as fileFromJSON, FileRecord, IFileData } from \"./File\";\n\nexport const fromJSON = (json: Partial<ISlideData>): SlideRecord => {\n  const data: ISlideRecord = { ...(json as any) };\n\n  if (json.cover_image) {\n    data.cover_image = fileFromJSON(json.cover_image);\n  }\n\n  return new SlideRecord(data);\n};\n\nexport const toJSON = (record: SlideRecord): ISlideData => {\n  const slide: ISlideData = record.toJSON() as any as ISlideData;\n\n  if (slide.id <= 0) {\n    delete slide.id;\n  }\n\n  return slide;\n};\n\nexport interface ISlideData {\n  id: number;\n  cover_image: IFileData;\n  html: string;\n  name: string;\n  presentation_id: number;\n  sort_order: number;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface ISlideRecord {\n  id: number;\n  cover_image: FileRecord;\n  html: string;\n  name: string;\n  presentation_id: Nullable<number>;\n  sort_order: number;\n  loading: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nconst defaultSlideProps: ISlideRecord = {\n  id: 0,\n  cover_image: null,\n  html: \"\",\n  name: \"\",\n  presentation_id: null,\n  sort_order: 0,\n  loading: false,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class SlideRecord extends Record(defaultSlideProps) implements ISlideRecord {}\n","import { Record, List } from \"immutable\";\nimport { Nullable } from \".\";\nimport { fromJSON as fileFromJSON, FileRecord, IFileData } from \"./File\";\nimport { ISlideData, SlideRecord, fromJSON as slideFromJSON, toJSON as slideToJSON } from \"./Slide\";\nimport {\n  IDynamicPresentationLinkData,\n  DynamicPresentationLinkRecord,\n  fromJSON as dplFromJSON,\n  toJSON as dplToJSON,\n} from \"./DynamicPresentationLink\";\nimport { ITaskData } from \"./Task\";\n\nexport const fromJSON = (json: Partial<IPresentationData>): PresentationRecord => {\n  const data: Partial<IPresentationRecord> = { ...(json as any) };\n\n  if (json.cover_image) {\n    data.cover_image = fileFromJSON(json.cover_image);\n  }\n\n  if (json.task) {\n    data.task_id = json.task.id;\n  }\n\n  if (json.file) {\n    data.file = fileFromJSON(json.file);\n  }\n\n  if (json.slides && Array.isArray(json.slides)) {\n    data.slides = List<SlideRecord>(json.slides.map((s) => slideFromJSON(s)));\n  }\n\n  if (json.dynamic_slides && Array.isArray(json.dynamic_slides)) {\n    data.dynamic_slides = List<SlideRecord>(json.dynamic_slides.map((s) => slideFromJSON(s)));\n  }\n\n  if (json.dynamic_links && Array.isArray(json.dynamic_links)) {\n    data.dynamic_links = List<DynamicPresentationLinkRecord>(json.dynamic_links.map((dl) => dplFromJSON(dl)));\n  }\n\n  return new PresentationRecord(data);\n};\n\nexport const toJSON = (record: PresentationRecord): IPresentationData => {\n  const presentation: IPresentationData = record.toJSON() as any as IPresentationData;\n\n  if (presentation.id <= 0) {\n    delete presentation.id;\n  }\n\n  presentation.dynamic_links = record.dynamic_links.map((p) => dplToJSON(p)).toArray();\n\n  presentation.slides = record.slides.map((p) => slideToJSON(p)).toArray();\n\n  return presentation;\n};\n\nexport const toFormData = (record: PresentationRecord): any => {\n  const data = new FormData();\n  if (record.id > 0) {\n    data.set(\"presentation[id]\", record.id as any);\n  }\n  data.set(\"presentation[name]\", record.name);\n  if (record.data) {\n    data.set(\"presentation[file]\", record.data);\n  }\n  if (record.cover_image) {\n    data.set(\"presentation[cover_image]\", record.cover_image as any);\n  }\n  data.set(\"presentation[kind]\", record.kind);\n  if (record.folder_id > 0) {\n    data.set(\"presentation[folder_id]\", record.folder_id.toString());\n  }\n\n  return data;\n};\n\nexport type PresentationKind = \"default\" | \"link\" | \"dynamic\";\nexport type PresentationTarget = \"iframe\" | \"blank\";\n\nexport interface IPresentationOptions {\n  name?: string;\n  kind: PresentationKind;\n  folderId?: number;\n}\n\nexport interface IPresentationData {\n  id: number;\n  cover_image: IFileData;\n  file: IFileData;\n  kind: PresentationKind;\n  target: PresentationTarget;\n  link: string;\n  name: string;\n  org_id: Nullable<number>;\n  job_id: Nullable<number>;\n  folder_id: Nullable<number>;\n  presentation_id: number;\n  url: string;\n  sort_order: number;\n  slides?: ISlideData[];\n  dynamic_links?: IDynamicPresentationLinkData[];\n  dynamic_slides?: ISlideData[];\n  loading?: boolean;\n  selected?: boolean;\n  data?: Nullable<File>;\n  task?: ITaskData;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IPresentationRecord {\n  id: number;\n  cover_image: FileRecord;\n  file: FileRecord;\n  kind: PresentationKind;\n  target: PresentationTarget;\n  link: string;\n  name: string;\n  org_id: Nullable<number>;\n  job_id: Nullable<number>;\n  folder_id: Nullable<number>;\n  presentation_id: Nullable<number>;\n  url: Nullable<string>;\n  sort_order: number;\n  slides: List<SlideRecord>;\n  dynamic_links: List<DynamicPresentationLinkRecord>;\n  dynamic_slides: List<SlideRecord>;\n  loading: boolean;\n  selected: boolean;\n  errors: List<string>;\n  data?: Nullable<File>;\n  task_id?: Nullable<string>;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nconst defaultPresentationProps: IPresentationRecord = {\n  id: 0,\n  cover_image: null,\n  file: null,\n  kind: \"default\",\n  target: \"iframe\",\n  link: \"\",\n  name: \"\",\n  org_id: null,\n  job_id: null,\n  folder_id: null,\n  presentation_id: null,\n  url: null,\n  sort_order: null,\n  slides: List<SlideRecord>(),\n  dynamic_links: List<DynamicPresentationLinkRecord>(),\n  dynamic_slides: List<SlideRecord>(),\n  loading: false,\n  selected: false,\n  errors: List<string>(),\n  data: null,\n  task_id: null,\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class PresentationRecord extends Record(defaultPresentationProps) implements IPresentationRecord {}\n","import { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { getRemoteStorage } from \"app2/src/api/remoteStorage.service\";\nimport { Nullable } from \"app2/src/records\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { LocationStateRecord } from \"app2/src/records/LocationState\";\nimport { IFlashAlertAction } from \"app2/src/records/FlashAlert\";\nimport { ThunkResult } from \"app2/src/reducers/index\";\nimport { ActionsUnion, createAction } from \"../Utils\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nexport const FLASH_ADD_ALERT = \"@components/common/FLASH_ADD_ALERT\";\nexport const FLASH_REMOVE_ALERT = \"@components/common/FLASH_REMOVE_ALERT\";\nexport const FLASH_REMOVE_ALERT_EXTERNAL_ID = \"@components/common/FLASH_REMOVE_ALERT_EXTERNAL_ID\";\nexport const SET_JOB = \"@components/common/SET_JOB\";\nexport const OPEN_SEND_INVITE_MODAL = \"@components/common/OPEN_SEND_INVITE_MODAL\";\nexport const CLOSE_SEND_INVITE_MODAL = \"@components/common/CLOSE_SEND_INVITE_MODAL\";\nexport const OPEN_WEB_CAM_MODAL = \"@components/common/OPEN_WEB_CAM_MODAL\";\nexport const CLOSE_WEB_CAM_MODAL = \"@components/common/CLOSE_WEB_CAM_MODAL\";\nexport const NOTIFIER_ADD_MESSAGE = \"@components/common/NOTIFIER_ADD_MESSAGE\";\nexport const NOTIFIER_REMOVE_MESSAGE = \"@components/common/NOTIFIER_REMOVE_MESSAGE\";\nexport const OPEN_IMPORT_MODAL = \"@components/common/OPEN_IMPORT_MODAL\";\nexport const CLOSE_IMPORT_MODAL = \"@components/common/CLOSE_IMPORT_MODAL\";\nexport const SET_NAV_DISPLAY = \"@components/common/SET_NAV_DISPLAY\";\nexport const SET_SAVED_LOCATION_STATE = \"@views/SET_SAVED_LOCATION_STATE\";\nexport const SET_PAGE_TITLE = \"@views/SET_PAGE_TITLE\";\n\nexport const Actions = {\n  flashAddAlert: (\n    level: FlashLevels,\n    message: string | Array<string>,\n    autoDismiss = true,\n    actionButton?: { text: string; action?: IFlashAlertAction },\n    onDismiss?: IFlashAlertAction,\n    externalId: Nullable<string | number> = undefined,\n  ) => createAction(FLASH_ADD_ALERT, { level, message, autoDismiss, actionButton, onDismiss, externalId }),\n  flashRemoveAlert: (index: number) => createAction(FLASH_REMOVE_ALERT, index),\n  removeFlashAlertByExternalId: (externalId: string | number) =>\n    createAction(FLASH_REMOVE_ALERT_EXTERNAL_ID, { externalId }),\n  setJob: (job: JobRecord) => createAction(SET_JOB, job),\n  openSendInviteModal: (type: \"image_uploader\" | \"screenshare\", options: any = {}) =>\n    createAction(OPEN_SEND_INVITE_MODAL, { type, options }),\n  closeSendInviteModal: (sent: boolean) => createAction(CLOSE_SEND_INVITE_MODAL, { sent }),\n  openWebCamModal: () => createAction(OPEN_WEB_CAM_MODAL),\n  closeWebCamModal: () => createAction(CLOSE_WEB_CAM_MODAL),\n  notifierAddMessage: (msg: string) => createAction(NOTIFIER_ADD_MESSAGE, msg),\n  notifierRemoveMessage: (index: number) => createAction(NOTIFIER_REMOVE_MESSAGE, index),\n  openImportModal: () => createAction(OPEN_IMPORT_MODAL),\n  closeImportModal: () => createAction(CLOSE_IMPORT_MODAL),\n  setNavDisplay: (value: boolean) => createAction(SET_NAV_DISPLAY, { value }),\n  setSavedLocationState: (location: Nullable<LocationStateRecord>) =>\n    createAction(SET_SAVED_LOCATION_STATE, { location }),\n  // Should only be called by PageTitleUpdater\n  setPageTitle: (value: string) => createAction(SET_PAGE_TITLE, { value }),\n};\n\nexport const AsyncActions = {\n  notifierAddRemoteMessage: (msg: string): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType) => {\n      const success = await getRemoteStorage().setItem(NOTIFIER_ADD_MESSAGE, msg);\n      if (!success) {\n        dispatch(Actions.notifierAddMessage(msg));\n      } else {\n        setTimeout(() => {\n          getRemoteStorage().removeItem(NOTIFIER_ADD_MESSAGE);\n        }, 500);\n      }\n    };\n  },\n  // Any component should call this async action NOT the non-async one\n  setPageTitle: (value: string): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType) => {\n      await Promise.resolve();\n      dispatch(Actions.setPageTitle(value));\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.scheduler.dayview.min\",[\"kendo.scheduler.view.min\"],e)}(function(){return function(e,t){function a(e){var t=new Date(1980,1,1,0,0,0);return d(t,D(e)),t}function i(e,t,a){return e>=t&&a>=e}function s(e,t,a,i){return i=i?a>=e:a>e,e>t&&i}function n(e,t,a,i){var s,n=e._continuousEvents,o=n[n.length-1],l=p(t.start.startDate()).getTime();if(i&&o&&p(o.start.startDate()).getTime()==l){for(s=n.length-1;s>-1&&!(n[s].isAllDay||p(n[s].start.startDate()).getTime()<l);s--);n.splice(s+1,0,{element:a,isAllDay:!0,uid:a.attr(r.attr(\"uid\")),start:t.start,end:t.end})}else n.push({element:a,isAllDay:i,uid:a.attr(r.attr(\"uid\")),start:t.start,end:t.end})}function o(e){var t=[],a=e.workWeekStart;for(t.push(a);e.workWeekEnd!=a;)a>6?a-=7:a++,t.push(a);return t}var r=window.kendo,l=r.ui,d=r.date.setTime,h=l.SchedulerView,u=e.extend,c=e.proxy,p=r.date.getDate,f=r.date.MS_PER_MINUTE,m=r.date.MS_PER_DAY,_=\"k-current-time\",g=\"k-current-time-arrow\",v=.8666,D=r.date.getMilliseconds,y=\".kendoMultiDayView\",k=r.template('<div title=\"(#=kendo.format(\"{0:t} - {1:t}\", start, end)#): #=title.replace(/\"/g,\"&\\\\#34;\")#\"><div class=\"k-event-template k-event-time\">#:kendo.format(\"{0:t} - {1:t}\", start, end)#</div><div class=\"k-event-template\">${title}</div></div>'),T=r.template('<div title=\"(#=kendo.format(\"{0:t}\", start)#): #=title.replace(/\"/g,\"&\\\\#34;\")#\"><div class=\"k-event-template\">${title}</div></div>'),w=r.template(\"<span class='k-link k-nav-day'>#=kendo.toString(date, 'ddd M/dd')#</span>\"),S='<div role=\"gridcell\" aria-selected=\"false\" data-#=ns#uid=\"#=uid#\"#if (resources[0]) { #style=\"background-color:#=resources[0].color#; border-color: #=resources[0].color#\"class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\" #} else {#class=\"k-event\"#}#><span class=\"k-event-actions\"># if(data.tail || data.middle) {#<span class=\"k-icon k-i-arrow-w\"></span>#}## if(data.isException()) {#<span class=\"k-icon k-i-exception\"></span># } else if(data.isRecurring()) {#<span class=\"k-icon k-i-refresh\"></span># } #</span>{0}<span class=\"k-event-actions\">#if (showDelete) {#<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>#}## if(data.head || data.middle) {#<span class=\"k-icon k-i-arrow-e\"></span>#}#</span>#if(resizable && !singleDay && !data.tail && !data.middle){#<span class=\"k-resize-handle k-resize-w\"></span>#}##if(resizable && !singleDay && !data.head && !data.middle){#<span class=\"k-resize-handle k-resize-e\"></span>#}#</div>',C='<div role=\"gridcell\" aria-selected=\"false\" data-#=ns#uid=\"#=uid#\" #if (resources[0]) { #style=\"background-color:#=resources[0].color #; border-color: #=resources[0].color#\"class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\"#} else {#class=\"k-event\"#}#><span class=\"k-event-actions\"># if(data.isException()) {#<span class=\"k-icon k-i-exception\"></span># } else if(data.isRecurring()) {#<span class=\"k-icon k-i-refresh\"></span># } #</span>{0}<span class=\"k-event-actions\">#if (showDelete) {#<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>#}#</span><span class=\"k-event-top-actions\"># if(data.tail || data.middle) {#<span class=\"k-icon k-i-arrow-n\"></span># } #</span><span class=\"k-event-bottom-actions\"># if(data.head || data.middle) {#<span class=\"k-icon k-i-arrow-s\"></span># } #</span># if(resizable && !data.tail && !data.middle) {#<span class=\"k-resize-handle k-resize-n\"></span># } ## if(resizable && !data.head && !data.middle) {#<span class=\"k-resize-handle k-resize-s\"></span># } #</div>',x=h.extend({init:function(e,t){var a=this;h.fn.init.call(a,e,t),a.title=a.options.title||a.options.name,a._workDays=o(a.options),a._templates(),a._editable(),a.calculateDateRange(),a._groups(),a._currentTime(!0)},_currentTimeMarkerUpdater:function(){this._updateCurrentTimeMarker(new Date)},_updateCurrentTimeMarker:function(t){var a,i,s,n,o,l,d,h,u,c,p,f,m,D,y,k=this.options;for(k.currentTimeMarker.useLocalTimezone===!1&&(a=k.dataSource.options.schema.timezone,k.dataSource&&a&&(i=r.timezone.offset(t,a),t=r.timezone.convert(t,t.getTimezoneOffset(),i))),this.times.find(\".\"+_).remove(),this.content.find(\".\"+_).remove(),s=k.group&&\"horizontal\"!=k.group.orientation?this.groups.length:1,n=this.times.find(\"tr:first th:first\"),o=this.times.find(\"tr:first th:last\"),l=0;s>l;l++){if(d=this.groups[l],!d)return;if(h=r.date.toUtcTime(t),u=d.timeSlotRanges(h,h+1),0===u.length)return;c=u[0].collection,p=c.slotByStartDate(t),p&&(f=\"<div class='\"+_+\"'></div>\",m=e(f).prependTo(this.times),D=Math.round(u[0].innerRect(t,new Date(t.getTime()+1),!1).top),y={},this._isRtl?(y.right=n.position().left+n.outerHeight()-o.outerHeight(),m.addClass(g+\"-left\")):(y.left=o.position().left,m.addClass(g+\"-right\")),y.top=D-m.outerWidth()*v/2,m.css(y),e(f).prependTo(this.content).css({top:D,height:\"1px\",right:\"1px\",width:this.content[0].scrollWidth,left:0}))}},_currentTime:function(e){var a=this,i=a.options.currentTimeMarker;i!==!1&&i.updateInterval!==t&&(a._currentTimeMarkerUpdater(),e&&(a._currentTimeUpdateTimer=setInterval(c(this._currentTimeMarkerUpdater,a),i.updateInterval)))},_updateResizeHint:function(e,t,a,i){var s,n,o,l,d,u,c,p,f,m,_,g,v=e.isMultiDay(),D=this.groups[t],y=D.ranges(a,i,v,e.isAllDay);for(this._removeResizeHint(),d=0;y.length>d;d++)if(u=y[d],c=u.startSlot(),this._isGroupedByDate()&&v)for(p=c.index;u.end.index>=p;p++)f=u.collection._slots[p],s=f.offsetWidth,n=f.clientHeight,o=f.offsetTop,l=h.fn._createResizeHint.call(this,f.offsetLeft,o,s,n),this._resizeHint=this._resizeHint.add(l);else s=c.offsetWidth,n=c.clientHeight,o=c.offsetTop,v?s=u.innerWidth():(m=u.outerRect(a,i,this.options.snap),o=m.top,n=m.bottom-m.top),l=h.fn._createResizeHint.call(this,c.offsetLeft,o,s,n),this._resizeHint=this._resizeHint.add(l);_=\"t\",g=this.content,v&&(_=\"M/dd\",g=this.element.find(\".k-scheduler-header-wrap:has(.k-scheduler-header-all-day) > div\"),g.length||(g=this.content)),this._resizeHint.appendTo(g),this._resizeHint.find(\".k-label-top,.k-label-bottom\").text(\"\"),this._resizeHint.first().addClass(\"k-first\").find(\".k-label-top\").text(r.toString(r.timezone.toLocalDate(a),_)),this._resizeHint.last().addClass(\"k-last\").find(\".k-label-bottom\").text(r.toString(r.timezone.toLocalDate(i),_))},_updateMoveHint:function(e,t,a){var i,s,n,o,l,d,h,u,c,p=e.isMultiDay(),f=this.groups[t],m=r.date.toUtcTime(e.start)+a,_=m+e.duration(),g=f.ranges(m,_,p,e.isAllDay);for(m=r.timezone.toLocalDate(m),_=r.timezone.toLocalDate(_),this._removeMoveHint(),!p&&(0===D(_)||D(_)<D(this.startTime()))&&g.length>1&&g.pop(),i=0;g.length>i;i++)if(s=g[i],n=s.start,l={left:n.offsetLeft+2,top:n.offsetTop},this._isGroupedByDate()&&p)for(d=n.index;s.end.index>=d;d++)h=s.collection._slots[d],l.left=this._isRtl?.1*h.clientWidth+h.offsetLeft+2:h.offsetLeft+2,l.height=h.offsetHeight,l.width=.9*h.clientWidth-4,o=this._createEventElement(e.clone({start:m,end:_}),!p),this._appendMoveHint(o,l);else this._isRtl&&(l.left=.1*n.clientWidth+n.offsetLeft+2),p?l.width=s.innerWidth()-4:(u=s.outerRect(m,_,this.options.snap),l.top=u.top,l.height=u.bottom-u.top,l.width=.9*n.clientWidth-4),o=this._createEventElement(e.clone({start:m,end:_}),!p),this._appendMoveHint(o,l);c=this.content,p&&(c=this.element.find(\".k-scheduler-header-wrap:has(.k-scheduler-header-all-day) > div\"),c.length||(c=this.content)),this._moveHint.appendTo(c)},_appendMoveHint:function(e,t){e.addClass(\"k-event-drag-hint\"),e.css(t),this._moveHint=this._moveHint.add(e)},_slotByPosition:function(e,t){var a,i,s,n;for(this._isVerticallyGrouped()?(i=this.content.offset(),t+=this.content[0].scrollTop,e+=this.content[0].scrollLeft):i=this.element.find(\".k-scheduler-header-wrap:has(.k-scheduler-header-all-day)\").find(\">div\").offset(),i&&(e-=i.left,t-=i.top),e=Math.ceil(e),t=Math.ceil(t),n=0;this.groups.length>n;n++)if(s=this.groups[n],a=s.daySlotByPosition(e,t,this._isGroupedByDate()))return a;for(i&&(e+=i.left,t+=i.top),i=this.content.offset(),e-=i.left,t-=i.top,this._isVerticallyGrouped()||(t+=this.content[0].scrollTop,e+=this.content[0].scrollLeft),e=Math.ceil(e),t=Math.ceil(t),n=0;this.groups.length>n;n++)if(s=this.groups[n],a=s.timeSlotByPosition(e,t))return a;return null},_groupCount:function(){var e=this.groupedResources,t=this._isGroupedByDate();return e.length?\"vertical\"===this._groupOrientation()?t?this._columnCountForLevel(e.length-1):this._rowCountForLevel(e.length-1):t?this._columnCountForLevel(e.length)/this._columnCountForLevel(0):this._columnCountForLevel(e.length)/this._columnOffsetForResource(e.length):1},_columnCountInResourceView:function(){var e=this.groupedResources,t=this._isGroupedByDate();return!e.length||this._isVerticallyGrouped()?t?this._rowCountForLevel(0):this._columnCountForLevel(0):t?this._columnCountForLevel(0):this._columnOffsetForResource(e.length)},_timeSlotGroups:function(e,t){var a,i,s,n,o,r,l,d,h,u,c=this._timeSlotInterval(),p=e,f=this._isGroupedByDate(),m=this.content.find(\"tr:not(.k-scheduler-header-all-day)\");for(m.attr(\"role\",\"row\"),o=m.length,this._isVerticallyGrouped()&&(f&&(p=t),o=Math.floor(o/p)),r=0;p>r;r++)for(l=0,d=0,this._isVerticallyGrouped()?l=r:d=r,s=l*o;(l+1)*o>s;){if(h=m[s].children,s%o===0&&(i=D(new Date(+this.startTime()))),u=0,f)if(this._isVerticallyGrouped())for(n=0;e>n;n++)a=this.groups[n],this._addTimeSlotGroup(a,h,n,i,c,r);else for(a=this.groups[r],n=d;e*t>n;n+=e)this._addTimeSlotGroup(a,h,n,i,c,u),u++;else for(a=this.groups[r],n=d*t;(d+1)*t>n;n++)this._addTimeSlotGroup(a,h,n,i,c,u),u++;i+=c,s++}},_addTimeSlotGroup:function(e,t,a,i,s,n){var o=t[a],r=e.getTimeSlotCollection(n),l=this._dates[n],d=Date.UTC(l.getFullYear(),l.getMonth(),l.getDate()),h=d+i,u=h+s;o.setAttribute(\"role\",\"gridcell\"),o.setAttribute(\"aria-selected\",!1),r.addTimeSlot(o,h,u)},_addDaySlotGroup:function(e,t,a,i,s){var n=t[a],o=this._dates[s],l=Date.UTC(o.getFullYear(),o.getMonth(),o.getDate());n.setAttribute(\"role\",\"gridcell\"),n.setAttribute(\"aria-selected\",!1),e.addDaySlot(n,l,l+r.date.MS_PER_DAY)},_daySlotGroups:function(e,t){var a,i,s,n,o,r,l,d,h,u=e,c=this._isGroupedByDate();for(this._isVerticallyGrouped()?(c&&(u=t),a=this.element.find(\".k-scheduler-header-all-day\")):a=this.element.find(\".k-scheduler-header-all-day tr\"),a.attr(\"role\",\"row\"),s=0;u>s;s++)if(n=0,this._isVerticallyGrouped()&&(n=s),l=a[n].children,d=0,this._isVerticallyGrouped()||(d=s),h=0,c)if(this._isVerticallyGrouped())for(i=0;e>i;i++)o=this.groups[i],r=o.getDaySlotCollection(0),this._addDaySlotGroup(r,l,i,t,s);else for(o=this.groups[s],r=o.getDaySlotCollection(0),i=d;e*t>i;i+=e)this._addDaySlotGroup(r,l,i,t,h),h++;else for(o=this.groups[s],r=o.getDaySlotCollection(0),i=d*t;(d+1)*t>i;i++)this._addDaySlotGroup(r,l,i,t,h),h++},_groups:function(){var e,t,a,i=this._groupCount(),s=this._columnCountInResourceView();for(this.groups=[],e=0;i>e;e++){for(t=this._addResourceView(e),a=0;s>a;a++)t.addTimeSlotCollection(this._dates[a],r.date.addDays(this._dates[a],1));this.options.allDaySlot&&t.addDaySlotCollection(this._dates[0],r.date.addDays(this._dates[this._dates.length-1],1))}this._timeSlotGroups(i,s),this.options.allDaySlot&&this._daySlotGroups(i,s)},options:{name:\"MultiDayView\",selectedDateFormat:\"{0:D}\",selectedShortDateFormat:\"{0:d}\",allDaySlot:!0,showWorkHours:!1,title:\"\",startTime:r.date.today(),endTime:r.date.today(),minorTickCount:2,majorTick:60,majorTimeHeaderTemplate:\"#=kendo.toString(date, 't')#\",minorTimeHeaderTemplate:\"&nbsp;\",groupHeaderTemplate:\"#=text#\",slotTemplate:\"&nbsp;\",allDaySlotTemplate:\"&nbsp;\",eventTemplate:k,allDayEventTemplate:T,dateHeaderTemplate:w,editable:!0,workDayStart:new Date(1980,1,1,8,0,0),workDayEnd:new Date(1980,1,1,17,0,0),workWeekStart:1,workWeekEnd:5,footer:{command:\"workDay\"},messages:{allDay:\"all day\",showFullDay:\"Show full day\",showWorkDay:\"Show business hours\"},currentTimeMarker:{updateInterval:1e4,useLocalTimezone:!0}},events:[\"remove\",\"add\",\"edit\"],_templates:function(){var e=this.options,t=u({},r.Template,e.templateSettings);this.eventTemplate=this._eventTmpl(e.eventTemplate,C),this.allDayEventTemplate=this._eventTmpl(e.allDayEventTemplate,S),this.majorTimeHeaderTemplate=r.template(e.majorTimeHeaderTemplate,t),this.minorTimeHeaderTemplate=r.template(e.minorTimeHeaderTemplate,t),this.dateHeaderTemplate=r.template(e.dateHeaderTemplate,t),this.slotTemplate=r.template(e.slotTemplate,t),this.allDaySlotTemplate=r.template(e.allDaySlotTemplate,t),this.groupHeaderTemplate=r.template(e.groupHeaderTemplate,t)},_editable:function(){this.options.editable&&(this._isMobile()?this._touchEditable():this._mouseEditable())},_mouseEditable:function(){var t=this;t.element.on(\"click\"+y,\".k-event a:has(.k-si-close)\",function(a){t.trigger(\"remove\",{uid:e(this).closest(\".k-event\").attr(r.attr(\"uid\"))}),a.preventDefault()}),t.options.editable.create!==!1&&t.element.on(\"dblclick\"+y,\".k-scheduler-content td\",function(a){var i,s;e(this).parent().hasClass(\"k-scheduler-header-all-day\")||(i=t._slotByPosition(a.pageX,a.pageY),i&&(s=t._resourceBySlot(i),t.trigger(\"add\",{eventInfo:u({start:i.startDate(),end:i.endDate()},s)})),a.preventDefault())}).on(\"dblclick\"+y,\".k-scheduler-header-all-day td\",function(e){var a,i=t._slotByPosition(e.pageX,e.pageY);i&&(a=t._resourceBySlot(i),t.trigger(\"add\",{eventInfo:u({},{isAllDay:!0,start:r.date.getDate(i.startDate()),end:r.date.getDate(i.startDate())},a)})),e.preventDefault()}),t.options.editable.update!==!1&&t.element.on(\"dblclick\"+y,\".k-event\",function(a){t.trigger(\"edit\",{uid:e(this).closest(\".k-event\").attr(r.attr(\"uid\"))}),a.preventDefault()})},_touchEditable:function(){var a=this,i=0;r.support.mobileOS.android&&(i=5),a.options.editable.create!==!1&&(a._addUserEvents=new r.UserEvents(a.element,{threshold:i,filter:\".k-scheduler-content td\",tap:function(i){var s,n,o,r;e(i.target).parent().hasClass(\"k-scheduler-header-all-day\")||(s=i.x.location!==t?i.x.location:i.x,n=i.y.location!==t?i.y.location:i.y,o=a._slotByPosition(s,n),o&&(r=a._resourceBySlot(o),a.trigger(\"add\",{eventInfo:u({start:o.startDate(),end:o.endDate()},r)})),i.preventDefault())}}),a._allDayUserEvents=new r.UserEvents(a.element,{threshold:i,filter:\".k-scheduler-header-all-day td\",tap:function(e){var i,s=e.x.location!==t?e.x.location:e.x,n=e.y.location!==t?e.y.location:e.y,o=a._slotByPosition(s,n);o&&(i=a._resourceBySlot(o),a.trigger(\"add\",{eventInfo:u({},{isAllDay:!0,start:r.date.getDate(o.startDate()),end:r.date.getDate(o.startDate())},i)})),e.preventDefault()}})),a.options.editable.update!==!1&&(a._editUserEvents=new r.UserEvents(a.element,{threshold:i,filter:\".k-event\",tap:function(t){var i=e(t.target).closest(\".k-event\");i.hasClass(\"k-event-active\")||a.trigger(\"edit\",{uid:i.attr(r.attr(\"uid\"))}),t.preventDefault()}}))},_layout:function(e){var t,a,i,s=[],n=[],o=this.options,l=this,d=l._isGroupedByDate();for(t=0;e.length>t;t++)a={},a.text=l.dateHeaderTemplate({date:e[t]}),r.date.isToday(e[t])&&(a.className=\"k-today\"),s.push(a);return i=this.groupedResources,o.allDaySlot&&n.push({text:o.messages.allDay,allDay:!0,cellContent:function(t){var a=t;return t=i.length&&\"vertical\"!==l._groupOrientation()?t%e.length:t,l.allDaySlotTemplate({date:e[t],resources:function(){return l._resourceBySlot({groupIndex:a})}})}}),this._forTimeRange(this.startTime(),this.endTime(),function(e,t,a,i){var s=t?l.majorTimeHeaderTemplate:l.minorTimeHeaderTemplate,o={text:s({date:e}),className:i?\"k-slot-cell\":\"\"};n.push(o)}),i.length&&(\"vertical\"===this._groupOrientation()?d?(n=this._createDateLayout(s,n),s=this._createColumnsLayout(i,null,this.groupHeaderTemplate)):n=this._createRowsLayout(i,n,this.groupHeaderTemplate):s=d?this._createColumnsLayout(i,s,this.groupHeaderTemplate,s):this._createColumnsLayout(i,s,this.groupHeaderTemplate)),{columns:s,rows:n}},_footer:function(){var t,a,i,s=this.options;s.footer!==!1&&(t='<div class=\"k-header k-scheduler-footer\">',a=s.footer.command,a&&\"workDay\"===a?(t+='<ul class=\"k-reset k-header\">',t+='<li class=\"k-state-default k-scheduler-fullday\"><a href=\"#\" class=\"k-link\"><span class=\"k-icon k-i-clock\"></span>',t+=(s.showWorkHours?s.messages.showFullDay:s.messages.showWorkDay)+\"</a></li>\",t+=\"</ul>\"):t+=\"&nbsp;\",t+=\"</div>\",this.footer=e(t).appendTo(this.element),i=this,this.footer.on(\"click\"+y,\".k-scheduler-fullday\",function(e){e.preventDefault(),i.trigger(\"navigate\",{view:i.name||s.name,date:i.startDate(),isWorkDay:!s.showWorkHours})}))},_forTimeRange:function(e,t,i,s){var n,o,r,l,h,u,c,p,_,g,v,y,k,T,w,S;for(e=a(e),t=a(t),n=this,o=D(e),r=D(t),l=n.options.minorTickCount,h=n.options.majorTick*f,u=h/l||1,c=new Date(+e),p=c.getDate(),g=0,y=\"\",v=m/u,o!=r&&(o>r&&(r+=m),v=(r-o)/u),v=Math.round(v);v>g;g++)k=g%(h/u),T=0===k,w=l-1>k,S=k===l-1,y+=i(c,T,w,S),d(c,u,!1);return r&&(_=D(c),p<c.getDate()&&(_+=m),_>r&&(c=new Date(+t))),s&&(y+=s(c)),y},_content:function(e){var t,a,i,s=this,n=s.options,o=s.startTime(),r=this.endTime(),l=1,d=1,h=e.length,u=\"\",c=this.groupedResources,p=this.allDaySlotTemplate,f=!1,m=s._isGroupedByDate(),_=0;for(c.length&&(f=\"vertical\"===s._groupOrientation(),f?(d=this._rowCountForLevel(this.rowLevels.length-2),m&&(l=this._columnCountForLevel(this.columnLevels.length-1)),n.allDaySlot&&(t=function(t){var a,i='<tr class=\"k-scheduler-header-all-day\">',n=m?0:t,o=function(){return s._resourceBySlot({groupIndex:n})};if(m)for(;l>n;n++)i+=\"<td>\"+p({date:e[_],resources:o})+\"</td>\";else for(a=0;e.length>a;a++)i+=\"<td>\"+p({date:e[a],resources:o})+\"</td>\";return i+\"</tr>\"})):l=m?this._columnCountForLevel(this.columnLevels.length-1)/this._columnCountForLevel(0):this._columnCountForLevel(this.columnLevels.length-2)),u+=\"<tbody>\",a=function(t,a){var n,o,r,d=\"\",u=0;if(d=\"<tr\"+(a?' class=\"k-middle-row\"':\"\")+\">\",m)for(n=0,o=h;o>n;n++){for(u=0;l>u;u++)r=n,f&&(r=_),d=s._addCellsToContent(d,e,t,r,u,i);if(f)break}else for(;l>u;u++)for(n=0,o=h;o>n;n++)d=s._addCellsToContent(d,e,t,n,u,i);return d+=\"</tr>\"},i=0;d>i;i++)u+=t?t(i):\"\",u+=this._forTimeRange(o,r,a),f&&_++;u+=\"</tbody>\",this.content.find(\"table\").append(u)},_addCellsToContent:function(e,t,a,i,s,n){var o,l=this,d=\"\",h=this.slotTemplate,u=\"vertical\"===this._groupOrientation(),c=function(e){return function(){return l._resourceBySlot({groupIndex:e})}};return r.date.isToday(t[i])&&(d+=\"k-today\"),(r.date.getMilliseconds(a)<r.date.getMilliseconds(this.options.workDayStart)||r.date.getMilliseconds(a)>=r.date.getMilliseconds(this.options.workDayEnd)||!this._isWorkDay(t[i]))&&(d+=\" k-nonwork-hour\"),e+=\"<td\"+(\"\"!==d?' class=\"'+d+'\"':\"\")+\">\",o=r.date.getDate(t[i]),r.date.setTime(o,r.date.getMilliseconds(a)),e+=h({date:o,resources:c(u&&!l._isGroupedByDate()?n:s)}),e+=\"</td>\"},_isWorkDay:function(e){var t,a=e.getDay(),i=this._workDays;for(t=0;i.length>t;t++)if(i[t]===a)return!0;return!1},_render:function(t){var a,i=this;t=t||[],this._dates=t,this._startDate=t[0],this._endDate=t[t.length-1||0],this.createLayout(this._layout(t)),this._content(t),this._footer(),this.refreshLayout(),a=this.element.find(\".k-scheduler-header-all-day td\"),a.length&&(this._allDayHeaderHeight=a.first()[0].clientHeight),i.element.on(\"click\"+y,\".k-nav-day\",function(t){var a,s=e(t.currentTarget).closest(\"th\"),n=s.offset(),o=0,r=s.outerHeight();i._isGroupedByDate()&&(i._isVerticallyGrouped()?(o=i.times.outerWidth(),r=0):r=i.datesHeader.outerHeight()),a=i._slotByPosition(n.left+o,n.top+r),i.trigger(\"navigate\",{view:\"day\",date:a.startDate()})})},startTime:function(){var e=this.options;return e.showWorkHours?e.workDayStart:e.startTime},endTime:function(){var e=this.options;return e.showWorkHours?e.workDayEnd:e.endTime},startDate:function(){return this._startDate},endDate:function(){return this._endDate},_end:function(e){var t=D(this.endTime())||m;return e&&(t=0),new Date(this._endDate.getTime()+t)},nextDate:function(){return r.date.nextDay(this.endDate())},previousDate:function(){return r.date.previousDay(this.startDate())},calculateDateRange:function(){this._render([this.options.date])},destroy:function(){var e=this;e._currentTimeUpdateTimer&&clearInterval(e._currentTimeUpdateTimer),e.datesHeader&&e.datesHeader.off(y),e.element&&e.element.off(y),e.footer&&e.footer.remove(),h.fn.destroy.call(this),this._isMobile()&&e.options.editable&&(e.options.editable.create!==!1&&(e._addUserEvents.destroy(),e._allDayUserEvents.destroy()),e.options.editable.update!==!1&&e._editUserEvents.destroy())},inRange:function(e){var t,a,i,s,n=h.fn.inRange.call(this,e);return e.isAllDay?n:(t=D(this.startTime()),a=D(this.endTime())||r.date.MS_PER_DAY,i=D(e.start),s=D(e.end)||r.date.MS_PER_DAY,n&&i>=t&&a>=s)},selectionByElement:function(e){var t=e.offset();return this._slotByPosition(t.left,t.top)},_timeSlotInterval:function(){var e=this.options;return e.majorTick/e.minorTickCount*f},_timeSlotIndex:function(e){var t=this.options,a=D(e),i=D(this.startTime()),s=t.majorTick/t.minorTickCount*f;return(a-i)/s},_slotIndex:function(e,t){return t?this._dateSlotIndex(e):this._timeSlotIndex(e)},_dateSlotIndex:function(e,t){var a,s,n,o,l=this._dates||[],d=1;for(a=0,s=l.length;s>a;a++)if(n=r.date.getDate(l[a]),o=new Date(r.date.getDate(l[a]).getTime()+m-(t?0:1)),i(e,n,o))return a*d;return-1},_positionAllDayEvent:function(t,a){var i,s,n,o,r,l,d,u=a.innerWidth(),c=a.start.index,p=a.end.index,f=h.collidingEvents(a.events(),c,p),m=this._headerColumnCount||0,_=2,g=c!==p?5:4,v=this._allDayHeaderHeight,D=a.startSlot();for(t.css({left:D.offsetLeft+_,width:u-g}),a.addEvent({slotIndex:c,start:c,end:p,element:t}),f.push({slotIndex:c,start:c,end:p,element:t}),i=h.createRows(f),i.length&&i.length>m&&(this._headerColumnCount=i.length),s=a.start.offsetTop,n=0,o=i.length;o>n;n++)for(r=i[n].events,l=0,d=r.length;d>l;l++)e(r[l].element).css({top:s+n*v})},_arrangeColumns:function(e,t,a,i){var s,n,o,r,l,d,u,c,p,f,m,_=i.start;for(e={element:e,slotIndex:_.index,start:t,end:t+a},n=_.clientWidth,o=.1*n,l=i.events(),d=h.collidingEvents(l,e.start,e.end),i.addEvent(e),d.push(e),s=h.createColumns(d),u=(n-o)/s.length,c=0,p=s.length;p>c;c++)for(r=s[c].events,f=0,m=r.length;m>f;f++)r[f].element[0].style.width=u-4+\"px\",r[f].element[0].style.left=(this._isRtl?o:0)+_.offsetLeft+c*u+2+\"px\"},_positionEvent:function(e,t,a){var i=e._startTime||e.start,s=e._endTime||e.end,n=a.innerRect(i,s,!1),o=n.bottom-n.top-2;0>o&&(o=0),t.css({top:n.top,height:o}),this._arrangeColumns(t,n.top,t[0].clientHeight,a)},_createEventElement:function(t,a,s,n){var o,l,d,h,c,f,_=a?this.eventTemplate:this.allDayEventTemplate,g=this.options,v=g.editable,y=this._isMobile(),k=v&&v.destroy!==!1&&!y,T=v&&v.resize!==!1,w=p(this.startDate()),S=p(this.endDate()),C=D(this.startTime()),x=D(this.endTime()),H=t._time(\"start\"),E=t._time(\"end\");return C>=x&&(x=D(new Date(this.endTime().getTime()+m-1))),a||t.isAllDay||(S=new Date(S.getTime()+m)),l=t.start,d=t.end,t.isAllDay&&(d=p(t.end)),!i(p(l),w,S)&&!i(d,w,S)||a&&C>H&&E>x?o=!0:p(l)<w||a&&C>H?n=!0:(d>S&&!a||a&&E>x)&&(s=!0),h=this.eventResources(t),t._startTime&&H!==r.date.getMilliseconds(t.start)&&(l=new Date(H),l=r.timezone.apply(l,\"Etc/UTC\")),t._endTime&&E!==r.date.getMilliseconds(t.end)&&(d=new Date(E),d=r.timezone.apply(d,\"Etc/UTC\")),c=u({},{ns:r.ns,resizable:T,showDelete:k,middle:o,head:s,tail:n,singleDay:1==this._dates.length,resources:h,inverseColor:h&&h[0]?this._shouldInverseResourceColor(h[0]):!1},t,{start:l,end:d}),f=e(_(c)),this.angular(\"compile\",function(){return{elements:f,data:[{dataItem:c}]}}),f},_isInTimeSlot:function(e){var t,a=this.startTime(),i=this.endTime(),n=e._startTime||e.start,o=e._endTime||e.end;return D(i)===D(r.date.getDate(i))&&(i=r.date.getDate(i),d(i,m-1)),e._date(\"end\")>e._date(\"start\")&&(o=+e._date(\"end\")+(m-1)),o-=e._date(\"end\"),n-=e._date(\"start\"),i=D(i),a=D(a),a===n&&n===o?!0:(t=n!==i,s(n,a,i,t)||s(o,a,i,t)||s(a,n,o)||s(i,n,o))},_isInDateSlot:function(e){var t=this.groups[0],a=t.firstSlot().start,s=t.lastSlot().end-1,n=r.date.toUtcTime(e.start),o=r.date.toUtcTime(e.end);return(i(n,a,s)||i(o,a,s)||i(a,n,o)||i(s,n,o))&&(!i(o,a,a)||i(o,n,n)||e.isAllDay)},_updateAllDayHeaderHeight:function(e){var t,a;if(this._height!==e&&(this._height=e,t=this.element.find(\".k-scheduler-header-all-day td\"),t.length))for(t.parent().add(this.element.find(\".k-scheduler-times-all-day\").parent()).height(e),a=0;this.groups.length>a;a++)this.groups[a].refresh()},_renderEvents:function(e,t){var a,i,s,o,r,l,d,h,u,c,p,f,_,g,v,D,y,k,T,w,S,C=this.datesHeader.find(\".k-scheduler-header-wrap > div\"),x=this._isGroupedByDate();for(i=0,s=e.length;s>i;i++)if(a=e[i],this._isInDateSlot(a))if(o=a.isAllDay||a.end.getTime()-a.start.getTime()>=m,r=o&&!this._isVerticallyGrouped()?C:this.content,o){if(this.options.allDaySlot&&(p=this.groups[t],p._continuousEvents||(p._continuousEvents=[]),d=p.slotRanges(a),d.length))if(h=d[0],D=h.start.index,y=h.end.index,x&&D!==y)for(u=h.start.start,c=h.end.end,k=new Date(u),T=new Date(u),w=h.start.index;h.end.index>=w;w++)l=this._createEventElement(a,!o,w!==y,w!==D),S=p.daySlotRanges(k,T,!0)[0],T.setDate(T.getDate()+1),k.setDate(k.getDate()+1),this._positionAllDayEvent(l,S),n(p,S,l,!0),l.appendTo(r);else l=this._createEventElement(a,!o),this._positionAllDayEvent(l,d[0]),n(p,d[0],l,!0),l.appendTo(r)}else if(this._isInTimeSlot(a))for(p=this.groups[t],p._continuousEvents||(p._continuousEvents=[]),d=p.slotRanges(a),f=d.length,_=0;f>_;_++)h=d[_],u=a.start,c=a.end,f>1&&(0===_?c=h.end.endDate():_==f-1?u=h.start.startDate():(u=h.start.startDate(),c=h.end.endDate())),g=a.clone({start:u,end:c,_startTime:a._startTime,_endTime:a.endTime}),this._isInTimeSlot(g)&&(v=h.head,l=this._createEventElement(a,!o,v,h.tail),l.appendTo(r),this._positionEvent(g,l,h),n(p,h,l,!1))},render:function(t){var a,s,n,o;for(this._headerColumnCount=0,this._groups(),this.element.find(\".k-event\").remove(),t=new r.data.Query(t).sort([{field:\"start\",dir:\"asc\"},{field:\"end\",dir:\"desc\"}]).toArray(),a=[],this._eventsByResource(t,this.groupedResources,a),s=e.map(this._dates,function(t){return Math.max.apply(null,e.map(a,function(a){return e.grep(a,function(e){return e.isMultiDay()&&i(t,p(e.start),p(e.end))}).length}))}),n=Math.max.apply(null,s),this._updateAllDayHeaderHeight((n+1)*this._allDayHeaderHeight),o=0;a.length>o;o++)this._renderEvents(a[o],o);this.refreshLayout(),this._currentTime(!1),this.trigger(\"activate\")},_eventsByResource:function(e,t,a){var i,s,n,o,l=t[0];if(l)for(i=l.dataSource.view(),s=0;i.length>s;s++)n=this._resourceValue(l,i[s]),o=new r.data.Query(e).filter({field:l.field,operator:h.groupEqFilter(n)}).toArray(),t.length>1?this._eventsByResource(o,t.slice(1),a):a.push(o);else a.push(e)},_columnOffsetForResource:function(e){return this._columnCountForLevel(e)/this._columnCountForLevel(e-1)},_columnCountForLevel:function(e){var t=this.columnLevels[e];return t?t.length:0},_rowCountForLevel:function(e){var t=this.rowLevels[e];return t?t.length:0},clearSelection:function(){this.content.add(this.datesHeader).find(\".k-state-selected\").removeAttr(\"id\").attr(\"aria-selected\",!1).removeClass(\"k-state-selected\")},_updateDirection:function(e,t,a,i,s){var n=e.isAllDay,o=t[0].start,r=t[t.length-1].end;a&&(s?n||o.index!==r.index||o.collectionIndex!==r.collectionIndex||(e.backward=i):(n&&o.index===r.index||!n&&o.collectionIndex===r.collectionIndex)&&(e.backward=i))},_changeViewPeriod:function(e,a,i){var s,n,o,r,l,h,u,c,p,f,_;return i?t:(s=a?this.previousDate():this.nextDate(),n=e.start,o=e.end,r=this._isGroupedByDate()&&this._isVerticallyGrouped(),l=this.groups[e.groupIndex],h=a?l._timeSlotCollections:l._getCollections(l.daySlotCollectionCount()),u=h[h.length-1]._slots,c=a||l.daySlotCollectionCount()?u.length-1:0,e.start=new Date(s),e.end=new Date(s),r?(f=new Date(u[c].startDate()),_=new Date(u[c].endDate()),p=D(_)?D(_):m,d(e.start,D(f)),d(e.end,p),l.daySlotCollectionCount()&&(e.isAllDay=!e.isAllDay)):(p=e.isAllDay||!D(o)?m:D(o),d(e.start,D(n)),d(e.end,p)),this._isVerticallyGrouped()||(e.groupIndex=a?this.groups.length-1:0),e.events=[],!0)}});u(!0,l,{MultiDayView:x,DayView:x.extend({options:{name:\"DayView\",title:\"Day\"},name:\"day\"}),WeekView:x.extend({options:{name:\"WeekView\",title:\"Week\",selectedDateFormat:\"{0:D} - {1:D}\",selectedShortDateFormat:\"{0:d} - {1:d}\"},name:\"week\",calculateDateRange:function(){var e,t,a=this.options.date,i=r.date.dayOfWeek(a,this.calendarInfo().firstDay,-1),s=[];for(e=0,t=7;t>e;e++)s.push(i),i=r.date.nextDay(i);this._render(s)}}),WorkWeekView:x.extend({options:{name:\"WorkWeekView\",title:\"Work Week\",selectedDateFormat:\"{0:D} - {1:D}\",selectedShortDateFormat:\"{0:d} - {1:d}\"},name:\"workWeek\",nextDate:function(){var e=r.date.dayOfWeek(r.date.nextDay(this.startDate()),this.calendarInfo().firstDay,1);return r.date.addDays(e,this._workDays[0])},previousDate:function(){var e=r.date.dayOfWeek(this.startDate(),this.calendarInfo().firstDay,-1),t=this._workDays;return r.date.addDays(e,t[t.length-1]-7)},calculateDateRange:function(){for(var e=this.options.date,t=r.date.dayOfWeek,a=t(e,this.calendarInfo().firstDay,-1),i=t(a,this.options.workWeekStart,1),s=t(i,this.options.workWeekEnd,1),n=[];s>=i;)n.push(i),i=r.date.nextDay(i);this._render(n)}})})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,a){(a||t)()});\n//# sourceMappingURL=kendo.scheduler.dayview.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.timepicker.min\",[\"kendo.popup.min\"],e)}(function(){return function(e,t){function n(e,t,n){var i,o=e.getTimezoneOffset();e.setTime(e.getTime()+t),n||(i=e.getTimezoneOffset()-o,e.setTime(e.getTime()+i*A))}function i(){var e=new Q,t=new Q(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0),n=new Q(e.getFullYear(),e.getMonth(),e.getDate(),12,0,0);return-1*(t.getTimezoneOffset()-n.getTimezoneOffset())}function o(e){return 60*e.getHours()*A+e.getMinutes()*A+1e3*e.getSeconds()+e.getMilliseconds()}function a(e,t,n){var i,a=o(t),r=o(n);return e&&a!=r?(i=o(e),a>i&&(i+=M),a>r&&(r+=M),i>=a&&r>=i):!0}function r(e){var t=e.parseFormats;e.format=m(e.format||c.getCulture(e.culture).calendars.standard.patterns.t),t=Y(t)?t:[t],t.splice(0,0,e.format),e.parseFormats=t}function s(e){e.preventDefault()}var l,u,c=window.kendo,d=c.keys,p=c.parseDate,f=c._activeElement,m=c._extractFormat,h=c.support,_=h.browser,g=c.ui,v=g.Widget,w=\"open\",k=\"close\",y=\"change\",x=\".kendoTimePicker\",b=\"click\"+x,T=\"k-state-default\",C=\"disabled\",D=\"readonly\",V=\"li\",F=\"<span/>\",S=\"k-state-focused\",H=\"k-state-hover\",W=\"mouseenter\"+x+\" mouseleave\"+x,O=\"mousedown\"+x,A=6e4,M=864e5,I=\"k-state-selected\",B=\"k-state-disabled\",E=\"aria-selected\",N=\"aria-expanded\",R=\"aria-hidden\",z=\"aria-disabled\",L=\"aria-activedescendant\",P=\"id\",Y=e.isArray,j=e.extend,K=e.proxy,Q=Date,U=new Q;U=new Q(U.getFullYear(),U.getMonth(),U.getDate(),0,0,0),l=function(t){var n=this,i=t.id;n.options=t,n._dates=[],n.ul=e('<ul tabindex=\"-1\" role=\"listbox\" aria-hidden=\"true\" unselectable=\"on\" class=\"k-list k-reset\"/>').css({overflow:h.kineticScrollNeeded?\"\":\"auto\"}).on(b,V,K(n._click,n)).on(\"mouseenter\"+x,V,function(){e(this).addClass(H)}).on(\"mouseleave\"+x,V,function(){e(this).removeClass(H)}),n.list=e(\"<div class='k-list-container k-list-scroller' unselectable='on'/>\").append(n.ul).on(O,s),i&&(n._timeViewID=i+\"_timeview\",n._optionID=i+\"_option_selected\",n.ul.attr(P,n._timeViewID)),n._popup(),n._heightHandler=K(n._height,n),n.template=c.template('<li tabindex=\"-1\" role=\"option\" class=\"k-item\" unselectable=\"on\">#=data#</li>',{useWithBlock:!1})},l.prototype={current:function(n){var i=this,o=i.options.active;return n===t?i._current:(i._current&&i._current.removeClass(I).removeAttr(E).removeAttr(P),n&&(n=e(n).addClass(I).attr(P,i._optionID).attr(E,!0),i.scroll(n[0])),i._current=n,o&&o(n),t)},close:function(){this.popup.close()},destroy:function(){var e=this;e.ul.off(x),e.list.off(x),e.popup.destroy()},open:function(){var e=this;e.ul[0].firstChild||e.bind(),e.popup.open(),e._current&&e.scroll(e._current[0])},dataBind:function(e){for(var t,n=this,i=n.options,o=i.format,r=c.toString,s=n.template,l=e.length,u=0,d=\"\";l>u;u++)t=e[u],a(t,i.min,i.max)&&(d+=s(r(t,o,i.culture)));n._html(d)},refresh:function(){var e,t,a,r=this,s=r.options,l=s.format,u=i(),d=0>u,p=s.min,f=s.max,m=o(p),h=o(f),_=s.interval*A,g=c.toString,v=r.template,w=new Q(+p),k=w.getDate(),y=0,x=\"\";for(a=d?(M+u*A)/_:M/_,m!=h&&(m>h&&(h+=M),a=(h-m)/_+1),t=parseInt(a,10);a>y;y++)y&&n(w,_,d),h&&t==y&&(e=o(w),k<w.getDate()&&(e+=M),e>h&&(w=new Q(+f))),r._dates.push(o(w)),x+=v(g(w,l,s.culture));r._html(x)},bind:function(){var e=this,t=e.options.dates;t&&t[0]?e.dataBind(t):e.refresh()},_html:function(e){var t=this;t.ul[0].innerHTML=e,t.popup.unbind(w,t._heightHandler),t.popup.one(w,t._heightHandler),t.current(null),t.select(t._value)},scroll:function(e){if(e){var t=this.list[0],n=e.offsetTop,i=e.offsetHeight,o=t.scrollTop,a=t.clientHeight,r=n+i;o>n?o=n:r>o+a&&(o=r-a),t.scrollTop=o}},select:function(t){var n,i=this,o=i.options,a=i._current;t instanceof Date&&(t=c.toString(t,o.format,o.culture)),\"string\"==typeof t&&(a&&a.text()===t?t=a:(t=e.grep(i.ul[0].childNodes,function(e){return(e.textContent||e.innerText)==t}),t=t[0]?t:null)),n=i._distinctSelection(t),i.current(n)},_distinctSelection:function(t){var n,i,a=this;return t&&t.length>1&&(n=o(a._value),i=e.inArray(n,a._dates),t=a.ul.children()[i]),t},setOptions:function(e){var t=this.options;e.min=p(e.min),e.max=p(e.max),this.options=j(t,e,{active:t.active,change:t.change,close:t.close,open:t.open}),this.bind()},toggle:function(){var e=this;e.popup.visible()?e.close():e.open()},value:function(e){var t=this;t._value=e,t.ul[0].firstChild&&t.select(e)},_click:function(t){var n=this,i=e(t.currentTarget),o=i.text(),a=n.options.dates;a&&a.length>0&&(o=a[i.index()]),t.isDefaultPrevented()||(n.select(i),n.options.change(o,!0),n.close())},_height:function(){var e=this,t=e.list,n=t.parent(\".k-animation-container\"),i=e.options.height;e.ul[0].children.length&&t.add(n).show().height(e.ul[0].scrollHeight>i?i:\"auto\").hide()},_parse:function(e){var t=this,n=t.options,i=t._value||U;return e instanceof Q?e:(e=p(e,n.parseFormats,n.culture),e&&(e=new Q(i.getFullYear(),i.getMonth(),i.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())),e)},_adjustListWidth:function(){var e,t,n=this.list,i=n[0].style.width,o=this.options.anchor;!n.data(\"width\")&&i||(e=window.getComputedStyle?window.getComputedStyle(o[0],null):0,t=e?parseFloat(e.width):o.outerWidth(),e&&(_.mozilla||_.msie)&&(t+=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight)+parseFloat(e.borderLeftWidth)+parseFloat(e.borderRightWidth)),i=t-(n.outerWidth()-n.width()),n.css({fontFamily:o.css(\"font-family\"),width:i}).data(\"width\",i))},_popup:function(){var e=this,t=e.list,n=e.options,i=n.anchor;e.popup=new g.Popup(t,j(n.popup,{anchor:i,open:n.open,close:n.close,animation:n.animation,isRtl:h.isRtl(n.anchor)}))},move:function(e){var n=this,i=e.keyCode,o=n.ul[0],a=n._current,r=i===d.DOWN;if(i===d.UP||r){if(e.altKey)return n.toggle(r),t;a=r?a?a[0].nextSibling:o.firstChild:a?a[0].previousSibling:o.lastChild,a&&n.select(a),n.options.change(n._current.text()),e.preventDefault()}else i!==d.ENTER&&i!==d.TAB&&i!==d.ESC||(e.preventDefault(),a&&n.options.change(a.text(),!0),n.close())}},l.getMilliseconds=o,c.TimeView=l,u=v.extend({init:function(t,n){var i,o,a,s=this;v.fn.init.call(s,t,n),t=s.element,n=s.options,n.min=p(t.attr(\"min\"))||p(n.min),n.max=p(t.attr(\"max\"))||p(n.max),r(n),s._initialOptions=j({},n),s._wrapper(),s.timeView=o=new l(j({},n,{id:t.attr(P),anchor:s.wrapper,format:n.format,change:function(e,n){n?s._change(e):t.val(e)},open:function(e){s.timeView._adjustListWidth(),s.trigger(w)?e.preventDefault():(t.attr(N,!0),i.attr(R,!1))},close:function(e){s.trigger(k)?e.preventDefault():(t.attr(N,!1),i.attr(R,!0))},active:function(e){t.removeAttr(L),e&&t.attr(L,o._optionID)}})),i=o.ul,s._icon(),s._reset();try{t[0].setAttribute(\"type\",\"text\")}catch(u){t[0].type=\"text\"}t.addClass(\"k-input\").attr({role:\"combobox\",\"aria-expanded\":!1,\"aria-owns\":o._timeViewID}),a=t.is(\"[disabled]\")||e(s.element).parents(\"fieldset\").is(\":disabled\"),a?s.enable(!1):s.readonly(t.is(\"[readonly]\")),s._old=s._update(n.value||s.element.val()),s._oldText=t.val(),c.notify(s)},options:{name:\"TimePicker\",min:U,max:U,format:\"\",dates:[],parseFormats:[],value:null,interval:30,height:200,animation:{}},events:[w,k,y],setOptions:function(e){var t=this,n=t._value;v.fn.setOptions.call(t,e),e=t.options,r(e),t.timeView.setOptions(e),n&&t.element.val(c.toString(n,e.format,e.culture))},dataBind:function(e){Y(e)&&this.timeView.dataBind(e)},_editable:function(e){var t=this,n=e.disable,i=e.readonly,o=t._arrow.off(x),a=t.element.off(x),r=t._inputWrapper.off(x);i||n?(r.addClass(n?B:T).removeClass(n?T:B),a.attr(C,n).attr(D,i).attr(z,n)):(r.addClass(T).removeClass(B).on(W,t._toggleHover),a.removeAttr(C).removeAttr(D).attr(z,!1).on(\"keydown\"+x,K(t._keydown,t)).on(\"focusout\"+x,K(t._blur,t)).on(\"focus\"+x,function(){t._inputWrapper.addClass(S)}),o.on(b,K(t._click,t)).on(O,s))},readonly:function(e){this._editable({readonly:e===t?!0:e,disable:!1})},enable:function(e){this._editable({readonly:!1,disable:!(e=e===t?!0:e)})},destroy:function(){var e=this;v.fn.destroy.call(e),e.timeView.destroy(),e.element.off(x),e._arrow.off(x),e._inputWrapper.off(x),e._form&&e._form.off(\"reset\",e._resetHandler)},close:function(){this.timeView.close()},open:function(){this.timeView.open()},min:function(e){return this._option(\"min\",e)},max:function(e){return this._option(\"max\",e)},value:function(e){var n=this;return e===t?n._value:(n._old=n._update(e),null===n._old&&n.element.val(\"\"),n._oldText=n.element.val(),t)},_blur:function(){var e=this,t=e.element.val();e.close(),t!==e._oldText&&e._change(t),e._inputWrapper.removeClass(S)},_click:function(){var e=this,t=e.element;e.timeView.toggle(),h.touch||t[0]===f()||t.focus()},_change:function(e){var t=this;e=t._update(e),+t._old!=+e&&(t._old=e,t._oldText=t.element.val(),t._typing||t.element.trigger(y),t.trigger(y)),t._typing=!1},_icon:function(){var t,n=this,i=n.element;t=i.next(\"span.k-select\"),t[0]||(t=e('<span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-clock\"></span></span>').insertAfter(i)),n._arrow=t.attr({role:\"button\",\"aria-controls\":n.timeView._timeViewID})},_keydown:function(e){var t=this,n=e.keyCode,i=t.timeView,o=t.element.val();i.popup.visible()||e.altKey?i.move(e):n===d.ENTER&&o!==t._oldText?t._change(o):t._typing=!0},_option:function(e,n){var i=this,o=i.options;return n===t?o[e]:(n=i.timeView._parse(n),n&&(n=new Q(+n),o[e]=n,i.timeView.options[e]=n,i.timeView.bind()),t)},_toggleHover:function(t){e(t.currentTarget).toggleClass(H,\"mouseenter\"===t.type)},_update:function(e){var t=this,n=t.options,i=t.timeView,o=i._parse(e);return a(o,n.min,n.max)||(o=null),t._value=o,t.element.val(c.toString(o||e,n.format,n.culture)),i.value(o),o},_wrapper:function(){var t,n=this,i=n.element;t=i.parents(\".k-timepicker\"),t[0]||(t=i.wrap(F).parent().addClass(\"k-picker-wrap k-state-default\"),t=t.wrap(F).parent()),t[0].style.cssText=i[0].style.cssText,n.wrapper=t.addClass(\"k-widget k-timepicker k-header\").addClass(i[0].className),i.css({width:\"100%\",height:i[0].style.height}),n._inputWrapper=e(t[0].firstChild)},_reset:function(){var t=this,n=t.element,i=n.attr(\"form\"),o=i?e(\"#\"+i):n.closest(\"form\");o[0]&&(t._resetHandler=function(){t.value(n[0].defaultValue),t.max(t._initialOptions.max),t.min(t._initialOptions.min)},t._form=o.on(\"reset\",t._resetHandler))}}),g.plugin(u)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.timepicker.min.js.map\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IEstimateLineItemData } from \"../records/EstimateLineItem\";\nimport { List } from \"immutable\";\n\nexport const RECEIVE_ESTIMATE_LINE_ITEM = \"@estimateLineItems/RECEIVE_ESTIMATE_LINE_ITEM\";\nexport const DUPLICATE_ESTIMATE_LINE_ITEMS = \"@estimateLineItems/DUPLICATE_ESTIMATE_LINE_ITEMS\";\nexport const PUSH_DOCUMENT_ID = \"@estimateLineItems/PUSH_DOCUMENT_ID\";\n\nexport const Actions = {\n  receiveEstimateLineItem: (estimateLineItem: Partial<IEstimateLineItemData>) =>\n    createAction(RECEIVE_ESTIMATE_LINE_ITEM, { estimateLineItem }),\n  duplicateEstimateLineItems: (groupId: number, lineItemIds: List<number>) =>\n    createAction(DUPLICATE_ESTIMATE_LINE_ITEMS, { groupId, lineItemIds }),\n  pushDocumentId: (estimateLineItemId: number, documentId: number) =>\n    createAction(PUSH_DOCUMENT_ID, { estimateLineItemId, documentId }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IOrgData, OrgRecord, toJSON } from \"app2/src/records/OrgRecord\";\nimport { StoreRegistry, dispatch, useState } from \"app2/src/storeRegistry\";\nimport * as orgActions from \"app2/src/reducers/org.actions\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { IPagingMetadata } from \"app/src/Models/PagingMetadata\";\nimport { Actions as commonActions } from \"app2/src/reducers/components/common.actions\";\nimport { LocationStateRecord } from \"../records/LocationState\";\nimport { listParams } from \"app2/src/api/Api\";\nimport { ITaskData } from \"app2/src/records/Task\";\nimport { ITokenData } from \"app2/src/records/Token\";\n\nexport interface ILoginData {\n  token: string;\n  refresh_token: string;\n  org: IOrgData;\n}\n\nexport interface IOrgResponse {\n  org: IOrgData;\n}\n\nexport interface IOrgMetadata {\n  pagination: IPagingMetadata;\n}\nexport interface IOrgIndexResponse {\n  orgs: IOrgData[];\n  meta: IOrgMetadata;\n}\n\nexport interface ISyncParams {\n  integration: string;\n  process: string;\n}\n\nexport interface ITestParams {\n  integration: string;\n  token: ITokenData;\n}\n\nclass OrgService {\n  public orgIncludes: string[] = [\"address\", \"settings\", \"preferences\", \"contract_languages\", \"emails\", \"lead_sources\"];\n  public url = \"/api/v1/orgs/\";\n\n  public load(id: number, include: string[] = this.orgIncludes): Promise<IOrgData> {\n    let actionUrl = fetcher.joinUrls(this.url, id.toString());\n\n    if (include.length > 0) {\n      actionUrl = fetcher.urlOptions(actionUrl, {\n        \"include[]\": include,\n      });\n    }\n    return fetcher.get<{ org: IOrgData }>(actionUrl).then(\n      (data) => {\n        data.org.include = include;\n        return data.org;\n      },\n      (response) => {\n        if (response.status === 403) {\n          const $state = StoreRegistry.get<ng.ui.IStateService>(\"$state\");\n          const $location = StoreRegistry.get<ng.ILocationService>(\"$location\");\n          dispatch(\n            commonActions.setSavedLocationState(\n              new LocationStateRecord({\n                pathname: $location.path(),\n                search: $location.search(),\n                hash: $location.hash(),\n              }),\n            ),\n          );\n          $state.go(\"root.permissions\");\n        }\n\n        throw response;\n      },\n    );\n  }\n\n  public list(queryParams: QueryParamsRecord = new QueryParamsRecord()): Promise<IOrgIndexResponse> {\n    let actionUrl = this.url;\n    const params = { ...listParams(queryParams), ...queryParams.get(\"parameters\")?.toJS() };\n    delete params.parameters;\n\n    params.sort_by = \"name\";\n\n    actionUrl = fetcher.urlOptions(actionUrl, params);\n    return fetcher.get<IOrgIndexResponse>(actionUrl);\n  }\n\n  public update(org: OrgRecord): Promise<IOrgData> {\n    const actionUrl = fetcher.joinUrls(this.url, org.id.toString());\n\n    const orgPostData = toJSON(org);\n\n    return fetcher\n      .patch<IOrgResponse>(actionUrl, {\n        org: orgPostData,\n        include: org.include,\n      })\n      .then(\n        (response) => {\n          response.org.include = org.include;\n          return response.org;\n        },\n        (response) => {\n          if (response.status === 500) {\n            return Promise.reject([\"Internal Server Error\"]);\n          }\n\n          if (_.isArray(response.data.errors)) {\n            return Promise.reject(response.data.errors);\n          }\n\n          return Promise.reject([\"Unknown Error\"]);\n        },\n      );\n  }\n\n  public getOrg(id: number, set_current_org = false): Promise<any> {\n    return dispatch(orgActions.AsyncActions.getOrg(id, this.orgIncludes, set_current_org));\n  }\n\n  public setCurrentOrgId(id: number): void {\n    dispatch(orgActions.Actions.setCurrentOrgId(id));\n  }\n\n  public updateOrg(org: OrgRecord): Promise<any> {\n    return dispatch(orgActions.AsyncActions.updateOrg(org));\n  }\n\n  public getStoredOrg(id: number): OrgRecord {\n    return useState().getIn([\"orgs\", \"orgsById\", id]);\n  }\n\n  public async sync(orgId: number, params: ISyncParams) {\n    const actionUrl = fetcher.joinUrls(this.url, orgId.toString(), \"sync\", params.integration);\n    await fetcher.post(actionUrl, params);\n  }\n\n  public test(orgId: number, params: ITestParams): Promise<{ task: ITaskData }> {\n    const actionUrl = fetcher.joinUrls(this.url, orgId.toString(), \"test\", params.integration);\n    return fetcher.post(actionUrl, params);\n  }\n\n  public duplicate(targetId: number, source_org_id: number, data_types: string[]): Promise<{ task: ITaskData }> {\n    const actionUrl = fetcher.joinUrls(this.url, targetId.toString(), \"duplicate\");\n    return fetcher.patch(actionUrl, { source_org_id, data_types });\n  }\n}\n\nexport const orgService = new OrgService();\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { IFinanceApplicationData } from \"app2/src/records/FinanceApplication\";\nimport * as config from \"react-global-configuration\";\nimport { IMetaPaginationData } from \"../records/MetaPagination\";\nimport { QueryParamsRecord } from \"../records/Page\";\n\nexport interface IFinanceApplicationResponse {\n  finance_application: IFinanceApplicationData;\n}\n\nexport interface IFinanceApplicationIndexResponse {\n  finance_applications: IFinanceApplicationData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nexport interface ISelectOfferResponse {\n  url: string;\n}\n\nexport interface ISelectOfferParameters {\n  finance_option_id: number;\n}\n\nconst url = \"api/v1/estimates/:id/finance_application\";\nconst financeApplicationUrl = \"api/v1/finance_applications/:id\";\n\nexport const load = (estimateId: number): Promise<IFinanceApplicationResponse> => {\n  const actionUrl = url.replace(\":id\", estimateId.toString());\n  return fetcher.get<IFinanceApplicationResponse>(actionUrl);\n};\n\nexport const create = (\n  estimateId: number,\n  financeApplication: Partial<IFinanceApplicationData>,\n): Promise<IFinanceApplicationResponse> => {\n  const actionUrl = url.replace(\":id\", estimateId.toString());\n  return fetcher.post<IFinanceApplicationResponse>(actionUrl, transformPostData(financeApplication));\n};\n\nexport const loadByJob = (jobId: number, queryParams: QueryParamsRecord): Promise<IFinanceApplicationIndexResponse> => {\n  const actionUrl = \"api/v1/finance_applications\";\n  const params = queryParams.toJSON() as any;\n  params.job_id = jobId;\n  return fetcher.get<IFinanceApplicationIndexResponse>(actionUrl, params);\n};\n\n/**\n * Triggers the recalculate logic for FinMkt.\n *\n * @param estimateId - ID of the estimate for the financeApplication\n * @returns Promise<void> - success is a status of 204\n */\nexport const recalculate = (estimateId: number) => {\n  const actionUrl = fetcher.joinUrls(url.replace(\":id\", estimateId.toString()), \"recalculate\");\n\n  return fetcher.post<void>(actionUrl);\n};\n\nexport const selectOffer = (financeApplicationId: number, params: ISelectOfferParameters) => {\n  const actionUrl = fetcher.joinUrls(\n    financeApplicationUrl.replace(\":id\", financeApplicationId.toString()),\n    \"select_offer\",\n  );\n\n  return fetcher.patch<ISelectOfferResponse>(actionUrl, params);\n};\n\nexport interface CallbackUrls {\n  callbackUrl: string;\n  failureUrl: string;\n  successUrl: string;\n  preQualSuccessUrl: string;\n  preQualFailureUrl: string;\n}\n\nexport const callbackUrls = (): CallbackUrls => {\n  return {\n    callbackUrl: config.get(\"HOMEVEST_CALLBACK\"),\n    failureUrl: config.get(\"HOMEVEST_FAILURE\"),\n    successUrl: config.get(\"HOMEVEST_SUCCESS\"),\n    preQualSuccessUrl: config.get(\"HOMEVEST_PREQUALSUCCESS\"),\n    preQualFailureUrl: config.get(\"HOMEVEST_PREQUALFAILURE\"),\n  };\n};\n\nexport const transformPostData = (financeApplication: Partial<IFinanceApplicationData>): any => {\n  return {\n    finance_application: { offer_code: financeApplication.offer_code, callback_urls: callbackUrls() },\n  };\n};\n","import { ThunkAction } from \"redux-thunk\";\nimport { IFinanceApplicationData, IFinanceApplicationRecord } from \"app2/src/records/FinanceApplication\";\nimport { ActionsUnion, createAction } from \"app2/src/reducers/Utils\";\nimport { RootState } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { load, create, loadByJob, recalculate, selectOffer } from \"app2/src/api/financeApplication.service\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { Actions as viewActions } from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { financeApplication } from \"app2/src/selectors/financeApplication.selectors\";\nimport { QueryParamsRecord } from \"../records/Page\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { currentJobId } from \"../selectors/job.selectors\";\nimport { List } from \"immutable\";\n\n// SINGLE\nexport const FETCH_FINANCE_APPLICATION = \"@financeApplications/FETCH_FINANCE_APPLICATION\";\nexport const RECEIVE_FINANCE_APPLICATION = \"@financeApplications/RECEIVE_FINANCE_APPLICATION\";\nexport const SET_LOADED = \"@financeApplications/SET_LOADED\";\nexport const UPDATE_FORM = \"@financeApplications/UPDATE_FORM\";\nexport const SET_OFFER_STATUS = \"@financeApplications/SET_OFFER_STATUS\";\nexport const RECEIVE_APPLY_URL = \"@financeApplications/RECEIEVE_APPLY_URL\";\n\n// MULTIPLE\nexport const RECEIVE_FINANCE_APPLICATIONS = \"@financeApplications/RECEIVE_FINANCE_APPLICATIONS\";\n\nexport const Actions = {\n  // SINGLE\n  fetchFinanceApplication: (estimateId: number) => createAction(FETCH_FINANCE_APPLICATION, { estimateId }),\n  receiveFinanceApplication: (financeApplication: IFinanceApplicationData) =>\n    createAction(RECEIVE_FINANCE_APPLICATION, { financeApplication }),\n  setLoaded: (estimateId: number) => createAction(SET_LOADED, { estimateId }),\n  update: (event: any) => createAction(UPDATE_FORM, { event }),\n  setOfferStatus: (estimateId: number, status: string) => createAction(SET_OFFER_STATUS, { estimateId, status }),\n  receiveApplyUrl: (estimateId: number, applyUrl: string) => createAction(RECEIVE_APPLY_URL, { estimateId, applyUrl }),\n  // MULTIPLE\n  receiveFinanceApplications: (financeApplications: IFinanceApplicationData[]) =>\n    createAction(RECEIVE_FINANCE_APPLICATIONS, { financeApplications }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  loadFinanceApplication: (estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchFinanceApplication(estimateId));\n\n      try {\n        const response = await load(estimateId);\n        dispatch(Actions.receiveFinanceApplication(response.finance_application));\n      } catch (response) {\n        if (response.status === 404) {\n          dispatch(\n            Actions.receiveFinanceApplication({\n              estimate_id: estimateId,\n              loan_status: \"none\",\n            } as IFinanceApplicationData),\n          );\n          return;\n        }\n        handleErrors(response, dispatch);\n        dispatch(Actions.setLoaded(estimateId));\n      }\n    };\n  },\n  createFinanceApplication: (estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const record = financeApplication(getState(), { estimateId });\n        dispatch(Actions.fetchFinanceApplication(estimateId));\n        const response = await create(estimateId, record.toJS());\n        dispatch(Actions.receiveFinanceApplication(response.finance_application));\n        dispatch(viewActions.flashAddAlert(FlashLevels.success, \"Created finance application successfully\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setLoaded(estimateId));\n      }\n    };\n  },\n  loadFinanceApplications: (queryParams: QueryParamsRecord) => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const jobId = currentJobId(getState());\n        dispatch(paginationActions.Actions.fetchPage(\"financeApplications\", queryParams));\n\n        const response = await loadByJob(jobId, queryParams);\n        const pageData = {\n          ids: List(_.pluck(response.finance_applications, \"estimate_id\")),\n          pagination: response.meta.pagination,\n        };\n\n        dispatch(Actions.receiveFinanceApplications(response.finance_applications));\n        dispatch(paginationActions.Actions.receivePage(\"financeApplications\", queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(paginationActions.Actions.receivePageError(\"financeApplications\", queryParams, errors));\n      }\n    };\n  },\n  recalculateFinanceOption: (estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(Actions.setOfferStatus(estimateId, \"processing\"));\n        await recalculate(estimateId);\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setLoaded(estimateId));\n      }\n    };\n  },\n  selectOffer: (financeApplicationId: number, financeOptionId, estimateId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(Actions.fetchFinanceApplication(estimateId));\n        const result = await selectOffer(financeApplicationId, { finance_option_id: financeOptionId });\n        dispatch(Actions.receiveApplyUrl(estimateId, result.url));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setLoaded(estimateId));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { recordChanged } from \"app2/src/helpers/Record\";\nimport { RootState } from \"app2/src/reducers\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { currentUserOrgId } from \"app2/src/selectors/user.selectors\";\nimport { List, Map } from \"immutable\";\nimport { createSelector } from \"reselect\";\n/**\n * Loads whether an integration is authorized\n *\n * @param {RootState} state The RootState\n * @param {{ orgId: number, integration: string }} options\n * @returns {boolean} boolean\n */\nexport const getAuthorization = (state: RootState, props: any) =>\n  state.getIn([\"tokens\", \"authByOrgId\", props.orgId, \"byKind\", props.integration, \"authorized\"], false);\n\n/**\n * Loads token by kind and current org\n *\n * @param {RootState} state The RootState\n * @param {{ kind: string }} options\n * @returns {TokenRecord} TokenRecord\n */\nexport const token = (state: RootState, props: any) => {\n  const orgId = currentOrgId(state) || currentUserOrgId(state);\n  return state.getIn([\"tokens\", \"byOrgId\", orgId, props.kind]);\n};\n\n/**\n * Loads last saved token by kind and current org\n *\n * @param {RootState} state The RootState\n * @param {{ kind: string }} options\n * @returns {TokenRecord} TokenRecord\n */\nexport const lastSavedToken = (state: RootState, props: any) =>\n  state.getIn([\"tokens\", \"lastSavedByOrgId\", currentOrgId(state), props.kind]);\n\n/**\n * Did the token change? Did not use createSelector since ID is not passed in as a prop\n *\n * @param {RootState} state The RootState\n * @param {{ kind: string }} options\n * @returns {boolean}\n */\nexport const tokenChanged = (state: RootState, props: any) =>\n  recordChanged(token(state, props), lastSavedToken(state, props));\n\n/**\n * Loads  the authorized state of all the tokens for the current org\n *\n * @param {RootState} state The RootState\n * @returns {Map<any>} The object containing authorization details for tokens\n */\nexport const getAuthorizedTokens = (state: RootState) =>\n  state.getIn([\"tokens\", \"authByOrgId\", currentOrgId(state), \"byKind\"], Map({}));\n\nexport const salesforceJobMappingValues = (state: RootState) => {\n  const salesforceToken = token(state, { kind: \"salesforce\" });\n  if (!salesforceToken) {\n    return List();\n  }\n  const jobMapping = salesforceToken.getIn([\"data\", \"pull_data_config\", \"job_mapping\"], List());\n  return jobMapping\n    .map((value, key) => value.get(\"occ_value\"))\n    .filter((value) => value.startsWith(\"metadata.integration.\"))\n    .map((value) => value.split(\".\").pop());\n};\n\nexport const salesforceJobMappingRootValues = (state: RootState) => {\n  const salesforceToken = token(state, { kind: \"salesforce\" });\n  if (!salesforceToken) {\n    return List();\n  }\n  const jobMapping = salesforceToken.getIn([\"data\", \"pull_data_config\", \"job_mapping\"], List());\n  return jobMapping\n    .map((value, key) => value.get(\"occ_value\"))\n    .filter((value) => value.startsWith(\"metadata.\") && !value.startsWith(\"metadata.integration.\"))\n    .map((value) => value.split(\".\").pop());\n};\n\nexport const getCurrentOrgAuthorization = createSelector(\n  [getAuthorizedTokens, (_, { integration }) => integration],\n  (authorizedTokens, integration) => {\n    return authorizedTokens.getIn([integration, \"authorized\"], false);\n  },\n);\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.data.min\",[\"kendo.core.min\",\"kendo.data.odata.min\",\"kendo.data.xml.min\"],e)}(function(){return function(e,t){function r(e,t,r,n){return function(i){var a,s={};for(a in i)s[a]=i[a];s.field=n?r+\".\"+i.field:r,t==Oe&&e._notifyChange&&e._notifyChange(s),e.trigger(t,s)}}function n(t,r){if(t===r)return!0;var i,a=e.type(t),s=e.type(r);if(a!==s)return!1;if(\"date\"===a)return t.getTime()===r.getTime();if(\"object\"!==a&&\"array\"!==a)return!1;for(i in t)if(!n(t[i],r[i]))return!1;return!0}function i(e,t){var r,n;for(n in e){if(r=e[n],he(r)&&r.field&&r.field===t)return r;if(r===t)return r}return null}function a(e){this.data=e||[]}function s(e,r){if(e){var n=typeof e===we?{field:e,dir:r}:e,i=ce(n)?n:n!==t?[n]:[];return ge(i,function(e){return!!e.dir})}}function o(e){var t,r,n,i,a=e.filters;if(a)for(t=0,r=a.length;r>t;t++)n=a[t],i=n.operator,i&&typeof i===we&&(n.operator=X[i.toLowerCase()]||i),o(n)}function u(e){return e&&!fe(e)?(!ce(e)&&e.filters||(e={logic:\"and\",filters:ce(e)?e:[e]}),o(e),e):t}function l(e,t){return e.logic||t.logic?!1:e.field===t.field&&e.value===t.value&&e.operator===t.operator}function d(e){return e=e||{},fe(e)?{logic:\"and\",filters:[]}:u(e)}function h(e,t){return t.logic||e.field>t.field?1:t.field>e.field?-1:0}function f(e,t){var r,n,i,a,s;if(e=d(e),t=d(t),e.logic!==t.logic)return!1;if(i=(e.filters||[]).slice(),a=(t.filters||[]).slice(),i.length!==a.length)return!1;for(i=i.sort(h),a=a.sort(h),s=0;i.length>s;s++)if(r=i[s],n=a[s],r.logic&&n.logic){if(!f(r,n))return!1}else if(!l(r,n))return!1;return!0}function c(e){return ce(e)?e:[e]}function g(e,r){var n=typeof e===we?{field:e,dir:r}:e,i=ce(n)?n:n!==t?[n]:[];return B(i,function(e){return{field:e.field,dir:e.dir||\"asc\",aggregates:e.aggregates}})}function p(e,t){return e&&e.getTime&&t&&t.getTime?e.getTime()===t.getTime():e===t}function _(e,t,r,n,i,a){var s,o,u,l,d;for(t=t||[],l=t.length,s=0;l>s;s++)o=t[s],u=o.aggregate,d=o.field,e[d]=e[d]||{},a[d]=a[d]||{},a[d][u]=a[d][u]||{},e[d][u]=Y[u.toLowerCase()](e[d][u],r,me.accessor(d),n,i,a[d][u])}function v(e){return\"number\"==typeof e&&!isNaN(e)}function m(e){return e&&e.getTime}function y(e){var t,r=e.length,n=Array(r);for(t=0;r>t;t++)n[t]=e[t].toJSON();return n}function S(e,t,r,n,i){var a,s,o,u,l,d={};for(u=0,l=e.length;l>u;u++){a=e[u];for(s in t)o=i[s],o&&o!==s&&(d[o]||(d[o]=me.setter(o)),d[o](a,t[s](a)),delete a[s])}}function b(e,t,r,n,i){var a,s,o,u,l;for(u=0,l=e.length;l>u;u++){a=e[u];for(s in t)a[s]=r._parse(s,t[s](a)),o=i[s],o&&o!==s&&delete a[o]}}function w(e,t,r,n,i){var a,s,o,u;for(s=0,u=e.length;u>s;s++)a=e[s],o=n[a.field],o&&o!=a.field&&(a.field=o),a.value=r._parse(a.field,a.value),a.hasSubgroups?w(a.items,t,r,n,i):b(a.items,t,r,n,i)}function k(e,t,r,n,i,a){return function(s){return s=e(s),s&&!fe(n)&&(\"[object Array]\"===We.call(s)||s instanceof Ye||(s=[s]),r(s,n,new t,i,a)),s||[]}}function x(e,t,r,n){for(var i,a,s,o=0;t.length&&n&&(i=t[o],a=i.items,s=a.length,e&&e.field===i.field&&e.value===i.value?(e.hasSubgroups&&e.items.length?x(e.items[e.items.length-1],i.items,r,n):(a=a.slice(r,r+n),e.items=e.items.concat(a)),t.splice(o--,1)):i.hasSubgroups&&a.length?(x(i,a,r,n),i.items.length||t.splice(o--,1)):(a=a.slice(r,r+n),i.items=a,i.items.length||t.splice(o--,1)),0===a.length?r-=s:(r=0,n-=a.length),!(++o>=t.length)););t.length>o&&t.splice(o,t.length-o)}function q(e){var t,r,n,i,a,s=[];for(t=0,r=e.length;r>t;t++)if(a=e.at(t),a.hasSubgroups)s=s.concat(q(a.items));else for(n=a.items,i=0;n.length>i;i++)s.push(n.at(i));return s}function D(e,t){var r,n,i;if(t)for(r=0,n=e.length;n>r;r++)i=e.at(r),i.hasSubgroups?D(i.items,t):i.items=new U(i.items,t)}function C(e,t){for(var r=0,n=e.length;n>r;r++)if(e[r].hasSubgroups){if(C(e[r].items,t))return!0}else if(t(e[r].items,e[r]))return!0}function O(e,t,r,n){for(var i=0;e.length>i&&e[i].data!==t&&!z(e[i].data,r,n);i++);}function z(e,t,r){for(var n=0,i=e.length;i>n;n++){if(e[n]&&e[n].hasSubgroups)return z(e[n].items,t,r);if(e[n]===t||e[n]===r)return e[n]=r,!0}}function R(e,r,n,i,a){var s,o,u,l;for(s=0,o=e.length;o>s;s++)if(u=e[s],u&&!(u instanceof i))if(u.hasSubgroups===t||a){for(l=0;r.length>l;l++)if(r[l]===u){e[s]=r.at(l),O(n,r,u,e[s]);break}}else R(u.items,r,n,i,a)}function P(e,t){var r,n,i;for(r=0,n=e.length;n>r;r++)if(i=e.at(r),i.uid==t.uid)return e.splice(r,1),i}function T(e,t){return t?A(e,function(e){return e.uid&&e.uid==t.uid||e[t.idField]===t.id&&t.id!==t._defaultId}):-1}function F(e,t){return t?A(e,function(e){return e.uid==t.uid}):-1}function A(e,t){var r,n;for(r=0,n=e.length;n>r;r++)if(t(e[r]))return r;return-1}function I(e,t){var r,n;return e&&!fe(e)?(r=e[t],n=he(r)?r.from||r.field||t:e[t]||t,ye(n)?t:n):t}function N(e,t){var r,n,i,a={};for(i in e)\"filters\"!==i&&(a[i]=e[i]);if(e.filters)for(a.filters=[],r=0,n=e.filters.length;n>r;r++)a.filters[r]=N(e.filters[r],t);else a.field=I(t.fields,a.field);return a}function M(e,t){var r,n,i,a,s,o=[];for(r=0,n=e.length;n>r;r++){i={},a=e[r];for(s in a)i[s]=a[s];i.field=I(t.fields,i.field),i.aggregates&&ce(i.aggregates)&&(i.aggregates=M(i.aggregates,t)),o.push(i)}return o}function j(t,r){var n,i,a,s,o,u,l,d,h,f;for(t=e(t)[0],n=t.options,i=r[0],a=r[1],s=[],o=0,u=n.length;u>o;o++)h={},d=n[o],l=d.parentNode,l===t&&(l=null),d.disabled||l&&l.disabled||(l&&(h.optgroup=l.label),h[i.field]=d.text,f=d.attributes.value,f=f&&f.specified?d.value:d.text,h[a.field]=f,s.push(h));return s}function L(t,r){var n,i,a,s,o,u,l,d=e(t)[0].tBodies[0],h=d?d.rows:[],f=r.length,c=[];for(n=0,i=h.length;i>n;n++){for(o={},l=!0,s=h[n].cells,a=0;f>a;a++)u=s[a],\"th\"!==u.nodeName.toLowerCase()&&(l=!1,o[r[a].field]=u.innerHTML);l||c.push(o)}return c}function G(e){return function(){var t=this._data,r=ne.fn[e].apply(this,Je.call(arguments));return this._data!=t&&this._attachBubbleHandlers(),r}}function E(t,r){function n(e,t){return e.filter(t).add(e.find(t))}var i,a,s,o,u,l,d,h,f=e(t).children(),c=[],g=r[0].field,p=r[1]&&r[1].field,_=r[2]&&r[2].field,v=r[3]&&r[3].field;for(i=0,a=f.length;a>i;i++)s={_loaded:!0},o=f.eq(i),l=o[0].firstChild,h=o.children(),t=h.filter(\"ul\"),h=h.filter(\":not(ul)\"),u=o.attr(\"data-id\"),u&&(s.id=u),l&&(s[g]=3==l.nodeType?l.nodeValue:h.text()),p&&(s[p]=n(h,\"a\").attr(\"href\")),v&&(s[v]=n(h,\"img\").attr(\"src\")),_&&(d=n(h,\".k-sprite\").prop(\"className\"),s[_]=d&&e.trim(d.replace(\"k-sprite\",\"\"))),t.length&&(s.items=E(t.eq(0),r)),\"true\"==o.attr(\"data-hasChildren\")&&(s.hasChildren=!0),c.push(s);return c}var B,U,H,J,V,W,Q,K,$,X,Y,Z,ee,te,re,ne,ie,ae,se,oe,ue,le=e.extend,de=e.proxy,he=e.isPlainObject,fe=e.isEmptyObject,ce=e.isArray,ge=e.grep,pe=e.ajax,_e=e.each,ve=e.noop,me=window.kendo,ye=me.isFunction,Se=me.Observable,be=me.Class,we=\"string\",ke=\"function\",xe=\"create\",qe=\"read\",De=\"update\",Ce=\"destroy\",Oe=\"change\",ze=\"sync\",Re=\"get\",Pe=\"error\",Te=\"requestStart\",Fe=\"progress\",Ae=\"requestEnd\",Ie=[xe,qe,De,Ce],Ne=function(e){return e},Me=me.getter,je=me.stringify,Le=Math,Ge=[].push,Ee=[].join,Be=[].pop,Ue=[].splice,He=[].shift,Je=[].slice,Ve=[].unshift,We={}.toString,Qe=me.support.stableSort,Ke=/^\\/Date\\((.*?)\\)\\/$/,$e=/(\\r+|\\n+)/g,Xe=/(?=['\\\\])/g,Ye=Se.extend({init:function(e,t){var r=this;r.type=t||H,Se.fn.init.call(r),r.length=e.length,r.wrapAll(e,r)},at:function(e){return this[e]},toJSON:function(){var e,t,r=this.length,n=Array(r);for(e=0;r>e;e++)t=this[e],t instanceof H&&(t=t.toJSON()),n[e]=t;return n},parent:ve,wrapAll:function(e,t){var r,n,i=this,a=function(){return i};for(t=t||[],r=0,n=e.length;n>r;r++)t[r]=i.wrap(e[r],a);return t},wrap:function(e,t){var r,n=this;return null!==e&&\"[object Object]\"===We.call(e)&&(r=e instanceof n.type||e instanceof W,r||(e=e instanceof H?e.toJSON():e,e=new n.type(e)),e.parent=t,e.bind(Oe,function(e){n.trigger(Oe,{field:e.field,node:e.node,index:e.index,items:e.items||[this],action:e.node?e.action||\"itemloaded\":\"itemchange\"})})),e},push:function(){var e,t=this.length,r=this.wrapAll(arguments);return e=Ge.apply(this,r),this.trigger(Oe,{action:\"add\",index:t,items:r}),e},slice:Je,sort:[].sort,join:Ee,pop:function(){var e=this.length,t=Be.apply(this);return e&&this.trigger(Oe,{action:\"remove\",index:e-1,items:[t]}),t},splice:function(e,t,r){var n,i,a,s=this.wrapAll(Je.call(arguments,2));if(n=Ue.apply(this,[e,t].concat(s)),n.length)for(this.trigger(Oe,{action:\"remove\",index:e,items:n}),i=0,a=n.length;a>i;i++)n[i]&&n[i].children&&n[i].unbind(Oe);return r&&this.trigger(Oe,{action:\"add\",index:e,items:s}),n},shift:function(){var e=this.length,t=He.apply(this);return e&&this.trigger(Oe,{action:\"remove\",index:0,items:[t]}),t},unshift:function(){var e,t=this.wrapAll(arguments);return e=Ve.apply(this,t),this.trigger(Oe,{action:\"add\",index:0,items:t}),e},indexOf:function(e){var t,r,n=this;for(t=0,r=n.length;r>t;t++)if(n[t]===e)return t;return-1},forEach:function(e){for(var t=0,r=this.length;r>t;t++)e(this[t],t,this)},map:function(e){for(var t=0,r=[],n=this.length;n>t;t++)r[t]=e(this[t],t,this);return r},reduce:function(e){var t,r=0,n=this.length;for(2==arguments.length?t=arguments[1]:n>r&&(t=this[r++]);n>r;r++)t=e(t,this[r],r,this);return t},reduceRight:function(e){var t,r=this.length-1;for(2==arguments.length?t=arguments[1]:r>0&&(t=this[r--]);r>=0;r--)t=e(t,this[r],r,this);return t},filter:function(e){for(var t,r=0,n=[],i=this.length;i>r;r++)t=this[r],e(t,r,this)&&(n[n.length]=t);return n},find:function(e){for(var t,r=0,n=this.length;n>r;r++)if(t=this[r],e(t,r,this))return t},every:function(e){for(var t,r=0,n=this.length;n>r;r++)if(t=this[r],!e(t,r,this))return!1;return!0},some:function(e){for(var t,r=0,n=this.length;n>r;r++)if(t=this[r],e(t,r,this))return!0;return!1},remove:function(e){var t=this.indexOf(e);-1!==t&&this.splice(t,1)},empty:function(){this.splice(0,this.length)}});\"undefined\"!=typeof Symbol&&Symbol.iterator&&!Ye.prototype[Symbol.iterator]&&(Ye.prototype[Symbol.iterator]=[][Symbol.iterator]),U=Ye.extend({init:function(e,t){Se.fn.init.call(this),this.type=t||H;for(var r=0;e.length>r;r++)this[r]=e[r];this.length=r,this._parent=de(function(){return this},this)},at:function(e){var t=this[e];return t instanceof this.type?t.parent=this._parent:t=this[e]=this.wrap(t,this._parent),t}}),H=Se.extend({init:function(e){var t,r,n=this,i=function(){return n};Se.fn.init.call(this),this._handlers={};for(r in e)t=e[r],\"object\"==typeof t&&t&&!t.getTime&&\"_\"!=r.charAt(0)&&(t=n.wrap(t,r,i)),n[r]=t;n.uid=me.guid()},shouldSerialize:function(e){return this.hasOwnProperty(e)&&\"_handlers\"!==e&&\"_events\"!==e&&typeof this[e]!==ke&&\"uid\"!==e},forEach:function(e){for(var t in this)this.shouldSerialize(t)&&e(this[t],t)},toJSON:function(){var e,t,r={};for(t in this)this.shouldSerialize(t)&&(e=this[t],(e instanceof H||e instanceof Ye)&&(e=e.toJSON()),r[t]=e);return r},get:function(e){var t,r=this;return r.trigger(Re,{field:e}),t=\"this\"===e?r:me.getter(e,!0)(r)},_set:function(e,t){var r,n,i,a=this,s=e.indexOf(\".\")>=0;if(s)for(r=e.split(\".\"),n=\"\";r.length>1;){if(n+=r.shift(),i=me.getter(n,!0)(a),i instanceof H)return i.set(r.join(\".\"),t),s;n+=\".\"}return me.setter(e)(a,t),s},set:function(e,t){var r=this,n=!1,i=e.indexOf(\".\")>=0,a=me.getter(e,!0)(r);return a!==t&&(a instanceof Se&&this._handlers[e]&&(this._handlers[e].get&&a.unbind(Re,this._handlers[e].get),a.unbind(Oe,this._handlers[e].change)),n=r.trigger(\"set\",{field:e,value:t}),n||(i||(t=r.wrap(t,e,function(){return r})),(!r._set(e,t)||e.indexOf(\"(\")>=0||e.indexOf(\"[\")>=0)&&r.trigger(Oe,{field:e}))),n},parent:ve,wrap:function(e,t,n){var i,a,s,o,u=this,l=We.call(e);return null==e||\"[object Object]\"!==l&&\"[object Array]\"!==l||(s=e instanceof Ye,o=e instanceof ne,\"[object Object]\"!==l||o||s?(\"[object Array]\"===l||s||o)&&(s||o||(e=new Ye(e)),a=r(u,Oe,t,!1),e.bind(Oe,a),u._handlers[t]={change:a}):(e instanceof H||(e=new H(e)),i=r(u,Re,t,!0),e.bind(Re,i),a=r(u,Oe,t,!0),e.bind(Oe,a),u._handlers[t]={get:i,change:a}),e.parent=n),e}}),J={number:function(e){return me.parseFloat(e)},date:function(e){return me.parseDate(e)},\"boolean\":function(e){return typeof e===we?\"true\"===e.toLowerCase():null!=e?!!e:e},string:function(e){return null!=e?e+\"\":e},\"default\":function(e){return e}},V={string:\"\",number:0,date:new Date,\"boolean\":!1,\"default\":\"\"},W=H.extend({init:function(r){var n,i,a=this;if((!r||e.isEmptyObject(r))&&(r=e.extend({},a.defaults,r),a._initializers))for(n=0;a._initializers.length>n;n++)i=a._initializers[n],r[i]=a.defaults[i]();H.fn.init.call(a,r),a.dirty=!1,a.idField&&(a.id=a.get(a.idField),a.id===t&&(a.id=a._defaultId))},shouldSerialize:function(e){return H.fn.shouldSerialize.call(this,e)&&\"uid\"!==e&&!(\"id\"!==this.idField&&\"id\"===e)&&\"dirty\"!==e&&\"_accessors\"!==e},_parse:function(e,t){var r,n=this,a=e,s=n.fields||{};return e=s[e],e||(e=i(s,a)),e&&(r=e.parse,!r&&e.type&&(r=J[e.type.toLowerCase()])),r?r(t):t},_notifyChange:function(e){var t=e.action;\"add\"!=t&&\"remove\"!=t||(this.dirty=!0)},editable:function(e){return e=(this.fields||{})[e],e?e.editable!==!1:!0},set:function(e,t,r){var i=this,a=i.dirty;i.editable(e)&&(t=i._parse(e,t),n(t,i.get(e))||(i.dirty=!0,H.fn.set.call(i,e,t,r)&&!a&&(i.dirty=a)))},accept:function(e){var t,r,n=this,i=function(){return n};for(t in e)r=e[t],\"_\"!=t.charAt(0)&&(r=n.wrap(e[t],t,i)),n._set(t,r);n.idField&&(n.id=n.get(n.idField)),n.dirty=!1},isNew:function(){return this.id===this._defaultId}}),W.define=function(e,r){r===t&&(r=e,e=W);var n,i,a,s,o,u,l,d,h=le({defaults:{}},r),f={},c=h.id,g=[];if(c&&(h.idField=c),h.id&&delete h.id,c&&(h.defaults[c]=h._defaultId=\"\"),\"[object Array]\"===We.call(h.fields)){for(u=0,l=h.fields.length;l>u;u++)a=h.fields[u],typeof a===we?f[a]={}:a.field&&(f[a.field]=a);h.fields=f}for(i in h.fields)a=h.fields[i],s=a.type||\"default\",o=null,d=i,i=typeof a.field===we?a.field:i,a.nullable||(o=h.defaults[d!==i?d:i]=a.defaultValue!==t?a.defaultValue:V[s.toLowerCase()],\"function\"==typeof o&&g.push(i)),r.id===i&&(h._defaultId=o),h.defaults[d!==i?d:i]=o,a.parse=a.parse||J[s];return g.length>0&&(h._initializers=g),n=e.extend(h),n.define=function(e){return W.define(n,e)},h.fields&&(n.fields=h.fields,n.idField=h.idField),n},Q={selector:function(e){return ye(e)?e:Me(e)},compare:function(e){var t=this.selector(e);return function(e,r){return e=t(e),r=t(r),null==e&&null==r?0:null==e?-1:null==r?1:e.localeCompare?e.localeCompare(r):e>r?1:r>e?-1:0}},create:function(e){var t=e.compare||this.compare(e.field);return\"desc\"==e.dir?function(e,r){return t(r,e,!0)}:t},combine:function(e){return function(t,r){var n,i,a=e[0](t,r);for(n=1,i=e.length;i>n;n++)a=a||e[n](t,r);return a}}},K=le({},Q,{asc:function(e){var t=this.selector(e);return function(e,r){var n=t(e),i=t(r);return n&&n.getTime&&i&&i.getTime&&(n=n.getTime(),i=i.getTime()),n===i?e.__position-r.__position:null==n?-1:null==i?1:n.localeCompare?n.localeCompare(i):n>i?1:-1}},desc:function(e){var t=this.selector(e);return function(e,r){var n=t(e),i=t(r);return n&&n.getTime&&i&&i.getTime&&(n=n.getTime(),i=i.getTime()),n===i?e.__position-r.__position:null==n?1:null==i?-1:i.localeCompare?i.localeCompare(n):i>n?1:-1}},create:function(e){return this[e.dir](e.field)}}),B=function(e,t){var r,n=e.length,i=Array(n);for(r=0;n>r;r++)i[r]=t(e[r],r,e);return i},$=function(){function e(e){return e.replace(Xe,\"\\\\\").replace($e,\"\")}function t(t,r,n,i){var a;return null!=n&&(typeof n===we&&(n=e(n),a=Ke.exec(n),a?n=new Date(+a[1]):i?(n=\"'\"+n.toLowerCase()+\"'\",r=\"((\"+r+\" || '')+'').toLowerCase()\"):n=\"'\"+n+\"'\"),n.getTime&&(r=\"(\"+r+\"&&\"+r+\".getTime?\"+r+\".getTime():\"+r+\")\",n=n.getTime())),r+\" \"+t+\" \"+n}return{quote:function(t){return t&&t.getTime?\"new Date(\"+t.getTime()+\")\":\"string\"==typeof t?\"'\"+e(t)+\"'\":\"\"+t},eq:function(e,r,n){return t(\"==\",e,r,n)},neq:function(e,r,n){return t(\"!=\",e,r,n)},gt:function(e,r,n){return t(\">\",e,r,n)},gte:function(e,r,n){return t(\">=\",e,r,n)},lt:function(e,r,n){return t(\"<\",e,r,n)},lte:function(e,r,n){return t(\"<=\",e,r,n)},startswith:function(t,r,n){return n&&(t=\"(\"+t+\" || '').toLowerCase()\",r&&(r=r.toLowerCase())),r&&(r=e(r)),t+\".lastIndexOf('\"+r+\"', 0) == 0\"},doesnotstartwith:function(t,r,n){return n&&(t=\"(\"+t+\" || '').toLowerCase()\",r&&(r=r.toLowerCase())),r&&(r=e(r)),t+\".lastIndexOf('\"+r+\"', 0) == -1\"},endswith:function(t,r,n){return n&&(t=\"(\"+t+\" || '').toLowerCase()\",r&&(r=r.toLowerCase())),r&&(r=e(r)),t+\".indexOf('\"+r+\"', \"+t+\".length - \"+(r||\"\").length+\") >= 0\"},doesnotendwith:function(t,r,n){return n&&(t=\"(\"+t+\" || '').toLowerCase()\",r&&(r=r.toLowerCase())),r&&(r=e(r)),t+\".indexOf('\"+r+\"', \"+t+\".length - \"+(r||\"\").length+\") < 0\"},contains:function(t,r,n){return n&&(t=\"(\"+t+\" || '').toLowerCase()\",r&&(r=r.toLowerCase())),r&&(r=e(r)),t+\".indexOf('\"+r+\"') >= 0\"},doesnotcontain:function(t,r,n){return n&&(t=\"(\"+t+\" || '').toLowerCase()\",r&&(r=r.toLowerCase())),r&&(r=e(r)),t+\".indexOf('\"+r+\"') == -1\"},isempty:function(e){return e+\" === ''\"},isnotempty:function(e){return e+\" !== ''\"},isnull:function(e){return\"(\"+e+\" === null || \"+e+\" === undefined)\"},isnotnull:function(e){return\"(\"+e+\" !== null && \"+e+\" !== undefined)\"}}}(),a.filterExpr=function(e){var r,n,i,s,o,u,l=[],d={and:\" && \",or:\" || \"},h=[],f=[],c=e.filters;for(r=0,n=c.length;n>r;r++)i=c[r],o=i.field,u=i.operator,i.filters?(s=a.filterExpr(i),i=s.expression.replace(/__o\\[(\\d+)\\]/g,function(e,t){return t=+t,\"__o[\"+(f.length+t)+\"]\"}).replace(/__f\\[(\\d+)\\]/g,function(e,t){return t=+t,\"__f[\"+(h.length+t)+\"]\"}),f.push.apply(f,s.operators),h.push.apply(h,s.fields)):(typeof o===ke?(s=\"__f[\"+h.length+\"](d)\",h.push(o)):s=me.expr(o),typeof u===ke?(i=\"__o[\"+f.length+\"](\"+s+\", \"+$.quote(i.value)+\")\",f.push(u)):i=$[(u||\"eq\").toLowerCase()](s,i.value,i.ignoreCase!==t?i.ignoreCase:!0)),l.push(i);return{expression:\"(\"+l.join(d[e.logic])+\")\",fields:h,operators:f}},X={\"==\":\"eq\",equals:\"eq\",isequalto:\"eq\",equalto:\"eq\",equal:\"eq\",\"!=\":\"neq\",ne:\"neq\",notequals:\"neq\",isnotequalto:\"neq\",notequalto:\"neq\",notequal:\"neq\",\"<\":\"lt\",islessthan:\"lt\",lessthan:\"lt\",less:\"lt\",\"<=\":\"lte\",le:\"lte\",islessthanorequalto:\"lte\",lessthanequal:\"lte\",\">\":\"gt\",isgreaterthan:\"gt\",greaterthan:\"gt\",greater:\"gt\",\">=\":\"gte\",isgreaterthanorequalto:\"gte\",greaterthanequal:\"gte\",ge:\"gte\",notsubstringof:\"doesnotcontain\",isnull:\"isnull\",isempty:\"isempty\",isnotempty:\"isnotempty\"},a.normalizeFilter=u,a.compareFilters=f,a.prototype={toArray:function(){return this.data},range:function(e,t){return new a(this.data.slice(e,e+t))},skip:function(e){return new a(this.data.slice(e))},take:function(e){return new a(this.data.slice(0,e))},select:function(e){return new a(B(this.data,e))},order:function(e,t){var r={dir:t};return e&&(e.compare?r.compare=e.compare:r.field=e),new a(this.data.slice(0).sort(Q.create(r)))},orderBy:function(e){return this.order(e,\"asc\")},orderByDescending:function(e){return this.order(e,\"desc\")},sort:function(e,t,r){var n,i,a=s(e,t),o=[];if(r=r||Q,a.length){for(n=0,i=a.length;i>n;n++)o.push(r.create(a[n]));return this.orderBy({compare:r.combine(o)})}return this},filter:function(e){var t,r,n,i,s,o,l,d,h=this.data,f=[];if(e=u(e),!e||0===e.filters.length)return this;for(i=a.filterExpr(e),o=i.fields,l=i.operators,s=d=Function(\"d, __f, __o\",\"return \"+i.expression),(o.length||l.length)&&(d=function(e){return s(e,o,l)}),t=0,n=h.length;n>t;t++)r=h[t],d(r)&&f.push(r);return new a(f)},group:function(e,t){e=g(e||[]),t=t||this.data;var r,n=this,i=new a(n.data);return e.length>0&&(r=e[0],i=i.groupBy(r).select(function(n){var i=new a(t).filter([{field:n.field,operator:\"eq\",value:n.value,ignoreCase:!1}]);return{field:n.field,value:n.value,items:e.length>1?new a(n.items).group(e.slice(1),i.toArray()).toArray():n.items,hasSubgroups:e.length>1,aggregates:i.aggregate(r.aggregates)}})),i},groupBy:function(e){if(fe(e)||!this.data.length)return new a([]);var t,r,n,i,s=e.field,o=this._sortForGrouping(s,e.dir||\"asc\"),u=me.accessor(s),l=u.get(o[0],s),d={field:s,value:l,items:[]},h=[d];for(n=0,i=o.length;i>n;n++)t=o[n],r=u.get(t,s),p(l,r)||(l=r,d={field:s,value:l,items:[]},h.push(d)),d.items.push(t);return new a(h)},_sortForGrouping:function(e,t){var r,n,i=this.data;if(!Qe){for(r=0,n=i.length;n>r;r++)i[r].__position=r;for(i=new a(i).sort(e,t,K).toArray(),r=0,n=i.length;n>r;r++)delete i[r].__position;return i}return this.sort(e,t).toArray()},aggregate:function(e){var t,r,n={},i={};if(e&&e.length)for(t=0,r=this.data.length;r>t;t++)_(n,e,this.data[t],t,r,i);return n}},Y={sum:function(e,t,r){var n=r.get(t);return v(e)?v(n)&&(e+=n):e=n,e},count:function(e){return(e||0)+1},average:function(e,r,n,i,a,s){var o=n.get(r);return s.count===t&&(s.count=0),v(e)?v(o)&&(e+=o):e=o,v(o)&&s.count++,i==a-1&&v(e)&&(e/=s.count),e},max:function(e,t,r){var n=r.get(t);return v(e)||m(e)||(e=n),n>e&&(v(n)||m(n))&&(e=n),e},min:function(e,t,r){var n=r.get(t);return v(e)||m(e)||(e=n),e>n&&(v(n)||m(n))&&(e=n),e}},a.process=function(e,r){r=r||{};var n,i=new a(e),o=r.group,u=g(o||[]).concat(s(r.sort||[])),l=r.filterCallback,d=r.filter,h=r.skip,f=r.take;return d&&(i=i.filter(d),l&&(i=l(i)),n=i.toArray().length),u&&(i=i.sort(u),o&&(e=i.toArray())),h!==t&&f!==t&&(i=i.range(h,f)),o&&(i=i.group(o,e)),{total:n,data:i.toArray()}},Z=be.extend({init:function(e){this.data=e.data},read:function(e){e.success(this.data)},update:function(e){e.success(e.data)},create:function(e){e.success(e.data)},destroy:function(e){e.success(e.data)}}),ee=be.extend({init:function(e){var t,r=this;e=r.options=le({},r.options,e),_e(Ie,function(t,r){typeof e[r]===we&&(e[r]={url:e[r]})}),r.cache=e.cache?te.create(e.cache):{find:ve,add:ve},t=e.parameterMap,ye(e.push)&&(r.push=e.push),r.push||(r.push=Ne),r.parameterMap=ye(t)?t:function(e){var r={};return _e(e,function(e,n){e in t&&(e=t[e],he(e)&&(n=e.value(n),e=e.key)),r[e]=n}),r}},options:{parameterMap:Ne},create:function(e){return pe(this.setup(e,xe))},read:function(r){var n,i,a,s=this,o=s.cache;r=s.setup(r,qe),n=r.success||ve,i=r.error||ve,a=o.find(r.data),a!==t?n(a):(r.success=function(e){o.add(r.data,e),n(e)},e.ajax(r))},update:function(e){return pe(this.setup(e,De))},destroy:function(e){return pe(this.setup(e,Ce))},setup:function(e,t){e=e||{};var r,n=this,i=n.options[t],a=ye(i.data)?i.data(e.data):i.data;return e=le(!0,{},i,e),r=le(!0,{},a,e.data),e.data=n.parameterMap(r,t),ye(e.url)&&(e.url=e.url(r)),e}}),te=be.extend({init:function(){this._store={}},add:function(e,r){e!==t&&(this._store[je(e)]=r)},find:function(e){return this._store[je(e)]},clear:function(){this._store={}},remove:function(e){delete this._store[je(e)]}}),te.create=function(e){var t={inmemory:function(){return new te}};return he(e)&&ye(e.find)?e:e===!0?new te:t[e]()},re=be.extend({init:function(e){var t,r,n,i,a,s,o,u,l,d,h,f,c,g=this;e=e||{};for(t in e)r=e[t],g[t]=typeof r===we?Me(r):r;i=e.modelBase||W,he(g.model)&&(g.model=n=i.define(g.model)),a=de(g.data,g),g._dataAccessFunction=a,g.model&&(s=de(g.groups,g),o=de(g.serialize,g),u={},l={},d={},h={},f=!1,n=g.model,n.fields&&(_e(n.fields,function(e,t){var r;c=e,he(t)&&t.field?c=t.field:typeof t===we&&(c=t),he(t)&&t.from&&(r=t.from),f=f||r&&r!==e||c!==e,l[e]=Me(r||c),d[e]=Me(e),u[r||c]=e,h[e]=r||c}),!e.serialize&&f&&(g.serialize=k(o,n,S,d,u,h))),g._dataAccessFunction=a,g.data=k(a,n,b,l,u,h),g.groups=k(s,n,w,l,u,h))},errors:function(e){return e?e.errors:null},parse:Ne,data:Ne,total:function(e){return e.length},groups:Ne,aggregates:function(){return{}},serialize:function(e){return e}}),ne=Se.extend({init:function(e){var r,n,i,a=this;e&&(n=e.data),e=a.options=le({},a.options,e),a._map={},a._prefetch={},a._data=[],a._pristineData=[],a._ranges=[],a._view=[],a._pristineTotal=0,a._destroyed=[],a._pageSize=e.pageSize,a._page=e.page||(e.pageSize?1:t),a._sort=s(e.sort),a._filter=u(e.filter),a._group=g(e.group),a._aggregate=e.aggregate,a._total=e.total,a._shouldDetachObservableParents=!0,Se.fn.init.call(a),a.transport=ie.create(e,n,a),ye(a.transport.push)&&a.transport.push({pushCreate:de(a._pushCreate,a),pushUpdate:de(a._pushUpdate,a),pushDestroy:de(a._pushDestroy,a)}),null!=e.offlineStorage&&(\"string\"==typeof e.offlineStorage?(i=e.offlineStorage,a._storage={getItem:function(){return JSON.parse(localStorage.getItem(i))},setItem:function(e){localStorage.setItem(i,je(a.reader.serialize(e)))}}):a._storage=e.offlineStorage),a.reader=new me.data.readers[e.schema.type||\"json\"](e.schema),r=a.reader.model||{},a._detachObservableParents(),a._data=a._observe(a._data),a._online=!0,a.bind([\"push\",Pe,Oe,Te,ze,Ae,Fe],e)},options:{data:null,schema:{modelBase:W},offlineStorage:null,serverSorting:!1,serverPaging:!1,serverFiltering:!1,serverGrouping:!1,serverAggregates:!1,batch:!1},clone:function(){return this},online:function(r){return r!==t?this._online!=r&&(this._online=r,r)?this.sync():e.Deferred().resolve().promise():this._online},offlineData:function(e){return null==this.options.offlineStorage?null:e!==t?this._storage.setItem(e):this._storage.getItem()||[]},_isServerGrouped:function(){var e=this.group()||[];return this.options.serverGrouping&&e.length},_pushCreate:function(e){this._push(e,\"pushCreate\")},_pushUpdate:function(e){this._push(e,\"pushUpdate\")},_pushDestroy:function(e){this._push(e,\"pushDestroy\")},_push:function(e,t){var r=this._readData(e);r||(r=e),this[t](r)},_flatData:function(e,t){if(e){if(this._isServerGrouped())return q(e);if(!t)for(var r=0;e.length>r;r++)e.at(r)}return e},parent:ve,get:function(e){var t,r,n=this._flatData(this._data);for(t=0,r=n.length;r>t;t++)if(n[t].id==e)return n[t]},getByUid:function(e){var t,r,n=this._flatData(this._data);if(n)for(t=0,r=n.length;r>t;t++)if(n[t].uid==e)return n[t]},indexOf:function(e){return F(this._data,e)},at:function(e){return this._data.at(e)},data:function(e){var r,n=this;if(e===t){if(n._data)for(r=0;n._data.length>r;r++)n._data.at(r);return n._data}n._detachObservableParents(),n._data=this._observe(e),n._pristineData=e.slice(0),n._storeData(),n._ranges=[],n.trigger(\"reset\"),n._addRange(n._data),n._total=n._data.length,n._pristineTotal=n._total,n._process(n._data)},view:function(e){return e===t?this._view:(this._view=this._observeView(e),t)},_observeView:function(e){var t,r=this;return R(e,r._data,r._ranges,r.reader.model||H,r._isServerGrouped()),t=new U(e,r.reader.model),t.parent=function(){return r.parent()},t},flatView:function(){var e=this.group()||[];return e.length?q(this._view):this._view},add:function(e){return this.insert(this._data.length,e)},_createNewModel:function(e){return this.reader.model?new this.reader.model(e):e instanceof H?e:new H(e)},insert:function(e,t){return t||(t=e,e=0),t instanceof W||(t=this._createNewModel(t)),this._isServerGrouped()?this._data.splice(e,0,this._wrapInEmptyGroup(t)):this._data.splice(e,0,t),t},pushCreate:function(e){var t,r,n,i,a,s;ce(e)||(e=[e]),t=[],r=this.options.autoSync,this.options.autoSync=!1;try{for(n=0;e.length>n;n++)i=e[n],a=this.add(i),t.push(a),s=a.toJSON(),this._isServerGrouped()&&(s=this._wrapInEmptyGroup(s)),this._pristineData.push(s)}finally{this.options.autoSync=r}t.length&&this.trigger(\"push\",{type:\"create\",items:t})},pushUpdate:function(e){var t,r,n,i,a;for(ce(e)||(e=[e]),t=[],r=0;e.length>r;r++)n=e[r],i=this._createNewModel(n),a=this.get(i.id),a?(t.push(a),a.accept(n),a.trigger(Oe),this._updatePristineForModel(a,n)):this.pushCreate(n);t.length&&this.trigger(\"push\",{type:\"update\",items:t})},pushDestroy:function(e){var t=this._removeItems(e);t.length&&this.trigger(\"push\",{type:\"destroy\",items:t})},_removeItems:function(e){var t,r,n,i,a,s;ce(e)||(e=[e]),t=[],r=this.options.autoSync,this.options.autoSync=!1;try{for(n=0;e.length>n;n++)i=e[n],a=this._createNewModel(i),s=!1,this._eachItem(this._data,function(e){var r,n;for(r=0;e.length>r;r++)if(n=e.at(r),n.id===a.id){t.push(n),e.splice(r,1),s=!0;break}}),s&&(this._removePristineForModel(a),this._destroyed.pop())}finally{this.options.autoSync=r}return t},remove:function(e){var r,n=this,i=n._isServerGrouped();return this._eachItem(n._data,function(a){return r=P(a,e),r&&i?(r.isNew&&r.isNew()||n._destroyed.push(r),!0):t}),this._removeModelFromRanges(e),this._updateRangesLength(),e},destroyed:function(){return this._destroyed},created:function(){var e,t,r=[],n=this._flatData(this._data);for(e=0,t=n.length;t>e;e++)n[e].isNew&&n[e].isNew()&&r.push(n[e]);return r},updated:function(){var e,t,r=[],n=this._flatData(this._data);for(e=0,t=n.length;t>e;e++)n[e].isNew&&!n[e].isNew()&&n[e].dirty&&r.push(n[e]);return r},sync:function(){var t,r=this,n=[],i=[],a=r._destroyed,s=e.Deferred().resolve().promise();if(r.online()){if(!r.reader.model)return s;n=r.created(),i=r.updated(),t=[],r.options.batch&&r.transport.submit?t=r._sendSubmit(n,i,a):(t.push.apply(t,r._send(\"create\",n)),t.push.apply(t,r._send(\"update\",i)),t.push.apply(t,r._send(\"destroy\",a))),s=e.when.apply(null,t).then(function(){var e,t;for(e=0,t=arguments.length;t>e;e++)r._accept(arguments[e]);r._storeData(!0),r._change({action:\"sync\"}),r.trigger(ze)})}else r._storeData(!0),r._change({action:\"sync\"});return s},cancelChanges:function(e){var t=this;e instanceof me.data.Model?t._cancelModel(e):(t._destroyed=[],t._detachObservableParents(),t._data=t._observe(t._pristineData),t.options.serverPaging&&(t._total=t._pristineTotal),t._ranges=[],t._addRange(t._data),t._change(),t._markOfflineUpdatesAsDirty())},_markOfflineUpdatesAsDirty:function(){var e=this;null!=e.options.offlineStorage&&e._eachItem(e._data,function(e){var t,r;for(t=0;e.length>t;t++)r=e.at(t),\"update\"!=r.__state__&&\"create\"!=r.__state__||(r.dirty=!0)})},hasChanges:function(){var e,t,r=this._flatData(this._data);if(this._destroyed.length)return!0;for(e=0,t=r.length;t>e;e++)if(r[e].isNew&&r[e].isNew()||r[e].dirty)return!0;return!1},_accept:function(t){var r,n=this,i=t.models,a=t.response,s=0,o=n._isServerGrouped(),u=n._pristineData,l=t.type;if(n.trigger(Ae,{response:a,type:l}),a&&!fe(a)){if(a=n.reader.parse(a),n._handleCustomErrors(a))return;a=n.reader.data(a),ce(a)||(a=[a])}else a=e.map(i,function(e){return e.toJSON()});for(\"destroy\"===l&&(n._destroyed=[]),s=0,r=i.length;r>s;s++)\"destroy\"!==l?(i[s].accept(a[s]),\"create\"===l?u.push(o?n._wrapInEmptyGroup(i[s]):a[s]):\"update\"===l&&n._updatePristineForModel(i[s],a[s])):n._removePristineForModel(i[s])},_updatePristineForModel:function(e,t){this._executeOnPristineForModel(e,function(e,r){me.deepExtend(r[e],t)})},_executeOnPristineForModel:function(e,r){this._eachPristineItem(function(n){var i=T(n,e);return i>-1?(r(i,n),!0):t})},_removePristineForModel:function(e){this._executeOnPristineForModel(e,function(e,t){t.splice(e,1)})},_readData:function(e){var t=this._isServerGrouped()?this.reader.groups:this.reader.data;return t.call(this.reader,e)},_eachPristineItem:function(e){this._eachItem(this._pristineData,e)},_eachItem:function(e,t){e&&e.length&&(this._isServerGrouped()?C(e,t):t(e))},_pristineForModel:function(e){var r,n,i=function(i){return n=T(i,e),n>-1?(r=i[n],!0):t};return this._eachPristineItem(i),r},_cancelModel:function(e){var t=this._pristineForModel(e);this._eachItem(this._data,function(r){var n=F(r,e);n>=0&&(!t||e.isNew()&&!t.__state__?r.splice(n,1):(r[n].accept(t),\"update\"==t.__state__&&(r[n].dirty=!0)))})},_submit:function(t,r){var n=this;n.trigger(Te,{type:\"submit\"}),n.transport.submit(le({success:function(r,n){var i=e.grep(t,function(e){return e.type==n})[0];i&&i.resolve({response:r,models:i.models,type:n})},error:function(e,r,i){for(var a=0;t.length>a;a++)t[a].reject(e);n.error(e,r,i)}},r))},_sendSubmit:function(t,r,n){var i=this,a=[];return i.options.batch&&(t.length&&a.push(e.Deferred(function(e){e.type=\"create\",e.models=t})),r.length&&a.push(e.Deferred(function(e){e.type=\"update\",e.models=r})),n.length&&a.push(e.Deferred(function(e){e.type=\"destroy\",e.models=n})),i._submit(a,{data:{created:i.reader.serialize(y(t)),updated:i.reader.serialize(y(r)),destroyed:i.reader.serialize(y(n))}})),a},_promise:function(t,r,n){var i=this;return e.Deferred(function(e){i.trigger(Te,{type:n}),i.transport[n].call(i.transport,le({success:function(t){e.resolve({response:t,models:r,type:n})},error:function(t,r,n){e.reject(t),i.error(t,r,n)}},t))}).promise()},_send:function(e,t){var r,n,i=this,a=[],s=i.reader.serialize(y(t));if(i.options.batch)t.length&&a.push(i._promise({data:{models:s}},t,e));else for(r=0,n=t.length;n>r;r++)a.push(i._promise({data:s[r]},[t[r]],e));return a},read:function(t){var r=this,n=r._params(t),i=e.Deferred();\nreturn r._queueRequest(n,function(){var e=r.trigger(Te,{type:\"read\"});e?(r._dequeueRequest(),i.resolve(e)):(r.trigger(Fe),r._ranges=[],r.trigger(\"reset\"),r.online()?r.transport.read({data:n,success:function(e){r._ranges=[],r.success(e,n),i.resolve()},error:function(){var e=Je.call(arguments);r.error.apply(r,e),i.reject.apply(i,e)}}):null!=r.options.offlineStorage&&(r.success(r.offlineData(),n),i.resolve()))}),i.promise()},_readAggregates:function(e){return this.reader.aggregates(e)},success:function(e){var r,n,i,a,s,o,u,l,d=this,h=d.options;if(d.trigger(Ae,{response:e,type:\"read\"}),d.online()){if(e=d.reader.parse(e),d._handleCustomErrors(e))return d._dequeueRequest(),t;d._total=d.reader.total(e),d._aggregate&&h.serverAggregates&&(d._aggregateResult=d._readAggregates(e)),e=d._readData(e),d._destroyed=[]}else{for(e=d._readData(e),r=[],n={},i=d.reader.model,a=i?i.idField:\"id\",s=0;this._destroyed.length>s;s++)o=this._destroyed[s][a],n[o]=o;for(s=0;e.length>s;s++)u=e[s],l=u.__state__,\"destroy\"==l?n[u[a]]||this._destroyed.push(this._createNewModel(u)):r.push(u);e=r,d._total=e.length}d._pristineTotal=d._total,d._pristineData=e.slice(0),d._detachObservableParents(),d._data=d._observe(e),d._markOfflineUpdatesAsDirty(),d._storeData(),d._addRange(d._data),d._process(d._data),d._dequeueRequest()},_detachObservableParents:function(){if(this._data&&this._shouldDetachObservableParents)for(var e=0;this._data.length>e;e++)this._data[e].parent&&(this._data[e].parent=ve)},_storeData:function(e){function t(e){var r,n,i,a=[];for(r=0;e.length>r;r++)n=e.at(r),i=n.toJSON(),s&&n.items?i.items=t(n.items):(i.uid=n.uid,o&&(n.isNew()?i.__state__=\"create\":n.dirty&&(i.__state__=\"update\"))),a.push(i);return a}var r,n,i,a,s=this._isServerGrouped(),o=this.reader.model;if(null!=this.options.offlineStorage){for(r=t(this._data),n=[],i=0;this._destroyed.length>i;i++)a=this._destroyed[i].toJSON(),a.__state__=\"destroy\",n.push(a);this.offlineData(r.concat(n)),e&&(this._pristineData=this._readData(r))}},_addRange:function(e){var t=this,r=t._skip||0,n=r+t._flatData(e,!0).length;t._ranges.push({start:r,end:n,data:e,timestamp:(new Date).getTime()}),t._ranges.sort(function(e,t){return e.start-t.start})},error:function(e,t,r){this._dequeueRequest(),this.trigger(Ae,{}),this.trigger(Pe,{xhr:e,status:t,errorThrown:r})},_params:function(e){var t=this,r=le({take:t.take(),skip:t.skip(),page:t.page(),pageSize:t.pageSize(),sort:t._sort,filter:t._filter,group:t._group,aggregate:t._aggregate},e);return t.options.serverPaging||(delete r.take,delete r.skip,delete r.page,delete r.pageSize),t.options.serverGrouping?t.reader.model&&r.group&&(r.group=M(r.group,t.reader.model)):delete r.group,t.options.serverFiltering?t.reader.model&&r.filter&&(r.filter=N(r.filter,t.reader.model)):delete r.filter,t.options.serverSorting?t.reader.model&&r.sort&&(r.sort=M(r.sort,t.reader.model)):delete r.sort,t.options.serverAggregates?t.reader.model&&r.aggregate&&(r.aggregate=M(r.aggregate,t.reader.model)):delete r.aggregate,r},_queueRequest:function(e,r){var n=this;n._requestInProgress?n._pending={callback:de(r,n),options:e}:(n._requestInProgress=!0,n._pending=t,r())},_dequeueRequest:function(){var e=this;e._requestInProgress=!1,e._pending&&e._queueRequest(e._pending.options,e._pending.callback)},_handleCustomErrors:function(e){if(this.reader.errors){var t=this.reader.errors(e);if(t)return this.trigger(Pe,{xhr:null,status:\"customerror\",errorThrown:\"custom error\",errors:t}),!0}return!1},_shouldWrap:function(e){var t=this.reader.model;return t&&e.length?!(e[0]instanceof t):!1},_observe:function(e){var t,r=this,n=r.reader.model;return r._shouldDetachObservableParents=!0,e instanceof Ye?(r._shouldDetachObservableParents=!1,r._shouldWrap(e)&&(e.type=r.reader.model,e.wrapAll(e,e))):(t=r.pageSize()&&!r.options.serverPaging?U:Ye,e=new t(e,r.reader.model),e.parent=function(){return r.parent()}),r._isServerGrouped()&&D(e,n),r._changeHandler&&r._data&&r._data instanceof Ye?r._data.unbind(Oe,r._changeHandler):r._changeHandler=de(r._change,r),e.bind(Oe,r._changeHandler)},_updateTotalForAction:function(e,t){var r=this,n=parseInt(r._total,10);v(r._total)||(n=parseInt(r._pristineTotal,10)),\"add\"===e?n+=t.length:\"remove\"===e?n-=t.length:\"itemchange\"===e||\"sync\"===e||r.options.serverPaging?\"sync\"===e&&(n=r._pristineTotal=parseInt(r._total,10)):n=r._pristineTotal,r._total=n},_change:function(e){var t,r,n,i=this,a=e?e.action:\"\";if(\"remove\"===a)for(t=0,r=e.items.length;r>t;t++)e.items[t].isNew&&e.items[t].isNew()||i._destroyed.push(e.items[t]);!i.options.autoSync||\"add\"!==a&&\"remove\"!==a&&\"itemchange\"!==a?(i._updateTotalForAction(a,e?e.items:[]),i._process(i._data,e)):(n=function(t){\"sync\"===t.action&&(i.unbind(\"change\",n),i._updateTotalForAction(a,e.items))},i.first(\"change\",n),i.sync())},_calculateAggregates:function(e,t){t=t||{};var r=new a(e),n=t.aggregate,i=t.filter;return i&&(r=r.filter(i)),r.aggregate(n)},_process:function(e,r){var n,i=this,a={};i.options.serverPaging!==!0&&(a.skip=i._skip,a.take=i._take||i._pageSize,a.skip===t&&i._page!==t&&i._pageSize!==t&&(a.skip=(i._page-1)*i._pageSize)),i.options.serverSorting!==!0&&(a.sort=i._sort),i.options.serverFiltering!==!0&&(a.filter=i._filter),i.options.serverGrouping!==!0&&(a.group=i._group),i.options.serverAggregates!==!0&&(a.aggregate=i._aggregate,i._aggregateResult=i._calculateAggregates(e,a)),n=i._queryProcess(e,a),i.view(n.data),n.total===t||i.options.serverFiltering||(i._total=n.total),r=r||{},r.items=r.items||i._view,i.trigger(Oe,r)},_queryProcess:function(e,t){return a.process(e,t)},_mergeState:function(e){var r=this;return e!==t&&(r._pageSize=e.pageSize,r._page=e.page,r._sort=e.sort,r._filter=e.filter,r._group=e.group,r._aggregate=e.aggregate,r._skip=r._currentRangeStart=e.skip,r._take=e.take,r._skip===t&&(r._skip=r._currentRangeStart=r.skip(),e.skip=r.skip()),r._take===t&&r._pageSize!==t&&(r._take=r._pageSize,e.take=r._take),e.sort&&(r._sort=e.sort=s(e.sort)),e.filter&&(r._filter=e.filter=u(e.filter)),e.group&&(r._group=e.group=g(e.group)),e.aggregate&&(r._aggregate=e.aggregate=c(e.aggregate))),e},query:function(r){var n,i,a=this.options.serverSorting||this.options.serverPaging||this.options.serverFiltering||this.options.serverGrouping||this.options.serverAggregates;return a||(this._data===t||0===this._data.length)&&!this._destroyed.length?this.read(this._mergeState(r)):(i=this.trigger(Te,{type:\"read\"}),i||(this.trigger(Fe),n=this._queryProcess(this._data,this._mergeState(r)),this.options.serverFiltering||(this._total=n.total!==t?n.total:this._data.length),this._aggregateResult=this._calculateAggregates(this._data,r),this.view(n.data),this.trigger(Ae,{type:\"read\"}),this.trigger(Oe,{items:n.data})),e.Deferred().resolve(i).promise())},fetch:function(e){var t=this,r=function(r){r!==!0&&ye(e)&&e.call(t)};return this._query().then(r)},_query:function(e){var t=this;return t.query(le({},{page:t.page(),pageSize:t.pageSize(),sort:t.sort(),filter:t.filter(),group:t.group(),aggregate:t.aggregate()},e))},next:function(e){var r=this,n=r.page(),i=r.total();return e=e||{},!n||i&&n+1>r.totalPages()?t:(r._skip=r._currentRangeStart=n*r.take(),n+=1,e.page=n,r._query(e),n)},prev:function(e){var r=this,n=r.page();return e=e||{},n&&1!==n?(r._skip=r._currentRangeStart=r._skip-r.take(),n-=1,e.page=n,r._query(e),n):t},page:function(e){var r,n=this;return e!==t?(e=Le.max(Le.min(Le.max(e,1),n.totalPages()),1),n._query({page:e}),t):(r=n.skip(),r!==t?Le.round((r||0)/(n.take()||1))+1:t)},pageSize:function(e){var r=this;return e!==t?(r._query({pageSize:e,page:1}),t):r.take()},sort:function(e){var r=this;return e!==t?(r._query({sort:e}),t):r._sort},filter:function(e){var r=this;return e===t?r._filter:(r.trigger(\"reset\"),r._query({filter:e,page:1}),t)},group:function(e){var r=this;return e!==t?(r._query({group:e}),t):r._group},total:function(){return parseInt(this._total||0,10)},aggregate:function(e){var r=this;return e!==t?(r._query({aggregate:e}),t):r._aggregate},aggregates:function(){var e=this._aggregateResult;return fe(e)&&(e=this._emptyAggregates(this.aggregate())),e},_emptyAggregates:function(e){var t,r,n={};if(!fe(e))for(t={},ce(e)||(e=[e]),r=0;e.length>r;r++)t[e[r].aggregate]=0,n[e[r].field]=t;return n},_wrapInEmptyGroup:function(e){var t,r,n,i,a=this.group();for(n=a.length-1,i=0;n>=i;n--)r=a[n],t={value:e.get(r.field),field:r.field,items:t?[t]:[e],hasSubgroups:!!t,aggregates:this._emptyAggregates(r.aggregates)};return t},totalPages:function(){var e=this,t=e.pageSize()||e.total();return Le.ceil((e.total()||0)/t)},inRange:function(e,t){var r=this,n=Le.min(e+t,r.total());return!r.options.serverPaging&&r._data.length>0?!0:r._findRange(e,n).length>0},lastRange:function(){var e=this._ranges;return e[e.length-1]||{start:0,end:0,data:[]}},firstItemUid:function(){var e=this._ranges;return e.length&&e[0].data.length&&e[0].data[0].uid},enableRequestsInProgress:function(){this._skipRequestsInProgress=!1},_timeStamp:function(){return(new Date).getTime()},range:function(e,r){var n,i,a,s,o,u,l,d;if(this._currentRequestTimeStamp=this._timeStamp(),this._skipRequestsInProgress=!0,e=Le.min(e||0,this.total()),n=this,i=Le.max(Le.floor(e/r),0)*r,a=Le.min(i+r,n.total()),s=n._findRange(e,Le.min(e+r,n.total())),s.length){n._pending=t,n._skip=e>n.skip()?Le.min(a,(n.totalPages()-1)*n.take()):i,n._currentRangeStart=e,n._take=r,o=n.options.serverPaging,u=n.options.serverSorting,l=n.options.serverFiltering,d=n.options.serverAggregates;try{n.options.serverPaging=!0,n._isServerGrouped()||n.group()&&n.group().length||(n.options.serverSorting=!0),n.options.serverFiltering=!0,n.options.serverPaging=!0,n.options.serverAggregates=!0,o&&(n._detachObservableParents(),n._data=s=n._observe(s)),n._process(s)}finally{n.options.serverPaging=o,n.options.serverSorting=u,n.options.serverFiltering=l,n.options.serverAggregates=d}}else r!==t&&(n._rangeExists(i,a)?e>i&&n.prefetch(a,r,function(){n.range(e,r)}):n.prefetch(i,r,function(){e>i&&a<n.total()&&!n._rangeExists(a,Le.min(a+r,n.total()))?n.prefetch(a,r,function(){n.range(e,r)}):n.range(e,r)}))},_findRange:function(e,r){var n,i,a,o,u,l,d,h,f,c,p,_,v=this,m=v._ranges,y=[],S=v.options,b=S.serverSorting||S.serverPaging||S.serverFiltering||S.serverGrouping||S.serverAggregates;for(i=0,p=m.length;p>i;i++)if(n=m[i],e>=n.start&&n.end>=e){for(c=0,a=i;p>a;a++)if(n=m[a],f=v._flatData(n.data,!0),f.length&&e+c>=n.start&&(l=n.data,d=n.end,b||(_=g(v.group()||[]).concat(s(v.sort()||[])),h=v._queryProcess(n.data,{sort:_,filter:v.filter()}),f=l=h.data,h.total!==t&&(d=h.total)),o=0,e+c>n.start&&(o=e+c-n.start),u=f.length,d>r&&(u-=d-r),c+=u-o,y=v._mergeGroups(y,l,o,u),n.end>=r&&c==r-e))return y;break}return[]},_mergeGroups:function(e,t,r,n){if(this._isServerGrouped()){var i,a=t.toJSON();return e.length&&(i=e[e.length-1]),x(i,a,r,n),e.concat(a)}return e.concat(t.slice(r,n))},skip:function(){var e=this;return e._skip===t?e._page!==t?(e._page-1)*(e.take()||1):t:e._skip},currentRangeStart:function(){return this._currentRangeStart||0},take:function(){return this._take||this._pageSize},_prefetchSuccessHandler:function(e,t,r,n){var i=this,a=i._timeStamp();return function(s){var o,u,l,d=!1,h={start:e,end:t,data:[],timestamp:i._timeStamp()};if(i._dequeueRequest(),i.trigger(Ae,{response:s,type:\"read\"}),s=i.reader.parse(s),l=i._readData(s),l.length){for(o=0,u=i._ranges.length;u>o;o++)if(i._ranges[o].start===e){d=!0,h=i._ranges[o];break}d||i._ranges.push(h)}h.data=i._observe(l),h.end=h.start+i._flatData(h.data,!0).length,i._ranges.sort(function(e,t){return e.start-t.start}),i._total=i.reader.total(s),(n||a>=i._currentRequestTimeStamp||!i._skipRequestsInProgress)&&(r&&l.length?r():i.trigger(Oe,{}))}},prefetch:function(e,t,r){var n=this,i=Le.min(e+t,n.total()),a={take:t,skip:e,page:e/t+1,pageSize:t,sort:n._sort,filter:n._filter,group:n._group,aggregate:n._aggregate};n._rangeExists(e,i)?r&&r():(clearTimeout(n._timeout),n._timeout=setTimeout(function(){n._queueRequest(a,function(){n.trigger(Te,{type:\"read\"})?n._dequeueRequest():n.transport.read({data:n._params(a),success:n._prefetchSuccessHandler(e,i,r),error:function(){var e=Je.call(arguments);n.error.apply(n,e)}})})},100))},_multiplePrefetch:function(e,t,r){var n=this,i=Le.min(e+t,n.total()),a={take:t,skip:e,page:e/t+1,pageSize:t,sort:n._sort,filter:n._filter,group:n._group,aggregate:n._aggregate};n._rangeExists(e,i)?r&&r():n.trigger(Te,{type:\"read\"})||n.transport.read({data:n._params(a),success:n._prefetchSuccessHandler(e,i,r,!0)})},_rangeExists:function(e,t){var r,n,i=this,a=i._ranges;for(r=0,n=a.length;n>r;r++)if(e>=a[r].start&&a[r].end>=t)return!0;return!1},_removeModelFromRanges:function(e){var t,r,n,i,a;for(i=0,a=this._ranges.length;a>i&&(n=this._ranges[i],this._eachItem(n.data,function(n){t=P(n,e),t&&(r=!0)}),!r);i++);},_updateRangesLength:function(){var e,t,r,n,i=0;for(r=0,n=this._ranges.length;n>r;r++)e=this._ranges[r],e.start=e.start-i,t=this._flatData(e.data,!0).length,i=e.end-t,e.end=e.start+t}}),ie={},ie.create=function(t,r,n){var i,a=t.transport?e.extend({},t.transport):null;return a?(a.read=typeof a.read===we?{url:a.read}:a.read,\"jsdo\"===t.type&&(a.dataSource=n),t.type&&(me.data.transports=me.data.transports||{},me.data.schemas=me.data.schemas||{},me.data.transports[t.type]?he(me.data.transports[t.type])?a=le(!0,{},me.data.transports[t.type],a):i=new me.data.transports[t.type](le(a,{data:r})):me.logToConsole(\"Unknown DataSource transport type '\"+t.type+\"'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.\",\"warn\"),t.schema=le(!0,{},me.data.schemas[t.type],t.schema)),i||(i=ye(a.read)?a:new ee(a))):i=new Z({data:t.data||[]}),i},ne.create=function(e){(ce(e)||e instanceof Ye)&&(e={data:e});var r,n,i,a=e||{},s=a.data,o=a.fields,u=a.table,l=a.select,d={};if(s||!o||a.transport||(u?s=L(u,o):l&&(s=j(l,o),a.group===t&&s[0]&&s[0].optgroup!==t&&(a.group=\"optgroup\"))),me.data.Model&&o&&(!a.schema||!a.schema.model)){for(r=0,n=o.length;n>r;r++)i=o[r],i.type&&(d[i.field]=i);fe(d)||(a.schema=le(!0,a.schema,{model:{fields:d}}))}return a.data=s,l=null,a.select=null,u=null,a.table=null,a instanceof ne?a:new ne(a)},ae=W.define({idField:\"id\",init:function(e){var t=this,r=t.hasChildren||e&&e.hasChildren,n=\"items\",i={};me.data.Model.fn.init.call(t,e),typeof t.children===we&&(n=t.children),i={schema:{data:n,model:{hasChildren:r,id:t.idField,fields:t.fields}}},typeof t.children!==we&&le(i,t.children),i.data=e,r||(r=i.schema.data),typeof r===we&&(r=me.getter(r)),ye(r)&&(t.hasChildren=!!r.call(t,t)),t._childrenOptions=i,t.hasChildren&&t._initChildren(),t._loaded=!(!e||!e._loaded)},_initChildren:function(){var e,t,r,n=this;n.children instanceof se||(e=n.children=new se(n._childrenOptions),t=e.transport,r=t.parameterMap,t.parameterMap=function(e,t){return e[n.idField||\"id\"]=n.id,r&&(e=r(e,t)),e},e.parent=function(){return n},e.bind(Oe,function(e){e.node=e.node||n,n.trigger(Oe,e)}),e.bind(Pe,function(e){var t=n.parent();t&&(e.node=e.node||n,t.trigger(Pe,e))}),n._updateChildrenField())},append:function(e){this._initChildren(),this.loaded(!0),this.children.add(e)},hasChildren:!1,level:function(){for(var e=this.parentNode(),t=0;e&&e.parentNode;)t++,e=e.parentNode?e.parentNode():null;return t},_updateChildrenField:function(){var e=this._childrenOptions.schema.data;this[e||\"items\"]=this.children.data()},_childrenLoaded:function(){this._loaded=!0,this._updateChildrenField()},load:function(){var r,n,i={},a=\"_query\";return this.hasChildren?(this._initChildren(),r=this.children,i[this.idField||\"id\"]=this.id,this._loaded||(r._data=t,a=\"read\"),r.one(Oe,de(this._childrenLoaded,this)),n=r[a](i)):this.loaded(!0),n||e.Deferred().resolve().promise()},parentNode:function(){var e=this.parent();return e.parent()},loaded:function(e){return e===t?this._loaded:(this._loaded=e,t)},shouldSerialize:function(e){return W.fn.shouldSerialize.call(this,e)&&\"children\"!==e&&\"_loaded\"!==e&&\"hasChildren\"!==e&&\"_childrenOptions\"!==e}}),se=ne.extend({init:function(e){var t=ae.define({children:e});ne.fn.init.call(this,le(!0,{},{schema:{modelBase:t,model:t}},e)),this._attachBubbleHandlers()},_attachBubbleHandlers:function(){var e=this;e._data.bind(Pe,function(t){e.trigger(Pe,t)})},remove:function(e){var t,r=e.parentNode(),n=this;return r&&r._initChildren&&(n=r.children),t=ne.fn.remove.call(n,e),r&&!n.data().length&&(r.hasChildren=!1),t},success:G(\"success\"),data:G(\"data\"),insert:function(e,t){var r=this.parent();return r&&r._initChildren&&(r.hasChildren=!0,r._initChildren()),ne.fn.insert.call(this,e,t)},_find:function(e,t){var r,n,i,a,s=this._data;if(s){if(i=ne.fn[e].call(this,t))return i;for(s=this._flatData(this._data),r=0,n=s.length;n>r;r++)if(a=s[r].children,a instanceof se&&(i=a[e](t)))return i}},get:function(e){return this._find(\"get\",e)},getByUid:function(e){return this._find(\"getByUid\",e)}}),se.create=function(e){e=e&&e.push?{data:e}:e;var t=e||{},r=t.data,n=t.fields,i=t.list;return r&&r._dataSource?r._dataSource:(r||!n||t.transport||i&&(r=E(i,n)),t.data=r,t instanceof se?t:new se(t))},oe=me.Observable.extend({init:function(e,t,r){me.Observable.fn.init.call(this),this._prefetching=!1,this.dataSource=e,this.prefetch=!r;var n=this;e.bind(\"change\",function(){n._change()}),e.bind(\"reset\",function(){n._reset()}),this._syncWithDataSource(),this.setViewSize(t)},setViewSize:function(e){this.viewSize=e,this._recalculate()},at:function(e){var r=this.pageSize,n=!0;return e>=this.total()?(this.trigger(\"endreached\",{index:e}),null):this.useRanges?this.useRanges?((this.dataOffset>e||e>=this.skip+r)&&(n=this.range(Math.floor(e/r)*r)),e===this.prefetchThreshold&&this._prefetch(),e===this.midPageThreshold?this.range(this.nextMidRange,!0):e===this.nextPageThreshold?this.range(this.nextFullRange):e===this.pullBackThreshold&&this.range(this.offset===this.skip?this.previousMidRange:this.previousFullRange),n?this.dataSource.at(e-this.dataOffset):(this.trigger(\"endreached\",{index:e}),null)):t:this.dataSource.view()[e]},indexOf:function(e){return this.dataSource.data().indexOf(e)+this.dataOffset},total:function(){return parseInt(this.dataSource.total(),10)},next:function(){var e=this,t=e.pageSize,r=e.skip-e.viewSize+t,n=Le.max(Le.floor(r/t),0)*t;this.offset=r,this.dataSource.prefetch(n,t,function(){e._goToRange(r,!0)})},range:function(e,t){if(this.offset===e)return!0;var r=this,n=this.pageSize,i=Le.max(Le.floor(e/n),0)*n,a=this.dataSource;return t&&(i+=n),a.inRange(e,n)?(this.offset=e,this._recalculate(),this._goToRange(e),!0):this.prefetch?(a.prefetch(i,n,function(){r.offset=e,r._recalculate(),r._goToRange(e,!0)}),!1):!0},syncDataSource:function(){var e=this.offset;this.offset=null,this.range(e)},destroy:function(){this.unbind()},_prefetch:function(){var e=this,t=this.pageSize,r=this.skip+t,n=this.dataSource;n.inRange(r,t)||this._prefetching||!this.prefetch||(this._prefetching=!0,this.trigger(\"prefetching\",{skip:r,take:t}),n.prefetch(r,t,function(){e._prefetching=!1,e.trigger(\"prefetched\",{skip:r,take:t})}))},_goToRange:function(e,t){this.offset===e&&(this.dataOffset=e,this._expanding=t,this.dataSource.range(e,this.pageSize),this.dataSource.enableRequestsInProgress())},_reset:function(){this._syncPending=!0},_change:function(){var e=this.dataSource;this.length=this.useRanges?e.lastRange().end:e.view().length,this._syncPending&&(this._syncWithDataSource(),this._recalculate(),this._syncPending=!1,this.trigger(\"reset\",{offset:this.offset})),this.trigger(\"resize\"),this._expanding&&this.trigger(\"expand\"),delete this._expanding},_syncWithDataSource:function(){var e=this.dataSource;this._firstItemUid=e.firstItemUid(),this.dataOffset=this.offset=e.skip()||0,this.pageSize=e.pageSize(),this.useRanges=e.options.serverPaging},_recalculate:function(){var e=this.pageSize,t=this.offset,r=this.viewSize,n=Math.ceil(t/e)*e;this.skip=n,this.midPageThreshold=n+e-1,this.nextPageThreshold=n+r-1,this.prefetchThreshold=n+Math.floor(e/3*2),this.pullBackThreshold=this.offset-1,this.nextMidRange=n+e-r,this.nextFullRange=n,this.previousMidRange=t-r,this.previousFullRange=n-e}}),ue=me.Observable.extend({init:function(e,t){var r=this;me.Observable.fn.init.call(r),this.dataSource=e,this.batchSize=t,this._total=0,this.buffer=new oe(e,3*t),this.buffer.bind({endreached:function(e){r.trigger(\"endreached\",{index:e.index})},prefetching:function(e){r.trigger(\"prefetching\",{skip:e.skip,take:e.take})},prefetched:function(e){r.trigger(\"prefetched\",{skip:e.skip,take:e.take})},reset:function(){r._total=0,r.trigger(\"reset\")},resize:function(){r._total=Math.ceil(this.length/r.batchSize),r.trigger(\"resize\",{total:r.total(),offset:this.offset})}})},syncDataSource:function(){this.buffer.syncDataSource()},at:function(e){var t,r,n=this.buffer,i=e*this.batchSize,a=this.batchSize,s=[];for(n.offset>i&&n.at(n.offset-1),r=0;a>r&&(t=n.at(i+r),null!==t);r++)s.push(t);return s},total:function(){return this._total},destroy:function(){this.buffer.destroy(),this.unbind()}}),le(!0,me.data,{readers:{json:re},Query:a,DataSource:ne,HierarchicalDataSource:se,Node:ae,ObservableObject:H,ObservableArray:Ye,LazyObservableArray:U,LocalTransport:Z,RemoteTransport:ee,Cache:te,DataReader:re,Model:W,Buffer:oe,BatchBuffer:ue})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,r){(r||t)()});\n//# sourceMappingURL=kendo.data.min.js.map\n","import { ActionsUnion, createAction } from \"app2/src/reducers/Utils\";\nimport { FenceSegmentRecord, IFenceSegmentData } from \"app2/src/records/measurements/Segment\";\nimport { ThunkResult, RootState } from \"app2/src/reducers\";\nimport { segmentFenceId } from \"app2/src/selectors/measurements/segment.selectors\";\nimport { fenceFencingId } from \"app2/src/selectors/measurements/fence.selectors\";\nimport * as fenceActions from \"app2/src/reducers/measurements/fence.actions\";\nimport * as fencingActions from \"app2/src/reducers/measurements/fencing.actions\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nexport const RECEIVE_SEGMENT = \"@measurements_segments/RECEIVE_SEGMENT\";\nexport const SET_SEGMENT = \"@measurements_segments/SET_SEGMENT\";\nexport const RESET_SEGMENT = \"@measurements_segments/RESET_SEGMENT\";\nexport const DELETE_SEGMENT = \"@measurements_segments/DELETE_SEGMENT\";\nexport const SET_GATE_COUNT = \"@measurements_fences/SET_GATE_COUNT\";\nexport const SET_GATE_LENGTH = \"@measurements_fences/SET_GATE_LENGTH\";\n\nexport const Actions = {\n  receiveSegment: (segment: Partial<IFenceSegmentData>) => createAction(RECEIVE_SEGMENT, { segment }),\n  setSegment: (segment: FenceSegmentRecord) => createAction(SET_SEGMENT, { segment }),\n  resetSegment: (segmentId: number) => createAction(RESET_SEGMENT, { segmentId }),\n  deleteSegment: (segmentId: number) => createAction(DELETE_SEGMENT, { segmentId }),\n  setGateCount: (segmentId: number, gateCount: number) => createAction(SET_GATE_COUNT, { segmentId, gateCount }),\n  setGateLength: (segmentId: number, gateLength: number) => createAction(SET_GATE_LENGTH, { segmentId, gateLength }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nexport const AsyncActions = {\n  setGateCount: (segmentId: number, gateCount: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.setGateCount(segmentId, gateCount));\n      const fenceId = segmentFenceId(getState(), { segmentId });\n      dispatch(fenceActions.AsyncActions.updateTotals(fenceId));\n      dispatch(fencingActions.Actions.updateTotals(fenceFencingId(getState(), { fenceId })));\n    };\n  },\n  setGateLength: (segmentId: number, gateLength: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.setGateLength(segmentId, gateLength));\n      dispatch(fenceActions.AsyncActions.updateTotals(segmentFenceId(getState(), { segmentId })));\n    };\n  },\n};\n","import { baseCleanProps } from \"app2/src/api/Api\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { IMeasurementData, MeasurementHydratedRecord } from \"app2/src/records/Measurement\";\n\nexport interface IMeasurementResponse {\n  measurement: IMeasurementData;\n}\n\nexport const url = \"api/v1/measurements\";\nexport const measurementRelations = [\"roof_faces\", \"wall_facades\", \"windows\", \"doors\", \"rooms\", \"decks\", \"pools\"];\n\nexport const load = async (id: number, include: string[]): Promise<IMeasurementResponse> => {\n  const actionUrl = fetcher.joinUrls(url, id.toString());\n  return await fetcher.get<IMeasurementResponse>(actionUrl, { \"include[]\": include });\n};\n\nexport const update = async (\n  measurement: MeasurementHydratedRecord,\n  include: string[],\n): Promise<IMeasurementResponse> => {\n  const actionUrl = fetcher.joinUrls(url, measurement.id.toString());\n  const measurementData = cleanProps(measurement);\n  return await fetcher.patch<IMeasurementResponse>(actionUrl, {\n    measurement: measurementData,\n    include,\n  });\n};\n\nexport const cleanProps = (measurement: MeasurementHydratedRecord): any => {\n  let measurementData: any = { ...measurement.toJS() };\n  measurementData = baseCleanProps(measurementData);\n\n  measurementRelations.forEach((relation) => {\n    if (measurementData[relation]) {\n      measurementData[`${relation}_attributes`] = [];\n      _.each(measurementData[relation], (data: any) => {\n        const props = baseCleanProps(data);\n        delete props.annotation;\n        measurementData[`${relation}_attributes`].push(props);\n      });\n      delete measurement[relation];\n    }\n  });\n\n  delete measurementData.levels;\n  delete measurementData.locations;\n  delete measurementData.elevations;\n  delete measurementData.elevation_ids;\n\n  return measurementData;\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IMeasurementData } from \"../records/Measurement\";\nimport { RootState, ThunkResult } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { currentMeasurementId, getMeasurementHydrated } from \"app2/src/selectors/measurement.selectors\";\nimport { load, update } from \"app2/src/api/measurement.service\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { AsyncActions as FencingAsyncActions } from \"app2/src/reducers/measurements/fencing.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { IPoolData } from \"app2/src/records/Pool\";\nimport { IDeckData } from \"app2/src/records/Deck\";\nimport { IOpeningData } from \"app2/src/records/Opening\";\nimport { measurementFencingDirtyTree } from \"app2/src/selectors/measurements/fencing.selectors\";\nimport { IRoomData } from \"app2/src/records/Room\";\nimport { IElevationData } from \"app2/src/records/Elevation\";\nimport { IWallFacadeData } from \"app2/src/records/WallFacade\";\n\nexport const FETCH_MEASUREMENT = \"@measurements/FETCH_MEASUREMENT\";\nexport const RECEIVE_MEASUREMENT = \"@measurements/RECEIVE_MEASUREMENT\";\nexport const SET_MEASUREMENT_LOADED = \"@measurements/SET_MEASUREMENT_LOADED\";\nexport const UPDATE_FORM = \"@measurements/UPDATE_FORM\";\nexport const UPDATE_ROOF_WASTE = \"@measurements/UPDATE_ROOF_WASTE\";\nexport const UPDATE_SLOPED_ROOF_WASTE = \"@measurements/UPDATE_SLOPED_ROOF_WASTE\";\nexport const UPDATE_LINE_MEASUREMENTS = \"@measurements/UPDATE_LINE_MEASUREMENTS\";\nexport const UPDATE_SIDING_WASTE = \"@measurements/UPDATE_SIDING_WASTE\";\nexport const UPDATE_SUNROOM = \"@measurements/UPDATE_SUNROOM\";\nexport const UPDATE_SUNROOM_WALL = \"@measurements/UPDATE_SUNROOM_WALL\";\nexport const UPDATE_SUNROOM_KNEE_WALL = \"@measurements/UPDATE_SUNROOM_KNEE_WALL\";\nexport const UPDATE_RAPID_AREA = \"@measurements/UPDATE_RAPID_AREA\";\nexport const UPDATE_SATELLITE = \"@measurements/UPDATE_SATELLITE\";\nexport const UPDATE_POOLS = \"@measurements/UPDATE_POOLS\";\nexport const UPDATE_DECKS = \"@measurements/UPDATE_DECKS\";\nexport const UPDATE_WINDOWS = \"@measurements/UPDATE_WINDOWS\";\nexport const UPDATE_DOORS = \"@measurements/UPDATE_DOORS\";\nexport const UPDATE_ROOMS = \"@measurements/UPDATE_ROOMS\";\nexport const UPDATE_ELEVATIONS = \"@measurements/UPDATE_ELEVATIONS\";\nexport const UPDATE_WALL_FACADES = \"@measurements/UPDATE_WALL_FACADES\";\nexport const RESET_MEASUREMENT = \"@measurements/RESET_MEASUREMENT\";\nexport const SET_EDITING = \"@measurements/SET_EDITING\";\nexport const INIT_ADD_MEASUREMENT = \"@measurements/INIT_ADD_MEASUREMENT\";\nexport const UPDATE_ADD_MEASUREMENT = \"@measurements/UPDATE_ADD_MEASUREMENT\";\nexport const SAVE_ADD_MEASUREMENT = \"@measurements/SAVE_ADD_MEASUREMENT\";\n\nexport const Actions = {\n  fetchMeasurement: (measurementId: number) => createAction(FETCH_MEASUREMENT, { measurementId }),\n  receiveMeasurement: (measurement: Partial<IMeasurementData>) => createAction(RECEIVE_MEASUREMENT, { measurement }),\n  setMeasurementLoaded: (measurementId: number) => createAction(SET_MEASUREMENT_LOADED, { measurementId }),\n  updateForm: (event: { rootPath: any; name: string; value: any }) => createAction(UPDATE_FORM, { event }),\n  updateRoofWaste: () => createAction(UPDATE_ROOF_WASTE, {}),\n  updateSlopedRoofWaste: () => createAction(UPDATE_SLOPED_ROOF_WASTE, {}),\n  updateLineMeasurements: () => createAction(UPDATE_LINE_MEASUREMENTS, {}),\n  updateSidingWaste: () => createAction(UPDATE_SIDING_WASTE, {}),\n  updateSunroom: () => createAction(UPDATE_SUNROOM, {}),\n  updateSunroomWall: () => createAction(UPDATE_SUNROOM_WALL, {}),\n  updateSunroomKneeWall: () => createAction(UPDATE_SUNROOM_KNEE_WALL, {}),\n  updateRapidAreaTool: (rapidArea: any[]) => createAction(UPDATE_RAPID_AREA, { rapidArea }),\n  updateSatelliteMeasurementTool: (leaflet: any[], leafletZoom: number) =>\n    createAction(UPDATE_SATELLITE, { leaflet, leafletZoom }),\n  updatePools: (pools: IPoolData[]) => createAction(UPDATE_POOLS, { pools }),\n  updateDecks: (decks: IDeckData[]) => createAction(UPDATE_DECKS, { decks }),\n  updateWindows: (windows: IOpeningData[]) => createAction(UPDATE_WINDOWS, { windows }),\n  updateDoors: (doors: IOpeningData[]) => createAction(UPDATE_DOORS, { doors }),\n  updateRooms: (rooms: IRoomData[]) => createAction(UPDATE_ROOMS, { rooms }),\n  updateElevations: (elevations: IElevationData[]) => createAction(UPDATE_ELEVATIONS, { elevations }),\n  updateWallFacades: (wallFacades: IWallFacadeData[]) => createAction(UPDATE_WALL_FACADES, { wallFacades }),\n  resetMeasurement: () => createAction(RESET_MEASUREMENT, {}),\n  setEditing: (value: boolean) => createAction(SET_EDITING, { value }),\n  initAddMeasurement: () => createAction(INIT_ADD_MEASUREMENT, {}),\n  updateAddMeasurement: (event: { rootPath: any; name: string; value: any }) =>\n    createAction(UPDATE_ADD_MEASUREMENT, { event }),\n  saveAddMeasurement: () => createAction(SAVE_ADD_MEASUREMENT, {}),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nexport const AsyncActions = {\n  loadMeasurement: (include: string[] = []): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const measurementId = currentMeasurementId(getState(), {});\n      try {\n        dispatch(Actions.fetchMeasurement(measurementId));\n\n        const response = await load(measurementId, include);\n\n        dispatch(Actions.receiveMeasurement(response.measurement));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setMeasurementLoaded(measurementId));\n      }\n    };\n  },\n  updateMeasurement: (include: string[] = []): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const measurementId = currentMeasurementId(getState(), {});\n      const measurement = getMeasurementHydrated(getState(), { measurementId });\n      try {\n        dispatch(Actions.fetchMeasurement(measurementId));\n\n        const promises = [];\n        // measurement.elevations.forEach((elevation) => {\n        //   // TODO: only want to call if elevation changed - use selector\n        //   // Elevation fromJSON will need to allow this to work\n        //   promises.push(dispatch(ImageAsyncActions.updateOrCreateImage(elevation.rendered_image)));\n        // });\n\n        if (measurementFencingDirtyTree(getState(), { measurementId })) {\n          promises.push(dispatch(FencingAsyncActions.save(measurementId)));\n        }\n\n        await Promise.all(promises);\n\n        const response = await update(measurement, include);\n\n        dispatch(Actions.receiveMeasurement(response.measurement));\n        dispatch(Actions.setEditing(false));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved measurement successfully\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setMeasurementLoaded(measurementId));\n      }\n    };\n  },\n};\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IImageData, ImageRecord, ImageDisplayType, toFormData } from \"app2/src/records/Image\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { IMetaPaginationData } from \"app2/src/records/MetaPagination\";\nimport { List } from \"immutable\";\nimport { baseCleanProps, listParams } from \"app2/src/api/Api\";\nimport { IDirectUploadResponse } from \"app2/src/api/document.service\";\nimport { toUnderscore } from \"app2/src/helpers/Format\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport interface IImageIndexResponse {\n  images: IImageData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nexport interface IImageResponse {\n  image?: IImageData;\n  images?: IImageData[];\n}\n\nexport type ImageableType = \"org\" | \"job\" | \"estimate\" | \"estimate_line_item\";\nexport const ImageableTypeConversion = { org: \"Org\", job: \"Job\" };\n\nexport interface IImageOptions {\n  imageableId: number;\n  imageableType: ImageableType;\n  image_ids?: List<number>;\n  folder_id?: number;\n  display?: ImageDisplayType;\n  refreshLoad?: boolean;\n}\n\nconst urls = {\n  org: \"api/v1/orgs/:id/images\",\n  job: \"api/v1/jobs/:id/images\",\n  estimate: \"api/v1/estimates/:id/images\",\n  estimate_line_item: \"api/v1/estimate_line_items/:id/images\",\n};\n\nexport const list = (\n  options: IImageOptions,\n  queryParams: QueryParamsRecord = new QueryParamsRecord(),\n): Promise<IImageIndexResponse> => {\n  const actionUrl = urls[options.imageableType].replace(\":id\", options.imageableId.toString());\n  const params = listParams(queryParams);\n\n  if (options.folder_id && options.folder_id !== 0) {\n    params.folder_id = options.folder_id;\n  }\n\n  if (options.display) {\n    params.display = options.display;\n  }\n\n  if (options.image_ids) {\n    params[\"image_ids[]\"] = options.image_ids.toArray();\n  }\n\n  return fetcher.get<IImageIndexResponse>(actionUrl, params);\n};\n\nexport const updateOrCreate = (image: ImageRecord): Promise<IImageResponse> => {\n  if (image.id > 0) {\n    return update(image);\n  } else {\n    return create(image);\n  }\n};\n\nexport const create = (image: ImageRecord): Promise<IImageResponse> => {\n  const actionUrl = urlSetup(image);\n  return fetcher.post<IImageResponse>(actionUrl, toFormData(image), { formData: true });\n};\n\nexport const update = (image: ImageRecord): Promise<IImageResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(image), image.id.toString());\n  return fetcher.patch(actionUrl, cleanProps(image));\n};\n\nexport const destroy = (image: ImageRecord): Promise<IImageResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(image), image.id.toString());\n  return fetcher.delete(actionUrl);\n};\n\nexport const directUpload = (\n  fileCount: number,\n  imageableType: ImageableType,\n  imageableId: number,\n): Promise<IDirectUploadResponse> => {\n  const actionUrl = fetcher.joinUrls(urls[imageableType].replace(\":id\", imageableId.toString()), \"direct\");\n  return fetcher.post(actionUrl, { count: fileCount });\n};\n\nexport const createDirect = (image: ImageRecord): Promise<IImageResponse> => {\n  const actionUrl = urlSetup(image);\n  return fetcher.post(actionUrl, cleanProps(image));\n};\n\nexport const cleanProps = (image: ImageRecord): IImageData => {\n  let imageParams = image.toJS();\n  imageParams = baseCleanProps(imageParams);\n\n  if (isNullOrUndefined(imageParams.folder_id)) {\n    delete imageParams.folder_id;\n  }\n\n  delete imageParams.displayInProposal;\n  delete imageParams.displayInAgreement;\n\n  return imageParams;\n};\n\nexport const urlSetup = (image: ImageRecord): string => {\n  return urls[toUnderscore(image.imageable_type)].replace(\":id\", image.imageable_id.toString());\n};\n","import { RootState } from \"app2/src/reducers\";\n\n/**\n * Fetches the query map for for the router\n *\n * @param {RootState} state\n * @returns {Map}\n */\nexport const query = (state: RootState, _props?: any) => state.getIn([\"router\", \"location\", \"query\"]);\n\n/**\n * Fetches the a value from the query map and parses as integer\n *\n * @param {RootState} state\n * @param {{queryKey: string }} props\n * @returns {number}\n */\nexport const queryNumber = (state: RootState, props: any) => {\n  let value = query(state).get(props.queryKey);\n  if (value) {\n    value = parseInt(value);\n  }\n  return value;\n};\n\n/**\n * Fetches a value from the query map\n *\n * @param {RootState} state\n * @param {{queryKey: string }} props\n * @returns {string}\n */\nexport const queryString = (state: RootState, props: any) => query(state).get(props.queryKey);\n\n/**\n * Fetches the location pathname for the router\n *\n * @param {RootState} state\n * @returns {string}\n */\nexport const pathname = (state: RootState, _props?: any) => state.getIn([\"router\", \"location\", \"pathname\"]);\n\n/**\n * Fetches the location state for the router\n *\n * @param {RootState} state\n * @returns {string}\n */\nexport const locationState = (state: RootState, _props?: any): Map<any, any> | undefined =>\n  state.getIn([\"router\", \"location\", \"state\"]);\n","import { RootDispatchType } from \"../store\";\nimport { ThunkResult } from \"./index\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { sendMessage, ISendMessageParams } from \"app2/src/api/email.service\";\nimport { RootState } from \"app2/src/reducers\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport const AsyncActions = {\n  sendMessage: (messageParams: ISendMessageParams): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const jobId = currentJobId(getState());\n      try {\n        await sendMessage(jobId, messageParams);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Message successfully sent\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n};\n","import { IEmailData } from \"app2/src/records/Email\";\nimport { fetcher } from \"../helpers/Fetcher\";\n\nexport interface IEmailResponse {\n  email: IEmailData;\n}\n\nexport interface ISendMessageParams {\n  kind: \"payment_request\";\n  provider: \"text\" | \"email\";\n  to: string;\n  data: any;\n}\n\nexport const url = \"api/v1/jobs/:job_id/emails\";\n\nexport const sendMessage = (jobId: number, params: ISendMessageParams): Promise<IEmailResponse> => {\n  const actionUrl = url.replace(\":job_id\", jobId.toString());\n  return fetcher.post<IEmailResponse>(actionUrl, params);\n};\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IToolData, ToolRecord, toFormData } from \"../records/Tool\";\n\ninterface IToolIndexResponse {\n  tools: IToolData[];\n}\n\ninterface IToolResponse {\n  tool: IToolData;\n}\n\nclass ToolService {\n  public orgUrl = \"api/v1/orgs/:id/tools\";\n  public url = \"api/v1/tools/:id\";\n\n  public loadByOrg(orgId: number, jobId: number): Promise<IToolData[]> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n    let params = {};\n    if (jobId) {\n      params = { job_id: jobId };\n    }\n\n    return fetcher.get<IToolIndexResponse>(actionUrl, params).then((response) => response.tools);\n  }\n\n  public create(orgId: number, tool: ToolRecord): Promise<IToolData> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n    const toolForm = toFormData(tool);\n\n    return fetcher.post<IToolResponse>(actionUrl, toolForm, { formData: true }).then(\n      (response) => response.tool,\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public update(tool: ToolRecord): Promise<IToolData> {\n    const actionUrl = this.url.replace(\":id\", tool.id.toString());\n    const toolForm = toFormData(tool);\n\n    return fetcher.patch<IToolResponse>(actionUrl, toolForm, { formData: true }).then(\n      (response) => response.tool,\n      (response) => {\n        if (response.status === 500) {\n          return Promise.reject([\"Internal Server Error\"]);\n        }\n\n        if (_.isArray(response.data.errors)) {\n          return Promise.reject(response.data.errors);\n        }\n\n        return Promise.reject([\"Unknown Error\"]);\n      },\n    );\n  }\n\n  public archive(tool: ToolRecord): Promise<IToolData> {\n    const actionUrl = this.url.replace(\":id\", tool.id.toString());\n\n    return fetcher.delete<any>(actionUrl).then(\n      () => {\n        return tool.set(\"archived\", true);\n      },\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n}\n\nexport const toolService = new ToolService();\n","import { ActionsUnion, createAction } from \"../Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"../index\";\nimport { IToolData, ToolRecord } from \"app2/src/records/Tool\";\nimport { toolService } from \"app2/src/api/tool.service\";\nimport { RootDispatchType } from \"../../store\";\n\nexport const FETCH_ORG_TOOLS = \"@tools/FETCH_ORG_TOOLS\";\nexport const FETCH_TOOL = \"@tools/FETCH_TOOL\";\nexport const RECEIVE_ORG_TOOLS = \"@tools/RECEIVE_ORG_TOOLS\";\nexport const RECEIVE_TOOL = \"@tools/RECEIVE_TOOL\";\nexport const REMOVE_ORG_TOOL = \"@tools/REMOVE_ORG_TOOL\";\nexport const REMOVE_TOOL = \"@tools/REMOVE_TOOL\";\nexport const RECEIVE_ORG_ERRORS = \"@tools/RECEIVE_ORG_ERRORS\";\nexport const RECEIVE_TOOL_ERROR = \"@tools/RECEIVE_TOOL_ERROR\";\n\nexport const Actions = {\n  fetchTool: (orgId: number, toolId: number) => createAction(FETCH_TOOL, { orgId: orgId, toolId: toolId }),\n  receiveToolError: (orgId, toolId: number, errors: string[]) =>\n    createAction(RECEIVE_TOOL_ERROR, { orgId: orgId, toolId: toolId, errors: errors }),\n  receiveTool: (tool: Partial<IToolData>) => createAction(RECEIVE_TOOL, tool),\n  fetchTools: (orgId: number) => createAction(FETCH_ORG_TOOLS, orgId),\n  receiveErrors: (orgId, errors: string[]) => createAction(RECEIVE_ORG_ERRORS, { orgId: orgId, errors: errors }),\n  receiveTools: (orgId: number, tools: Partial<IToolData>[]) =>\n    createAction(RECEIVE_ORG_TOOLS, { orgId: orgId, tools: tools }),\n  removeOrgTool: (orgId: number, toolId: number) => createAction(REMOVE_ORG_TOOL, { orgId: orgId, toolId: toolId }),\n  removeTool: (toolId: number) => createAction(REMOVE_TOOL, toolId),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  addTool: (tool: ToolRecord): ThunkResult<Promise<IToolData>> => {\n    return (dispatch: RootDispatchType) => {\n      const org_id = tool.org_id;\n\n      return toolService.create(org_id, tool).then(\n        (result) => {\n          dispatch(Actions.receiveTool(result));\n\n          return result;\n        },\n        (errors) => {\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  updateTool: (tool: ToolRecord): ThunkResult<Promise<IToolData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchTool(tool.org_id, tool.id));\n\n      return toolService.update(tool).then(\n        (tool) => {\n          dispatch(Actions.receiveTool(tool));\n          return tool;\n        },\n        (errors) => {\n          dispatch(Actions.receiveToolError(tool.org_id, tool.id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  removeImage: (tool: ToolRecord): ThunkResult<Promise<IToolData>> => {\n    const brand_image = tool.brand_image.set(\"_destroy\", true);\n    tool = tool.set(\"brand_image\", brand_image);\n    return AsyncActions.updateTool(tool);\n  },\n  archiveTool: (tool: ToolRecord): ThunkResult<Promise<IToolData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchTool(tool.org_id, tool.id));\n\n      return toolService.archive(tool).then(\n        (archived) => {\n          dispatch(Actions.removeOrgTool(archived.org_id, archived.id));\n          dispatch(Actions.removeTool(archived.id));\n          return archived;\n        },\n        (errors) => {\n          dispatch(Actions.receiveToolError(tool.org_id, tool.id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  listTools: (orgId: number, jobId: number): ThunkResult<any> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchTools(orgId));\n\n      return toolService.loadByOrg(orgId, jobId).then(\n        (tools) => {\n          dispatch(Actions.receiveTools(orgId, tools));\n          return tools;\n        },\n        (errors) => {\n          dispatch(Actions.receiveErrors(orgId, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.mobile.pane.min\",[\"kendo.mobile.view.min\",\"kendo.mobile.loader.min\"],t)}(function(){return function(t,e){var i=window.kendo,n=i.mobile,o=i.roleSelector,a=n.ui,r=a.Widget,s=n.ViewEngine,l=a.View,u=n.ui.Loader,c=\"external\",h=\"href\",d=\"#!\",p=\"navigate\",v=\"viewShow\",f=\"sameViewRequested\",g=i.support.mobileOS,w=g.ios&&!g.appMode&&g.flatVersion>=700,m=/popover|actionsheet|modalview|drawer/,y=\"#:back\",b=i.attrValue,k=r.extend({init:function(t,e){var n=this;r.fn.init.call(n,t,e),e=n.options,t=n.element,t.addClass(\"km-pane\"),n.options.collapsible&&t.addClass(\"km-collapsible-pane\"),this.history=[],this.historyCallback=function(t,e,i){var o=n.transition;return n.transition=null,w&&i&&(o=\"none\"),n.viewEngine.showView(t,o,e)},this._historyNavigate=function(t){if(t===y){if(1===n.history.length)return;n.history.pop(),t=n.history[n.history.length-1]}else n.history.push(t);n.historyCallback(t,i.parseQueryStringParams(t))},this._historyReplace=function(t){var e=i.parseQueryStringParams(t);n.history[n.history.length-1]=t,n.historyCallback(t,e)},n.loader=new u(t,{loading:n.options.loading}),n.viewEngine=new s({container:t,transition:e.transition,modelScope:e.modelScope,rootNeeded:!e.initial,serverNavigation:e.serverNavigation,remoteViewURLPrefix:e.root||\"\",layout:e.layout,$angular:e.$angular,loader:n.loader,showStart:function(){n.loader.transition(),n.closeActiveDialogs()},after:function(){n.loader.transitionDone()},viewShow:function(t){n.trigger(v,t)},loadStart:function(){n.loader.show()},loadComplete:function(){n.loader.hide()},sameViewRequested:function(){n.trigger(f)},viewTypeDetermined:function(t){t.remote&&n.options.serverNavigation||n.trigger(p,{url:t.url})}}),this._setPortraitWidth(),i.onResize(function(){n._setPortraitWidth()}),n._setupAppLinks()},closeActiveDialogs:function(){var e=this.element.find(o(\"actionsheet popover modalview\")).filter(\":visible\");e.each(function(){i.widgetInstance(t(this),a).close()})},navigateToInitial:function(){var t=this.options.initial;return t&&this.navigate(t),t},options:{name:\"Pane\",portraitWidth:\"\",transition:\"\",layout:\"\",collapsible:!1,initial:null,modelScope:window,loading:\"<h1>Loading...</h1>\"},events:[p,v,f],append:function(t){return this.viewEngine.append(t)},destroy:function(){r.fn.destroy.call(this),this.viewEngine.destroy(),this.userEvents.destroy()},navigate:function(t,e){t instanceof l&&(t=t.id),this.transition=e,this._historyNavigate(t)},replace:function(t,e){t instanceof l&&(t=t.id),this.transition=e,this._historyReplace(t)},bindToRouter:function(t){var e=this,n=this.history,o=this.viewEngine;t.bind(\"init\",function(e){var a,r=e.url,s=t.pushState?r:\"/\";o.rootView.attr(i.attr(\"url\"),s),a=n.length,\"/\"===r&&a&&(t.navigate(n[a-1],!0),e.preventDefault())}),t.bind(\"routeMissing\",function(t){e.historyCallback(t.url,t.params,t.backButtonPressed)||t.preventDefault()}),t.bind(\"same\",function(){e.trigger(f)}),e._historyNavigate=function(e){t.navigate(e)},e._historyReplace=function(e){t.replace(e)}},hideLoading:function(){this.loader.hide()},showLoading:function(){this.loader.show()},changeLoadingMessage:function(t){this.loader.changeMessage(t)},view:function(){return this.viewEngine.view()},_setPortraitWidth:function(){var t,e=this.options.portraitWidth;e&&(t=i.mobile.application.element.is(\".km-vertical\")?e:\"auto\",this.element.css(\"width\",t))},_setupAppLinks:function(){var e=this,n=\"tab\",a=\"[data-\"+i.ns+\"navigate-on-press]\",r=t.map([\"button\",\"backbutton\",\"detailbutton\",\"listview-link\"],function(t){return o(t)+\":not(\"+a+\")\"}).join(\",\");this.element.handler(this).on(\"down\",o(n)+\",\"+a,\"_mouseup\").on(\"click\",o(n)+\",\"+r+\",\"+a,\"_appLinkClick\"),this.userEvents=new i.UserEvents(this.element,{fastTap:!0,filter:r,tap:function(t){t.event.currentTarget=t.touch.currentTarget,e._mouseup(t.event)}}),this.element.css(\"-ms-touch-action\",\"\")},_appLinkClick:function(e){var i=t(e.currentTarget).attr(\"href\"),n=i&&\"#\"!==i[0]&&this.options.serverNavigation;n||b(t(e.currentTarget),\"rel\")==c||e.preventDefault()},_mouseup:function(o){if(!(o.which>1||o.isDefaultPrevented())){var r=this,s=t(o.currentTarget),l=b(s,\"transition\"),u=b(s,\"rel\")||\"\",p=b(s,\"target\"),v=s.attr(h),f=w&&0===s[0].offsetHeight,g=v&&\"#\"!==v[0]&&this.options.serverNavigation;f||g||u===c||e===v||v===d||(s.attr(h,d),setTimeout(function(){s.attr(h,v)}),u.match(m)?(i.widgetInstance(t(v),a).openFor(s),\"actionsheet\"!==u&&\"drawer\"!==u||o.stopPropagation()):(\"_top\"===p?r=n.application.pane:p&&(r=t(\"#\"+p).data(\"kendoMobilePane\")),r.navigate(v,l)),o.preventDefault())}}});k.wrap=function(t){t.is(o(\"view\"))||(t=t.wrap(\"<div data-\"+i.ns+'role=\"view\" data-stretch=\"true\"></div>').parent());var e=t.wrap('<div class=\"km-pane-wrapper\"><div></div></div>').parent(),n=new k(e);return n.navigate(\"\"),n},a.plugin(k)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,i){(i||e)()});\n//# sourceMappingURL=kendo.mobile.pane.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.numerictextbox.min\",[\"kendo.core.min\",\"kendo.userevents.min\"],e)}(function(){return function(e,t){function n(e,t){var n=\"k-i-arrow-\"+(\"increase\"===e?\"n\":\"s\");return'<span unselectable=\"on\" class=\"k-link k-link-'+e+'\" aria-label=\"'+t+'\"><span unselectable=\"on\" class=\"k-icon '+n+'\"></span></span>'}function r(e,t){var n=(\"\"+parseFloat(e,10)).split(E);return n[1]&&(n[1]=n[1].substring(0,t)),n.join(E)}var a=window.kendo,o=a.caret,s=a.keys,i=a.ui,l=i.Widget,u=a._activeElement,p=a._extractFormat,d=a.parseFloat,c=a.support.placeholder,_=a.getCulture,f=\"change\",m=\"disabled\",v=\"readonly\",x=\"k-input\",g=\"spin\",h=\".kendoNumericTextBox\",w=\"touchend\",y=\"mouseleave\"+h,k=\"mouseenter\"+h+\" \"+y,b=\"k-state-default\",A=\"k-state-focused\",T=\"k-state-hover\",C=\"focus\",E=\".\",H=\"k-state-selected\",D=\"k-state-disabled\",O=\"aria-disabled\",R=\"aria-readonly\",N=/^(-)?(\\d*)$/,W=null,j=e.proxy,F=e.extend,K=l.extend({init:function(n,r){var o,s,i,u,d,c=this,_=r&&r.step!==t;l.fn.init.call(c,n,r),r=c.options,n=c.element.on(\"focusout\"+h,j(c._focusout,c)).attr(\"role\",\"spinbutton\"),r.placeholder=r.placeholder||n.attr(\"placeholder\"),c._initialOptions=F({},r),o=c.min(n.attr(\"min\")),s=c.max(n.attr(\"max\")),i=c._parse(n.attr(\"step\")),r.min===W&&o!==W&&(r.min=o),r.max===W&&s!==W&&(r.max=s),_||i===W||(r.step=i),c._reset(),c._wrapper(),c._arrows(),c._input(),a.support.mobileOS?c._text.on(w+h+\" \"+C+h,function(){a.support.browser.edge?c._text.one(C+h,function(){c._toggleText(!1),n.focus()}):(c._toggleText(!1),n.focus())}):c._text.on(C+h,j(c._click,c)),n.attr(\"aria-valuemin\",r.min).attr(\"aria-valuemax\",r.max),r.format=p(r.format),u=r.value,c.value(u!==W?u:n.val()),d=n.is(\"[disabled]\")||e(c.element).parents(\"fieldset\").is(\":disabled\"),d?c.enable(!1):c.readonly(n.is(\"[readonly]\")),a.notify(c)},options:{name:\"NumericTextBox\",decimals:W,restrictDecimals:!1,min:W,max:W,value:W,step:1,round:!0,culture:\"\",format:\"n\",spinners:!0,placeholder:\"\",upArrowText:\"Increase value\",downArrowText:\"Decrease value\"},events:[f,g],_editable:function(e){var t=this,n=t.element,r=e.disable,a=e.readonly,o=t._text.add(n),s=t._inputWrapper.off(k);t._toggleText(!0),t._upArrowEventHandler.unbind(\"press\"),t._downArrowEventHandler.unbind(\"press\"),n.off(\"keydown\"+h).off(\"keypress\"+h).off(\"paste\"+h),a||r?(s.addClass(r?D:b).removeClass(r?b:D),o.attr(m,r).attr(v,a).attr(O,r).attr(R,a)):(s.addClass(b).removeClass(D).on(k,t._toggleHover),o.removeAttr(m).removeAttr(v).attr(O,!1).attr(R,!1),t._upArrowEventHandler.bind(\"press\",function(e){e.preventDefault(),t._spin(1),t._upArrow.addClass(H)}),t._downArrowEventHandler.bind(\"press\",function(e){e.preventDefault(),t._spin(-1),t._downArrow.addClass(H)}),t.element.on(\"keydown\"+h,j(t._keydown,t)).on(\"keypress\"+h,j(t._keypress,t)).on(\"paste\"+h,j(t._paste,t)))},readonly:function(e){this._editable({readonly:e===t?!0:e,disable:!1})},enable:function(e){this._editable({readonly:!1,disable:!(e=e===t?!0:e)})},destroy:function(){var e=this;e.element.add(e._text).add(e._upArrow).add(e._downArrow).add(e._inputWrapper).off(h),e._upArrowEventHandler.destroy(),e._downArrowEventHandler.destroy(),e._form&&e._form.off(\"reset\",e._resetHandler),l.fn.destroy.call(e)},min:function(e){return this._option(\"min\",e)},max:function(e){return this._option(\"max\",e)},step:function(e){return this._option(\"step\",e)},value:function(e){var n,r=this;return e===t?r._value:(e=r._parse(e),n=r._adjust(e),e===n&&(r._update(e),r._old=r._value),t)},focus:function(){this._focusin()},_adjust:function(e){var t=this,n=t.options,r=n.min,a=n.max;return e===W?e:(r!==W&&r>e?e=r:a!==W&&e>a&&(e=a),e)},_arrows:function(){var t,r=this,o=function(){clearTimeout(r._spinning),t.removeClass(H)},s=r.options,i=s.spinners,l=r.element;t=l.siblings(\".k-icon\"),t[0]||(t=e(n(\"increase\",s.upArrowText)+n(\"decrease\",s.downArrowText)).insertAfter(l),t.wrapAll('<span class=\"k-select\"/>')),i||(t.parent().toggle(i),r._inputWrapper.addClass(\"k-expand-padding\")),r._upArrow=t.eq(0),r._upArrowEventHandler=new a.UserEvents(r._upArrow,{release:o}),r._downArrow=t.eq(1),r._downArrowEventHandler=new a.UserEvents(r._downArrow,{release:o})},_blur:function(){var e=this;e._toggleText(!0),e._change(e.element.val())},_click:function(e){var t=this;clearTimeout(t._focusing),t._focusing=setTimeout(function(){var n,r,a,s=e.target,i=o(s)[0],l=s.value.substring(0,i),u=t._format(t.options.format),p=u[\",\"],d=0;p&&(r=RegExp(\"\\\\\"+p,\"g\"),a=RegExp(\"([\\\\d\\\\\"+p+\"]+)(\\\\\"+u[E]+\")?(\\\\d+)?\")),a&&(n=a.exec(l)),n&&(d=n[0].replace(r,\"\").length,-1!=l.indexOf(\"(\")&&0>t._value&&d++),t._focusin(),o(t.element[0],d)})},_change:function(e){var t=this;t._update(e),e=t._value,t._old!=e&&(t._old=e,t._typing||t.element.trigger(f),t.trigger(f)),t._typing=!1},_culture:function(e){return e||_(this.options.culture)},_focusin:function(){var e=this;e._inputWrapper.addClass(A),e._toggleText(!1),e.element[0].focus()},_focusout:function(){var e=this;clearTimeout(e._focusing),e._inputWrapper.removeClass(A).removeClass(T),e._blur()},_format:function(e,t){var n=this._culture(t).numberFormat;return e=e.toLowerCase(),e.indexOf(\"c\")>-1?n=n.currency:e.indexOf(\"p\")>-1&&(n=n.percent),n},_input:function(){var t,n=this,r=n.options,a=\"k-formatted-value\",o=n.element.addClass(x).show()[0],s=o.accessKey,i=n.wrapper;t=i.find(E+a),t[0]||(t=e('<input type=\"text\"/>').insertBefore(o).addClass(a));try{o.setAttribute(\"type\",\"text\")}catch(l){o.type=\"text\"}t[0].tabIndex=o.tabIndex,t[0].style.cssText=o.style.cssText,t[0].title=o.title,t.prop(\"placeholder\",r.placeholder),s&&(t.attr(\"accesskey\",s),o.accessKey=\"\"),n._text=t.addClass(o.className).attr({role:\"spinbutton\",\"aria-valuemin\":r.min,\"aria-valuemax\":r.max})},_keydown:function(e){var t=this,n=e.keyCode;t._key=n,n==s.DOWN?t._step(-1):n==s.UP?t._step(1):n==s.ENTER?t._change(t.element.val()):t._typing=!0},_keypress:function(e){var t,n,r,a,i,l,u,p,d,c,_;0===e.which||e.metaKey||e.ctrlKey||e.keyCode===s.BACKSPACE||e.keyCode===s.ENTER||(t=this,n=t.options.min,r=t.element,a=o(r),i=a[0],l=a[1],u=String.fromCharCode(e.which),p=t._format(t.options.format),d=t._key===s.NUMPAD_DOT,c=r.val(),d&&(u=p[E]),c=c.substring(0,i)+u+c.substring(l),_=t._numericRegex(p).test(c),_&&d?(r.val(c),o(r,i+u.length),e.preventDefault()):(null!==n&&n>=0&&\"-\"===c.charAt(0)||!_)&&e.preventDefault(),t._key=0)},_numericRegex:function(e){var t=this,n=e[E],r=t.options.decimals,a=\"*\";return n===E&&(n=\"\\\\\"+n),r===W&&(r=e.decimals),0===r?N:(t.options.restrictDecimals&&(a=\"{0,\"+r+\"}\"),t._separator!==n&&(t._separator=n,t._floatRegExp=RegExp(\"^(-)?(((\\\\d+(\"+n+\"\\\\d\"+a+\")?)|(\"+n+\"\\\\d\"+a+\")))?$\")),t._floatRegExp)},_paste:function(e){var t=this,n=e.target,r=n.value,a=t._format(t.options.format);setTimeout(function(){var e=t._parse(n.value),o=t._numericRegex(a).test(n.value);e!==W&&t._adjust(e)===e&&o||t._update(r)})},_option:function(e,n){var r=this,a=r.element,o=r.options;return n===t?o[e]:(n=r._parse(n),(n||\"step\"!==e)&&(o[e]=n,a.add(r._text).attr(\"aria-value\"+e,n),a.attr(e,n)),t)},_spin:function(e,t){var n=this;t=t||500,clearTimeout(n._spinning),n._spinning=setTimeout(function(){n._spin(e,50)},t),n._step(e)},_step:function(e){var t=this,n=t.element,r=t._parse(n.val())||0;u()!=n[0]&&t._focusin(),r+=t.options.step*e,t._update(t._adjust(r)),t._typing=!1,t.trigger(g)},_toggleHover:function(t){e(t.currentTarget).toggleClass(T,\"mouseenter\"===t.type)},_toggleText:function(e){var t=this;t._text.toggle(e),t.element.toggle(!e)},_parse:function(e,t){return d(e,this._culture(t),this.options.format)},_round:function(e,t){var n=this.options.round?a._round:r;return n(e,t)},_update:function(e){var t,n=this,r=n.options,o=r.format,s=r.decimals,i=n._culture(),l=n._format(o,i);s===W&&(s=l.decimals),e=n._parse(e,i),t=e!==W,t&&(e=parseFloat(n._round(e,s),10)),n._value=e=n._adjust(e),n._placeholder(a.toString(e,o,i)),t?(e=\"\"+e,-1!==e.indexOf(\"e\")&&(e=n._round(+e,s)),e=e.replace(E,l[E])):e=\"\",n.element.val(e),n.element.add(n._text).attr(\"aria-valuenow\",e)},_placeholder:function(e){var t=this._text;t.val(e),c||e||t.val(this.options.placeholder),t.attr(\"title\",t.attr(\"title\")||t.val()),t.attr(\"aria-title\",t.attr(\"title\")||t.val())},_wrapper:function(){var t,n=this,r=n.element,a=r[0];t=r.parents(\".k-numerictextbox\"),t.is(\"span.k-numerictextbox\")||(t=r.hide().wrap('<span class=\"k-numeric-wrap k-state-default\" />').parent(),t=t.wrap(\"<span/>\").parent()),t[0].style.cssText=a.style.cssText,a.style.width=\"\",n.wrapper=t.addClass(\"k-widget k-numerictextbox\").addClass(a.className).css(\"display\",\"\"),n._inputWrapper=e(t[0].firstChild)},_reset:function(){var t=this,n=t.element,r=n.attr(\"form\"),a=r?e(\"#\"+r):n.closest(\"form\");a[0]&&(t._resetHandler=function(){setTimeout(function(){t.value(n[0].value),t.max(t._initialOptions.max),t.min(t._initialOptions.min)})},t._form=a.on(\"reset\",t._resetHandler))}});i.plugin(K)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.numerictextbox.min.js.map\n","import { PhoneNumberRecord } from \"app2/src/records/PhoneNumber\";\nimport * as moment from \"moment\";\nimport { List } from \"immutable\";\n\ntype DateFormatType =\n  | \"shortDate\"\n  | \"shortName\"\n  | \"shortDate-hyphenated\"\n  | \"shortTime\"\n  | \"shortNameTime\"\n  | \"shortTimeMilitary\"\n  | \"short-hyphenated\"\n  | \"shortHyphenatedUnderscore\"\n  | \"short\";\n\n/**\n * Default rails format: 2018-12-13T13:05:51Z || \"YYYY-MM-DDTHH:mm:ssZ\"\n */\nexport function DateFormat(date: any, format: DateFormatType = \"short\"): string {\n  let formatString: string;\n  switch (format) {\n    case \"shortDate\":\n      formatString = \"MM/DD/YY\";\n      break;\n    case \"shortName\":\n      formatString = \"MMM Do, YYYY\";\n      break;\n    case \"shortDate-hyphenated\":\n      formatString = \"YYYY-MM-DD\";\n      break;\n    case \"shortTime\":\n      formatString = \"h:mm A\";\n      break;\n    case \"shortNameTime\":\n      formatString = \"MMM Do, YYYY h:mm A\";\n      break;\n    case \"shortTimeMilitary\":\n      formatString = \"HH:mm\";\n      break;\n    case \"short-hyphenated\":\n      formatString = \"MM-DD-YY h:mm A\";\n      break;\n    case \"shortHyphenatedUnderscore\":\n      formatString = \"MM-DD-YY_h-mm\";\n      break;\n    case \"short\":\n    default:\n      formatString = \"MM/DD/YY h:mm A\";\n      break;\n  }\n\n  return moment(date, \"YYYY-MM-DDTHH:mm:ssZ\").format(formatString);\n}\n\nexport function CurrencyFormat(amount: number, fractionDigits = 2, includeDollarSign = true): string {\n  const rounded: string = amount.toFixed(fractionDigits).replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, \"$1,\");\n\n  return `${includeDollarSign ? \"$\" : \"\"}${rounded}`;\n}\n\nexport function PercentageFormat(amount: number): string {\n  const rounded: string = parseFloat(amount.toFixed(2))\n    .toString()\n    .replace(/\\d(?=(\\d{3})+\\.)/g, \"$&,\");\n\n  return `${rounded}%`;\n}\n\nexport function UppercaseWord(word: string): string {\n  return `${word.charAt(0).toUpperCase()}${word.slice(1)}`;\n}\n\nexport const uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/;\n\nexport const SnakeToCamel = (value: string): string => {\n  if (value.match(uuidRegex)) {\n    return value;\n  }\n\n  let transformed = value.replace(/([-_][a-z|0-9])/gi, ($1) => {\n    return $1.toUpperCase().replace(\"-\", \"\").replace(\"_\", \"\");\n  });\n\n  transformed = transformed.charAt(0).toLowerCase() + transformed.slice(1);\n\n  if (value.startsWith(\"_\") && !transformed.startsWith(\"_\")) {\n    transformed = `_${transformed}`;\n  }\n\n  return transformed;\n};\n\nexport const SnakeToCamelKeys = (data: any): any => {\n  if (data === Object(data) && !Array.isArray(data) && typeof data !== \"function\") {\n    const newData = {};\n    Object.keys(data).forEach((k) => {\n      newData[SnakeToCamel(k)] = SnakeToCamelKeys(data[k]);\n    });\n    return newData;\n  } else if (Array.isArray(data)) {\n    return data.map((i) => {\n      return SnakeToCamelKeys(i);\n    });\n  }\n  return data;\n};\n\nexport const CamelToSnake = (value: string, underScoreNumbers = true): string => {\n  if (value.match(uuidRegex)) {\n    return value;\n  }\n\n  let transformed = value;\n  if (underScoreNumbers) {\n    transformed = transformed.replace(/([A-Z|0-9])/g, \"_$1\");\n  } else {\n    transformed = transformed.replace(/([A-Z])/g, \"_$1\");\n  }\n\n  transformed = transformed.replace(/^_/, \"\").toLowerCase();\n\n  if (value.startsWith(\"_\") && !transformed.startsWith(\"_\")) {\n    transformed = `_${transformed}`;\n  }\n\n  return transformed;\n};\n\nexport const CamelToSnakeKeys = (data: any): any => {\n  if (data === Object(data) && !Array.isArray(data) && typeof data !== \"function\") {\n    const newData = {};\n    Object.keys(data).forEach((k) => {\n      newData[CamelToSnake(k)] = CamelToSnakeKeys(data[k]);\n    });\n    return newData;\n  } else if (Array.isArray(data)) {\n    return data.map((i) => {\n      return CamelToSnakeKeys(i);\n    });\n  }\n  return data;\n};\n\nexport const StylizedQuotesToSimpleQuotes = (value: string): string => {\n  return value.replace(/[\\u201C\\u201D]/g, '\\\\\"').replace(/[\\u2018\\u2019]/g, \"'\");\n};\n\nexport const SnakeToPascal = (value: string): string => {\n  return toTitleCase(value).replaceAll(\" \", \"\");\n};\n\n// Common Titles Helper function\nexport function CommonTitles(name: ValidCommonTitles): string {\n  return commonTitles[name];\n}\n\n/**\n * Takes an List of phone numbers and returns mobile number first, then next phone number if a mobile does not exist, and formats into string\n * @phoneNumbers List of phone numbers with type\n * @returns string\n */\nexport const SelectMobilePhoneNumber = (phoneNumbers: List<PhoneNumberRecord>): string => {\n  let phoneNumber = <string>phoneNumbers\n    .filter((pn) => /sms|mobile|cell/.test(pn.name?.toLowerCase()))\n    .map((pn) => pn.number?.replace(/\\D/g, \"\"))\n    .first();\n\n  if (!phoneNumber) {\n    phoneNumber = <string>phoneNumbers.map((pn) => pn.number?.replace(/\\D/g, \"\")).first();\n  }\n\n  if (!phoneNumber) {\n    return \"\";\n  }\n\n  return phoneNumber;\n};\n\nexport const minMaxIndex = (firstIndex: number, secondIndex: number): { min: number; max: number } => {\n  const min = _.min([firstIndex, secondIndex]);\n  const max = _.max([firstIndex, secondIndex]);\n  return { min, max };\n};\n\nexport type ValidCommonTitles =\n  | \"estimate\"\n  | \"contract\"\n  | \"opening_name\"\n  | \"estimator\"\n  | \"inspection\"\n  | \"finance\"\n  | \"finance_options\"\n  | \"price_presentation\"\n  | \"subtotal\"\n  | \"total\"\n  | \"description\";\n\n// Common Titles - What OCC calls things (development/support/leadership)\n// These can be changed by the customer, but should not be changed in the admin screen\nconst commonTitles = {\n  estimate: \"Proposal\",\n  contract: \"Agreement\",\n  opening_name: \"Name\",\n  estimator: \"Estimate\",\n  inspection: \"Inspection\",\n  finance: \"Investment\",\n  finance_options: \"Finance Options\",\n  price_presentation: \"Price Presentation\",\n  subtotal: \"Subtotal\",\n  total: \"Total\",\n  description: \"Description\",\n};\n\nexport const formatPhoneNumber = (number: string) => {\n  let newVal = \"\";\n  let extra = \"\";\n  if (number.length <= 12) {\n    newVal = number.replace(/\\D/g, \"\");\n  } else {\n    newVal = number.slice(0, 12).replace(/\\D/g, \"\");\n    extra = number.slice(12);\n  }\n\n  if (newVal.length === 0) {\n    newVal = \"\";\n  } else if (newVal.length <= 3) {\n    newVal = newVal.replace(/^(\\d{0,3})/, \"$1\");\n  } else if (newVal.length <= 6) {\n    newVal = newVal.replace(/^(\\d{0,3})(\\d{0,3})/, \"$1-$2\");\n  } else {\n    newVal = newVal.replace(/^(\\d{0,3})(\\d{0,3})(.*)/, \"$1-$2-$3\");\n  }\n\n  return `${newVal}${extra}`.trim();\n};\n\n/**\n * Converts a snake_case string to a capitalized string with spaces.\n *\n * @param value - The snake_case string to convert.\n * @returns The capitalized string with spaces.\n */\nexport const SnakeToCapitalized = (value: string): string => {\n  return value\n    .split(\"_\")\n    .map((word) => UppercaseWord(word.toLowerCase()))\n    .join(\" \");\n};\n\n/**\n * Convert camelCase string to snake_case\n */\nexport const toUnderscore = (value: string): string => {\n  return value\n    .replace(/([A-Z])/g, \"_$1\")\n    .replace(/^_/, \"\")\n    .toLowerCase();\n};\n\n/**\n * Convert various case formats to Title Case\n * Handles camelCase, snake_case, and lisp-case\n */\nexport const toTitleCase = (value: string): string => {\n  return value\n    .replace(/([^A-Z])([A-Z])/g, \"$1 $2\") // split camelCase\n    .replace(/[_\\-]+/g, \" \") // split snake_case and lisp-case\n    .toLowerCase()\n    .replace(/(^\\w|\\b\\w)/g, (m) => m.toUpperCase()) // title case words\n    .replace(/\\s+/g, \" \") // collapse repeated whitespace\n    .replace(/^\\s+|\\s+$/, \"\"); // remove leading/trailing whitespace\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IPoolData } from \"../records/Pool\";\n\nexport const RECEIVE_POOL = \"@pools/RECEIVE_POOL\";\nexport const EDIT_POOL = \"@pools/EDIT_POOL\";\n\nexport const Actions = {\n  receivePool: (pool: Partial<IPoolData>) => createAction(RECEIVE_POOL, { pool }),\n  editPool: (pool: Partial<IPoolData>) => createAction(EDIT_POOL, { pool }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.scheduler.timelineview.min\",[\"kendo.scheduler.view.min\"],t)}(function(){return function(t,e){function n(t){var e=new Date(1980,1,1,0,0,0);return u(e,p(t)),e}function i(t){var e=[],n=t.workWeekStart;for(e.push(n);t.workWeekEnd!=n;)n>6?n-=7:n++,e.push(n);return e}function o(t){var e,n=0;if(t.columns){for(e=0;t.columns.length>e;e++)n+=o(t.columns[e]);return t.colspan=n,n}return t.colspan=1,1}function r(t,e,n){var i,o,r,a;for(i=t.length-1;i>=0;i--)o=t[i].rectLeft,a=t[i].rectRight,r=e>=o&&a>=e,(r||o>=e&&n>=a||o>=e&&n>=o)&&(e>o&&(e=o),a>n&&(n=a));return s(t,e,n)}function s(t,e,n){var i,o,r=[];for(i=0;t.length>i;i++)o={rectLeft:t[i].rectLeft,rectRight:t[i].rectRight},(e>o.rectLeft&&o.rectRight>e||o.rectLeft>=e&&n>=o.rectRight)&&r.push(t[i]);return r}var a,l=window.kendo,d=l.ui,u=l.date.setTime,c=d.SchedulerView,h=t.extend,f=t.proxy,_=l.date.getDate,p=l.date.getMilliseconds,v=l.date.MS_PER_DAY,g=l.date.MS_PER_MINUTE,m=\"k-current-time\",w=\"k-current-time-arrow\",T=\"k-scheduler-header-wrap\",k=.8666,D=\".kendoTimelineView\",y=l.template('<div><div class=\"k-event-template k-event-time\">#:kendo.format(\"{0:t} - {1:t}\", start, end)#</div><div class=\"k-event-template\">${title}</div></div>'),S=l.template(\"<span class='k-link k-nav-day'>#=kendo.format('{0:m}', date)#</span>\"),C='<div role=\"gridcell\" aria-selected=\"false\" data-#=ns#uid=\"#=uid#\"#if (resources[0]) { #style=\"background-color:#=resources[0].color#; border-color: #=resources[0].color#\"class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\" #} else {#class=\"k-event\"#}#><span class=\"k-event-actions\"># if(data.tail) {#<span class=\"k-icon k-i-arrow-w\"></span>#}## if(data.isException()) {#<span class=\"k-icon k-i-exception\"></span># } else if(data.isRecurring()) {#<span class=\"k-icon k-i-refresh\"></span># } #</span>{0}<span class=\"k-event-actions\">#if (showDelete) {#<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>#}## if(data.head) {#<span class=\"k-icon k-i-arrow-e\"></span>#}#</span>#if(resizable && !data.tail){#<span class=\"k-resize-handle k-resize-w\"></span>#}##if(resizable && !data.head){#<span class=\"k-resize-handle k-resize-e\"></span>#}#</div>',V=l.Class.extend({init:function(t){this._view=t},_getTimeSlotByPosition:function(t,e,n){var i=this._view.groups[n];return i.timeSlotByPosition(t,e)},_hideHeaders:function(){var t=this._view;t.timesHeader.find(\"table tr:last\").hide(),t.datesHeader.find(\"table tr:last\").hide()},_setColspan:function(t){o(t)},_createRowsLayout:function(t,e,n){var i=this._view;return i._createRowsLayout(t,e,n)},_createVerticalColumnsLayout:function(t,e,n,i){return i},_createColumnsLayout:function(t,e,n){var i=this._view;return i._createColumnsLayout(t,e,n)},_getRowCount:function(){var t=this._view;return t._groupCount()},_getGroupsCount:function(){return 1},_addContent:function(t,e,n,i,o,r,s,a){var d,u,c,h,f=this._view,_=\"\",p=f.options,v=function(e){var n,i=\"\",o=\"\",r=function(t){return function(){return f._resourceBySlot({groupIndex:t})}};return l.date.isToday(t[c])&&(o+=\"k-today\"),(l.date.getMilliseconds(e)<l.date.getMilliseconds(p.workDayStart)||l.date.getMilliseconds(e)>=l.date.getMilliseconds(p.workDayEnd)||!f._isWorkDay(t[c]))&&(o+=\" k-nonwork-hour\"),i+=\"<td\"+(\"\"!==o?' class=\"'+o+'\"':\"\")+\">\",n=l.date.getDate(t[c]),l.date.setTime(n,l.date.getMilliseconds(e)),i+=s({date:n,resources:r(a?d:u)}),i+=\"</td>\"};for(d=0;i>d;d++){for(_+=\"<tr>\",u=0;n>u;u++)for(c=0,h=e;h>c;c++)_+=f._forTimeRange(o,r,v);_+=\"</tr>\"}return _},_addTimeSlotsCollections:function(t,e,n,i,o){var r,s,a,l,d,u,c,h,f,_,v,g,m=this._view,w=n.length;for(o&&(w=Math.floor(w/t)),r=0;t>r;r++)for(s=0,a=m.groups[r],o&&(s=r),d=s*w,u=0,o||(u=r),c=n[d].children,h=c.length/(o?1:t),f=h/e,_=0;e>_;_++)for(v=_*f+h*u,l=p(new Date(+m.startTime())),g=0;f>g;g++)m._addTimeSlotToCollection(a,c,g,v,_,l,i),l+=i},_getVerticalGroupCount:function(t){return t},_getVerticalRowCount:function(t,e,n){var i=this._view;return i._isVerticallyGrouped()?t[e].maxRowCount:n},_renderEvent:function(t,e,n,i,o,r){var s,a=this._view,l=a._createEventElement(n.occurrence,e,o.head||n.head,o.tail||n.tail);l.appendTo(r).css({top:0,height:a.options.eventHeight}),s={start:n.occurrence._startTime||n.occurrence.start,end:n.occurrence._endTime||n.occurrence.end,element:l,uid:e.uid,slotRange:o,rowIndex:0,offsetTop:0},t.events[e.uid]=s,a.addContinuousEvent(i,o,l,e.isAllDay),a._arrangeRows(s,o,t)},_verticalCountForLevel:function(t){var e=this._view;return e._rowCountForLevel(t)},_horizontalCountForLevel:function(t){var e=this._view;return e._columnCountForLevel(t)},_updateCurrentVerticalTimeMarker:function(e,n){var i=this._view,o=\"<div class='\"+m+\"'></div>\",r=i.datesHeader.find(\".\"+T),s=Math.round(e[0].innerRect(n,new Date(n.getTime()+1),!1).left),a=t(o).prependTo(r).addClass(w+\"-down\");a.css({left:i._adjustLeftPosition(s-a.outerWidth()*k/2),top:r.find(\"tr:last\").prev().position().top}),t(o).prependTo(i.content).css({left:i._adjustLeftPosition(s),width:\"1px\",height:i.content[0].scrollHeight-1,top:0})},_changeGroup:function(){return e},_prevGroupSlot:function(t,e,n){var i,o=this._view;return o._isVerticallyGrouped()?t:(i=e._collection(0,n),i.last())},_nextGroupSlot:function(t,e,n){var i,o=this._view;return o._isVerticallyGrouped()?t:(i=e._collection(0,n),i.first())},_verticalSlots:function(t,e){var n=this._view;return n._changeGroup(t,e)},_verticalMethod:function(t){return t?\"leftSlot\":\"rightSlot\"},_normalizeVerticalSelection:function(){return e},_horizontalSlots:function(t,e,n,i,o,r,s){var a=this._view,l={};return l.startSlot=e[n](i),l.endSlot=e[n](o),r||!a._isHorizontallyGrouped()||l.startSlot&&l.endSlot||(l.startSlot=l.endSlot=a._changeGroup(t,s)),l},_changeVerticalViewPeriod:function(){return!1},_changeHorizontalViewPeriod:function(t,e,n,i){var o=this._view;return!(t.startSlot&&t.endSlot||e)&&o._changeViewPeriod(n,i,!1)},_updateDirection:function(t,e,n,i){var o=this._view;o._updateDirection(t,e,n,i,!0)},_createMoveHint:function(t,e){var n,i,o,r,s=this._view,a=t.start,l=s._createEventElement(e.occurrence,e.occurrence,!1,!1);l.addClass(\"k-event-drag-hint\"),n=t.innerRect(e.occurrence.start,e.occurrence.end,s.options.snap),i=n.right-n.left-2,0>i&&(i=0),o=s._adjustLeftPosition(n.left),r={left:o,top:a.offsetTop,height:a.offsetHeight-2,width:i},l.css(r),s._moveHint=s._moveHint.add(l)},_adjustLeftPosition:function(t){var e=this._view;return e._isRtl&&(t-=e.content[0].scrollWidth-e.content[0].offsetWidth),t}}),x=l.Class.extend({init:function(t){this._view=t},_getTimeSlotByPosition:function(t,e,n){var i=this._view.groups[n];return i.timeSlotByPosition(t,e,!0)},_hideHeaders:function(){var t=this._view;t._isVerticallyGrouped()?t.times.find(\".k-last\").hide():(t.timesHeader.find(\"table tr\").eq(2).hide(),t.datesHeader.find(\"table tr\").eq(2).hide())},_setColspan:function(){},_createRowsLayout:function(t,e,n,i){var o=this._view;return o._createDateLayout(i,null,!0)},_createVerticalColumnsLayout:function(t,e,n){var i=this._view;return i._createColumnsLayout(t,null,n)},_createColumnsLayout:function(t,e,n,i){var o=this._view;return o._createColumnsLayout(t,e,n,i,!0)},_getRowCount:function(t){var e=this._view;return e._rowCountForLevel(t)},_getGroupsCount:function(){var t=this._view;return t._groupCount()},_addContent:function(t,e,n,i,o,r,s,a){var d,c,h,f,_=this._view,p=\"\",v=_.options,m=function(e,n,i,o,r,a){var u,c=\"\",f=\"\",p=_._isVerticallyGrouped()?d:h,g=function(t){return function(){return _._resourceBySlot({groupIndex:t})}};return l.date.isToday(t[h])&&(f+=\"k-today\"),(l.date.getMilliseconds(e)<l.date.getMilliseconds(v.workDayStart)||l.date.getMilliseconds(e)>=l.date.getMilliseconds(v.workDayEnd)||!_._isWorkDay(t[p]))&&(f+=\" k-nonwork-hour\"),c+=\"<td\"+(\"\"!==f?' class=\"'+f+'\"':\"\")+\">\",u=l.date.getDate(t[h]),l.date.setTime(u,l.date.getMilliseconds(e)),c+=s({date:u,resources:g(a)}),c+=\"</td>\"},w=new Date(o),T=_.options.minorTickCount,k=_.options.majorTick*g,D=k/T||1;for(c=0;i>c;c++){for(p+=\"<tr>\",c%(i/_._dates.length)===0&&(d=c/(i/_._dates.length),w=new Date(_._dates[d]),l.date.setTime(w,l.date.getMilliseconds(o))),h=0,f=e;f>h;h++)if(p+=_._forTimeRange(w,r,m,a,n),a){u(w,D,!1);break}p+=\"</tr>\"}return p},_addTimeSlotsCollections:function(t,e,n,i,o){var r,s,a,l,d,u,c,h,f,_,v,g,m=this._view,w=n.length;for(o&&(w/=e),r=0;e>r;r++)for(s=0,o&&(s=r),l=s*w,d=0,u=n[l].children,c=o?w:u.length/(e*t),h=u.length/e,a=p(new Date(+m.startTime())),_=0;c>_;_++){for(o?(f=0,u=n[_+c*r].children):(f=r*h+t*_,d++),v=0;t>v;v++)g=m.groups[v],m._addTimeSlotToCollection(g,u,v,f,r,a,i);a+=i}},_getVerticalGroupCount:function(){var t=this._view;return t.content.find(\"tr\").length},_getVerticalRowCount:function(t,e,n){return n},_renderEvent:function(t,e,n,i,o,r,s,a){var l,d,u,c,h,f=this._view,_=[];for(d=o.start.index;o.end.index>=d;d++)l=f._createEventElement(n.occurrence,e,d!==a,d!==s),l.appendTo(r).css({top:0,height:f.options.eventHeight}),u=i._timeSlotCollections[0]._slots[d],c=i.timeSlotRanges(u.start,u.end,!1)[0],h={start:d===s?n.occurrence._startTime||n.occurrence.start:u.start,end:d===a?n.occurrence._endTime||n.occurrence.end:u.end,element:l,uid:e.uid,slotRange:c,rowIndex:0,offsetTop:0},t.events[e.uid]=h,_.push(h),f.addContinuousEvent(i,c,l,e.isAllDay),f._arrangeRows(h,c,t);t.events[e.uid]=_},_verticalCountForLevel:function(t){var e=this._view;return e._columnCountForLevel(t)},_horizontalCountForLevel:function(t,e){var n=this._view;return n._columnCountForLevel(e)/n._columnCountForLevel(2)},_updateCurrentVerticalTimeMarker:function(e,n){var i=this._view,o=i.times.find(\"tr:first th:first\"),r=i.times.find(\"tr:first th:last\"),s=\"<div class='\"+m+\"'></div>\",a=t(s).prependTo(i.times),l=Math.round(e[0].innerRect(n,new Date(n.getTime()+1),!1).top),d={};this._isRtl?(d.right=o.position().left+o.outerHeight()-r.outerHeight(),a.addClass(w+\"-left\")):(d.left=r.position().left,a.addClass(w+\"-right\")),d.top=l-a.outerWidth()*k/2,a.css(d),t(s).prependTo(i.content).css({top:l,height:\"1px\",right:\"1px\",width:i.content[0].scrollWidth,left:0})},_changeGroup:function(t,e,n){var i=this._view;n||(t.groupIndex=e?i.groups.length-1:0)},_prevGroupSlot:function(t){return t},_nextGroupSlot:function(t){return t},_changeDate:function(t,e,n){var i,o,r=this._view,s=r.groups[t.groupIndex];if(e){if(i=s._getCollections(!1),o=n.index-1,o>=0)return i[0]._slots[o]}else if(i=s._getCollections(!1),o=n.index+1,i[0]&&i[0]._slots[o])return i[0]._slots[o]},_verticalSlots:function(t,e,n){return this._changeDate(t,e,n)},_verticalMethod:function(t,e){return e?t?\"upSlot\":\"downSlot\":t?\"leftSlot\":\"rightSlot\"},_normalizeVerticalSelection:function(t,n,i,o){var r=this._view;return o?e:r._normalizeVerticalSelection(t,n,i)},_horizontalSlots:function(t,e,n,i,o,r,s){var a=this._view,l=a._changeGroup(t,s),d={};return l?d.startSlot=d.endSlot=l:a._isVerticallyGrouped()||(d.startSlot=e[n](i),d.endSlot=e[n](o)),d},_changeVerticalViewPeriod:function(t,e,n,i){var o=this._view;return!(t.startSlot&&t.endSlot||e)&&o._changeViewPeriod(n,i,o._isVerticallyGrouped())},_changeHorizontalViewPeriod:function(t,e,n,i){var o=this._view;return o._isVerticallyGrouped()?!1:!(t.startSlot&&t.endSlot||e)&&o._changeViewPeriod(n,i,!1)},_updateDirection:function(t,e,n,i){var o=this._view;o._updateDirection(t,e,n,i,!o._isVerticallyGrouped())},_createMoveHint:function(t,e){var n,i,o,r,s=this._view,a=t.start,l=t.end;for(n=a.index;l.index>=n;n++)i=t.collection._slots[n],o=s._createEventElement(e.occurrence,e.occurrence,!1,!1),o.addClass(\"k-event-drag-hint\"),r={left:i.offsetLeft+2,top:i.offsetTop,height:s.options.eventHeight,width:i.offsetWidth},o.css(r),s._moveHint=s._moveHint.add(o)},_adjustLeftPosition:function(t){var e=this._view;return e._isRtl&&!e._isVerticallyGrouped()&&(t-=e.content[0].scrollWidth-e.content[0].offsetWidth),t}});l.ui.scheduler.TimelineGroupedView=V,l.ui.scheduler.TimelineGroupedByDateView=x,a=c.extend({init:function(t,e){var n=this;c.fn.init.call(n,t,e),n._groupedView=n._getGroupedView(),n.title=n.options.title||n.options.name,n._workDays=i(n.options),n._templates(),n._editable(),n.calculateDateRange(),n._groups(),n._currentTime(!0)},name:\"timeline\",_getGroupedView:function(){return this._isGroupedByDate()?new l.ui.scheduler.TimelineGroupedByDateView(this):new l.ui.scheduler.TimelineGroupedView(this)},_getNextEventIndexBySlot:function(t,e,n){var i,o;if(this._isVerticallyGrouped())return l.ui.SchedulerView.fn._getNextEventIndexBySlot.call(this,t,e,n);for(i=0,o=0;e.length>o;o++)if(t.startDate()>e[o].start.startDate())i++;else{if(!(t.startDate().getTime()===e[o].start.startDate().getTime()&&n>e[o].start.groupIndex))break;i++}return i},_getSelectedSlot:function(t,e,n,i,o,r){return this._isVerticallyGrouped()?l.ui.SchedulerView.fn._getSelectedSlot.call(this,t,e,n,i,o,r):t},_getSortedEvents:function(e){return this._isVerticallyGrouped()?l.ui.SchedulerView.fn._getSortedEvents.call(this,e):e.sort(function(e,n){var i=e.start.startDate().getTime()-n.start.startDate().getTime();return 0===i&&(e.start.isDaySlot&&!n.start.isDaySlot&&(i=-1),!e.start.isDaySlot&&n.start.isDaySlot&&(i=1)),0===i&&(i=e.start.groupIndex-n.start.groupIndex),0===i&&(i=t(e.element).index()-t(n.element).index()),i})},_currentTimeMarkerUpdater:function(){this._updateCurrentTimeMarker(new Date)},_updateCurrentTimeMarker:function(e){var n,i,o,r,s,a,d,u,c,h,f,_,p,v=this.options;if(this.datesHeader.find(\".\"+m).remove(),this.times.find(\".\"+m).remove(),this.content.find(\".\"+m).remove(),this._isInDateSlot({start:e,end:e}))for(v.currentTimeMarker.useLocalTimezone===!1&&(n=v.dataSource.options.schema.timezone,v.dataSource&&n&&(i=l.timezone.offset(e,n),e=l.timezone.convert(e,e.getTimezoneOffset(),i))),o=v.group&&\"vertical\"!=v.group.orientation?this.groups.length:1,r=0;o>r;r++){if(s=this.groups[r],!s)return;if(a=l.date.toUtcTime(e),d=s.timeSlotRanges(a,a+1),0===d.length)return;u=d[0].collection,c=u.slotByStartDate(e),c&&(this._isVerticallyGrouped()?this._groupedView._updateCurrentVerticalTimeMarker(d,e):(h=\"<div class='\"+m+\"'></div>\",f=this.datesHeader.find(\".\"+T),_=Math.round(d[0].innerRect(e,new Date(e.getTime()+1),!1).left),p=t(h).prependTo(f).addClass(w+\"-down\"),p.css({left:this._adjustLeftPosition(_-p.outerWidth()*k/2),top:f.find(\"tr:last\").prev().position().top}),t(h).prependTo(this.content).css({left:this._adjustLeftPosition(_),width:\"1px\",height:this.content[0].scrollHeight-1,top:0})))}},_adjustLeftPosition:function(t){return this._groupedView._adjustLeftPosition(t)},_currentTime:function(t){var n=this,i=n.options.currentTimeMarker;i!==!1&&i.updateInterval!==e&&(n._currentTimeMarkerUpdater(),t&&(n._currentTimeUpdateTimer=setInterval(f(this._currentTimeMarkerUpdater,n),i.updateInterval)))},_editable:function(){this.options.editable&&(this._isMobile()?this._touchEditable():this._mouseEditable())},_mouseEditable:function(){var e=this;e.element.on(\"click\"+D,\".k-event a:has(.k-si-close)\",function(n){e.trigger(\"remove\",{uid:t(this).closest(\".k-event\").attr(l.attr(\"uid\"))}),n.preventDefault()}),e.options.editable.create!==!1&&e.element.on(\"dblclick\"+D,\".k-scheduler-content td\",function(t){var n,i=e._slotByPosition(t.pageX,t.pageY);i&&(n=e._resourceBySlot(i),e.trigger(\"add\",{eventInfo:h({start:i.startDate(),end:i.endDate()},n)})),t.preventDefault()}),e.options.editable.update!==!1&&e.element.on(\"dblclick\"+D,\".k-event\",function(n){e.trigger(\"edit\",{uid:t(this).closest(\".k-event\").attr(l.attr(\"uid\"))}),n.preventDefault()})},_touchEditable:function(){var n=this,i=0;l.support.mobileOS.android&&(i=5),n.options.editable.create!==!1&&(n._addUserEvents=new l.UserEvents(n.element,{threshold:i,filter:\".k-scheduler-content td\",tap:function(t){var i,o=t.x.location!==e?t.x.location:t.x,r=t.y.location!==e?t.y.location:t.y,s=n._slotByPosition(o,r);s&&(i=n._resourceBySlot(s),n.trigger(\"add\",{eventInfo:h({start:s.startDate(),end:s.endDate()},i)})),t.preventDefault()}})),n.options.editable.update!==!1&&(n._editUserEvents=new l.UserEvents(n.element,{threshold:i,filter:\".k-event\",tap:function(e){var i=t(e.target).closest(\".k-event\");i.hasClass(\"k-event-active\")||n.trigger(\"edit\",{uid:i.attr(l.attr(\"uid\"))}),e.preventDefault()}}))},_slotByPosition:function(t,e){var n,i,o,r=this.content,s=r.offset();for(t-=s.left,e-=s.top,this._isRtl?(o=l.support.browser,o.mozilla?(t+=r[0].scrollWidth-r[0].offsetWidth,t+=r[0].scrollLeft):o.msie?(t-=r.scrollLeft(),t+=r[0].scrollWidth-r[0].offsetWidth):o.webkit&&(t+=r[0].scrollLeft)):t+=r[0].scrollLeft,e+=r[0].scrollTop,t=Math.ceil(t),e=Math.ceil(e),i=0;this.groups.length>i;i++)if(n=this._groupedView._getTimeSlotByPosition(t,e,i))return n;return null},options:{name:\"TimelineView\",title:\"Timeline\",selectedDateFormat:\"{0:D}\",selectedShortDateFormat:\"{0:d}\",date:l.date.today(),startTime:l.date.today(),endTime:l.date.today(),showWorkHours:!1,minorTickCount:2,editable:!0,workDayStart:new Date(1980,1,1,8,0,0),workDayEnd:new Date(1980,1,1,17,0,0),workWeekStart:1,workWeekEnd:5,majorTick:60,eventHeight:25,eventMinWidth:0,columnWidth:100,groupHeaderTemplate:\"#=text#\",majorTimeHeaderTemplate:\"#=kendo.toString(date, 't')#\",slotTemplate:\"&nbsp;\",eventTemplate:y,dateHeaderTemplate:S,footer:{command:\"workDay\"},currentTimeMarker:{updateInterval:1e4,useLocalTimezone:!0},messages:{defaultRowText:\"All events\",showFullDay:\"Show full day\",showWorkDay:\"Show business hours\"}},events:[\"remove\",\"add\",\"edit\"],_templates:function(){var t=this.options,e=h({},l.Template,t.templateSettings);this.eventTemplate=this._eventTmpl(t.eventTemplate,C),this.majorTimeHeaderTemplate=l.template(t.majorTimeHeaderTemplate,e),this.dateHeaderTemplate=l.template(t.dateHeaderTemplate,e),this.slotTemplate=l.template(t.slotTemplate,e),this.groupHeaderTemplate=l.template(t.groupHeaderTemplate,e)},_render:function(e){var n=this;e=e||[],n._dates=e,n._startDate=e[0],n._endDate=e[e.length-1||0],n._calculateSlotRanges(),n.createLayout(n._layout(e)),n._content(e),n._footer(),n._setContentWidth(),n.refreshLayout(),n.datesHeader.on(\"click\"+D,\".k-nav-day\",function(e){var i=t(e.currentTarget).closest(\"th\"),o=n._slotByPosition(i.offset().left,n.content.offset().top);n.trigger(\"navigate\",{view:\"timeline\",date:o.startDate()})}),n._groupedView._hideHeaders()},_setContentWidth:function(){var t=this.content,e=t.width(),n=this.content.find(\"table\"),i=n.find(\"tr:first\").children().length,o=100,r=i*this.options.columnWidth;r>e&&(o=Math.ceil(r/e*100)),n.add(this.datesHeader.find(\"table\")).css(\"width\",o+\"%\")},_calculateSlotRanges:function(){var t,e,n,i,o=this._dates,r=this.startTime(),s=this.endTime();for(p(s)===p(l.date.getDate(s))&&(s=l.date.getDate(s),u(s,v-1)),s=p(s),r=p(r),t=[],e=0;o.length>e;e++)n=_(o[e]),u(n,r),i=_(o[e]),u(i,s),t.push({start:l.date.toUtcTime(n),end:l.date.toUtcTime(i)});this._slotRanges=t},_forTimeRange:function(t,e,i,o,r){var s,a,l,d,c,h,f,_,m,w,T,k,D,y,S,C,V,x;for(t=n(t),e=n(e),s=this,a=p(t),l=p(e),d=s.options.minorTickCount,c=s.options.majorTick*g,h=c/d||1,f=new Date(+t),_=f.getDate(),w=0,k=\"\",T=v/h,a!=l&&(a>l&&(l+=v),T=(l-a)/h),T=o?1:Math.round(T),r&&(T*=r);T>w;w++)D=w%(c/h),y=0===D,S=d-1>D,C=D===d-1,V=d,T%d!==0&&(x=d>T-(w+1),y&&x&&(V=T%d)),k+=i(f,y,S,C,V,w%r),o||(r?w%r===r-1&&u(f,h,!1):u(f,h,!1));return l&&(m=p(f),_<f.getDate()&&(m+=v),m>l&&(f=new Date(+e))),k},_layout:function(t){var e,n,i,o=[],r=[],s=this,a=[{text:s.options.messages.defaultRowText}],l=s._groupedView,d=[];for(e=0;s.options.minorTickCount>e;e++)d.push({text:\"\",className:\"k-last\",minorTicks:!0});for(this._forTimeRange(s.startTime(),s.endTime(),function(t,e,n,i,r){var a,u=s.majorTimeHeaderTemplate;e&&(a={text:u({date:t}),className:i?\"k-slot-cell\":\"\",columns:d.slice(0,r)},l._setColspan(a),o.push(a))}),n=0;t.length>n;n++)r.push({text:s.dateHeaderTemplate({date:t[n]}),className:\"k-slot-cell\",columns:o.slice(0)});return i=this.groupedResources,i.length&&(\"vertical\"===this._groupOrientation()?(a=l._createRowsLayout(i,null,this.groupHeaderTemplate,r),r=l._createVerticalColumnsLayout(i,null,this.groupHeaderTemplate,r)):r=l._createColumnsLayout(i,r,this.groupHeaderTemplate,r)),{columns:r,rows:a}},_footer:function(){var e,n,i,o=this.options;o.footer!==!1&&(e='<div class=\"k-header k-scheduler-footer\">',n=o.footer.command,n&&\"workDay\"===n?(e+='<ul class=\"k-reset k-header\">',e+='<li class=\"k-state-default k-scheduler-fullday\"><a href=\"#\" class=\"k-link\"><span class=\"k-icon k-i-clock\"></span>',e+=(o.showWorkHours?o.messages.showFullDay:o.messages.showWorkDay)+\"</a></li>\",e+=\"</ul>\"):e+=\"&nbsp;\",e+=\"</div>\",this.footer=t(e).appendTo(this.element),i=this,this.footer.on(\"click\"+D,\".k-scheduler-fullday\",function(t){t.preventDefault(),i.trigger(\"navigate\",{view:i.name||o.name,date:i.startDate(),isWorkDay:!o.showWorkHours})}))},_columnCountForLevel:function(t){var e=this.columnLevels[t];return e?e.length:0},_rowCountForLevel:function(t){var e=this.rowLevels[t];return e?e.length:0},_isWorkDay:function(t){var e,n=t.getDay(),i=this._workDays;for(e=0;i.length>e;e++)if(i[e]===n)return!0;return!1},_content:function(t){var e=this,n=e.startTime(),i=this.endTime(),o=1,r=1,s=t.length,a=\"\",l=this.groupedResources,d=this.slotTemplate,u=!1;l.length&&(u=\"vertical\"===e._groupOrientation(),u?(r=e._groupedView._getRowCount(this.rowLevels.length-1),o=e._groupedView._getGroupsCount()):o=e._groupCount()),a+=\"<tbody>\",a+=e._groupedView._addContent(t,s,o,r,n,i,d,u),a+=\"</tbody>\",this.content.find(\"table\").append(a)},_groups:function(){var t,e,n,i,o=this._groupCount(),r=this._dates,s=r.length;for(this.groups=[],t=0;o>t;t++)e=this._addResourceView(t),n=r[0],i=r[r.length-1||0],e.addTimeSlotCollection(n,l.date.addDays(i,1));this._timeSlotGroups(o,s)},_isHorizontallyGrouped:function(){return this.groupedResources.length&&\"horizontal\"===this._groupOrientation()},_timeSlotGroups:function(t,e){var n=this._timeSlotInterval(),i=this._isVerticallyGrouped(),o=this.content.find(\"tr\");o.attr(\"role\",\"row\"),this._groupedView._addTimeSlotsCollections(t,e,o,n,i)},_addTimeSlotToCollection:function(t,e,n,i,o,r,s){var a=e[n+i],l=t.getTimeSlotCollection(0),d=this._dates[o],u=Date.UTC(d.getFullYear(),d.getMonth(),d.getDate()),c=u+r,h=c+s;a.setAttribute(\"role\",\"gridcell\"),a.setAttribute(\"aria-selected\",!1),l.addTimeSlot(a,c,h,!0)},startDate:function(){return this._startDate},endDate:function(){return this._endDate},startTime:function(){var t=this.options;return t.showWorkHours?t.workDayStart:t.startTime},endTime:function(){var t=this.options;return t.showWorkHours?t.workDayEnd:t.endTime},_timeSlotInterval:function(){var t=this.options;return t.majorTick/t.minorTickCount*g},nextDate:function(){return l.date.nextDay(this.endDate())},previousDate:function(){return l.date.previousDay(this.startDate())},calculateDateRange:function(){this._render([this.options.date])},render:function(t){var e,n,i,o,r;for(this._headerColumnCount=0,this._groups(),this.element.find(\".k-event\").remove(),t=new l.data.Query(t).sort([{field:\"start\",dir:\"asc\"},{field:\"end\",dir:\"desc\"}]).toArray(),e=[],this._eventsByResource(t,this.groupedResources,e),n=[],i=0,o=0;e.length>o;o++)r={groupIndex:o,maxRowCount:0,events:{}},n.push(r),this._renderEvents(e[o],o,r),r.maxRowCount>i&&(i=r.maxRowCount);this._setRowsHeight(n,e.length,i),this._positionEvents(n,e.length),this._currentTime(!1),this.trigger(\"activate\")},_positionEvents:function(e,n){var i,o,r,s,a;for(i=0;n>i;i++){o=e[i].events;for(r in o)if(s=o[r],t.isArray(s))for(a=0;s.length>a;a++)this._positionEvent(s[a]);else this._positionEvent(s)}},_setRowsHeight:function(e,n,i){var o,r,s,a,l,d=this.options.eventHeight+2,u=this._getBottomRowOffset(),c=this._groupedView,h=c._getVerticalGroupCount(n);for(n=this._isVerticallyGrouped()?h:1,o=0;n>o;o++)r=c._getVerticalRowCount(e,o,i),r=r?r:1,s=(d+2)*r+u,a=t(this.times.find(\"tr\")[o]),l=t(this.content.find(\"tr\")[o]),a.height(s),l.height(s);this._setContentWidth(),this.refreshLayout(),this._refreshSlots()},_getBottomRowOffset:function(){var t,e,n=.5*this.options.eventHeight,i=this._isMobile();return i?(t=30,e=60):(t=15,e=30),n>e?n=e:t>n&&(n=t),n},_positionEvent:function(t){var e,n,i,o=this.options.eventHeight+2,r=t.slotRange.innerRect(t.start,t.end,!1),s=this._adjustLeftPosition(r.left),a=r.right-r.left-2;0>a&&(a=0),this.options.eventMinWidth>a&&(e=t.slotRange.collection,n=e._slots[e._slots.length-1],i=n.offsetLeft+n.offsetWidth,a=this.options.eventMinWidth,s+a>i&&(a=i-r.left-2)),t.element.css({top:t.slotRange.start.offsetTop+t.rowIndex*(o+2)+\"px\",left:s,width:a})},_refreshSlots:function(){for(var t=0;this.groups.length>t;t++)this.groups[t].refresh()},_eventsByResource:function(t,e,n){var i,o,r,s,a=e[0];if(a)for(i=a.dataSource.view(),o=0;i.length>o;o++)r=this._resourceValue(a,i[o]),s=new l.data.Query(t).filter({field:a.field,operator:c.groupEqFilter(r)}).toArray(),e.length>1?this._eventsByResource(s,e.slice(1),n):n.push(s);else n.push(t)},_isInDateSlot:function(t){var e=t.start,n=t.end,i=_(this._startDate),o=l.date.addDays(_(this._endDate),1);return o>e&&n>=i},_isInTimeSlot:function(t){var e,n=t._startTime||l.date.toUtcTime(t.start),i=t._endTime||l.date.toUtcTime(t.end),o=this._slotRanges;for(n===i&&(i+=1),e=0;o.length>e;e++)if(o[e].end>n&&i>o[e].start)return!0;return!1},_adjustEvent:function(t){var e,n=t.start,i=t.end,o=t._time(\"start\"),r=t._time(\"end\"),s=p(this.startTime()),a=p(this.endTime()),d=null,c=null,h=!1,f=!1;return t.isAllDay?(d=_(n),s>o&&(u(d,s),f=!0),c=_(i),a===p(_(this.endTime()))?c=l.date.addDays(c,1):(u(c,a),h=!0)):(a=0===a?v:a,s>o?(d=_(n),u(d,s),f=!0):o>a&&(d=_(n),d=l.date.addDays(d,1),u(d,s),f=!0),r>a?(c=_(i),u(c,a),h=!0):s>r&&(c=_(i),c=l.date.addDays(c,-1),u(c,a),h=!0)),e=t.clone({start:d?d:n,end:c?c:i,_startTime:d?l.date.toUtcTime(d):t._startTime,_endTime:c?l.date.toUtcTime(c):t._endTime,isAllDay:!1}),{occurrence:e,head:h,tail:f}},_renderEvents:function(t,e,n){var i,o,r,s,a,l,d,u,c,h,f;for(o=0,r=t.length;r>o;o++)i=t[o],this._isInDateSlot(i)&&(s=i.isAllDay||i.end.getTime()-i.start.getTime()>=v,a=this.content,(s||this._isInTimeSlot(i))&&(l=this._adjustEvent(i),d=this.groups[e],d._continuousEvents||(d._continuousEvents=[]),u=d.slotRanges(l.occurrence,!1),c=u[0],h=c.start.index,f=c.end.index,this._isInTimeSlot(l.occurrence)&&this._groupedView._renderEvent(n,i,l,d,c,a,h,f)))},addContinuousEvent:function(t,e,n,i){var o=t._continuousEvents;o.push({element:n,isAllDay:i,uid:n.attr(l.attr(\"uid\")),start:e.start,end:e.end})},_createEventElement:function(e,n,i,o){var r,s,a=this.eventTemplate,d=this.options.editable,u=this._isMobile(),c=d&&d.destroy!==!1&&!u,f=d&&d.resize!==!1,_=n._time(\"start\"),p=n._time(\"end\"),v=n.start,g=n.end,m=this.eventResources(n);return n._startTime&&_!==l.date.getMilliseconds(n.start)&&(v=new Date(_),v=l.timezone.apply(v,\"Etc/UTC\")),n._endTime&&p!==l.date.getMilliseconds(n.end)&&(g=new Date(p),g=l.timezone.apply(g,\"Etc/UTC\")),r=h({},{ns:l.ns,resizable:f,showDelete:c,head:i,tail:o,singleDay:1==this._dates.length,resources:m,inverseColor:m&&m[0]?this._shouldInverseResourceColor(m[0]):!1},n,{start:v,end:g}),s=t(a(r)),this.angular(\"compile\",function(){return{elements:s,data:[{dataItem:r}]}}),s},_arrangeRows:function(t,e,n){var i,o,s,a,l,d,u=e.start.index,h=e.end.index,f=t.slotRange.innerRect(t.start,t.end,!1),_=f.right+this.options.eventMinWidth,p=r(e.events(),f.left,_);for(e.addEvent({slotIndex:u,start:u,end:h,rectLeft:f.left,rectRight:_,element:t.element,uid:t.uid}),p.push({start:u,end:h,uid:t.uid}),i=c.createRows(p),i.length>n.maxRowCount&&(n.maxRowCount=i.length),o=0,s=i.length;s>o;o++)for(a=i[o].events,l=0,d=a.length;d>l;l++)n.events[a[l].uid].rowIndex=o},_groupCount:function(){var t=this.groupedResources,e=this._groupedView;return t.length?\"vertical\"===this._groupOrientation()?e._verticalCountForLevel(t.length-1):e._horizontalCountForLevel(t.length-1,this.columnLevels.length-1):1},_updateEventForSelection:function(t){var e=this._adjustEvent(t.clone());return e.occurrence},_eventOptionsForMove:function(t){return t.isAllDay?{isAllDay:!1}:{}},_updateEventForResize:function(t){t.isAllDay&&t.set(\"isAllDay\",!1)},_updateMoveHint:function(t,e,n){var i,o,r,s,a=this.groups[e],l=t.clone({start:t.start,end:t.end}),d=l.duration();for(l.start=new Date(l.start.getTime()+n),l.end=new Date(+l.start+d),i=this._adjustEvent(l),o=a.slotRanges(i.occurrence,!1),this._removeMoveHint(),r=0;o.length>r;r++)this._groupedView._createMoveHint(o[r],i);s=this.content,this._moveHint.appendTo(s)},_updateResizeHint:function(t,e,n,i){var o,r,s,a,d,u,h,f,_,p,v=this.groups[e],g=v.ranges(n,i,!1,!1);for(this._removeResizeHint(),o=0;g.length>o;o++)r=g[o],s=r.startSlot(),a=r.innerRect(n,i,!1),a.top=s.offsetTop,d=a.right-a.left,u=r.endSlot().offsetTop+s.offsetHeight-a.top,h=this._adjustLeftPosition(a.left),f=c.fn._createResizeHint.call(this,h,a.top,d,u),this._resizeHint=this._resizeHint.add(f);_=\"t\",p=this.content,this._resizeHint.appendTo(p),this._resizeHint.find(\".k-label-top,.k-label-bottom\").text(\"\"),this._resizeHint.first().addClass(\"k-first\").find(\".k-label-top\").text(l.toString(l.timezone.toLocalDate(n),_)),this._resizeHint.last().addClass(\"k-last\").find(\".k-label-bottom\").text(l.toString(l.timezone.toLocalDate(i),_))},selectionByElement:function(t){var e=t.offset();return this._slotByPosition(e.left,e.top)},_updateDirection:function(t,e,n,i,o){var r=e[0].start,s=e[e.length-1].end;n&&!o&&r.index===s.index&&r.collectionIndex===s.collectionIndex&&(t.backward=i)},_changeGroup:function(t,e){var n=e?\"prevGroupSlot\":\"nextGroupSlot\",i=this[n](t.start,t.groupIndex,!1);return i&&(t.groupIndex+=e?-1:1),this._groupedView._changeGroup(t,e,i),i},prevGroupSlot:function(t,e,n){var i=this.groups[e],o=i.ranges(t,t,n,!1)[0].start;if(!(0>=e))return this._groupedView._prevGroupSlot(o,i,n)},nextGroupSlot:function(t,e,n){var i=this.groups[e],o=i.ranges(t,t,n,!1)[0].start;if(!(e>=this.groups.length-1))return this._groupedView._nextGroupSlot(o,i,n)},_verticalSlots:function(t,e,n,i){var o=this._groupedView,r=o._verticalMethod(i,n),s=e[0].start,a=e[e.length-1].end,l=this.groups[t.groupIndex],d=o._normalizeVerticalSelection(t,e,i,n);return d&&(s=a=d),s=l[r](s),a=l[r](a),n||!this._isVerticallyGrouped()||s&&a||(s=a=o._verticalSlots(t,i,d)),{startSlot:s,endSlot:a}},_horizontalSlots:function(t,e,n,i){var o=i?\"upSlot\":\"downSlot\",r=e[0].start,s=e[e.length-1].end,a=this.groups[t.groupIndex],l={};return n?(l.startSlot=a[o](r),l.endSlot=a[o](s),n||!this._isHorizontallyGrouped()||r&&s||(l.startSlot=l.endSlot=this._changeGroup(t,i))):l=this._groupedView._horizontalSlots(t,a,o,r,s,n,i),l},_changeViewPeriod:function(t,e){var n,i=e?this.previousDate():this.nextDate(),o=t.start,r=t.end;return t.start=new Date(i),t.end=new Date(i),this._isHorizontallyGrouped()&&(t.groupIndex=e?this.groups.length-1:0),n=r-o,e?(r=p(this.endTime()),r=0===r?v:r,u(t.start,r-n),u(t.end,r)):(o=p(this.startTime()),u(t.start,o),u(t.end,o+n)),t.events=[],!0},move:function(t,e,n){var i,o,r,s,a,d=!1,u=this.groups[t.groupIndex],c=l.keys,h=this._groupedView,f=u.ranges(t.start,t.end,!1,!1);if(e===c.DOWN||e===c.UP){if(d=!0,r=e===c.UP,h._updateDirection(t,f,n,r),s=this._verticalSlots(t,f,n,r),h._changeVerticalViewPeriod(s,n,t,r))return d}else if((e===c.LEFT||e===c.RIGHT)&&(d=!0,r=e===c.LEFT,this._updateDirection(t,f,n,r,!1),s=this._horizontalSlots(t,f,n,r),h._changeHorizontalViewPeriod(s,n,t,r)))return d;return d&&(i=s.startSlot,o=s.endSlot,n?(a=t.backward,a&&i?t.start=i.startDate():!a&&o&&(t.end=o.endDate())):i&&o&&(t.start=i.startDate(),t.end=o.endDate()),t.events=[]),d},destroy:function(){var t=this;t.element&&t.element.off(D),t.footer&&t.footer.remove(),t._currentTimeUpdateTimer&&clearInterval(t._currentTimeUpdateTimer),c.fn.destroy.call(this),this._isMobile()&&t.options.editable&&(t.options.editable.create!==!1&&t._addUserEvents.destroy(),t.options.editable.update!==!1&&t._editUserEvents.destroy())}}),h(!0,d,{TimelineView:a,TimelineWeekView:a.extend({options:{name:\"TimelineWeekView\",title:\"Timeline Week\",selectedDateFormat:\"{0:D} - {1:D}\",selectedShortDateFormat:\"{0:d} - {1:d}\",majorTick:120},name:\"timelineWeek\",calculateDateRange:function(){var t,e,n=this.options.date,i=l.date.dayOfWeek(n,this.calendarInfo().firstDay,-1),o=[];for(t=0,e=7;e>t;t++)o.push(i),i=l.date.nextDay(i);\nthis._render(o)}}),TimelineWorkWeekView:a.extend({options:{name:\"TimelineWorkWeekView\",title:\"Timeline Work Week\",selectedDateFormat:\"{0:D} - {1:D}\",selectedShortDateFormat:\"{0:d} - {1:d}\",majorTick:120},name:\"timelineWorkWeek\",nextDate:function(){var t=l.date.dayOfWeek(l.date.nextDay(this.endDate()),this.calendarInfo().firstDay,1);return l.date.addDays(t,this._workDays[0])},previousDate:function(){var t=l.date.dayOfWeek(this.startDate(),this.calendarInfo().firstDay,-1),e=this._workDays;return l.date.addDays(t,e[e.length-1]-7)},calculateDateRange:function(){for(var t=this.options.date,e=l.date.dayOfWeek(t,this.options.workWeekStart,-1),n=l.date.dayOfWeek(e,this.options.workWeekEnd,1),i=[];n>=e;)i.push(e),e=l.date.nextDay(e);this._render(i)}}),TimelineMonthView:a.extend({options:{name:\"TimelineMonthView\",title:\"Timeline Month\",selectedDateFormat:\"{0:D} - {1:D}\",selectedShortDateFormat:\"{0:d} - {1:d}\",workDayStart:new Date(1980,1,1,0,0,0),workDayEnd:new Date(1980,1,1,23,59,59),footer:!1,majorTick:1440,minorTickCount:1},name:\"timelineMonth\",calculateDateRange:function(){var t,e,n=this.options.date,i=l.date.firstDayOfMonth(n),o=l.date.lastDayOfMonth(n),r=[];for(t=0,e=o.getDate();e>t;t++)r.push(i),i=l.date.nextDay(i);this._render(r)}})})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()});\n//# sourceMappingURL=kendo.scheduler.timelineview.min.js.map\n","/* eslint-disable no-console */\nimport { Channel } from \"phoenix\";\nimport {\n  AppMessageRecipientRecord,\n  IAppMessageRecipientData,\n  appMessageRecipientFromJSON,\n} from \"app2/src/records/AppMessage\";\n\n/**\n * Metadata about the user's messages\n */\nexport interface IAppMessageMetadata {\n  total: number;\n  unread_total: number;\n  page_number?: number;\n  per_page?: number;\n  total_pages?: number;\n}\n\n/**\n * Response structure for join and list operations\n */\nexport interface IAppMessageResponse {\n  app_messages: IAppMessageRecipientData[];\n  metadata: IAppMessageMetadata;\n}\n\n/**\n * Response structure for single message operations\n */\nexport interface IAppMessageUpdateResponse {\n  app_message: IAppMessageRecipientData;\n  metadata: IAppMessageMetadata;\n}\n\n/**\n * Callbacks for handling app message events\n */\nexport interface IAppMessageCallbacks {\n  onInitialMessages: (messages: AppMessageRecipientRecord[], metadata: IAppMessageMetadata) => void;\n  onNewMessage: (message: AppMessageRecipientRecord, metadata: IAppMessageMetadata) => void;\n  onMessageUpdate: (message: AppMessageRecipientRecord, metadata: IAppMessageMetadata) => void;\n}\n\n/**\n * Stored callbacks - set via initialize()\n */\nlet callbacks: IAppMessageCallbacks | null = null;\n\n/**\n * Initialize the service with callbacks\n * Must be called before setting up channel listeners\n */\nexport const initialize = (appCallbacks: IAppMessageCallbacks): void => {\n  callbacks = appCallbacks;\n};\n\n/**\n * Setup channel event listeners\n * Requires initialize() to be called first\n */\nexport const setupChannelListeners = (channel: Channel): Channel => {\n  // Server → Client: New message notification\n  channel.on(\"app_message:new\", (payload: IAppMessageUpdateResponse) => {\n    if (callbacks?.onNewMessage) {\n      const record = appMessageRecipientFromJSON(payload.app_message);\n      callbacks.onNewMessage(record, payload.metadata);\n    }\n  });\n\n  // Server → Client: Message updated (cross-tab sync)\n  channel.on(\"app_message:updated\", (payload: IAppMessageUpdateResponse) => {\n    if (callbacks?.onMessageUpdate) {\n      const record = appMessageRecipientFromJSON(payload.app_message);\n      callbacks.onMessageUpdate(record, payload.metadata);\n    }\n  });\n\n  return channel;\n};\n\n/**\n * Handle initial join response\n * Converts raw messages to records and calls onInitialMessages callback\n */\nexport const handleJoinResponse = (response: IAppMessageResponse): void => {\n  if (callbacks?.onInitialMessages) {\n    const records = response.app_messages.map(appMessageRecipientFromJSON);\n    callbacks.onInitialMessages(records, response.metadata);\n  }\n};\n\n/**\n * Request paginated list of messages\n *\n * @param channel - Phoenix channel instance\n * @param page - Page number (default: 1)\n * @param pageSize - Items per page (default: 20)\n * @returns Promise resolving to message list with metadata\n */\nexport const listMessages = (channel: Channel, page = 1, pageSize = 20): Promise<IAppMessageResponse> => {\n  return new Promise((resolve, reject) => {\n    channel\n      .push(\"app_message:list\", { page, page_size: pageSize })\n      .receive(\"ok\", (response: IAppMessageResponse) => {\n        resolve(response);\n      })\n      .receive(\"error\", (error: any) => {\n        console.error(\"[AppMessage] List messages error:\", error);\n        reject(error);\n      })\n      .receive(\"timeout\", () => {\n        console.error(\"[AppMessage] List messages timeout\");\n        reject(new Error(\"Request timeout\"));\n      });\n  });\n};\n\n/**\n * Mark a message as dismissed\n *\n * @param channel - Phoenix channel instance\n * @param id - The AppMessageRecipient.id (UUID) of the message to dismiss\n * @returns Promise resolving on success (actual update comes via broadcast)\n */\nexport const dismissMessage = (channel: Channel, id: string): Promise<void> => {\n  return new Promise((resolve, reject) => {\n    channel\n      .push(\"app_message:dismissed\", { id })\n      .receive(\"ok\", () => {\n        resolve();\n      })\n      .receive(\"error\", (error: any) => {\n        console.error(\"[AppMessage] Dismiss error:\", error);\n        reject(error);\n      })\n      .receive(\"timeout\", () => {\n        console.error(\"[AppMessage] Dismiss timeout\");\n        reject(new Error(\"Request timeout\"));\n      });\n  });\n};\n\n/**\n * Mark a message action button as clicked\n *\n * @param channel - Phoenix channel instance\n * @param id - The AppMessageRecipient.id (UUID) of the message\n * @returns Promise resolving on success (actual update comes via broadcast)\n */\nexport const markAction = (channel: Channel, id: string): Promise<void> => {\n  return new Promise((resolve, reject) => {\n    channel\n      .push(\"app_message:action\", { id })\n      .receive(\"ok\", () => {\n        resolve();\n      })\n      .receive(\"error\", (error: any) => {\n        console.error(\"[AppMessage] Action error:\", error);\n        reject(error);\n      })\n      .receive(\"timeout\", () => {\n        console.error(\"[AppMessage] Action timeout\");\n        reject(new Error(\"Request timeout\"));\n      });\n  });\n};\n\n/**\n * Mark a message as read\n *\n * @param channel - Phoenix channel instance\n * @param id - The AppMessageRecipient.id (UUID) of the message to mark as read\n * @returns Promise resolving on success (actual update comes via broadcast)\n */\nexport const markRead = (channel: Channel, id: string): Promise<void> => {\n  return new Promise((resolve, reject) => {\n    channel\n      .push(\"app_message:read\", { id })\n      .receive(\"ok\", () => {\n        resolve();\n      })\n      .receive(\"error\", (error: any) => {\n        console.error(\"[AppMessage] Mark read error:\", error);\n        reject(error);\n      })\n      .receive(\"timeout\", () => {\n        console.error(\"[AppMessage] Mark read timeout\");\n        reject(new Error(\"Request timeout\"));\n      });\n  });\n};\n\n/**\n * Archive (soft delete) a message\n *\n * @param channel - Phoenix channel instance\n * @param id - The AppMessageRecipient.id (UUID) of the message to archive\n * @returns Promise resolving on success (actual update comes via broadcast)\n */\nexport const archiveMessage = (channel: Channel, id: string): Promise<void> => {\n  return new Promise((resolve, reject) => {\n    channel\n      .push(\"app_message:archive\", { id })\n      .receive(\"ok\", () => {\n        resolve();\n      })\n      .receive(\"error\", (error: any) => {\n        console.error(\"[AppMessage] Archive error:\", error);\n        reject(error);\n      })\n      .receive(\"timeout\", () => {\n        console.error(\"[AppMessage] Archive timeout\");\n        reject(new Error(\"Request timeout\"));\n      });\n  });\n};\n\n/**\n * Functional API object for AppMessage operations\n * Use this to interact with the channel in a functional way\n */\nexport const AppMessageAPI = {\n  initialize,\n  setupChannelListeners,\n  handleJoinResponse,\n  listMessages,\n  dismissMessage,\n  markAction,\n  markRead,\n  archiveMessage,\n};\n","import * as documentActions from \"./document.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { DocumentRecord, fromJSON, setDisplay } from \"../records/Document\";\nimport { RootState, RootActions } from \".\";\nimport { reducer as paginationReducer } from \"app2/src/reducers/pagination.reducer\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { fetch, loaded, receive, reset } from \"app2/src/reducers/Reducer\";\n\nexport const DocumentStateRecord = Record({\n  byId: Map<number, DocumentRecord>(),\n  lastSavedById: Map<number, DocumentRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = DocumentStateRecord();\n\nexport type DocumentState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"documents\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let document: DocumentRecord;\n  switch (action.type) {\n    // SINGLE\n    case documentActions.FETCH_DOCUMENT:\n      return fetch(state, model, fromJSON({ id: action.payload.id }));\n\n    case documentActions.RECEIVE_DOCUMENT:\n      document = fromJSON({ ...action.payload.document });\n      return receive(state, model, document);\n\n    case documentActions.RESET_DOCUMENT:\n      return reset(state, model, action.payload.id);\n\n    case documentActions.SET_DOCUMENT_LOADED:\n      return loaded(state, model, action.payload.id);\n\n    case documentActions.DESTROY_DOCUMENT:\n      state = paginationReducer(state, paginationActions.Actions.removeId(action.payload.id, \"document\"));\n      const base64 = state.getIn([\"documents\", \"byId\", action.payload.id, \"base64\"]);\n      if (base64) {\n        URL.revokeObjectURL(base64);\n      }\n      return state.deleteIn([\"documents\", \"byId\", action.payload.id]);\n\n    case documentActions.EDIT_DOCUMENT:\n      return state.setIn([model, \"byId\", action.payload.id, action.payload.name], action.payload.value);\n\n    case documentActions.EDIT_BOOLEAN:\n      state = state.setIn([\"documents\", \"byId\", action.payload.id, action.payload.name], action.payload.value);\n\n      const record = state.getIn([\"documents\", \"byId\", action.payload.id]);\n      return state.setIn([\"documents\", \"byId\", action.payload.id, \"display\"], setDisplay(record));\n\n    case documentActions.UPDATE_SIGNED_DOCUMENT_STATUS:\n      return state\n        .setIn([\"documents\", \"byId\", action.payload.id, \"signed_document\", \"status\"], action.payload.status)\n        .setIn([\"documents\", \"lastSavedById\", action.payload.id, \"signed_document\", \"status\"], action.payload.status);\n\n    // MULTIPLE\n    case documentActions.FETCH_DOCUMENTS:\n      const { ids } = action.payload;\n      ids.forEach((id) => {\n        state = reducer(state, documentActions.Actions.fetchDocument(id));\n      });\n      return state;\n\n    case documentActions.RECEIVE_DOCUMENTS:\n      action.payload.documents.forEach((document) => {\n        state = reducer(state, documentActions.Actions.receiveDocument(document));\n      });\n      return state;\n\n    case documentActions.RECEIVE_DOCUMENTS_BY_ID:\n      state = reducer(state, documentActions.Actions.receiveDocuments(action.payload.documents));\n      const responseIds = List(_.pluck(action.payload.documents, \"id\"));\n      action.payload.ids\n        .filter((id) => !responseIds.includes(id))\n        .forEach((deletedId) => {\n          state = reducer(state, documentActions.Actions.receiveDocument({ id: deletedId }));\n        });\n\n      return state;\n\n    case documentActions.SET_DOCUMENTS_LOADED:\n      action.payload.ids.forEach((id) => {\n        state = reducer(state, documentActions.Actions.setDocumentLoaded(id));\n      });\n\n      return state;\n\n    case documentActions.BATCH_EDIT_BOOLEAN:\n      action.payload.documentIds.forEach((id) => {\n        state = reducer(state, documentActions.Actions.editBoolean(id, action.payload.name, action.payload.value));\n      });\n      return state;\n\n    case documentActions.BATCH_EDIT_FOLDER_ID:\n      action.payload.documentIds.forEach((id) => {\n        state = state.setIn([\"documents\", \"byId\", id, \"folder_id\"], action.payload.folderId);\n      });\n      return state;\n\n    case documentActions.BATCH_REMOVE_IDS:\n      action.payload.documentIds.forEach((id) => {\n        state = paginationReducer(state, paginationActions.Actions.removeId(id, \"document\"));\n      });\n\n      return state;\n\n    // ESTIMATE\n    case documentActions.DUPLICATE_LINE_ITEM_DOCUMENTS:\n      const lineItem = state.getIn([\"estimateLineItems\", \"byId\", action.payload.lineItemId]);\n\n      let docIds = List();\n      let unsavedId = state.getIn([\"documents\", \"unsavedId\"]);\n      action.payload.docIds.map((docId: number) => {\n        let doc = state.getIn([\"documents\", \"byId\", docId]);\n        doc = doc.set(\"id\", unsavedId);\n        docIds = docIds.push(unsavedId);\n        state = state.setIn([\"documents\", \"byId\", doc.id], doc);\n        unsavedId -= 1;\n      });\n\n      return state\n        .setIn([\"estimateLineItems\", \"byId\", lineItem.id, \"document_ids\"], docIds)\n        .setIn([\"documents\", \"unsavedId\"], unsavedId);\n\n    default:\n      return state;\n  }\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState, RootActions } from \"./index\";\nimport { ITokenData, TokenRecord, TokenKind } from \"../records/Token\";\nimport { tokenService } from \"../api/token.service\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { RootDispatchType } from \"../store\";\n\nexport const RECEIVE_TOKEN = \"@tokens/RECEIVE_TOKEN\";\nexport const FETCH_TOKEN = \"@tokens/FETCH_TOKEN\";\nexport const EDIT_TOKEN_DATA = \"@tokens/EDIT_TOKEN_DATA\";\nexport const RESET_TOKEN = \"@tokens/RESET_TOKEN\";\nexport const SET_LOADED = \"@tokens/SET_LOADED\";\nexport const RECEIVE_AUTHORIZED = \"@tokens/RECEIVE_AUTHORIZED\";\nexport const FETCH_AUTHORIZED = \"@tokens/FETCH_AUTHORIZED\";\nexport const SET_AUTHORIZED_LOADED = \"@tokens/SET_AUTHORIZED_LOADED\";\nexport const UPDATE_FORM = \"@tokens/UPDATE_FORM\";\n\nexport const Actions = {\n  receiveToken: (orgId: number, token: Partial<ITokenData>) => createAction(RECEIVE_TOKEN, { orgId, token }),\n  fetchToken: (orgId: number, tokenKind: TokenKind) => createAction(FETCH_TOKEN, { orgId, tokenKind }),\n  editTokenData: (orgId: number, tokenKind: TokenKind, data: Map<string, any>) =>\n    createAction(EDIT_TOKEN_DATA, { orgId, tokenKind, data }),\n  resetToken: (orgId: number, tokenKind: TokenKind) => createAction(RESET_TOKEN, { orgId, tokenKind }),\n  setLoaded: (orgId: number, tokenKind: TokenKind) => createAction(SET_LOADED, { orgId, tokenKind }),\n  update: (event: any) => createAction(UPDATE_FORM, { event }),\n  receiveAuthorized: (orgId: number, authorized: any) => createAction(RECEIVE_AUTHORIZED, { orgId, authorized }),\n  fetchAuthorized: (orgId: number) => createAction(FETCH_AUTHORIZED, orgId),\n  setAuthorizedLoaded: (orgId: number) => createAction(SET_AUTHORIZED_LOADED, orgId),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, RootActions>;\n\nexport const AsyncActions = {\n  getToken: (orgId: number, tokenKind: TokenKind, parentTokenLoad = false): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, _getState) => {\n      dispatch(Actions.fetchToken(orgId, tokenKind));\n      try {\n        const result = await tokenService.loadByKind(orgId, tokenKind, parentTokenLoad);\n        if (result.token) {\n          dispatch(Actions.receiveToken(orgId, result.token));\n        } else {\n          // Setup default for redux store if token does not currently exist on the org\n          dispatch(Actions.receiveToken(orgId, { org_id: orgId, kind: tokenKind }));\n        }\n      } catch (response) {\n        const err_msg = handleErrors(response);\n        dispatch(Actions.setLoaded(orgId, tokenKind));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, err_msg));\n      }\n    };\n  },\n  getAuthorizedTokens: (orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchAuthorized(orgId));\n      try {\n        const result = await tokenService.loadAuthorized(orgId);\n        dispatch(Actions.receiveAuthorized(orgId, result));\n      } catch (response) {\n        const err_msg = handleErrors(response);\n        dispatch(Actions.setAuthorizedLoaded(orgId));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, err_msg));\n      }\n    };\n  },\n  updateCreateToken: (token: TokenRecord, throwError = false): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, _getState) => {\n      dispatch(Actions.fetchToken(token.org_id, token.kind));\n      try {\n        if (token.id > 0) {\n          const result = await tokenService.update(token);\n          dispatch(Actions.receiveToken(token.org_id, result.token));\n          dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Successfully updated\"));\n        } else {\n          const result = await tokenService.create(token);\n          dispatch(Actions.receiveToken(token.org_id, result.token));\n          dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Successfully created\"));\n        }\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setLoaded(token.org_id, token.kind));\n        if (throwError) throw response;\n      }\n    };\n  },\n  deleteToken: (orgId: number, tokenKind: TokenKind): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, _getState) => {\n      dispatch(Actions.fetchToken(orgId, tokenKind));\n      try {\n        await tokenService.deleteByKind(orgId, tokenKind);\n        dispatch(Actions.receiveToken(orgId, { kind: tokenKind }));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Authorization Rejected\"));\n      } catch (response) {\n        const err_msg = handleErrors(response);\n        dispatch(Actions.setLoaded(orgId, tokenKind));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, err_msg[0]));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.draganddrop.min\",[\"kendo.core.min\",\"kendo.userevents.min\"],t)}(function(){return function(t,e){function n(e,n){try{return t.contains(e,n)||e==n}catch(r){return!1}}function r(t,e){return parseInt(t.css(e),10)||0}function i(t,e){return Math.min(Math.max(t,e.min),e.max)}function o(t,e){var n=D(t),i=n.left+r(t,\"borderLeftWidth\")+r(t,\"paddingLeft\"),o=n.top+r(t,\"borderTopWidth\")+r(t,\"paddingTop\"),a=i+t.width()-e.outerWidth(!0),s=o+t.height()-e.outerHeight(!0);return{x:{min:i,max:a},y:{min:o,max:s}}}function a(n,r,i){for(var o,a,s=0,l=r&&r.length,c=i&&i.length;n&&n.parentNode;){for(s=0;l>s;s++)if(o=r[s],o.element[0]===n)return{target:o,targetElement:n};for(s=0;c>s;s++)if(a=i[s],t.contains(a.element[0],n)&&x.matchesSelector.call(n,a.options.filter))return{target:a,targetElement:n};n=n.parentNode}return e}function s(t,e){var n,r=e.options.group,i=t[r];if(T.fn.destroy.call(e),i.length>1){for(n=0;i.length>n;n++)if(i[n]==e){i.splice(n,1);break}}else i.length=0,delete t[r]}function l(t){var e,n,r,i=c()[0];return t[0]===i?(n=i.scrollTop,r=i.scrollLeft,{top:n,left:r,bottom:n+b.height(),right:r+b.width()}):(e=t.offset(),e.bottom=e.top+t.height(),e.right=e.left+t.width(),e)}function c(){return t(_.support.browser.chrome?y.body:y.documentElement)}function u(e){var n,r=c();if(!e||e===y.body||e===y.documentElement)return r;for(n=t(e)[0];n&&!_.isScrollable(n)&&n!==y.body;)n=n.parentNode;return n===y.body?r:t(n)}function h(t,e,n){var r={x:0,y:0},i=50;return i>t-n.left?r.x=-(i-(t-n.left)):i>n.right-t&&(r.x=i-(n.right-t)),i>e-n.top?r.y=-(i-(e-n.top)):i>n.bottom-e&&(r.y=i-(n.bottom-e)),r}var d,f,p,g,v,m,_=window.kendo,x=_.support,y=window.document,b=t(window),E=_.Class,T=_.ui.Widget,S=_.Observable,M=_.UserEvents,w=t.proxy,C=t.extend,D=_.getOffset,O={},k={},I={},H=_.elementUnderCursor,W=\"keyup\",z=\"change\",P=\"dragstart\",U=\"hold\",L=\"drag\",A=\"dragend\",N=\"dragcancel\",V=\"hintDestroyed\",B=\"dragenter\",$=\"dragleave\",F=\"drop\",j=S.extend({init:function(e,n){var r=this,i=e[0];r.capture=!1,i.addEventListener?(t.each(_.eventMap.down.split(\" \"),function(){i.addEventListener(this,w(r._press,r),!0)}),t.each(_.eventMap.up.split(\" \"),function(){i.addEventListener(this,w(r._release,r),!0)})):(t.each(_.eventMap.down.split(\" \"),function(){i.attachEvent(this,w(r._press,r))}),t.each(_.eventMap.up.split(\" \"),function(){i.attachEvent(this,w(r._release,r))})),S.fn.init.call(r),r.bind([\"press\",\"release\"],n||{})},captureNext:function(){this.capture=!0},cancelCapture:function(){this.capture=!1},_press:function(t){var e=this;e.trigger(\"press\"),e.capture&&t.preventDefault()},_release:function(t){var e=this;e.trigger(\"release\"),e.capture&&(t.preventDefault(),e.cancelCapture())}}),G=S.extend({init:function(e){var n=this;S.fn.init.call(n),n.forcedEnabled=!1,t.extend(n,e),n.scale=1,n.horizontal?(n.measure=\"offsetWidth\",n.scrollSize=\"scrollWidth\",n.axis=\"x\"):(n.measure=\"offsetHeight\",n.scrollSize=\"scrollHeight\",n.axis=\"y\")},makeVirtual:function(){t.extend(this,{virtual:!0,forcedEnabled:!0,_virtualMin:0,_virtualMax:0})},virtualSize:function(t,e){this._virtualMin===t&&this._virtualMax===e||(this._virtualMin=t,this._virtualMax=e,this.update())},outOfBounds:function(t){return t>this.max||this.min>t},forceEnabled:function(){this.forcedEnabled=!0},getSize:function(){return this.container[0][this.measure]},getTotal:function(){return this.element[0][this.scrollSize]},rescale:function(t){this.scale=t},update:function(t){var e=this,n=e.virtual?e._virtualMax:e.getTotal(),r=n*e.scale,i=e.getSize();(0!==n||e.forcedEnabled)&&(e.max=e.virtual?-e._virtualMin:0,e.size=i,e.total=r,e.min=Math.min(e.max,i-r),e.minScale=i/n,e.centerOffset=(r-i)/2,e.enabled=e.forcedEnabled||r>i,t||e.trigger(z,e))}}),Q=S.extend({init:function(t){var e=this;S.fn.init.call(e),e.x=new G(C({horizontal:!0},t)),e.y=new G(C({horizontal:!1},t)),e.container=t.container,e.forcedMinScale=t.minScale,e.maxScale=t.maxScale||100,e.bind(z,t)},rescale:function(t){this.x.rescale(t),this.y.rescale(t),this.refresh()},centerCoordinates:function(){return{x:Math.min(0,-this.x.centerOffset),y:Math.min(0,-this.y.centerOffset)}},refresh:function(){var t=this;t.x.update(),t.y.update(),t.enabled=t.x.enabled||t.y.enabled,t.minScale=t.forcedMinScale||Math.min(t.x.minScale,t.y.minScale),t.fitScale=Math.max(t.x.minScale,t.y.minScale),t.trigger(z)}}),q=S.extend({init:function(t){var e=this;C(e,t),S.fn.init.call(e)},outOfBounds:function(){return this.dimension.outOfBounds(this.movable[this.axis])},dragMove:function(t){var e=this,n=e.dimension,r=e.axis,i=e.movable,o=i[r]+t;n.enabled&&((n.min>o&&0>t||o>n.max&&t>0)&&(t*=e.resistance),i.translateAxis(r,t),e.trigger(z,e))}}),J=E.extend({init:function(e){var n,r,i,o,a=this;C(a,{elastic:!0},e),i=a.elastic?.5:0,o=a.movable,a.x=n=new q({axis:\"x\",dimension:a.dimensions.x,resistance:i,movable:o}),a.y=r=new q({axis:\"y\",dimension:a.dimensions.y,resistance:i,movable:o}),a.userEvents.bind([\"press\",\"move\",\"end\",\"gesturestart\",\"gesturechange\"],{gesturestart:function(t){a.gesture=t,a.offset=a.dimensions.container.offset()},press:function(e){t(e.event.target).closest(\"a\").is(\"[data-navigate-on-press=true]\")&&e.sender.cancel()},gesturechange:function(t){var e,i,s,l=a.gesture,c=l.center,u=t.center,h=t.distance/l.distance,d=a.dimensions.minScale,f=a.dimensions.maxScale;d>=o.scale&&1>h&&(h+=.8*(1-h)),o.scale*h>=f&&(h=f/o.scale),i=o.x+a.offset.left,s=o.y+a.offset.top,e={x:(i-c.x)*h+u.x-i,y:(s-c.y)*h+u.y-s},o.scaleWith(h),n.dragMove(e.x),r.dragMove(e.y),a.dimensions.rescale(o.scale),a.gesture=t,t.preventDefault()},move:function(t){t.event.target.tagName.match(/textarea|input/i)||(n.dimension.enabled||r.dimension.enabled?(n.dragMove(t.x.delta),r.dragMove(t.y.delta),t.preventDefault()):t.touch.skip())},end:function(t){t.preventDefault()}})}}),K=x.transitions.prefix+\"Transform\";f=x.hasHW3D?function(t,e,n){return\"translate3d(\"+t+\"px,\"+e+\"px,0) scale(\"+n+\")\"}:function(t,e,n){return\"translate(\"+t+\"px,\"+e+\"px) scale(\"+n+\")\"},p=S.extend({init:function(e){var n=this;S.fn.init.call(n),n.element=t(e),n.element[0].style.webkitTransformOrigin=\"left top\",n.x=0,n.y=0,n.scale=1,n._saveCoordinates(f(n.x,n.y,n.scale))},translateAxis:function(t,e){this[t]+=e,this.refresh()},scaleTo:function(t){this.scale=t,this.refresh()},scaleWith:function(t){this.scale*=t,this.refresh()},translate:function(t){this.x+=t.x,this.y+=t.y,this.refresh()},moveAxis:function(t,e){this[t]=e,this.refresh()},moveTo:function(t){C(this,t),this.refresh()},refresh:function(){var t,e=this,n=e.x,r=e.y;e.round&&(n=Math.round(n),r=Math.round(r)),t=f(n,r,e.scale),t!=e.coordinates&&(_.support.browser.msie&&10>_.support.browser.version?(e.element[0].style.position=\"absolute\",e.element[0].style.left=e.x+\"px\",e.element[0].style.top=e.y+\"px\"):e.element[0].style[K]=t,e._saveCoordinates(t),e.trigger(z))},_saveCoordinates:function(t){this.coordinates=t}}),g=T.extend({init:function(t,e){var n,r=this;T.fn.init.call(r,t,e),n=r.options.group,n in k?k[n].push(r):k[n]=[r]},events:[B,$,F],options:{name:\"DropTarget\",group:\"default\"},destroy:function(){s(k,this)},_trigger:function(t,n){var r=this,i=O[r.options.group];return i?r.trigger(t,C({},n.event,{draggable:i,dropTarget:n.dropTarget})):e},_over:function(t){this._trigger(B,t)},_out:function(t){this._trigger($,t)},_drop:function(t){var e=this,n=O[e.options.group];n&&(n.dropped=!e._trigger(F,t))}}),g.destroyGroup=function(t){var e,n=k[t]||I[t];if(n){for(e=0;n.length>e;e++)T.fn.destroy.call(n[e]);n.length=0,delete k[t],delete I[t]}},g._cache=k,v=g.extend({init:function(t,e){var n,r=this;T.fn.init.call(r,t,e),n=r.options.group,n in I?I[n].push(r):I[n]=[r]},destroy:function(){s(I,this)},options:{name:\"DropTargetArea\",group:\"default\",filter:null}}),m=T.extend({init:function(t,e){var n=this;T.fn.init.call(n,t,e),n._activated=!1,n.userEvents=new M(n.element,{global:!0,allowSelection:!0,filter:n.options.filter,threshold:n.options.distance,start:w(n._start,n),hold:w(n._hold,n),move:w(n._drag,n),end:w(n._end,n),cancel:w(n._cancel,n),select:w(n._select,n)}),n._afterEndHandler=w(n._afterEnd,n),n._captureEscape=w(n._captureEscape,n)},events:[U,P,L,A,N,V],options:{name:\"Draggable\",distance:_.support.touch?0:5,group:\"default\",cursorOffset:null,axis:null,container:null,filter:null,ignore:null,holdToDrag:!1,autoScroll:!1,dropped:!1},cancelHold:function(){this._activated=!1},_captureEscape:function(t){var e=this;t.keyCode===_.keys.ESC&&(e._trigger(N,{event:t}),e.userEvents.cancel())},_updateHint:function(e){var n,r=this,o=r.options,a=r.boundaries,s=o.axis,l=r.options.cursorOffset;l?n={left:e.x.location+l.left,top:e.y.location+l.top}:(r.hintOffset.left+=e.x.delta,r.hintOffset.top+=e.y.delta,n=t.extend({},r.hintOffset)),a&&(n.top=i(n.top,a.y),n.left=i(n.left,a.x)),\"x\"===s?delete n.top:\"y\"===s&&delete n.left,r.hint.css(n)},_shouldIgnoreTarget:function(e){var n=this.options.ignore;return n&&t(e).is(n)},_select:function(t){this._shouldIgnoreTarget(t.event.target)||t.preventDefault()},_start:function(n){var r,i=this,a=i.options,s=a.container,l=a.hint;return this._shouldIgnoreTarget(n.touch.initialTouch)||a.holdToDrag&&!i._activated?(i.userEvents.cancel(),e):(i.currentTarget=n.target,i.currentTargetOffset=D(i.currentTarget),l&&(i.hint&&i.hint.stop(!0,!0).remove(),i.hint=_.isFunction(l)?t(l.call(i,i.currentTarget)):l,r=D(i.currentTarget),i.hintOffset=r,i.hint.css({position:\"absolute\",zIndex:2e4,left:r.left,top:r.top}).appendTo(y.body),i.angular(\"compile\",function(){i.hint.removeAttr(\"ng-repeat\");for(var e=t(n.target);!e.data(\"$$kendoScope\")&&e.length;)e=e.parent();return{elements:i.hint.get(),scopeFrom:e.data(\"$$kendoScope\")}})),O[a.group]=i,i.dropped=!1,s&&(i.boundaries=o(s,i.hint)),t(y).on(W,i._captureEscape),i._trigger(P,n)&&(i.userEvents.cancel(),i._afterEnd()),i.userEvents.capture(),e)},_hold:function(t){this.currentTarget=t.target,this._trigger(U,t)?this.userEvents.cancel():this._activated=!0},_drag:function(e){var n,r;e.preventDefault(),n=this._elementUnderCursor(e),this.options.autoScroll&&this._cursorElement!==n&&(this._scrollableParent=u(n),this._cursorElement=n),this._lastEvent=e,this._processMovement(e,n),this.options.autoScroll&&this._scrollableParent[0]&&(r=h(e.x.location,e.y.location,l(this._scrollableParent)),this._scrollCompenstation=t.extend({},this.hintOffset),this._scrollVelocity=r,0===r.y&&0===r.x?(clearInterval(this._scrollInterval),this._scrollInterval=null):this._scrollInterval||(this._scrollInterval=setInterval(t.proxy(this,\"_autoScroll\"),50))),this.hint&&this._updateHint(e)},_processMovement:function(n,r){this._withDropTarget(r,function(r,i){if(!r)return d&&(d._trigger($,C(n,{dropTarget:t(d.targetElement)})),d=null),e;if(d){if(i===d.targetElement)return;d._trigger($,C(n,{dropTarget:t(d.targetElement)}))}r._trigger(B,C(n,{dropTarget:t(i)})),d=C(r,{targetElement:i})}),this._trigger(L,C(n,{dropTarget:d,elementUnderCursor:r}))},_autoScroll:function(){var t,e,n,r,i,o,a,s,l=this._scrollableParent[0],u=this._scrollVelocity,h=this._scrollCompenstation;l&&(t=this._elementUnderCursor(this._lastEvent),this._processMovement(this._lastEvent,t),r=l===c()[0],r?(e=y.body.scrollHeight>b.height(),n=y.body.scrollWidth>b.width()):(e=l.scrollHeight>=l.offsetHeight,n=l.scrollWidth>=l.offsetWidth),i=l.scrollTop+u.y,o=e&&i>0&&l.scrollHeight>i,a=l.scrollLeft+u.x,s=n&&a>0&&l.scrollWidth>a,o&&(l.scrollTop+=u.y),s&&(l.scrollLeft+=u.x),r&&(s||o)&&(o&&(h.top+=u.y),s&&(h.left+=u.x),this.hint.css(h)))},_end:function(e){this._withDropTarget(this._elementUnderCursor(e),function(n,r){n&&(n._drop(C({},e,{dropTarget:t(r)})),d=null)}),this._cancel(this._trigger(A,e))},_cancel:function(t){var e=this;e._scrollableParent=null,this._cursorElement=null,clearInterval(this._scrollInterval),e._activated=!1,e.hint&&!e.dropped?setTimeout(function(){e.hint.stop(!0,!0),t?e._afterEndHandler():e.hint.animate(e.currentTargetOffset,\"fast\",e._afterEndHandler)},0):e._afterEnd()},_trigger:function(t,e){var n=this;return n.trigger(t,C({},e.event,{x:e.x,y:e.y,currentTarget:n.currentTarget,initialTarget:e.touch?e.touch.initialTouch:null,dropTarget:e.dropTarget,elementUnderCursor:e.elementUnderCursor}))},_elementUnderCursor:function(t){var e=H(t),r=this.hint;return r&&n(r[0],e)&&(r.hide(),e=H(t),e||(e=H(t)),r.show()),e},_withDropTarget:function(t,e){var n,r=this.options.group,i=k[r],o=I[r];(i&&i.length||o&&o.length)&&(n=a(t,i,o),n?e(n.target,n.targetElement):e())},destroy:function(){var t=this;T.fn.destroy.call(t),t._afterEnd(),t.userEvents.destroy(),this._scrollableParent=null,this._cursorElement=null,clearInterval(this._scrollInterval),t.currentTarget=null},_afterEnd:function(){var e=this;e.hint&&e.hint.remove(),delete O[e.options.group],e.trigger(\"destroy\"),e.trigger(V),t(y).off(W,e._captureEscape)}}),_.ui.plugin(g),_.ui.plugin(v),_.ui.plugin(m),_.TapCapture=j,_.containerBoundaries=o,C(_.ui,{Pane:J,PaneDimensions:Q,Movable:p}),_.ui.Draggable.utils={autoScrollVelocity:h,scrollableViewPort:l,findScrollableParent:u}}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()});\n//# sourceMappingURL=kendo.draganddrop.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.mobile.shim.min\",[\"kendo.popup.min\"],e)}(function(){return function(e,n){var i=window.kendo,o=i.mobile.ui,t=i.ui.Popup,s='<div class=\"km-shim\"/>',a=\"hide\",d=o.Widget,p=d.extend({init:function(n,o){var p=this,c=i.mobile.application,l=i.support.mobileOS,r=c?c.os.name:l?l.name:\"ios\",u=\"ios\"===r||\"wp\"===r||(c?c.os.skin:!1),h=\"blackberry\"===r,m=o.align||(u?\"bottom center\":h?\"center right\":\"center center\"),f=o.position||(u?\"bottom center\":h?\"center right\":\"center center\"),w=o.effect||(u?\"slideIn:up\":h?\"slideIn:left\":\"fade:in\"),g=e(s).handler(p).hide();d.fn.init.call(p,n,o),p.shim=g,n=p.element,o=p.options,o.className&&p.shim.addClass(o.className),o.modal||p.shim.on(\"down\",\"_hide\"),(c?c.element:e(document.body)).append(g),p.popup=new t(p.element,{anchor:g,modal:!0,appendTo:g,origin:m,position:f,animation:{open:{effects:w,duration:o.duration},close:{duration:o.duration}},close:function(e){var n=!1;p._apiCall||(n=p.trigger(a)),n&&e.preventDefault(),p._apiCall=!1},deactivate:function(){g.hide()},open:function(){g.show()}}),i.notify(p)},events:[a],options:{name:\"Shim\",modal:!1,align:n,position:n,effect:n,duration:200},show:function(){this.popup.open()},hide:function(){this._apiCall=!0,this.popup.close()},destroy:function(){d.fn.destroy.call(this),this.shim.kendoDestroy(),this.popup.destroy(),this.shim.remove()},_hide:function(n){n&&e.contains(this.shim.children().children(\".k-popup\")[0],n.target)||this.popup.close()}});o.plugin(p)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,n,i){(i||n)()});\n//# sourceMappingURL=kendo.mobile.shim.min.js.map\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IDoorData } from \"../records/Door\";\nimport { List } from \"immutable\";\n\nexport const RECEIVE_DOOR = \"@doors/RECEIVE_DOOR\";\nexport const EDIT_DOOR = \"@doors/EDIT_DOOR\";\nexport const RESET_DOORS = \"@doors/RESET_DOORS\";\nexport const UPDATE_FORM = \"@doors/UPDATE_FORM\";\n\nexport const Actions = {\n  receiveDoor: (door: Partial<IDoorData>) => createAction(RECEIVE_DOOR, { door }),\n  editDoor: (door: Partial<IDoorData>) => createAction(EDIT_DOOR, { door }),\n  resetDoors: (doorIds: List<number>) => createAction(RESET_DOORS, { doorIds }),\n  updateForm: (event: { rootPath: any; name: string; value: any }) => createAction(UPDATE_FORM, { event }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { onSortEnd } from \"app2/src/helpers/Record\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as taskActions from \"app2/src/reducers/task.actions\";\nimport { sendInviteOptions } from \"app2/src/selectors/components/common.selectors\";\nimport { currentJobId, job, resourceDocuments } from \"app2/src/selectors/job.selectors\";\nimport { List } from \"immutable\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootActions, RootState } from \".\";\nimport * as jobService from \"../api/job.service\";\nimport { JobQueryRecord } from \"../components/JobList/JobQuery\";\nimport { fetcher } from \"../helpers/Fetcher\";\nimport { IEstimateOverviewData } from \"../records/EstimateOverview\";\nimport { ImageRecord } from \"../records/Image\";\nimport {\n  fromJSON as jobFromJSON,\n  IJobData,\n  IJobRecord,\n  IJobsPageRecord,\n  IJobStateInfo,\n  JobRecord,\n  JobsPageRecord,\n} from \"../records/Job\";\nimport { IStatsData } from \"../records/Statistics\";\nimport { ITaskData } from \"../records/Task\";\nimport { UserRecord } from \"../records/UserRecord\";\nimport { RootDispatchType } from \"../store\";\nimport { IPagination } from \"./leads.actions\";\nimport { ActionsUnion, createAction } from \"./Utils\";\n\nexport const SET_CURRENT_JOB_ID = \"@job/SET_CURRENT_JOB_ID\";\nexport const SAVING_JOB = \"@job/SAVING_JOB\";\nexport const RECEIVE_JOB = \"@job/RECEIVE_JOB\";\nexport const FETCH_JOB = \"@job/FETCH_JOB\";\nexport const FETCH_PAGE = \"@job/FETCH_PAGE\";\nexport const RECEIVE_PAGE = \"@job/RECEIVE_PAGE\";\nexport const RESET_PAGES = \"@job/RESET_PAGES\";\nexport const SWIPE_JOB = \"@job/SWIPE_JOB\";\nexport const ADDING_PHOTO = \"@job/ADDING_PHOTO\";\nexport const ADDED_PHOTO = \"@job/ADDED_PHOTO\";\nexport const CANCEL_PHOTO = \"@job/CANCEL_PHOTO\";\nexport const CANCEL_SAVING_JOB = \"@job/CANCEL_SAVING_JOB\";\nexport const SET_JOB_LOADED = \"@job/SET_JOB_LOADED\";\nexport const ADD_JOB_TO_PAGE = \"@job/ADD_JOB_TO_PAGE\";\nexport const JOB_RECEIVE_ESTIMATE = \"@job/JOB_RECEIVE_ESTIMATE\";\nexport const SET_SELECTED_ESTIMATE_ID = \"@job/SET_SELECTED_ESTIMATE_ID\";\nexport const SET_JOB_QUERY = \"@job/SET_JOB_QUERY\";\nexport const REVERT_JOB_QUERY = \"@job/REVERT_JOB_QUERY\";\nexport const SET_LAST_SAVED_JOB_QUERY = \"@job/SET_LAST_SAVED_JOB_QUERY\";\nexport const RESET_LAST_CHANGES_JOB_QUERY = \"@job/RESET_LAST_CHANGES_JOB_QUERY\";\nexport const RESET_JOB_QUERY = \"@job/RESET_JOB_QUERY\";\nexport const SET_JOB_STATES = \"@job/SET_JOB_STATES\";\nexport const EDIT_RESOURCE_DISPLAY = \"@job/EDIT_RESOURCE_DISPLAY\";\nexport const SET_RESOURCE_DOCUMENTS = \"@job/SET_RESOURCE_DOCUMENTS\";\nexport const INCREASE_COUNT = \"@job/INCREASE_COUNT\";\nexport const DECREASE_COUNT = \"@job/DECREASE_COUNT\";\nexport const EDIT_JOB = \"@job/EDIT_JOB\";\nexport const RECEIVE_STATS = \"@job/RECEIVE_STATS\";\nexport const SET_SAMPLE_JOBS = \"@job/SET_SAMPLE_JOBS\";\n\nexport interface Page {\n  loading?: boolean;\n  page: number;\n  jobs: IJobRecord[];\n  meta: IPagination;\n}\n\nexport interface IJobQueryField {\n  name: string;\n  value: any;\n}\n\nexport const Actions = {\n  setCurrentJobId: (id: number) => createAction(SET_CURRENT_JOB_ID, { id }),\n  fetchPage: (page: number) => createAction(FETCH_PAGE, page),\n  receivePage: (page: Page) => createAction(RECEIVE_PAGE, page),\n  resetPages: () => createAction(RESET_PAGES),\n  receiveJob: (job: IJobData) => createAction(RECEIVE_JOB, job),\n  setJobLoaded: (id: number) => createAction(SET_JOB_LOADED, { id }),\n  fetchJob: (id: number) => createAction(FETCH_JOB, { id }),\n  swipeJob: (id: number) => createAction(SWIPE_JOB, id),\n  addingPhoto: (jobId: number) => createAction(ADDING_PHOTO, jobId),\n  cancelPhoto: (jobId: number) => createAction(CANCEL_PHOTO, jobId),\n  addedPhoto: (jobId: number, image: ImageRecord) => createAction(ADDED_PHOTO, { jobId, image }),\n  savingJob: (jobId: number) => createAction(SAVING_JOB, jobId),\n  addJobTopage: (jobId: number, page: number) => createAction(ADD_JOB_TO_PAGE, { jobId, page }),\n  cancelSavingJob: (jobId: number) => createAction(CANCEL_SAVING_JOB, jobId),\n  receiveEstimate: (jobId: number, estimate: IEstimateOverviewData) =>\n    createAction(JOB_RECEIVE_ESTIMATE, { jobId, estimate }),\n  setSelectedEstimateId: (estimateId: number) => createAction(SET_SELECTED_ESTIMATE_ID, { estimateId }),\n  setJobQuery: (jobQuery: IJobQueryField) => createAction(SET_JOB_QUERY, { jobQuery }),\n  setLastSavedJobQuery: (jobQuery: JobQueryRecord) => createAction(SET_LAST_SAVED_JOB_QUERY, { jobQuery }),\n  resetLastChangesJobQuery: () => createAction(RESET_LAST_CHANGES_JOB_QUERY),\n  revertJobQuery: () => createAction(REVERT_JOB_QUERY),\n  resetJobQuery: () => createAction(RESET_JOB_QUERY),\n  setJobStates: (jobStates: { [k: string]: IJobStateInfo }) => createAction(SET_JOB_STATES, { jobStates }),\n  editResourceDisplay: (jobId: number, documentId: number, name: string, value: boolean) =>\n    createAction(EDIT_RESOURCE_DISPLAY, { jobId, documentId, name, value }),\n  setResourceDocuments: (jobId: number, resourceDocuments: List<any>) =>\n    createAction(SET_RESOURCE_DOCUMENTS, { jobId, resourceDocuments }),\n  increaseCount: (fileType: \"document\" | \"image\", jobId: number) => createAction(INCREASE_COUNT, { fileType, jobId }),\n  decreaseCount: (fileType: \"document\" | \"image\", jobId: number) => createAction(DECREASE_COUNT, { fileType, jobId }),\n  editCoverImage: (jobId: number, imageUuid: string) =>\n    createAction(EDIT_JOB, { jobId, name: \"cover_image_uuid\", value: imageUuid }),\n  receiveStats: (statistics: IStatsData) => createAction(RECEIVE_STATS, { statistics }),\n  setSampleJobs: (sampleJobs: string[]) => createAction(SET_SAMPLE_JOBS, { sampleJobs }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, {}, RootActions>;\n\nexport const AsyncActions = {\n  getJob: (jobId: number): ThunkResult<Promise<JobRecord>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchJob(jobId));\n\n      const params = {\n        \"include[]\": jobService.includes,\n      } as any;\n\n      return fetcher.get<{ job: IJobData }>(`/api/v1/jobs/${jobId}`, params).then((j) => {\n        dispatch(Actions.receiveJob(j.job));\n        return jobFromJSON(j.job);\n      });\n    };\n  },\n  getJobs: (query: string, page: number, indicator = true): ThunkResult<Promise<IJobsPageRecord>> => {\n    return (dispatch: RootDispatchType, getState) => {\n      const state = getState();\n      const totalPages = state.getIn([\"jobs\", \"total_pages\"], 0);\n      const params = {\n        sort_by: \"updated_at\",\n        sort_order: \"desc\",\n        page: page,\n        \"include[]\": jobService.includes,\n      } as any;\n\n      if (totalPages < page) {\n        return Promise.resolve(JobsPageRecord());\n      }\n\n      dispatch(Actions.fetchPage(page));\n\n      if (query !== \"\" && query !== undefined) {\n        params.query = query;\n      }\n\n      return fetcher\n        .get<Page>(\"/api/v1/jobs\", params)\n        .then(\n          (result: Page) => {\n            result.page = page;\n\n            dispatch(Actions.receivePage(result));\n\n            return getState().getIn([\"jobs\", \"byPage\", page]);\n          },\n          (...args) => {\n            handleErrors(args);\n          },\n        )\n        .catch((errors) => {\n          handleErrors(errors);\n          return Promise.reject(errors);\n        });\n    };\n  },\n  updateJob: (jobId: number): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const jobRecord = job(getState(), { jobId });\n      dispatch(Actions.fetchJob(jobId));\n\n      try {\n        const response = await jobService.update(jobRecord);\n        dispatch(Actions.receiveJob(response.job));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setJobLoaded(jobId));\n      }\n    };\n  },\n  assignJob: (job: JobRecord, user: UserRecord): ThunkResult<Promise<JobRecord>> => {\n    return (dispatch: RootDispatchType, _getState) => {\n      const url = `/api/v1/jobs/${job.get(\"id\")}/assign`;\n\n      const params = {\n        include: jobService.includes,\n        user_id: user.id,\n      };\n\n      const options = {\n        method: \"PATCH\",\n      };\n\n      return fetcher\n        .fetch(url, params, options)\n        .then(fetcher.json)\n        .then((result) => {\n          dispatch(Actions.receiveJob(result.job));\n          return jobFromJSON(result.job);\n        });\n    };\n  },\n  processJobImportTask: (task: Partial<ITaskData>): ThunkResult<any> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(taskActions.AsyncActions.pollTask(task));\n    };\n  },\n  importJobs: (orgId: number, csvText: string): ThunkResult<any> => {\n    return async (dispatch: RootDispatchType) => {\n      const response: Partial<ITaskData> = await jobService.importJobs(orgId, csvText);\n      dispatch(AsyncActions.processJobImportTask(response));\n      return response.location.split(\"/\").pop();\n    };\n  },\n  onSortEnd: (oldIndex: number, newIndex: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const jobId = currentJobId(getState());\n      const docs = resourceDocuments(getState(), { jobId });\n\n      const { list } = onSortEnd(docs, oldIndex, newIndex, []);\n\n      dispatch(Actions.setResourceDocuments(jobId, list));\n      dispatch(AsyncActions.updateJob(jobId));\n    };\n  },\n  editJobResourceDisplay: (documentId: number, name: string, value: boolean): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const jobId = currentJobId(getState());\n      dispatch(Actions.editResourceDisplay(jobId, documentId, name, value));\n\n      dispatch(AsyncActions.updateJob(jobId));\n    };\n  },\n  editCoverImage: (imageUuid: string): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const jobId = currentJobId(getState());\n      dispatch(Actions.editCoverImage(jobId, imageUuid));\n\n      dispatch(AsyncActions.updateJob(jobId));\n    };\n  },\n  invite: (args: jobService.IInviteArgs): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      args.id = currentJobId(getState());\n      args.options = sendInviteOptions(getState());\n      const response = await jobService.invite(args);\n      const { task } = response;\n      if (task) {\n        dispatch(taskActions.Actions.receiveTask(task));\n        await dispatch(taskActions.AsyncActions.pollTask(task));\n      }\n    };\n  },\n  loadSampleJobs: (orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const response = await jobService.loadSamples(orgId);\n        dispatch(Actions.setSampleJobs(response.sample_jobs));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n\n  createSampleJobs: (orgId: number, userAssigned: number, sampleTypes: List<string>) => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const { task } = await jobService.createSample(orgId, userAssigned, sampleTypes.toJS());\n        dispatch(\n          commonActions.Actions.flashAddAlert(FlashLevels.success, \"Sample Job(s) task submitted successfully.\"),\n        );\n        dispatch(taskActions.Actions.receiveTask(task));\n        await dispatch(taskActions.AsyncActions.pollTask(task));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { ITaskData } from \"app2/src/records/Task\";\n\nclass TaskService {}\n\nexport class TaskPoller {\n  public promise: Promise<ITaskData>;\n  public task: ITaskData;\n  public callback: (task: ITaskData) => void;\n  public timedOut: boolean;\n\n  constructor(public url: string) {\n    const app = this;\n    this.promise = new Promise<ITaskData>((resolve, reject) => {\n      function poll(time: number) {\n        fetcher\n          .get<{ task: ITaskData }>(app.url)\n          .then((task: { task: ITaskData }) => {\n            app.task = task.task;\n\n            if (app.callback) {\n              app.callback(app.task);\n            }\n\n            switch (app.task.status) {\n              case \"finished\": // finished\n                resolve(app.task);\n                break;\n              case \"submitted\": // submitted or processing\n              case \"processing\":\n                setTimeout(poll, time, time);\n                break;\n              case \"error\": // error\n              default:\n                // invalid status\n                reject(app.task);\n                break;\n            }\n          })\n          .catch((error) => {\n            if (error.status === 404) {\n              // First error\n              if (app.timedOut === undefined) {\n                app.timedOut = false;\n\n                // Stop trying after 2 minutes\n                setTimeout(() => {\n                  app.timedOut = true;\n                }, 120000);\n\n                // Try again\n                setTimeout(poll, time, time);\n              } else if (app.timedOut === false) {\n                setTimeout(poll, time, time);\n              } else {\n                reject({ results: { error_message: \"Our servers encountered an error. Please try again later.\" } });\n              }\n            } else {\n              reject({ results: { error_message: null } });\n            }\n          });\n      }\n\n      poll(1000);\n    });\n  }\n}\n\nexport const taskService = new TaskService();\n","import * as config from \"react-global-configuration\";\nimport { fetcher } from \"../../helpers/Fetcher\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { ActionsUnion, createAction } from \"../Utils\";\nimport { RootState, RootActions } from \"..\";\nimport { fromJSON, IMakePaymentData } from \"app2/src/records/PaymentRecord\";\nimport { PaySimpleAccountInfo, PaySimpleToken } from \"app2/src/components/Payments/PaySimple/PaySimple.service\";\nimport * as paymentActions from \"../payment.actions\";\nimport { RootDispatchType } from \"../../store\";\nimport { authorizationRecord } from \"app2/src/selectors/paySimple.selectors\";\n\nexport const FETCH_CHECKOUT_TOKEN = \"@integrations/paysimple/FETCH_CHECKOUT_TOKEN\";\nexport const RECEIVE_CHECKOUT_TOKEN = \"@integrations/paysimple/RECEIVE_CHECKOUT_TOKEN\";\nexport const RECEIVE_CHECKOUT_TOKEN_ERROR = \"@integrations/paysimple/RECEIVE_CHECKOUT_TOKEN_ERROR\";\nexport const RECEIVE_GENERAL_ERROR = \"@integrations/paysimple/RECEIVE_GENERAL_ERROR\";\nexport const FETCH_AUTHORIZATION = \"@integrations/paysimple/FETCH_AUTHORIZATION\";\nexport const SET_AUTHORIZATION = \"@integrations/paysimple/SET_AUTHORIZATION\";\nexport const UPDATE_FORM = \"@integrations/paysimple/UPDATE_FORM\";\nexport const RESET = \"@integrations/paysimple/RESET\";\n\nexport interface PaySimpleCheckoutToken {\n  JwtToken?: string;\n  Expiration?: string;\n  error?: string;\n}\n\nexport const Actions = {\n  fetchCheckoutToken: () => createAction(FETCH_CHECKOUT_TOKEN),\n  receiveCheckoutToken: (token: PaySimpleCheckoutToken) => createAction(RECEIVE_CHECKOUT_TOKEN, token),\n  receiveCheckoutTokenError: (error: string) => createAction(RECEIVE_CHECKOUT_TOKEN_ERROR, error),\n  receiveGeneralError: (error: string) => createAction(RECEIVE_GENERAL_ERROR, error),\n  fetchAuthorization: (orgId: number) => createAction(FETCH_AUTHORIZATION, orgId),\n  setAuthorization: (orgId: number, authorization: PaySimpleToken) =>\n    createAction(SET_AUTHORIZATION, { orgId: orgId, authorization: authorization }),\n  update: (event: any) => createAction(UPDATE_FORM, { event }),\n  reset: (id: number) => createAction(RESET, { id }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, RootActions>;\n\nexport const AsyncActions = {\n  getCheckoutToken: (orgId: number): ThunkResult<Promise<PaySimpleCheckoutToken>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchCheckoutToken());\n\n      return fetcher\n        .post<PaySimpleCheckoutToken>(\n          fetcher.joinUrls(config.get(\"RSF_ANALYTICS_URL\"), `payments/v1/paysimple/${orgId}/auth`),\n        )\n        .then(\n          (token: PaySimpleCheckoutToken) => {\n            dispatch(Actions.receiveCheckoutToken(token));\n            return token;\n          },\n          (error: any) => {\n            dispatch(Actions.receiveCheckoutTokenError(error.data.error));\n            return error;\n          },\n        );\n    };\n  },\n  makePayment: (orgId, accountInfo: PaySimpleAccountInfo, payment: IMakePaymentData): ThunkResult<Promise<any>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(paymentActions.Actions.makePayment());\n      return fetcher\n        .post<any>(fetcher.joinUrls(config.get(\"RSF_ANALYTICS_URL\"), `payments/v1/paysimple/${orgId}/payment`), {\n          ...accountInfo,\n          payment,\n        })\n        .then(\n          (data) => {\n            const record = fromJSON(data.payment);\n            dispatch(paymentActions.Actions.receivePayment(record));\n          },\n          (error: any) => {\n            dispatch(Actions.receiveGeneralError(error));\n            return error;\n          },\n        );\n    };\n  },\n  getAuthorization: (orgId: number): ThunkResult<Promise<PaySimpleToken>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchAuthorization(orgId));\n\n      return fetcher\n        .get<PaySimpleToken>(\n          fetcher.joinUrls(config.get(\"RSF_ANALYTICS_URL\"), `payments/v1/paysimple/${orgId}/authorization`),\n        )\n        .then((result) => {\n          dispatch(Actions.setAuthorization(orgId, result));\n          return result;\n        });\n    };\n  },\n  authorize: (orgId: number): ThunkResult<Promise<PaySimpleToken>> => {\n    return (dispatch: RootDispatchType, getState: () => RootState) => {\n      const auth = authorizationRecord(getState(), orgId);\n      dispatch(Actions.fetchAuthorization(orgId));\n\n      return fetcher\n        .post<PaySimpleToken>(\n          fetcher.joinUrls(config.get(\"RSF_ANALYTICS_URL\"), `payments/v1/paysimple/${orgId}/authorization`),\n          auth.toJS(),\n        )\n        .then((result) => {\n          dispatch(Actions.setAuthorization(orgId, result));\n          return result;\n        });\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { List, Record } from \"immutable\";\nimport { DropResult } from \"react-beautiful-dnd\";\n\n// Takes a List of records and returns an ID < 0 & sort_order before a Save\nexport const nextNewId = (\n  recordList: List<{ id: number; sort_order: number }>,\n): { newSortOrder: number; newId: number } => {\n  const newId =\n    _.chain(recordList.toArray())\n      .select((r) => r.id < 0)\n      .map((r) => r.id)\n      .push(0)\n      .min()\n      .value() - 1;\n  let newSortOrder = 0;\n  if (recordList.count() > 0) {\n    newSortOrder =\n      _.chain(recordList.toArray())\n        .map((r) => r.sort_order)\n        .push(0)\n        .max()\n        .value() + 1;\n  }\n  return { newSortOrder: newSortOrder, newId: newId };\n};\n\n// react-beautiful-dnd backwards compatibility support\nexport const sortDragEnd = (\n  recordList: List<any>,\n  result: DropResult,\n  attrPath: string[] = [\"sort_order\"],\n): { list: List<any>; dirtyIds: List<any> } => {\n  return onSortEnd(recordList, result.source.index, result.destination.index, attrPath);\n};\n\n// Takes a List of records and DropResult and returns new List with sort_order set and dirty ids\n// Breaks out indices to support other libraries besides react-beautiful-dnd\nexport const onSortEnd = (\n  recordList: List<any>,\n  oldIndex: number,\n  newIndex: number,\n  attrPath: string[] = [\"sort_order\"],\n): { list: List<any>; dirtyIds: List<any> } => {\n  const moving = recordList.get(oldIndex);\n  let dirtyIds = List();\n\n  const min = _.min([oldIndex, newIndex]);\n  const max = _.max([oldIndex, newIndex]);\n\n  const setByAttrPath = attrPath.length > 0;\n  let sorted;\n  if (setByAttrPath) {\n    sorted = recordList.map((l) => l.getIn(attrPath)).sortBy((l) => l);\n  }\n\n  recordList = recordList\n    .delete(oldIndex)\n    .insert(newIndex, moving)\n    .map((record, idx) => {\n      if (idx >= min && idx <= max) {\n        dirtyIds = dirtyIds.push(record.id).toSet().toList();\n        if (setByAttrPath) {\n          return record.setIn(attrPath, sorted.get(idx));\n        }\n      }\n\n      return record;\n    });\n\n  return { list: recordList, dirtyIds: dirtyIds };\n};\n\nexport const recordChanged = (\n  current: Record<any> | List<Record<any>>,\n  lastSaved: Record<any> | List<Record<any>>,\n): boolean => {\n  if (!lastSaved) {\n    return true;\n  }\n  if (current.equals(lastSaved)) {\n    return false;\n  } else {\n    return true;\n  }\n};\n\n/**\n * Replaces values in a string with values from a record\n * Expected syntax: {{objectName.key}}\n * @param string The string to replace values in\n * @param record The record to get values from\n * @param objectName The name of the object in the string\n * @returns The string with values replaced\n */\nexport const replaceRecordValues = (string: string, record: Record<any>, objectName: string): string => {\n  const regex = new RegExp(`{{${objectName}\\.(.*?)}}`, \"g\");\n  return string.replace(regex, (match, key) => record.get(key.trim()));\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IPriceListData } from \"app2/src/records/PriceList\";\n\nexport const RECEIVE_PRICE_LIST = \"@priceLists/RECEIVE_PRICE_LIST\";\n\nexport const Actions = {\n  receivePriceList: (priceList: IPriceListData) => createAction(RECEIVE_PRICE_LIST, { priceList }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.data.xml.min\",[\"kendo.core.min\"],e)}(function(){return function(e,t){var n=window.kendo,r=e.isArray,i=e.isPlainObject,o=e.map,a=e.each,f=e.extend,d=n.getter,l=n.Class,u=l.extend({init:function(t){var d,l,u,s,c=this,p=t.total,m=t.model,h=t.parse,x=t.errors,g=t.serialize,y=t.data;m&&(i(m)&&(d=t.modelBase||n.data.Model,m.fields&&a(m.fields,function(t,n){i(n)&&n.field?e.isFunction(n.field)||(n=f(n,{field:c.getter(n.field)})):n={field:c.getter(n)},m.fields[t]=n}),l=m.id,l&&(u={},u[c.xpathToMember(l,!0)]={field:c.getter(l)},m.fields=f(u,m.fields),m.id=c.xpathToMember(l)),m=d.define(m)),c.model=m),p&&(\"string\"==typeof p?(p=c.getter(p),c.total=function(e){return parseInt(p(e),10)}):\"function\"==typeof p&&(c.total=p)),x&&(\"string\"==typeof x?(x=c.getter(x),c.errors=function(e){return x(e)||null}):\"function\"==typeof x&&(c.errors=x)),y&&(\"string\"==typeof y?(y=c.xpathToMember(y),c.data=function(e){var t,n=c.evaluate(e,y);return n=r(n)?n:[n],c.model&&m.fields?(t=new c.model,o(n,function(e){if(e){var n,r={};for(n in m.fields)r[n]=t._parse(n,m.fields[n].field(e));return r}})):n}):\"function\"==typeof y&&(c.data=y)),\"function\"==typeof h&&(s=c.parse,c.parse=function(e){var t=h.call(c,e);return s.call(c,t)}),\"function\"==typeof g&&(c.serialize=g)},total:function(e){return this.data(e).length},errors:function(e){return e?e.errors:null},serialize:function(e){return e},parseDOM:function(e){var n,i,o,a,f,d,l,u={},s=e.attributes,c=s.length;for(l=0;c>l;l++)d=s[l],u[\"@\"+d.nodeName]=d.nodeValue;for(i=e.firstChild;i;i=i.nextSibling)o=i.nodeType,3===o||4===o?u[\"#text\"]=i.nodeValue:1===o&&(n=this.parseDOM(i),a=i.nodeName,f=u[a],r(f)?f.push(n):f=f!==t?[f,n]:n,u[a]=f);return u},evaluate:function(e,t){for(var n,i,o,a,f,d=t.split(\".\");n=d.shift();)if(e=e[n],r(e)){for(i=[],t=d.join(\".\"),f=0,o=e.length;o>f;f++)a=this.evaluate(e[f],t),a=r(a)?a:[a],i.push.apply(i,a);return i}return e},parse:function(t){var n,r,i={};return n=t.documentElement||e.parseXML(t).documentElement,r=this.parseDOM(n),i[n.nodeName]=r,i},xpathToMember:function(e,t){return e?(e=e.replace(/^\\//,\"\").replace(/\\//g,\".\"),e.indexOf(\"@\")>=0?e.replace(/\\.?(@.*)/,t?\"$1\":'[\"$1\"]'):e.indexOf(\"text()\")>=0?e.replace(/(\\.?text\\(\\))/,t?\"#text\":'[\"#text\"]'):e):\"\"},getter:function(e){return d(this.xpathToMember(e),!0)}});e.extend(!0,n.data,{XmlDataReader:u,readers:{xml:u}})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.data.xml.min.js.map\n","import { Nullable } from \"app2/src/records\";\nimport { Record } from \"immutable\";\n\nexport interface IMetaCountlessPaginationData {\n  current_page: number;\n  next_page: Nullable<number>;\n  prev_page: Nullable<number>;\n  first_page: boolean;\n  last_page: boolean;\n}\n\nexport interface IMetaPaginationData {\n  current_page: number;\n  total_pages: number;\n  total_count: number;\n}\n\nexport interface IMetaPaginationRecord {\n  current_page: number;\n  total_pages: number;\n  total_count: number;\n}\n\nconst defaultMetaPaginationProps: IMetaPaginationRecord = {\n  current_page: null,\n  total_pages: null,\n  total_count: null,\n};\n\nexport class MetaPaginationRecord extends Record(defaultMetaPaginationProps) implements IMetaPaginationRecord {\n  public readonly current_page!: number;\n  public readonly total_pages: number;\n  public readonly total_count: number;\n\n  public constructor(values?: Partial<MetaPaginationRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { fromJS, Record, List, Map } from \"immutable\";\nimport { MetaPaginationRecord, IMetaPaginationData } from \"app2/src/records/MetaPagination\";\nimport { Nullable } from \"app2/src/records\";\n\nexport const fromJSON = (json: Partial<IPageData>): PageRecord => {\n  const record: IPageRecord = { ...(json as any) };\n\n  if (record.pagination) {\n    record.pagination = new MetaPaginationRecord(record.pagination);\n  }\n\n  return new PageRecord(record);\n};\n\nexport interface IPageData {\n  ids: List<number | string>;\n  pagination: IMetaPaginationData;\n  loading?: boolean;\n  errors?: string[];\n}\n\nexport interface IPageRecord {\n  ids: List<number>;\n  pagination: MetaPaginationRecord;\n  loading: boolean;\n  errors: string[];\n}\n\nconst defaultPageProps: IPageRecord = {\n  ids: List(),\n  pagination: new MetaPaginationRecord(),\n  loading: false,\n  errors: null,\n};\n\nexport class PageRecord extends Record(defaultPageProps) implements IPageRecord {\n  public readonly ids!: List<number>;\n  public readonly pagination: MetaPaginationRecord;\n  public readonly loading: boolean;\n  public readonly errors: string[];\n\n  public constructor(values?: Partial<IPageRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n\nexport interface IQueryParamsData {\n  page: number;\n  per_page: number;\n  filter: string;\n  query: string;\n  folder_id?: Nullable<number>;\n  parameters: { [key: string]: string | string[] | Date | number };\n}\n\nexport const queryParamsFromJSON = (data: Partial<IQueryParamsData>): QueryParamsRecord => {\n  const record: IQueryParamsRecord = { ...(data as any) };\n  if (data.parameters) {\n    record.parameters = fromJS(data.parameters);\n  }\n\n  return new QueryParamsRecord(record);\n};\n\nexport interface IQueryParamsRecord {\n  page: number;\n  per_page: number;\n  filter: string;\n  query: string;\n  folder_id?: Nullable<number>;\n  parameters: Map<string, string | List<string> | Date>;\n}\n\nconst defaultQueryParams: IQueryParamsRecord = {\n  page: 1,\n  per_page: 25,\n  filter: \"\",\n  query: \"\",\n  folder_id: null,\n  parameters: Map({}),\n};\n\nexport class QueryParamsRecord extends Record(defaultQueryParams) implements IQueryParamsRecord {}\n\nexport const emptyQueryParamsRecord = queryParamsFromJSON({} as any);\n","import { ActionsUnion, createAction } from \"../Utils\";\n\nexport const OPEN_QUICKMEASURE_MODAL = \"@components/integrations_view/OPEN_QUICKMEASURE_MODAL\";\nexport const CLOSE_QUICKMEASURE_MODAL = \"@components/integrations_view/CLOSE_QUICKMEASURE_MODAL\";\nexport const OPEN_ROOF_SCOPE_MODAL = \"@components/integrations_view/OPEN_ROOF_SCOPE_MODAL\";\nexport const CLOSE_ROOF_SCOPE_MODAL = \"@components/integrations_view/CLOSE_ROOF_SCOPE_MODAL\";\nexport const OPEN_PLNAR_MODAL = \"@components/integrations_view/OPEN_PLNAR_MODAL\";\nexport const CLOSE_PLNAR_MODAL = \"@components/integrations_view/CLOSE_PLNAR_MODAL\";\n\nexport const Actions = {\n  openQuickMeasureModal: () => createAction(OPEN_QUICKMEASURE_MODAL),\n  closeQuickMeasureModal: () => createAction(CLOSE_QUICKMEASURE_MODAL),\n  openRoofScopeModal: () => createAction(OPEN_ROOF_SCOPE_MODAL),\n  closeRoofScopeModal: () => createAction(CLOSE_ROOF_SCOPE_MODAL),\n  openPlnarModal: () => createAction(OPEN_PLNAR_MODAL),\n  closePlnarModal: () => createAction(CLOSE_PLNAR_MODAL),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IProductOptionData } from \"app2/src/records/ProductOption\";\n\nexport const RECEIVE_PRODUCT_OPTION = \"@productOptions/RECEIVE_PRODUCT_OPTION\";\n\nexport const Actions = {\n  receiveProductOption: (productOption: IProductOptionData) => createAction(RECEIVE_PRODUCT_OPTION, { productOption }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import * as openingEstimationActions from \"./openingEstimation.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { OpeningEstimationRecord, fromJSON } from \"../records/OpeningEstimation\";\nimport { RootActions, RootState } from \".\";\n\nexport const OpeningEstimationStateRecord = Record({\n  byId: Map<number, OpeningEstimationRecord>(),\n  lastSavedById: Map<number, OpeningEstimationRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = OpeningEstimationStateRecord();\n\nexport type OpeningEstimationState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(\"openingEstimations\")) {\n    state = state.set(\"openingEstimations\", initialState);\n  }\n\n  let openingEstimation: OpeningEstimationRecord;\n  switch (action.type) {\n    case openingEstimationActions.RECEIVE_OPENING_ESTIMATION:\n      openingEstimation = fromJSON({ ...action.payload.openingEstimation });\n\n      return state\n        .setIn([\"openingEstimations\", \"byId\", openingEstimation.id], openingEstimation)\n        .setIn([\"openingEstimations\", \"lastSavedById\", openingEstimation.id], openingEstimation);\n\n    case openingEstimationActions.DUPLICATE_OPENING_ESTIMATIONS:\n      const lineItem = state.getIn([\"estimateLineItems\", \"byId\", action.payload.lineItemId]);\n\n      let openingEstimationIds = List();\n      let unsavedId = state.getIn([\"openingEstimations\", \"unsavedId\"]);\n      action.payload.openingEstimationIds.map((oeId: number) => {\n        let openingEstimation = state.getIn([\"openingEstimations\", \"byId\", oeId]);\n        openingEstimation = openingEstimation.set(\"id\", unsavedId).set(\"estimate_line_item_id\", lineItem.id);\n        openingEstimationIds = openingEstimationIds.push(unsavedId);\n        state = state.setIn([\"openingEstimations\", \"byId\", openingEstimation.id], openingEstimation);\n        unsavedId -= 1;\n      });\n\n      return state\n        .setIn([\"estimateLineItems\", \"byId\", lineItem.id, \"opening_estimation_ids\"], openingEstimationIds)\n        .setIn([\"openingEstimations\", \"unsavedId\"], unsavedId);\n\n    default:\n      return state;\n  }\n};\n","var map = {\n\t\"./access.actions.ts\": [\n\t\t79882\n\t],\n\t\"./activatedPriceList.actions.ts\": [\n\t\t41193\n\t],\n\t\"./analytics.actions.ts\": [\n\t\t10114\n\t],\n\t\"./appMessage.actions.ts\": [\n\t\t74292\n\t],\n\t\"./auth.actions.ts\": [\n\t\t12340\n\t],\n\t\"./components/common.actions.ts\": [\n\t\t49618\n\t],\n\t\"./components/estimator.actions.ts\": [\n\t\t42871\n\t],\n\t\"./components/integrationsView.actions.ts\": [\n\t\t65825\n\t],\n\t\"./crmUser.actions.ts\": [\n\t\t28111\n\t],\n\t\"./customForm.actions.ts\": [\n\t\t12577\n\t],\n\t\"./deck.actions.ts\": [\n\t\t2527\n\t],\n\t\"./discount.actions.ts\": [\n\t\t18411\n\t],\n\t\"./document.actions.ts\": [\n\t\t37595\n\t],\n\t\"./door.actions.ts\": [\n\t\t61566\n\t],\n\t\"./elevation.actions.ts\": [\n\t\t75393\n\t],\n\t\"./email.actions.ts\": [\n\t\t55126\n\t],\n\t\"./estimate.actions.ts\": [\n\t\t31856\n\t],\n\t\"./estimateComparison.actions.ts\": [\n\t\t87934\n\t],\n\t\"./estimateFinanceOption.actions.ts\": [\n\t\t73539\n\t],\n\t\"./estimateGroup.actions.ts\": [\n\t\t45147\n\t],\n\t\"./estimateLineItem.actions.ts\": [\n\t\t50293\n\t],\n\t\"./estimateLineItemOption.actions.ts\": [\n\t\t45152\n\t],\n\t\"./estimateTemplate.actions.ts\": [\n\t\t28414\n\t],\n\t\"./event.actions.ts\": [\n\t\t25544\n\t],\n\t\"./eventResult.actions.ts\": [\n\t\t16556\n\t],\n\t\"./eventResultReason.actions.ts\": [\n\t\t81298\n\t],\n\t\"./financeApplication.actions.ts\": [\n\t\t52200\n\t],\n\t\"./folder.actions.ts\": [\n\t\t90881\n\t],\n\t\"./image.actions.ts\": [\n\t\t11979\n\t],\n\t\"./integrationAuth.actions.ts\": [\n\t\t4567,\n\t\t567\n\t],\n\t\"./integrations/cardconnect.actions.ts\": [\n\t\t22208\n\t],\n\t\"./integrations/eagleview.actions.ts\": [\n\t\t5066\n\t],\n\t\"./integrations/hover.actions.ts\": [\n\t\t7268\n\t],\n\t\"./integrations/paysimple.actions.ts\": [\n\t\t63890\n\t],\n\t\"./integrations/quickMeasure.actions.ts\": [\n\t\t21959\n\t],\n\t\"./integrations/roofscope.actions.ts\": [\n\t\t37556\n\t],\n\t\"./job.actions.ts\": [\n\t\t61573\n\t],\n\t\"./jobAttribute.actions.ts\": [\n\t\t46542\n\t],\n\t\"./leads.actions.ts\": [\n\t\t22729\n\t],\n\t\"./measurement.actions.ts\": [\n\t\t53696\n\t],\n\t\"./measurements/fence.actions.ts\": [\n\t\t82822\n\t],\n\t\"./measurements/fencing.actions.ts\": [\n\t\t69639\n\t],\n\t\"./measurements/segment.actions.ts\": [\n\t\t53393\n\t],\n\t\"./note.actions.ts\": [\n\t\t18488\n\t],\n\t\"./oneLook.actions.ts\": [\n\t\t91281\n\t],\n\t\"./oneLook.async.actions.ts\": [\n\t\t83459\n\t],\n\t\"./openingEstimation.actions.ts\": [\n\t\t73525\n\t],\n\t\"./org.actions.ts\": [\n\t\t73818\n\t],\n\t\"./org/financeOption.actions.ts\": [\n\t\t38408\n\t],\n\t\"./org/paymentTermTemplate.actions.ts\": [\n\t\t85949\n\t],\n\t\"./org/tool.actions.ts\": [\n\t\t55198\n\t],\n\t\"./pagination.actions.ts\": [\n\t\t5122\n\t],\n\t\"./payment.actions.ts\": [\n\t\t71372\n\t],\n\t\"./paymentRequest.actions.ts\": [\n\t\t86300\n\t],\n\t\"./pool.actions.ts\": [\n\t\t57588\n\t],\n\t\"./presentation.actions.ts\": [\n\t\t19107\n\t],\n\t\"./presentationTemplate.actions.ts\": [\n\t\t17239\n\t],\n\t\"./priceList.actions.ts\": [\n\t\t65023\n\t],\n\t\"./pricePresentation.actions.ts\": [\n\t\t41503\n\t],\n\t\"./product.actions.ts\": [\n\t\t42553\n\t],\n\t\"./productOption.actions.ts\": [\n\t\t66151\n\t],\n\t\"./productOptionGroup.actions.ts\": [\n\t\t68255\n\t],\n\t\"./report.actions.ts\": [\n\t\t68952\n\t],\n\t\"./roofFace.actions.ts\": [\n\t\t14793\n\t],\n\t\"./room.actions.ts\": [\n\t\t6409\n\t],\n\t\"./router.actions.ts\": [\n\t\t47527\n\t],\n\t\"./rsfForm.actions.ts\": [\n\t\t8907\n\t],\n\t\"./screenShare.actions.ts\": [\n\t\t40109\n\t],\n\t\"./signedDocument.actions.ts\": [\n\t\t85761\n\t],\n\t\"./sku.actions.ts\": [\n\t\t89625\n\t],\n\t\"./task.actions.ts\": [\n\t\t71611\n\t],\n\t\"./token.actions.ts\": [\n\t\t58499\n\t],\n\t\"./user.actions.ts\": [\n\t\t21845\n\t],\n\t\"./validation.actions.ts\": [\n\t\t82237\n\t],\n\t\"./wallFacade.actions.ts\": [\n\t\t44376\n\t],\n\t\"./webhook.actions.ts\": [\n\t\t33119\n\t],\n\t\"./window.actions.ts\": [\n\t\t99006\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 67502;\nmodule.exports = webpackAsyncContext;","import { Deferred } from \"../services/deferred\";\nimport { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IFileData>): FileRecord => {\n  const data: any = {\n    url: json.url,\n  };\n\n  if (json.thumb) {\n    data.thumb = new UrlRecord({ url: json.thumb.url });\n  }\n\n  if (json.small) {\n    data.small = new UrlRecord({ url: json.small.url });\n  }\n\n  if (json.medium) {\n    data.medium = new UrlRecord({ url: json.medium.url });\n  }\n\n  if (json.large) {\n    data.large = new UrlRecord({ url: json.large.url });\n  }\n\n  if (json.filename) {\n    data.filename = json.filename;\n  }\n\n  return new FileRecord(data);\n};\n\nexport const toJSON = (record: FileRecord): IFileData => {\n  return record.toJS();\n};\n\nexport const getBase64 = (file: any) => {\n  const deferred = Deferred.defer();\n  const reader = new FileReader();\n  reader.readAsDataURL(file);\n  reader.onload = function () {\n    return deferred.resolve(reader.result);\n  };\n  reader.onerror = function (error) {\n    return deferred.reject(error);\n  };\n  return deferred.promise;\n};\n\nexport interface IFileData {\n  url: string;\n  thumb?: { url: string };\n  small?: { url: string };\n  medium?: { url: string };\n  large?: { url: string };\n  filename?: string;\n}\n\nexport interface IUrlRecord {\n  url: Nullable<string>;\n}\n\nexport interface IFileRecord {\n  url: Nullable<string>;\n  thumb: Nullable<IUrlRecord>;\n  small: Nullable<IUrlRecord>;\n  medium: Nullable<IUrlRecord>;\n  large: Nullable<IUrlRecord>;\n  filename?: string;\n}\n\nexport const defaultFileProps = {\n  url: \"\",\n  thumb: null,\n  small: null,\n  medium: null,\n  large: null,\n  filename: undefined,\n};\n\nexport class FileRecord extends Record<IFileRecord>(defaultFileProps) implements IFileRecord {\n  public readonly url!: string;\n  public readonly thumb!: IUrlRecord;\n  public readonly small!: IUrlRecord;\n  public readonly medium!: IUrlRecord;\n  public readonly large!: IUrlRecord;\n\n  public constructor(values?: Partial<IFileRecord>) {\n    values ? super(values) : super();\n  }\n}\n\nexport const defaultUrlProps = {\n  url: \"\",\n};\n\nexport class UrlRecord extends Record<IUrlRecord>(defaultUrlProps) implements IUrlRecord {\n  public readonly url!: string;\n\n  public constructor(values?: Partial<IUrlRecord>) {\n    values ? super(values) : super();\n  }\n}\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { Map, List } from \"immutable\";\nimport { fromJSON as overviewFromJSON, EstimateOverviewRecord } from \"../records/EstimateOverview\";\nimport { EstimateRecord, IBaseTotals, IDiscountTotals, ITaxTotals, IEstimateData } from \"../records/Estimate\";\nimport { memoizedCalculatePaymentTerms } from \"../records/PaymentTerm\";\nimport { EstimateGroupRecord } from \"../records/EstimateGroup\";\nimport { EstimateLineItemRecord, isDiscountable } from \"../records/EstimateLineItem\";\nimport {\n  EstimateLineItemOptionRecord,\n  calculateLaborPrice,\n  calculateProductPrice,\n} from \"../records/EstimateLineItemOption\";\nimport { EstimateDiscountRecord } from \"../records/EstimateDiscount\";\nimport { toEstimateGroupsJson, estimateGroupsById, estimateGroups } from \"./estimateGroup.selectors\";\nimport { estimateLineItems } from \"./estimateLineItem.selectors\";\nimport { estimateLineItemOptions } from \"./estimateLineItemOption.selectors\";\nimport {\n  estimateFinanceOptions,\n  toEstimateFinanceOptionsJson,\n} from \"app2/src/selectors/estimateFinanceOption.selectors\";\nimport { model } from \"app2/src/reducers/estimate.reducer\";\nimport { EstimateSignedDocumentRecord } from \"../records/EstimateSignedDocument\";\nimport { documents } from \"./document.selectors\";\nimport { DocumentRecord } from \"../records/Document\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport const estimate = (state: RootState, props: any) => state.getIn([model, \"byId\", props.estimateId]);\nexport const lastSavedEstimate = (state: RootState, props: any) =>\n  state.getIn([model, \"lastSavedById\", props.estimateId]);\nexport const estimateFinancedAmount = (state: RootState, props: any): number =>\n  state.getIn([model, \"byId\", props.estimateId, \"payment_terms\", \"financed_amount\"]);\nexport const landingEstimate = (state: RootState, props: any) => state.getIn([model, \"byKey\", props.key]);\nexport const estimatesById = (state: RootState) => state.getIn([model, \"byId\"]);\nexport const lastSavedById = (state: RootState) => state.getIn([model, \"lastSavedById\"]);\nexport const estimateUnsavedId = (state: RootState) => state.getIn([model, \"unsavedId\"]);\nexport const jobOverviewEstimates = (state: RootState, props: any): List<EstimateOverviewRecord> =>\n  state.getIn([model, \"estimateOverviewsByJob\", props.jobId]);\nexport const financeOptionsById = (state: RootState) => state.getIn([\"orgs\", \"financeOptions\", \"byId\"]);\n\nexport const estimateFinanceOptionIds = createSelector(\n  [estimate, (state, props) => ({ state, props })],\n  (estimate, stateProps) => {\n    const { state } = stateProps;\n    const efos = estimateFinanceOptions(state, { estimateFinanceOptionIds: estimate.finance_option_ids });\n    return efos.map((efo) => efo.finance_option_id);\n  },\n);\n\nexport const toEstimateOverview = createSelector(\n  [estimate, estimateGroupsById],\n  (estimate: EstimateRecord, estimateGroupsById: Map<number, EstimateGroupRecord>): EstimateOverviewRecord => {\n    return overviewFromJSON({\n      id: estimate.id,\n      line_items_count: countLineItems(estimate.group_ids, estimateGroupsById),\n      name: estimate.name,\n      updated_at: estimate.updated_at,\n      total: estimate.total,\n    });\n  },\n);\n\n/**\n * Gets the line items in the estimate\n * Pass in the `includeAll` prop to get line items in all groups, not just the included ones.\n * @param {RootState} state The RootState\n * @param {{ estimateId: number, includeAll?: boolean }} props The props\n */\nexport const lineItemsEstimate = createSelector(\n  [estimate, (state, props) => ({ state, props })],\n  (estimate: EstimateRecord, stateProps: any) => {\n    const { state, props } = stateProps;\n\n    const groups = props.includeAll\n      ? List([\n          ...estimateGroups(state, { estimateGroupIds: estimate.group_ids, included: true }),\n          ...estimateGroups(state, { estimateGroupIds: estimate.group_ids, included: false }),\n        ])\n      : estimateGroups(state, { estimateGroupIds: estimate.group_ids });\n\n    const estimateLineItemIds = groups\n      .map((group: EstimateGroupRecord) => {\n        return group.line_item_ids;\n      })\n      .flatten();\n    return estimateLineItems(state, { ...props, estimateLineItemIds });\n  },\n);\n\nexport const lineItemTotals = createSelector(\n  [lineItemsEstimate, (state, props) => ({ state, props })],\n  (lineItemsEstimate: List<EstimateLineItemRecord>, stateProps: any): IBaseTotals => {\n    return calculateLineItemSum(stateProps, lineItemsEstimate);\n  },\n);\n\nexport const updateBaseTotal = createSelector(\n  [estimate, lineItemTotals],\n  (estimate: EstimateRecord, lineItemTotals: IBaseTotals): EstimateRecord => {\n    return estimate.merge(lineItemTotals);\n  },\n);\n\nexport const updateDiscountTotal = createSelector([estimate], (estimate: EstimateRecord): EstimateRecord => {\n  const totals: IDiscountTotals = { discount: 0, running_discountable: estimate.discountable_total };\n  totals.discount = estimate.discounts.reduce((memo: number, discount: EstimateDiscountRecord) => {\n    totals.running_discountable = roundToDecimals(totals.running_discountable - discount.calculated, -2);\n    return roundToDecimals(memo + discount.calculated, -2);\n  }, 0);\n  return estimate.merge(totals);\n});\n\nexport const updateTaxTotal = createSelector([estimate], (estimate: EstimateRecord): EstimateRecord => {\n  const totals: ITaxTotals = { taxable_amount: 0, tax_total: 0, total: 0 };\n  switch (estimate.default_taxable_amount) {\n    case \"product\":\n      totals.taxable_amount = estimate.product_total - estimate.discount;\n      break;\n    case \"labor\":\n      totals.taxable_amount = estimate.labor_total;\n      break;\n    case \"product_labor\":\n      totals.taxable_amount = estimate.product_total - estimate.discount + estimate.labor_total;\n      break;\n  }\n\n  totals.taxable_amount = _.max([totals.taxable_amount, 0]);\n  if (totals.taxable_amount && estimate.tax_rate) {\n    totals.tax_total = roundToDecimals(totals.taxable_amount * (estimate.tax_rate / 100.0), -2);\n  } else {\n    totals.tax_total = 0.0;\n  }\n\n  totals.total = roundToDecimals(\n    estimate.product_total - estimate.discount + estimate.labor_total + totals.tax_total,\n    -2,\n  );\n  return estimate.merge(totals);\n});\n\nexport const updatePaymentTermTotal = createSelector([estimate], (estimate: EstimateRecord): EstimateRecord => {\n  return estimate.set(\"payment_terms\", memoizedCalculatePaymentTerms(estimate.payment_terms, estimate.total));\n});\n\nexport const toEstimateJson = createSelector(\n  [estimate, (state, props) => ({ state, props })],\n  (estimate: EstimateRecord, stateProps): IEstimateData => {\n    const { state, props } = stateProps;\n    const estimateData = estimate.toJS() as any;\n\n    estimateData.groups = toEstimateGroupsJson(state, { ...props, estimateGroupIds: estimate.group_ids });\n    estimateData.finance_options = toEstimateFinanceOptionsJson(state, {\n      ...props,\n      estimateFinanceOptionIds: estimate.finance_option_ids,\n    });\n    delete estimateData.group_ids;\n    delete estimateData.finance_option_ids;\n    delete estimateData.discountable_total;\n    delete estimateData.labor_total;\n    delete estimateData.product_total;\n    delete estimateData.running_discountable;\n    delete estimateData.loading;\n    delete estimateData.line_items_count;\n    if (!estimateData._destroy) {\n      delete estimateData._destroy;\n    }\n\n    return estimateData as IEstimateData;\n  },\n);\n\nexport const countLineItems = (\n  group_ids: List<number>,\n  estimateGroupsById: Map<number, EstimateGroupRecord>,\n): number => {\n  return group_ids.reduce((value, gid) => {\n    const group = estimateGroupsById.get(gid);\n    return value + group.line_item_ids.count();\n  }, 0);\n};\n\nexport const calculateLineItemSum = (stateProps, lineItems) => {\n  const { state, props } = stateProps;\n  return lineItems.reduce(\n    (sum: IBaseTotals, item: EstimateLineItemRecord) => {\n      sum.subtotal = roundToDecimals(sum.subtotal + item.ext_price, -2);\n      sum.labor_total = sum.labor_total + roundToDecimals(item.quantity * item.labor_price, -2);\n      sum.product_total = sum.product_total + roundToDecimals(item.quantity * item.product_price, -2);\n      if (isDiscountable(item)) {\n        sum.discountable_total = roundToDecimals(sum.discountable_total + item.ext_price, -2);\n      }\n      sum = estimateLineItemOptions(state, { ...props, estimateLineItemOptionIds: item.option_ids }).reduce(\n        (sum: IBaseTotals, option: EstimateLineItemOptionRecord) => {\n          if (option._destroy || option.pog_type === \"cost\") {\n            return;\n          }\n          sum.subtotal = sum.subtotal + option.ext_price;\n          sum.labor_total = sum.labor_total + calculateLaborPrice(option, item);\n          sum.product_total = sum.product_total + calculateProductPrice(option, item);\n          if (isDiscountable(item)) {\n            sum.discountable_total = sum.discountable_total + option.ext_price;\n          }\n\n          return sum;\n        },\n        sum,\n      );\n\n      return sum;\n    },\n    { subtotal: 0, labor_total: 0, product_total: 0, discountable_total: 0 },\n  );\n};\n\n/**\n * Calculates the sum of the cost of all line items in the included groups.\n *\n * @param {RootState} state The RootState\n * @param {number} estimateId\n * @returns {number} cost\n */\nexport const calculateEstimateCost = (state: RootState, estimateId: number) => {\n  const estimateRecord: EstimateRecord = estimate(state, { estimateId });\n  if (!estimateRecord) return 0;\n\n  const lineItems: List<EstimateLineItemRecord> = lineItemsEstimate(state, { estimateId });\n  if (lineItems.isEmpty()) return 0;\n\n  let sum = 0;\n  lineItems.forEach((lineItem) => {\n    sum += lineItem.get(\"cost\") * lineItem.get(\"quantity\");\n    const options = estimateLineItemOptions(state, { estimateLineItemOptionIds: lineItem.get(\"option_ids\") });\n    options.forEach((option) => {\n      if (option.get(\"charge_type\") === \"per_quantity\") {\n        sum += option.get(\"quantity\") * lineItem.get(\"quantity\") * option.get(\"cost\");\n      } else {\n        sum += option.get(\"quantity\") * option.get(\"cost\");\n      }\n    });\n  });\n\n  return sum;\n};\n\nexport const isEstimateLoading = (state: RootState, estimateId: number): boolean => {\n  return state.getIn([\"estimates\", \"byId\", estimateId, \"loading\"]);\n};\n\n/**\n * Returns a single job overview estimate\n *\n * @param {RootState} state The RootState\n * @param {number} estimateId\n * @returns {EstimateRecord} EstimateRecord\n */\nexport const estimateOverview = createSelector(\n  [jobOverviewEstimates, (state, props) => ({ state, props })],\n  (estimates: List<EstimateOverviewRecord>, { props }) => estimates?.find((e) => e.id === props.estimateId),\n);\n\n/**\n * Returns a list of EstimateSignedDocumentRecords for the given job id\n *\n * @param {RootState} state The RootState\n * @param {{jobId: number}} options\n * @returns {List<EstimateSignedDocumentRecord>} List\n */\nexport const jobEstimateSignedDocuments = (\n  state: RootState,\n  props: { jobId: number },\n): List<EstimateSignedDocumentRecord> => state.getIn([\"estimates\", \"estimateDocumentsByJobId\", props.jobId]);\n\n/**\n * Returns the ids of the signed documents for the given estimate id\n *\n * @param {RootState} state The RootState\n * @param {{jobId: number, estimateId: number }} options\n * @returns {List<EstimateSignedDocumentRecord>} List\n */\nexport const estimateSignedDocuments: (\n  state: RootState,\n  props: { jobId: number; estimateId: number },\n) => List<DocumentRecord> = createSelector(\n  [jobEstimateSignedDocuments, (state, props: { jobId: number; estimateId: number }) => ({ state, props })],\n  (list: List<EstimateSignedDocumentRecord>, { state, props }) => {\n    const documentIds = list?.find((e) => e.estimateId === props.estimateId)?.signedDocumentIds;\n    if (!documentIds) return List();\n    return documents(state, { documentIds });\n  },\n);\n\nexport const slideEstimate = (state: RootState, props: { slideIndex: number }) => {\n  const estimateIds = state.getIn([\"pricePresentation\", \"slideEstimateIds\"]);\n  return estimate(state, { estimateId: estimateIds.get(props.slideIndex) });\n};\n\n/**\n * Retrieves the metadata value for a specific estimate by its ID and metadata name.\n *\n * @param state - The root state object containing estimates data.\n * @param {{ estimateId: number; metadataName: string }} props - An object containing:\n * @returns {Map<string, any> | undefined} The metadata Map\n */\nexport const estimateMetadata = (state: RootState, props: { estimateId: number; metadataName: string }) => {\n  return state.getIn([\"estimates\", \"byId\", props.estimateId, \"metadata\", props.metadataName]);\n};\n","import { Map, Record, List, fromJS } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IPreferenceData>): PreferenceRecord => {\n  const record: IPreferenceRecord = { ...(json as any) };\n\n  record.acl = fromJS(json.acl);\n  record.config = fromJS(json.config);\n\n  return new PreferenceRecord(record);\n};\n\nexport const toJSON = (preference: PreferenceRecord): IPreferenceData => {\n  const json: IPreferenceData = preference.toJS();\n\n  if (json.id === 0) {\n    delete json.id;\n  }\n\n  if (json.org_id === 0) {\n    delete json.org_id;\n  }\n\n  return json;\n};\n\nexport type PreferenceAclKeys = \"reports\" | \"reports_columns\" | \"estimator\" | \"tools\";\nexport type PreferenceAclValues = \"eagleview\";\nexport type PreferenceConfigKeys =\n  | \"report_emails\"\n  | \"job_menu\"\n  | \"signatures\"\n  | \"cronofy\"\n  | \"layout\"\n  | \"screen_share\"\n  | \"billing\"\n  | \"cover_page\"\n  | \"document_signed_notification\"\n  | \"titles\"\n  | \"integrations\"\n  | \"document_order\"\n  | \"photos\"\n  | \"estimator\"\n  | \"send_email\"\n  | \"measurement\"\n  | \"sales_tax\"\n  | \"marketsharp\"\n  | \"price_presentation\"\n  | \"markup\"\n  | \"timezone\"\n  | \"signed_documents\";\n\nexport interface IPreferenceData {\n  id: number;\n  org_id: number;\n  acl: { [key in PreferenceAclKeys]?: PreferenceAclValues[] };\n  config: { [key in PreferenceConfigKeys]?: any };\n  created_at: string;\n  updated_at: string;\n}\n\nexport interface IPreferenceRecord {\n  id: number;\n  org_id: number;\n  acl: Map<PreferenceAclKeys, List<string>>;\n  config: Map<PreferenceConfigKeys, any>;\n  created_at: string;\n  updated_at: string;\n}\n\nconst defaultPreferenceProps: IPreferenceRecord = {\n  id: 0,\n  org_id: 0,\n  acl: Map<PreferenceAclKeys, List<string>>(),\n  config: Map<PreferenceConfigKeys, any>(),\n  created_at: \"\",\n  updated_at: \"\",\n};\n\nexport class PreferenceRecord extends Record(defaultPreferenceProps) implements IPreferenceRecord {\n  public readonly id!: number;\n  public readonly org_id!: number;\n  public readonly acl!: Map<PreferenceAclKeys, List<string>>;\n  public readonly config!: Map<PreferenceConfigKeys, any>;\n  public readonly created_at!: string;\n  public readonly updated_at!: string;\n\n  public constructor(values?: Partial<IPreferenceRecord>) {\n    values ? super(values) : super();\n  }\n}\n","import { Map, Record, List, fromJS } from \"immutable\";\n\nexport const fromJSON = (json: Partial<ISettingsData>): SettingsRecord => {\n  const record: ISettingsRecord = { ...(json as any) };\n\n  record.acl = fromJS(json.acl);\n  record.config = fromJS(JSON.parse(JSON.stringify(json.config || {})));\n\n  return new SettingsRecord(record);\n};\n\nexport const toJSON = (setting: SettingsRecord): ISettingsData => {\n  const json: ISettingsData = setting.toJS();\n\n  if (json.id === 0) {\n    delete json.id;\n  }\n\n  if (json.org_id === 0) {\n    delete json.org_id;\n  }\n\n  return json;\n};\n\nexport type SettingsAclKeys = \"tools\" | \"design_tools\" | \"visualizations\" | \"profile\" | \"reports\" | \"measurements\";\n\nexport type SettingsAclValues =\n  | \"renoworks_masking\"\n  | \"eagleview_order\"\n  | \"google_maps\"\n  | \"bing_ortho\"\n  | \"bing_birdseye\"\n  | \"zoom_earth\"\n  | \"terra_server\"\n  | \"pictometry_online\"\n  | \"pictometry_connect\"\n  | \"provia\"\n  | \"renoworks\"\n  | \"hover\"\n  | \"cronofy\"\n  | \"annotator\"\n  | \"rapid_area\"\n  | \"satellite_measure\"\n  | \"deck_wizard\"\n  | \"fencing_tool\"\n  | \"pool_tool\";\n\nexport type SettingsConfigKeys =\n  | \"billing\"\n  | \"email\"\n  | \"integrations\"\n  | \"job_menu\"\n  | \"screen_share\"\n  | \"signature_settings\"\n  | \"visualization\"\n  | \"commission_calculator\";\n\nexport interface ISettingsData {\n  id: number;\n  org_id: number;\n  acl: { [key in SettingsAclKeys]?: SettingsAclValues[] };\n  config: { [key in SettingsConfigKeys]?: any };\n  created_at: string;\n  updated_at: string;\n}\n\nexport interface ISettingsRecord {\n  id: number;\n  org_id: number;\n  acl: Map<SettingsAclKeys, List<SettingsAclValues>>;\n  config: Map<SettingsConfigKeys, any>;\n  created_at: string;\n  updated_at: string;\n}\n\nconst defaultSettingsProps: ISettingsRecord = {\n  id: 0,\n  org_id: 0,\n  acl: Map<SettingsAclKeys, List<SettingsAclValues>>(),\n  config: Map<SettingsConfigKeys, any>(),\n  created_at: \"\",\n  updated_at: \"\",\n};\n\nexport class SettingsRecord extends Record(defaultSettingsProps) implements ISettingsRecord {\n  public readonly id!: number;\n  public readonly org_id!: number;\n  public readonly acl!: Map<SettingsAclKeys, List<SettingsAclValues>>;\n  public readonly config!: Map<SettingsConfigKeys, any>;\n  public readonly created_at!: string;\n  public readonly updated_at!: string;\n\n  public constructor(values?: Partial<ISettingsRecord>) {\n    values ? super(values) : super();\n  }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Nullable } from \"app2/src/records\";\nimport { Record } from \"immutable\";\n\nexport const orgMetadataFromJSON = (json: IOrgMetadata) => {\n  const recordData: IOrgMetadataRecord = { ...(json as any) };\n\n  return new OrgMetadataRecord(recordData);\n};\n\nexport interface IOrgMetadata {\n  email_address?: string;\n  legal_name?: string;\n  phone_number_2?: string;\n  phone_number_3?: string;\n  license_number?: string;\n  gaf_id?: string;\n}\n\nexport interface IOrgMetadataRecord {\n  email_address?: Nullable<string>;\n  legal_name?: Nullable<string>;\n  phone_number_2?: Nullable<string>;\n  phone_number_3?: Nullable<string>;\n  license_number?: Nullable<string>;\n  gaf_id?: Nullable<string>;\n}\n\nexport const defaultOrgMetadataProps = {\n  email_address: null,\n  legal_name: null,\n  phone_number_2: null,\n  phone_number_3: null,\n  license_number: null,\n  gaf_id: null,\n} as IOrgMetadataRecord;\n\nexport class OrgMetadataRecord extends Record(defaultOrgMetadataProps) {}\n","import { Record, List, getIn } from \"immutable\";\nimport { fromJSON as imageFromJSON, ImageRecord } from \"./Image\";\nimport { Nullable } from \".\";\nimport {\n  fromJSON as addressFromJSON,\n  toJSON as addressToJSON,\n  AddressRecord,\n  IAddressData,\n} from \"app2/src/records/Address\";\nimport {\n  fromJSON as preferencesFromJSON,\n  toJSON as preferencesToJSON,\n  PreferenceRecord,\n  IPreferenceData,\n} from \"app2/src/records/Preference\";\nimport {\n  fromJSON as settingsFromJSON,\n  toJSON as settingsToJSON,\n  SettingsRecord,\n  ISettingsData,\n} from \"app2/src/records/Settings\";\nimport { CommonTitles } from \"app2/src/helpers/Format\";\nimport { baseCleanProps } from \"app2/src/api/Api\";\nimport { IOrgMetadata, orgMetadataFromJSON, OrgMetadataRecord } from \"app2/src/records/OrgMetadata\";\n\nexport const fromJSON = (json: Partial<IOrgData>): OrgRecord => {\n  const record: IOrgRecord = { ...(json as any) };\n\n  if (json.preferences) {\n    record.preferences = preferencesFromJSON(json.preferences);\n  }\n\n  if (json.settings) {\n    record.settings = settingsFromJSON(json.settings);\n  }\n\n  if (json.lead_sources) {\n    record.lead_sources = List<string>(json.lead_sources);\n  } else {\n    record.lead_sources = List<string>();\n  }\n\n  if (json.events) {\n    record.events = List(json.events);\n  }\n\n  if (json.address) {\n    record.address = addressFromJSON(json.address);\n  }\n\n  if (json.activated_price_list) {\n    record.activated_price_list = json.activated_price_list;\n  }\n\n  if (json.activated_inspection_list) {\n    record.activated_inspection_list = json.activated_inspection_list;\n  }\n\n  if (json.emails) {\n    record.emails = json.emails;\n  }\n\n  if (json.contract_languages) {\n    record.contract_languages = json.contract_languages;\n  }\n\n  if (json.errors) {\n    record.errors = List(json.errors);\n  }\n\n  if (json.metadata) {\n    record.metadata = orgMetadataFromJSON(json.metadata);\n  }\n\n  // For some reason json.images was not truthy when it had an array\n  // no 'checks' worked, only fullproof was try/catch\n  try {\n    //@ts-ignore\n    record.images = List<ImageRecord>(\n      json.images.map((i) => {\n        return imageFromJSON(i);\n      }),\n    );\n  } catch (e) {\n    record.images = List<ImageRecord>();\n  }\n\n  return new OrgRecord(record);\n};\n\nexport const toJSON = (org: OrgRecord): IOrgPostData => {\n  const json: IOrgPostData = baseCleanProps(org.toJSON() as any as IOrgPostData);\n\n  json.address_attributes = addressToJSON(org.address);\n  //@ts-ignore\n  delete json.address;\n\n  json.preferences_attributes = preferencesToJSON(org.preferences);\n  //@ts-ignore\n  delete json.preferences;\n\n  json.settings_attributes = settingsToJSON(org.settings);\n  //@ts-ignore\n  delete json.settings;\n\n  json.contract_languages_attributes = org.contract_languages;\n\n  //@ts-ignore\n  delete json.contract_languages;\n\n  //@ts-ignore\n  delete json.images;\n  //@ts-ignore\n  delete json.activated_price_list;\n  //@ts-ignore\n  delete json.emails;\n\n  return json;\n};\n\nexport const getEstimateName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"estimate\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"estimate\"]) || CommonTitles(\"estimate\");\n};\n\nexport const getEstimatorName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"estimator\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"estimator\"]) || CommonTitles(\"estimator\");\n};\nexport const getContractName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"contract\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"contract\"]) || CommonTitles(\"contract\");\n};\n\nexport const getInspectionName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"inspection\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"inspection\"]) || CommonTitles(\"inspection\");\n};\n\nexport const getFinanceName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"finance\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"finance\"]) || CommonTitles(\"finance\");\n};\n\nexport const getFinanceOptionsName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"finance_options\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"finance_options\"]) || CommonTitles(\"finance_options\");\n};\n\nexport const getPricePresentationName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"price_presentation\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"price_presentation\"]) || CommonTitles(\"price_presentation\");\n};\n\nexport const getSubtotalName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"subtotal\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"subtotal\"]) || CommonTitles(\"subtotal\");\n};\n\nexport const getTotalName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"total\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"total\"]) || CommonTitles(\"total\");\n};\n\nexport const getDescriptionName = (org: OrgRecord): string => {\n  if (!org) {\n    return CommonTitles(\"description\");\n  }\n  return org.getIn([\"preferences\", \"config\", \"titles\", \"description\"]) || CommonTitles(\"description\");\n};\n\nexport const getPrefConfig = (org: OrgRecord, pref: string[]): any => {\n  return org.getIn([\"preferences\", \"config\"].concat(pref));\n};\n\nexport const getSettingsAcl = (org: OrgRecord, setting: string): any => {\n  return org.getIn([\"settings\", \"acl\", setting]);\n};\n\nexport const includeCheck = (org: OrgRecord, include: string[]): any => {\n  return _.difference(include, org.get(\"include\")).length === 0;\n};\n\nexport const defaultUserAcl = (org: OrgRecord) => {\n  return getIn(org, [\"settings\", \"config\", \"user_acl\", \"default\"], \"salesrep\");\n};\n\nexport const orgNameAddress = (org: OrgRecord): string => {\n  const address = org.address;\n  let cityState = \"\";\n  if (address.city && address.state) {\n    cityState = ` (${address.city}, ${address.state})`;\n  } else if (address.city) {\n    cityState = ` (${address.city})`;\n  } else if (address.state) {\n    cityState = ` (${address.state})`;\n  }\n  return `${org.name}${cityState}`;\n};\n\nexport type MeasurementLocation = \"job_tab\" | \"line_item_editor\";\nexport type MeasurementSection =\n  | \"roofing\"\n  | \"siding\"\n  | \"windows\"\n  | \"doors\"\n  | \"roof_faces\"\n  | \"walls\"\n  | \"fencing\"\n  | \"sunroom\"\n  | \"rooms\"\n  | \"decks\"\n  | \"pools\";\n\nexport enum JobAttributeTypes {\n  job_type = \"job_type\",\n  level = \"level\",\n  location = \"location\",\n}\n\nexport const orgJobAttributeLinkKey = (attribute: JobAttributeTypes) => {\n  return attribute === \"job_type\" ? \"org_job_object_link\" : `org_${attribute}_link`;\n};\n\nexport const orgJobAttributeLinkIdName = (attr: JobAttributeTypes): string => {\n  switch (attr) {\n    case JobAttributeTypes.job_type:\n      return \"object_id\";\n    case JobAttributeTypes.level:\n      return \"level_id\";\n    case JobAttributeTypes.location:\n      return \"location_id\";\n  }\n};\n\nexport interface IOrgPostData {\n  id: number;\n  parent_id: number;\n  name: string;\n  ancestral_name: string;\n  phone_number: string;\n  website: string;\n  status: string;\n  metadata: any;\n  \"prevent_login?\": boolean;\n  base36_id: string;\n  job_count: number;\n  org_count: number;\n  user_count: number;\n  url: string;\n  settings_attributes?: ISettingsData;\n  preferences_attributes?: IPreferenceData;\n  address_attributes?: IAddressData;\n  contract_languages_attributes?: any;\n}\n\nexport interface IOrgData {\n  id: number;\n  uuid: string;\n  parent_id: number;\n  name: string;\n  ancestral_name: string;\n  phone_number: string;\n  website: string;\n  created_at: string;\n  updated_at: string;\n  status: string;\n  metadata: Nullable<IOrgMetadata>;\n  \"prevent_login?\": boolean;\n  base36_id: string;\n  job_count: number;\n  org_count: number;\n  user_count: number;\n  presentation_count: number;\n  url: string;\n  settings?: ISettingsData;\n  preferences?: IPreferenceData;\n  address?: IAddressData;\n  images?: any[];\n  events?: any[];\n  lead_sources?: Array<string>;\n  activated_price_list?: any;\n  activated_inspection_list?: any;\n  contract_languages?: any[];\n  emails?: any[];\n  loading?: boolean;\n  include?: string[];\n  errors?: string[];\n}\n\nexport interface IOrgRecord {\n  id: number;\n  uuid: string;\n  parent_id: number;\n  name: string;\n  ancestral_name: string;\n  phone_number: string;\n  website: string;\n  created_at: string;\n  updated_at: string;\n  status: string;\n  metadata: OrgMetadataRecord;\n  \"prevent_login?\": boolean;\n  base36_id: string;\n  job_count: number;\n  org_count: number;\n  user_count: number;\n  presentation_count: number;\n  url: string;\n  settings: SettingsRecord;\n  preferences: PreferenceRecord;\n  address: AddressRecord;\n  images: List<any>;\n  events: List<any>;\n  lead_sources: List<string>;\n  activated_price_list: any;\n  activated_inspection_list: any;\n  contract_languages: any[];\n  emails: any[];\n  loading: boolean;\n  include: string[];\n  errors: Nullable<List<string>>;\n}\n\nexport const defaultOrgProps = {\n  id: 0,\n  uuid: \"\",\n  parent_id: 0,\n  name: \"\",\n  ancestral_name: \"\",\n  phone_number: \"\",\n  website: \"\",\n  created_at: \"\",\n  updated_at: \"\",\n  status: \"created\",\n  metadata: orgMetadataFromJSON({}),\n  \"prevent_login?\": false,\n  base36_id: \"\",\n  job_count: 0,\n  org_count: 0,\n  user_count: 0,\n  presentation_count: 0,\n  url: \"\",\n  settings: settingsFromJSON({}),\n  preferences: preferencesFromJSON({}),\n  address: addressFromJSON({}),\n  loading: false,\n  images: List(),\n  events: List(),\n  lead_sources: List(),\n  activated_price_list: {},\n  activated_inspection_list: {},\n  contract_languages: [],\n  emails: [],\n  include: [],\n  errors: List<string>(),\n};\n\nexport class OrgRecord extends Record(defaultOrgProps) implements IOrgRecord {}\n\nexport const emptyOrgValue = fromJSON({});\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IProductOptionGroupData } from \"app2/src/records/ProductOptionGroup\";\n\nexport const RECEIVE_PRODUCT_OPTION_GROUP = \"@productOptionGroups/RECEIVE_PRODUCT_OPTION_GROUP\";\n\nexport const Actions = {\n  receiveProductOptionGroup: (productOptionGroup: IProductOptionGroupData) =>\n    createAction(RECEIVE_PRODUCT_OPTION_GROUP, { productOptionGroup }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IReportData, ReportRecord, toJSON } from \"../records/Report\";\nimport { baseCleanProps, listParams } from \"app2/src/api/Api\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { IMetaPaginationData } from \"app2/src/records/MetaPagination\";\n\ninterface IReportIndexResponse {\n  reports: IReportData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\ninterface IReportResponse {\n  report: IReportData;\n}\n\nexport interface IPlnarPricingResponse {\n  pricing: { type: string; display: string; amount: number }[];\n}\n\nconst urls = {\n  org: \"api/v1/orgs/:id/reports\",\n  job: \"api/v1/jobs/:id/reports\",\n  default: \"api/v1/reports\",\n};\n\nexport const list = (queryParams: QueryParamsRecord): Promise<IReportIndexResponse> => {\n  const reportableId = queryParams.getIn([\"parameters\", \"reportable_id\"]);\n  const reportableType = queryParams.getIn([\"parameters\", \"reportable_type\"])?.toLowerCase() || \"default\";\n  const actionUrl = urls[reportableType].replace(\":id\", reportableId?.toString());\n\n  const params = listParams(queryParams);\n  const parameters = { ...params, ...queryParams.parameters.toJS() };\n\n  if (!queryParams.getIn([\"parameters\", \"sort_order\"])) parameters[\"sort_order\"] = \"desc\";\n  if (!queryParams.getIn([\"parameters\", \"sort_by\"])) parameters[\"sort_by\"] = \"created_at\";\n  delete parameters.reportable_id;\n  delete parameters.reportable_type;\n\n  return fetcher.get<IReportIndexResponse>(actionUrl, parameters);\n};\n\nexport const create = (id: number, report: ReportRecord, kind: \"org\" | \"job\" = \"org\"): Promise<IReportData> => {\n  const actionUrl = urls[kind].replace(\":id\", id.toString());\n\n  const data: Partial<IReportData> = cleanProps(toJSON(report));\n\n  return fetcher.post<IReportResponse>(actionUrl, { report: data }).then(\n    (response) => response.report,\n    (response) => Promise.reject(response.data.errors),\n  );\n};\n\nexport const getPricing = <T>(params: any): Promise<T> => {\n  const actionUrl = fetcher.joinUrls(urls.default, \"pricing\");\n  return fetcher.get(actionUrl, params);\n};\n\nexport const cleanProps = (report: Partial<IReportData>): Partial<IReportData> => {\n  report = baseCleanProps(JSON.parse(JSON.stringify(report)));\n\n  return report;\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { List } from \"immutable\";\nimport { ReportRecord, IReportData } from \"app2/src/records/Report\";\nimport * as reportService from \"app2/src/api/report.service\";\nimport { list } from \"app2/src/api/report.service\";\nimport { getPricing, IPlnarPricingResponse } from \"app2/src/api/report.service\";\nimport { RootDispatchType } from \"../store\";\nimport * as taskActions from \"app2/src/reducers/task.actions\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { Actions as PaginationActions } from \"app2/src/reducers/pagination.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { IPageData, QueryParamsRecord } from \"app2/src/records/Page\";\nimport { ITaskContext, ITaskData } from \"app2/src/records/Task\";\n\n// SINGLE\nexport const FETCH_REPORT = \"@reports/FETCH_REPORT\";\nexport const RECEIVE_REPORT = \"@reports/RECEIVE_REPORT\";\nexport const SET_REPORT_LOADED = \"@reports/SET_REPORT_LOADED\";\n// MULTIPLE\nexport const RECEIVE_REPORTS = \"@reports/RECEIVE_REPORTS\";\n// PRICING\nexport const FETCH_PRICING_REPORT = \"@reports/FETCH_PRICING_REPORT\";\nexport const SET_PRICING_REPORT_LOADED = \"@reports/SET_PRICING_REPORT_LOADED\";\nexport const RECEIVE_PRICING_REPORT = \"@reports/RECEIVE_PRICING_REPORT\";\n\nexport const Actions = {\n  // SINGLE\n  fetchReport: (reportId: number) => createAction(FETCH_REPORT, { reportId }),\n  receiveReport: (report: IReportData) => createAction(RECEIVE_REPORT, { report }),\n  setReportLoaded: (reportId: number) => createAction(SET_REPORT_LOADED, { reportId }),\n  // MULTIPLE\n  receiveReports: (reports: IReportData[]) => createAction(RECEIVE_REPORTS, { reports }),\n  // PRICING\n  fetchPricingReport: (provider: string, kind: string) => createAction(FETCH_PRICING_REPORT, { provider, kind }),\n  setPricingReportLoaded: (provider: string, kind: string) =>\n    createAction(SET_PRICING_REPORT_LOADED, { provider, kind }),\n  receivePricingReport: (provider: string, kind: string, report: any) =>\n    createAction(RECEIVE_PRICING_REPORT, { provider, kind, report }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  addJobReport: (jobId: number, report: ReportRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const result: IReportData = await reportService.create(jobId, report, \"job\");\n        if (result.task) {\n          const task = result.task;\n          const contextObj: ITaskContext = {\n            model: \"report\",\n            action: \"taskHandler\",\n            action_payload: { report_id: result.id, job_id: jobId },\n            error_action: \"errorTaskHandler\",\n          };\n          task.context = contextObj;\n          dispatch(taskActions.Actions.receiveTask(task));\n        }\n        dispatch(Actions.receiveReport(result));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Report request submitted successfully.\"));\n      } catch (errors) {\n        handleErrors(errors, dispatch);\n        throw errors;\n      }\n    };\n  },\n  listReports: (queryParams: QueryParamsRecord): ThunkResult<any> => {\n    return async (dispatch: RootDispatchType) => {\n      const modelName = \"reports\";\n      dispatch(PaginationActions.fetchPage(modelName, queryParams));\n\n      try {\n        const response = await list(queryParams);\n\n        dispatch(Actions.receiveReports(response.reports));\n        const pageData: Partial<IPageData> = {\n          ids: List(response.reports.map((report: IReportData) => report.id)),\n          pagination: response.meta.pagination,\n        };\n        dispatch(PaginationActions.receivePage(modelName, queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response, dispatch);\n        dispatch(PaginationActions.receivePageError(modelName, queryParams, errors));\n      }\n    };\n  },\n  getPlnarPricing: (): ThunkResult<any> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const provider = \"plnar\";\n      const kind = \"interior\";\n      try {\n        dispatch(Actions.fetchPricingReport(provider, kind));\n\n        const { pricing } = await getPricing<IPlnarPricingResponse>({\n          provider,\n          kind,\n          org_id: currentOrgId(getState()),\n        });\n        dispatch(Actions.receivePricingReport(provider, kind, pricing));\n      } catch (response) {\n        dispatch(Actions.setPricingReportLoaded(provider, kind));\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  taskHandler: (task: ITaskData, payload: any = {}): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      let name = task?.results?.class_name;\n      if (!name) {\n        name = \"Task Completion\";\n      }\n      dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, `${name} Successful.`));\n    };\n  },\n  errorTaskHandler: (task: ITaskData, payload: any = {}): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      const errorMessage =\n        task?.results?.error_message ||\n        \"There were problems processing your task. Please try again. If the problem persists contact support.\";\n      dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errorMessage));\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { RootState } from \"app2/src/reducers\";\nimport { UserRecord } from \"app2/src/records/UserRecord\";\nimport { model } from \"app2/src/reducers/user.reducer\";\n\n/**\n * Loads the current logged in user\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {UserRecord} UserRecord\n */\nexport const currentUser = (state: RootState): UserRecord => state.getIn([model, \"currentUser\"]);\n\n/**\n * Loads the user from byID\n *\n * @param {RootState} state The RootState\n * @param {{userId: number}} options\n * @returns {UserRecord} UserRecord\n */\nexport const user = (state: RootState, props: any): UserRecord => state.getIn([model, \"usersById\", props.userId]);\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { IFencingData, FencingRecord, toFormData, IFencingRecord } from \"app2/src/records/measurements/Fencing\";\n\nexport interface IFencingResponse {\n  fencing: IFencingData;\n}\n\nexport const measurementUrl = \"api/v1/measurements/:id/fencings\";\nexport const byMeasurementUrl = \"api/v1/measurements/:id/fencing\";\nexport const url = \"api/v1/measurements/fencings/:id\";\n\nexport const loadByMeasurementId = async (measurementId: number): Promise<IFencingResponse> => {\n  const actionUrl = byMeasurementUrl.replace(\":id\", measurementId.toString());\n\n  const data = await fetcher.get<IFencingResponse>(actionUrl);\n\n  return data;\n};\n\nexport const loadById = async (id: number): Promise<IFencingResponse> => {\n  const actionUrl = url.replace(\":id\", id.toString());\n\n  const data = await fetcher.get<IFencingResponse>(actionUrl);\n\n  return data;\n};\n\nexport const create = async (measurementId: number, fencing: FencingRecord): Promise<IFencingResponse> => {\n  const actionUrl = measurementUrl.replace(\":id\", measurementId.toString());\n  const fencingFormData = { fencing: transformPostData(toFormData(fencing)) };\n\n  const data = await fetcher.post<IFencingResponse>(actionUrl, fencingFormData);\n\n  return data;\n};\n\nexport const update = async (fencing: FencingRecord): Promise<IFencingResponse> => {\n  const actionUrl = url.replace(\":id\", fencing.id.toString());\n  const fencingFormData = { fencing: transformPostData(toFormData(fencing)) };\n\n  const response = await fetcher.patch<IFencingResponse>(actionUrl, fencingFormData);\n\n  return response;\n};\n\nconst transformPostData = (data: IFencingData): any => {\n  const { fences, ...rest } = data;\n  const transformed: any = { ...rest };\n\n  transformed.fences_attributes = [];\n\n  if (transformed.id <= 0) {\n    delete transformed.id;\n  }\n\n  fences.forEach((f) => {\n    (f as any).segments_attributes = f.segments.map((s) => {\n      if (s.id <= 0) {\n        delete s.id;\n      }\n\n      if (s._destroy === false) {\n        delete s._destroy;\n      }\n\n      return s;\n    });\n\n    delete f.segments;\n\n    if (f.id <= 0) {\n      delete f.id;\n    }\n\n    if (f._destroy === false) {\n      delete f._destroy;\n    }\n\n    transformed.fences_attributes.push(f);\n  });\n\n  return transformed;\n};\n","import { ActionsUnion, createAction } from \"app2/src/reducers/Utils\";\nimport { FencingRecord, IFencingData } from \"app2/src/records/measurements/Fencing\";\nimport { RootState, ThunkResult } from \"app2/src/reducers\";\nimport * as fencingService from \"app2/src/api/measurements/fencing.service\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { measurementIdFullFencing } from \"app2/src/selectors/measurements/fencing.selectors\";\n\nexport const FETCH_FENCING_BY_MEASUREMENT_ID = \"@measurements_fencings/FETCH_FENCING_BY_MEASUREMENT_ID\";\nexport const CREATE_FENCING_BY_MEASUREMENT_ID = \"@measurements_fencings/CREATE_FENCING_BY_MEASUREMENT_ID\";\nexport const RECEIVE_FENCING = \"@measurements_fencings/RECEIVE_FENCING\";\nexport const RECEIVE_FENCING_ERRORS = \"@measurements_fencings/RECEIVE_FENCING_ERRORS\";\nexport const SET_FENCING = \"@measurements_fencings/SET_FENCING\";\nexport const DELETE_FENCING = \"@measurements_fencings/DELETE_FENCING\";\nexport const UPDATE_TOTALS = \"@measurements_fencing/UPDATE_TOTALS\";\nexport const RESET_FENCING = \"@measurements_fencing/RESET_FENCING\";\n\nexport const Actions = {\n  updateTotals: (fencingId: number) => createAction(UPDATE_TOTALS, { fencingId }),\n  setFencing: (fencing: FencingRecord) => createAction(SET_FENCING, { fencing }),\n  resetFencing: (fencingId: number) => createAction(RESET_FENCING, { fencingId }),\n  deleteFencing: (fencingId: number, cascade = true) => createAction(DELETE_FENCING, { fencingId, cascade }),\n  fetchFencingByMeasurementId: (measurementId: number) =>\n    createAction(FETCH_FENCING_BY_MEASUREMENT_ID, { measurementId }),\n  receiveFencing: (fencing: Partial<IFencingData>) => createAction(RECEIVE_FENCING, { fencing }),\n  receiveFencingErrors: (measurementId: number, errors: string[]) =>\n    createAction(RECEIVE_FENCING_ERRORS, { measurementId, errors }),\n  createFencingForMeasurementId: (measurementId: number) =>\n    createAction(CREATE_FENCING_BY_MEASUREMENT_ID, { measurementId }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nexport const AsyncActions = {\n  fetchByMeasurementId: (measurementId: number, createOnNotFound = true): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchFencingByMeasurementId(measurementId));\n\n      try {\n        const response = await fencingService.loadByMeasurementId(measurementId);\n\n        dispatch(Actions.receiveFencing(response.fencing));\n      } catch (error) {\n        if (error.status === 404 && createOnNotFound) {\n          dispatch(Actions.createFencingForMeasurementId(measurementId));\n          return;\n        }\n        dispatch(Actions.receiveFencingErrors(measurementId, handleErrors(error)));\n      }\n    };\n  },\n  save: (measurementId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const fencing = measurementIdFullFencing(getState(), { measurementId: measurementId });\n\n      dispatch(Actions.fetchFencingByMeasurementId(fencing.measurementId));\n\n      try {\n        let response: fencingService.IFencingResponse;\n        if (fencing.id <= 0) {\n          response = await fencingService.create(fencing.measurementId, fencing);\n          dispatch(Actions.deleteFencing(fencing.id, true));\n        } else {\n          response = await fencingService.update(fencing);\n        }\n\n        dispatch(Actions.receiveFencing(response.fencing));\n      } catch (error) {\n        dispatch(Actions.receiveFencingErrors(fencing.measurementId, handleErrors(error)));\n      }\n    };\n  },\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { WindowRecord } from \"app2/src/records/Window\";\nimport { recordChanged } from \"app2/src/helpers/Record\";\nimport { currentLastSavedMeasurement, currentMeasurement } from \"app2/src/selectors/measurementCommon.selectors\";\n\nexport const rootKey = \"windows\";\n\nexport const window = (state: RootState, props: any) => state.getIn([rootKey, \"byId\", props.windowId.toString()]);\nexport const lastSavedWindow = (state: RootState, props: any) =>\n  state.getIn([rootKey, \"lastSavedById\", props.windowId.toString()]);\n\nexport const windows = createSelector([(state, props) => ({ state, props })], (stateProps: any): List<WindowRecord> => {\n  const { state, props } = stateProps;\n  const { windowIds } = props;\n  return windowIds.map((id: number) => window(state, { windowId: id }));\n});\n\nexport const lastSavedWindows = createSelector(\n  [(state, props) => ({ state, props })],\n  (stateProps: any): List<WindowRecord> => {\n    const { state, props } = stateProps;\n    const { windowIds } = props;\n    return windowIds.map((id: number) => lastSavedWindow(state, { windowId: id }));\n  },\n);\n\n/**\n * Looks to the currentJob in redux to get the measurement_id then loads that measurement from the store\n *\n * @params {RootState} state RootState\n * @params {{}} options NONE\n * @returns {MeasurementRecord} measurement\n */\nexport const windowsChanged = (state: RootState, props: any): boolean => {\n  const measurement = currentMeasurement(state, props);\n  const lastSavedMeasurement = currentLastSavedMeasurement(state, props);\n  return recordChanged(\n    windows(state, { windowIds: measurement?.get(\"window_ids\") || List() }),\n    lastSavedWindows(state, { windowIds: lastSavedMeasurement?.get(\"window_ids\") || List() }),\n  );\n};\n","import { Collection, List, mergeWith, isImmutable } from \"immutable\";\n\nexport const mergeDeepOverwriteArrays = <C extends Collection<any, any>>(a: C, b: C): C => {\n  if (a && isImmutable(a) && !List.isList(a) && !List.isList(b)) {\n    return mergeWith(mergeDeepOverwriteArrays, a, b);\n  }\n\n  return b;\n};\n\nexport const removeDuplicates = (list: List<any>): List<any> => {\n  return list.filter((item, index, list) => list.indexOf(item) === index);\n};\n\n/**\n * Merges two lists, returning only the items found in both lists.\n */\nexport const intersectLists = (a: List<any>, b: List<any>): List<any> => {\n  return a.filter((i) => b.includes(i));\n};\n","import { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport {\n  fromJSON,\n  IPaymentAuthorizationData,\n  PaymentAuthorizationRecord,\n} from \"app2/src/records/PaymentAuthorizationRecord\";\nimport { fetcher } from \"app2/src/helpers/Fetcher\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as config from \"react-global-configuration\";\nimport { ThunkResult } from \".\";\nimport { IPaymentData, PaymentRecord } from \"../records/PaymentRecord\";\nimport { ActionsUnion, createAction } from \"./Utils\";\nimport { RootDispatchType } from \"../store\";\n\nexport const RECEIVE_PAGE = \"@payments/RECEIVE_PAGE\";\nexport const RESET_PAGES = \"@payments/RESET_PAGES\";\nexport const FETCH_PAGE = \"@payments/FETCH_PAGE\";\nexport const POST_JOB = \"@payments/POST_JOB\";\nexport const FETCH_AUTHORIZED = \"@payments/FETCH_AUTHORIZED\";\nexport const RECEIVE_AUTHORIZED = \"@payments/RECEIVE_AUTHORIZED\";\nexport const SET_PAYMENT_ERROR = \"@payments/SET_PAYMENT_ERROR\";\nexport const CLEAR_LAST_PAYMENT = \"@payments/CLEAR_LAST_PAYMENT\";\nexport const SET_PROVIDER_LOADING = \"@payments/SET_PROVIDER_LOADING\";\nexport const SET_PROVIDER_VALID = \"@payments/SET_PROVIDER_VALID\";\nexport const SET_PROVIDER_SUBMITTING = \"@payments/SET_PROVIDER_SUBMITTING\";\nexport const MAKE_PAYMENT = \"@payments/MAKE_PAYMENT\";\nexport const RECEIVE_PAYMENT = \"@payments/RECEIVE_PAYMENT\";\nexport const SET_SENDING_RECEIPT = \"@payments/SET_SENDING_RECEIPT\";\n\nexport interface IPagination {\n  pagination: {\n    total_count: number;\n    total_pages: number;\n    current_page: number;\n  };\n}\n\nexport interface IPaymentPageData {\n  page: number;\n  payments: IPaymentData[];\n  meta: IPagination;\n}\n\nexport interface IPaymentQueryParams {\n  page: number;\n  job_id: number;\n}\n\nexport const Actions = {\n  receivePage: (page: IPaymentPageData) => createAction(RECEIVE_PAGE, page),\n  fetchPage: (params: IPaymentQueryParams) => createAction(FETCH_PAGE, params),\n  resetPages: () => createAction(RESET_PAGES),\n  createJob: (payment_id: number) => createAction(POST_JOB, payment_id),\n  makePayment: () => createAction(MAKE_PAYMENT),\n  receivePayment: (payment: PaymentRecord) => createAction(RECEIVE_PAYMENT, payment),\n  clearLastPayment: () => createAction(CLEAR_LAST_PAYMENT),\n  fetchAuthorized: (orgId: number) => createAction(FETCH_AUTHORIZED, { orgId }),\n  receiveAuthorized: (orgId: number, auth: PaymentAuthorizationRecord) =>\n    createAction(RECEIVE_AUTHORIZED, { orgId, auth }),\n  paymentError: (error: string) => createAction(SET_PAYMENT_ERROR, { error }),\n  providerValid: (valid: boolean) => createAction(SET_PROVIDER_VALID, { valid }),\n  providerLoading: (loading: boolean) => createAction(SET_PROVIDER_LOADING, { loading }),\n  providerSubmitting: (submitting: boolean) => createAction(SET_PROVIDER_SUBMITTING, { submitting }),\n  setSendingReceipt: (sending: boolean) => createAction(SET_SENDING_RECEIPT, { sending }),\n};\n\nexport const AsyncActions = {\n  getPage: (params: IPaymentQueryParams): ThunkResult<Promise<IPaymentPageData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPage(params));\n      const actionUrl = fetcher.joinUrls(config.get(\"RSF_ANALYTICS_URL\"), \"payments/v1/payments\");\n\n      const options = { method: \"GET\" };\n      return fetcher.fetch(actionUrl, params, options).then((response) => {\n        const headers = response.headers;\n\n        return fetcher.json(response).then((data) => {\n          data.page = params.page;\n          (data as IPaymentPageData).meta = {\n            pagination: {\n              total_count: parseInt(headers.get(\"total\")),\n              total_pages: parseInt(headers.get(\"total-pages\")),\n              current_page: parseInt(headers.get(\"page-number\")),\n            },\n          };\n          dispatch(Actions.receivePage(data));\n          return data;\n        });\n      });\n    };\n  },\n  getAuthorized: (orgId: number): ThunkResult<Promise<IPaymentAuthorizationData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchAuthorized(orgId));\n      return fetcher\n        .get<IPaymentAuthorizationData>(\n          fetcher.joinUrls(config.get(\"RSF_ANALYTICS_URL\"), `payments/v1/payments/${orgId}/authorized`),\n        )\n        .then((result) => {\n          result.orgId = orgId;\n          dispatch(Actions.receiveAuthorized(orgId, fromJSON(result)));\n          //dispatch(paysimpleActions.Actions.setAuthorized(orgId, result.pay_simple));\n          return result;\n        });\n    };\n  },\n  sendReceipt: (payment: PaymentRecord): ThunkResult<Promise<boolean>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.setSendingReceipt(true));\n\n      return fetcher\n        .post<any>(`payments/v1/payments/${payment.id}/receipt`)\n        .then((result) => {\n          dispatch(Actions.setSendingReceipt(false));\n          return true;\n        })\n        .catch(() => {\n          dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, \"There were problems sending the receipt.\"));\n          dispatch(Actions.setSendingReceipt(false));\n          return false;\n        });\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { TaskPoller } from \"app2/src/api/task.service\";\nimport { ITaskData } from \"app2/src/records/Task\";\nimport { RootDispatchType } from \"../store\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport const RECEIVE_TASK = \"@tasks/RECEIVE_TASK\";\n\nexport const Actions = {\n  receiveTask: (task: Partial<ITaskData>) => createAction(RECEIVE_TASK, task),\n};\n\nexport type ITaskOptions = {\n  disableFlashAlert?: boolean;\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  pollTask: (task: Partial<ITaskData>, options: ITaskOptions = {}): ThunkResult<Promise<TaskPoller>> => {\n    return (dispatch: RootDispatchType, getState: () => RootState) => {\n      const poller = new TaskPoller(task.location);\n\n      poller.callback = (task: ITaskData) => {\n        if (task.results.tasks) {\n          _.each(task.results.tasks, (new_task: Partial<ITaskData>) => {\n            if (_.isUndefined(getState().getIn([\"tasks\", \"byId\", new_task.id]))) {\n              dispatch(AsyncActions.pollTask(new_task));\n              dispatch(Actions.receiveTask(new_task));\n            }\n          });\n        }\n        dispatch(Actions.receiveTask(task));\n      };\n\n      return poller.promise.then(\n        (task: ITaskData) => {\n          let name = task.results.class_name;\n          if (!name) {\n            name = \"Task Completion\";\n          }\n          if (!options.disableFlashAlert) {\n            dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, `${name} Successful.`));\n          }\n          dispatch(Actions.receiveTask(task));\n          return getState().getIn([\"tasks\", \"byId\", task.id]);\n        },\n        (task: ITaskData) => {\n          let err_msg = task.results.error_message;\n          if (!err_msg) {\n            err_msg =\n              \"There were problems processing your task. Please try again. If the problem persists contact support.\";\n          }\n          dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, err_msg));\n          dispatch(Actions.receiveTask(task));\n          return getState().getIn([\"tasks\", \"byId\", task.id]);\n        },\n      );\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","angular.module(\"RSF.templates\", []).run([\"$templateCache\", function($templateCache) {$templateCache.put(\"src/Calendar/appointment_creator.html\",\"<script type=\\\"text/ng-template\\\" id=\\\"schedulerTemplate.html\\\"><div class=\\\"modal-header\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-6\\\">\\n        <h2 class=\\\"modal-title\\\">Set Appointment</h2>\\n      </div>\\n      <div class=\\\"col-md-6\\\" ng-if=\\\"$ctrl.users.users.length > 1\\\">\\n        <div uib-dropdown on-toggle=\\\"\\\" class=\\\"pull-right\\\">\\n          <button id=\\\"state-filter\\\" type=\\\"button\\\" class=\\\"btn btn-secondary btn-block\\\" uib-dropdown-toggle>\\n            Users&nbsp;<span class=\\\"caret\\\"></span>\\n          </button>\\n          <ul class=\\\"dropdown-menu\\\" uib-dropdown-menu aria-labelledby=\\\"state-filter\\\">\\n            <li ng-repeat=\\\"user in $ctrl.users.users\\\">\\n              <a ng-click=\\\"$ctrl.toggleStateFilter(user.id)\\\">\\n                <i class=\\\"fa fa-check\\\" ng-if=\\\"$ctrl.stateSelected(user.id)\\\"></i>{{::user.name()}}</a>\\n            </li>\\n          </ul>\\n        </div>\\n      </div>\\n    </div>\\n    <button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$dismiss()\\\">\\n      <span aria-hidden=\\\"true\\\">&times;</span>\\n    </button>\\n  </div>\\n  <div class=\\\"modal-body\\\">\\n    <div id=\\\"scheduler\\\" kendo-scheduler=\\\"$ctrl.scheduler\\\" k-options=\\\"$ctrl.schedulerOptions\\\">\\n      <div k-event-template\\n           class=\\\"event-template\\\"\\n           ng-class=\\\"{ \\'current-job\\': dataItem.job_id == $ctrl.job.id, editable: dataItem.isEditable, ineditable: !dataItem.isEditable }\\\">\\n        <span>#: title #</span><br>\\n        <span ng-if=\\\"dataItem.job_id\\\" class=\\\"link job-name\\\" ui-sref=\\\"job_header.job_show.info({ id: dataItem.job_id })\\\">\\n          #: jobName #\\n        </span>\\n      </div>\\n    </div>\\n  </div></script><script id=\\\"customEditorTemplate\\\" type=\\\"text/x-kendo-template\\\"><div class=\\\"k-edit-label\\\"><label for=\\\"title\\\">Title</label></div>\\n  <div data-container-for=\\\"title\\\" class=\\\"k-edit-field\\\">\\n    <input type=\\\"text\\\" class=\\\"k-input k-textbox\\\" name=\\\"title\\\" required=\\\"required\\\" data-bind=\\\"value:title\\\">\\n  </div>\\n  <div class=\\\"k-edit-label\\\">\\n    <label for=\\\"start\\\">Start</label>\\n  </div>\\n  <div data-container-for=\\\"start\\\" class=\\\"k-edit-field\\\" id=\\\"appt-start\\\">\\n    <input type=\\\"text\\\"\\n           data-role=\\\"datetimepicker\\\"\\n           data-interval=\\\"15\\\"\\n           data-type=\\\"date\\\"\\n           data-bind=\\\"value:start,invisible:isAllDay\\\"\\n           name=\\\"start\\\"\\n           data-greaterdate\\n           required/>\\n    <input type=\\\"text\\\"\\n           data-type=\\\"date\\\"\\n           data-role=\\\"datepicker\\\"\\n           data-bind=\\\"value:start,visible:isAllDay\\\"\\n           data-greaterdate\\n           name=\\\"start\\\"/>\\n  </div>\\n  <div class=\\\"k-edit-label\\\"><label for=\\\"end\\\">End</label></div>\\n  <div data-container-for=\\\"end\\\" class=\\\"k-edit-field\\\" id=\\\"appt-end\\\">\\n    <input type=\\\"text\\\"\\n           data-role=\\\"datetimepicker\\\"\\n           data-interval=\\\"15\\\"\\n           data-type=\\\"date\\\"\\n           data-bind=\\\"value:end,invisible:isAllDay\\\"\\n           name=\\\"end\\\"\\n           data-greaterdate\\n           required/>\\n    <input type=\\\"text\\\"\\n           data-type=\\\"date\\\"\\n           data-role=\\\"datepicker\\\"\\n           data-bind=\\\"value:end,visible:isAllDay\\\"\\n           data-greaterdate\\n           name=\\\"end\\\"/>\\n    <p class=\\\"has-error\\\" role=\\\"alert\\\" id=\\\"date-errors\\\"></p>\\n  </div>\\n  <div class=\\\"k-edit-label\\\"><label for=\\\"description\\\">Description</label></div>\\n  <div data-container-for=\\\"description\\\" class=\\\"k-edit-field\\\">\\n    <textarea name=\\\"description\\\" class=\\\"k-textbox\\\" data-bind=\\\"value:description\\\"></textarea>\\n  </div>\\n  #if(job_id) {#\\n  <div class=\\\"k-edit-label\\\"\\n       ng-if=\\\"$ctrl.org.fetchPref(\\'cronofy\\').invite_attendees !== \\'never\\' && $ctrl.org.fetchPref(\\'cronofy\\').invite_attendees !== \\'always\\'\\\">\\n    <label for=\\\"inviteAttendees\\\">Invite Customer</label>\\n  </div>\\n  <div data-container-fori=\\\"attendees\\\"\\n       class=\\\"k-edit-field\\\"\\n       ng-if=\\\"$ctrl.org.fetchPref(\\'cronofy\\').invite_attendees !== \\'never\\' && $ctrl.org.fetchPref(\\'cronofy\\').invite_attendees !== \\'always\\'\\\">\\n    <input type=\\\"checkbox\\\" name=\\\"inviteAttendees\\\" id=\\\"inviteAttendees\\\" data-type=\\\"boolean\\\" data-bind=\\\"checked:inviteAttendee\\\">\\n  </div>\\n  #}#\\n\\n  #if(job_id) {#\\n  <div class=\\\"k-edit-label\\\">\\n    <label for=\\\"jobLink\\\">Job Link</label>\\n  </div>\\n  <div data-container-for=\\\"jobLink\\\"\\n       class=\\\"k-edit-field\\\"\\n       style=\\\"padding-top: 10.4px;\\\">\\n    <a href=\\\"{{::BaseConfig.BASE_URL}}/jobs/#= job_id#\\\" name=\\\"jobLink\\\" id=\\\"jobLink\\\">#= jobName#</a>\\n  </div>\\n  #}#</script>\");\n$templateCache.put(\"src/Calendar/calendar.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-6 my-auto\\\"><h1>Appointments</h1></div><div class=\\\"col-md-6 my-auto\\\" ng-if=\\\"$ctrl.userResponse.users.length > 1\\\"><div uib-dropdown on-toggle=\\\"\\\" class=\\\"pull-right\\\"><button id=\\\"state-filter\\\" type=\\\"button\\\" class=\\\"btn btn-secondary\\\" uib-dropdown-toggle>Users<span class=\\\"caret\\\"></span></button><ul class=\\\"dropdown-menu\\\" uib-dropdown-menu aria-labelledby=\\\"state-filter\\\"><li ng-repeat=\\\"user in $ctrl.userResponse.users\\\"><a ng-click=\\\"$ctrl.toggleStateFilter(user.id)\\\"><i class=\\\"fa fa-check\\\" ng-if=\\\"$ctrl.stateSelected(user.id)\\\"></i>{{::user.name()}}</a></li></ul></div></div></div><div id=\\\"scheduler\\\" kendo-scheduler=\\\"$ctrl.scheduler\\\" k-options=\\\"$ctrl.schedulerOptions\\\"><div k-event-template class=\\\"event-template\\\" ng-class=\\\"{ editable: dataItem.isEditable, ineditable: !dataItem.isEditable }\\\"><span>#: title #</span><br><span ng-if=\\\"dataItem.job_id\\\" class=\\\"link job-name\\\" ui-sref=\\\"job_header.job_show.info({ id: dataItem.job_id })\\\">#: jobName #</span></div></div><script id=\\\"customEditorTemplate\\\" type=\\\"text/x-kendo-template\\\"><div class=\\\"k-edit-label\\\"><label for=\\\"title\\\">Title</label></div>\\n  <div data-container-for=\\\"title\\\" class=\\\"k-edit-field\\\">\\n    <input type=\\\"text\\\" class=\\\"k-input k-textbox\\\" name=\\\"title\\\" required=\\\"required\\\" data-bind=\\\"value:title\\\">\\n  </div>\\n  <div class=\\\"k-edit-label\\\">\\n    <label for=\\\"start\\\">Start</label>\\n  </div>\\n  <div data-container-for=\\\"start\\\" class=\\\"k-edit-field\\\" id=\\\"appt-start\\\">\\n    <input type=\\\"text\\\"\\n           data-role=\\\"datetimepicker\\\"\\n           data-interval=\\\"15\\\"\\n           data-type=\\\"date\\\"\\n           data-bind=\\\"value:start,invisible:isAllDay\\\"\\n           name=\\\"start\\\"\\n           data-greaterdate\\n           required/>\\n    <input type=\\\"text\\\"\\n           data-type=\\\"date\\\"\\n           data-role=\\\"datepicker\\\"\\n           data-bind=\\\"value:start,visible:isAllDay\\\"\\n           data-greaterdate\\n           name=\\\"start\\\"/>\\n  </div>\\n  <div class=\\\"k-edit-label\\\"><label for=\\\"end\\\">End</label></div>\\n  <div data-container-for=\\\"end\\\" class=\\\"k-edit-field\\\" id=\\\"appt-end\\\">\\n    <input type=\\\"text\\\"\\n           data-type=\\\"date\\\"\\n           data-interval=\\\"15\\\"\\n           data-role=\\\"datetimepicker\\\"\\n           data-bind=\\\"value:end,invisible:isAllDay\\\"\\n           data-greaterdate\\n           name=\\\"end\\\"\\n           required/>\\n    <input type=\\\"text\\\"\\n           data-type=\\\"date\\\"\\n           data-role=\\\"datepicker\\\"\\n           data-bind=\\\"value:end,visible:isAllDay\\\"\\n           data-greaterdate\\n           name=\\\"end\\\"/>\\n    <p class=\\\"has-error\\\" role=\\\"alert\\\" id=\\\"date-errors\\\"></p>\\n  </div>\\n  <div class=\\\"k-edit-label\\\"><label for=\\\"description\\\">Description</label></div>\\n  <div data-container-for=\\\"description\\\" class=\\\"k-edit-field\\\">\\n    <textarea name=\\\"description\\\" class=\\\"k-textbox\\\" data-bind=\\\"value:description\\\"></textarea>\\n  </div>\\n  #if(job_id) {#\\n    <div class=\\\"k-edit-label\\\"\\n         ng-if=\\\"$ctrl.org.fetchPref(\\'cronofy\\').invite_attendees !== \\'never\\' && $ctrl.org.fetchPref(\\'cronofy\\').invite_attendees !== \\'always\\'\\\">\\n      <label for=\\\"inviteAttendees\\\">Invite Customer</label>\\n    </div>\\n    <div data-container-for=\\\"attendees\\\"\\n         class=\\\"k-edit-field\\\"\\n         ng-if=\\\"$ctrl.org.fetchPref(\\'cronofy\\').invite_attendees !== \\'never\\' && $ctrl.org.fetchPref(\\'cronofy\\').invite_attendees !== \\'always\\'\\\">\\n      <input type=\\\"checkbox\\\" name=\\\"inviteAttendees\\\" id=\\\"inviteAttendees\\\" data-type=\\\"boolean\\\" data-bind=\\\"checked:inviteAttendee\\\">\\n    </div>\\n  #}#\\n\\n  #if(job_id) {#\\n  <div class=\\\"k-edit-label\\\">\\n    <label for=\\\"jobLink\\\">Job Link</label>\\n  </div>\\n  <div data-container-for=\\\"jobLink\\\"\\n       class=\\\"k-edit-field\\\"\\n       style=\\\"padding-top: 10.4px;\\\">\\n    <a ui-sref=\\\"job_header.job_show.info({ id: dataItem.job_id })\\\" name=\\\"jobLink\\\" id=\\\"jobLink\\\">#= jobName#</a>\\n  </div>\\n  #}#</script>\");\n$templateCache.put(\"src/Calendar/invite_modal.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Send Invite</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$dismiss()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\"><form name=\\\"inviteForm\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-group\\\"><label for=\\\"subject\\\">Summary</label><input type=\\\"text\\\" class=\\\"form-control\\\" id=\\\"subject\\\" ng-model=\\\"$ctrl.appointment.summary\\\"></div><div class=\\\"form-group\\\"><label for=\\\"emails\\\">Email</label><input type=\\\"text\\\" class=\\\"form-control\\\" id=\\\"emails\\\" ng-model=\\\"$ctrl.emails\\\" name=\\\"current_emails\\\" ng-pattern=\\\"$ctrl.emailListPattern\\\" required><div ng-messages=\\\"inviteForm.current_emails.$error\\\" class=\\\"has-error\\\" role=\\\"alert\\\"><div ng-message=\\\"pattern\\\">Improperly formatted emails \\'_@__.__\\' (comma separated)</div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\">From:</div><div class=\\\"col-md-9\\\">{{::$ctrl.appointment.start_time | date:\\'MMM d, yyyy h:mm a\\' }}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\">To:</div><div class=\\\"col-md-9\\\">{{::$ctrl.appointment.end_time | date:\\'MMM d, yyyy h:mm a\\' }}</div></div></div></div></form></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-default\\\" type=\\\"submit\\\" analytics-on analytics-category=\\\"Appointment\\\" analytics-event=\\\"Invite Sent\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" analytics-appointment=\\\"{{$ctrl.appointment.id}}\\\" analytics-email=\\\"{{$ctrl.emails}}\\\" ng-disabled=\\\"!inviteForm.current_emails.$valid\\\" ng-click=\\\"$ctrl.send()\\\">Send Invite</button><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" analytics-on analytics-category=\\\"Appointment\\\" analytics-event=\\\"Cancel Send Invite\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" analytics-appointment=\\\"{{$ctrl.appointment.id}}\\\" analytics-email=\\\"{{$ctrl.emails}}\\\" ng-click=\\\"$dismiss()\\\">Cancel</button></div>\");\n$templateCache.put(\"src/Calendar/result_modal.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><script type=\\\"text/ng-template\\\" id=\\\"resultModalWindow.html\\\"><div class=\\\"modal-header\\\">\\n    <h3 class=\\\"modal-title\\\">Result Appointment</h3>\\n    <button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$dismiss()\\\">\\n      <span aria-hidden=\\\"true\\\">&times;</span>\\n    </button>\\n  </div>\\n\\n  <form class=\\\"form\\\" ng-submit=\\\"$close($ctrl.event)\\\">\\n    <div class=\\\"modal-body\\\">\\n      <div class=\\\"row\\\">\\n        <div class=\\\"col-md-12\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-md-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label for=\\\"result\\\" class=\\\"control-label\\\">Result</label>\\n                <select tabindex=\\\"1\\\"\\n                        class=\\\"form-control\\\"\\n                        id=\\\"result\\\"\\n                        name=\\\"result\\\"\\n                        required\\n                        ng-model=\\\"$ctrl.event.events_result_id\\\"\\n                        ng-options=\\\"result.id as result.description for result in $ctrl.results.results\\\">\\n                  <option value=\\\"\\\">Select a Result</option>\\n                </select>\\n              </div>\\n            </div>\\n            <div class=\\\"col-md-6\\\" ng-if=\\\"$ctrl.event.isMs() || $ctrl.event.isI360()\\\">\\n              <div class=\\\"form-group\\\">\\n                <label for=\\\"reason\\\" class=\\\"control-label\\\">Reason</label>\\n                <select tabindex=\\\"1\\\"\\n                        class=\\\"form-control\\\"\\n                        name=\\\"reason\\\"\\n                        id=\\\"reason\\\"\\n                        ng-model=\\\"$ctrl.event.events_result_reason_id\\\"\\n                        ng-options=\\\"reason.id as reason.description for reason in $ctrl.reasons.result_reasons\\\">\\n                  <option value=\\\"\\\">Select a Reason</option>\\n                </select>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\" ng-if=\\\"$ctrl.event.isMs() || $ctrl.event.isI360() || $ctrl.event.isSalesforce()\\\">\\n            <div class=\\\"col-md-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label for=\\\"event-notes\\\">Notes</label>\\n                <textarea ng-model=\\\"$ctrl.event.notes\\\" id=\\\"event-notes\\\" class=\\\"form-control\\\"></textarea>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n\\n    <div class=\\\"modal-footer\\\">\\n      <button type=\\\"submit\\\" class=\\\"btn btn-default\\\">Save</button>\\n      <button class=\\\"btn btn-secondary\\\" type=\\\"button\\\" ng-click=\\\"$dismiss()\\\">Cancel</button>\\n    </div>\\n  </form></script>\");\n$templateCache.put(\"src/Drawing/drawing_component.html\",\"<div class=\\\"row\\\" ng-if=\\\"$ctrl.measuring\\\"><div class=\\\"col-md-12\\\">Elevation Name: {{::$ctrl.elevation.name}} ({{::$ctrl.elevation.abbr}})</div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.measuring\\\"><div class=\\\"col-md-12\\\"><div class=\\\"btn-toolbar\\\"><div class=\\\"btn-group selectionless\\\"><button type=\\\"button\\\" class=\\\"btn btn-light\\\" ng-click=\\\"$ctrl.zoomOut()\\\" title=\\\"Zoom Out\\\"><span class=\\\"fa fa-minus\\\"></span></button><div class=\\\"btn btn-light zoom-grp\\\"><input class=\\\"zoom-slider\\\" min=\\\"0\\\" max=\\\"100\\\" step=\\\"0.25\\\" type=\\\"range\\\" ng-model=\\\"$ctrl.zoomLevel\\\" ng-change=\\\"$ctrl.zoomChanged()\\\"></div><button type=\\\"button\\\" class=\\\"btn btn-light\\\" ng-click=\\\"$ctrl.zoomIn()\\\" title=\\\"Zoom In\\\"><span class=\\\"fa fa-plus\\\"></span></button><button type=\\\"button\\\" class=\\\"btn btn-white-background btn-limited-padding btn-light\\\" ng-click=\\\"$ctrl.zoomLock()\\\"><img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/lock-off.ad945ba8.png\\\" ng-if=\\\"!$ctrl.lockZoom\\\" title=\\\"Lock Zoom\\\"> <img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/lock-on.18d5bc34.png\\\" ng-if=\\\"$ctrl.lockZoom\\\" title=\\\"Unlock Zoom\\\"></button><button type=\\\"button\\\" class=\\\"btn btn-white-background btn-limited-padding btn-light\\\" ng-click=\\\"$ctrl.toggleGrid()\\\"><img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/grid-off.604240bf.png\\\" ng-if=\\\"!$ctrl.showingGrid\\\" title=\\\"Show Grid\\\"> <img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/grid-on.20e61434.png\\\" ng-if=\\\"$ctrl.showingGrid\\\" title=\\\"Hide Grid\\\"></button><button type=\\\"button\\\" class=\\\"btn btn-white-background btn-limited-padding btn-light\\\" ng-click=\\\"$ctrl.measureLines()\\\"><img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/tape-measure-off.be42dd25.png\\\" title=\\\"Start Measuring Line\\\" ng-if=\\\"!$ctrl.isCurrentTool(2)\\\"> <img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/tape-measure-on.47ee213c.png\\\" title=\\\"Stop Measuring Line\\\" ng-if=\\\"$ctrl.isCurrentTool(2)\\\"></button><button type=\\\"button\\\" class=\\\"btn btn-white-background btn-limited-padding btn-light\\\" ng-click=\\\"$ctrl.measureWindows()\\\"><img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/window-measurer-off.e0867539.png\\\" title=\\\"Start Measuring Window\\\" ng-if=\\\"!$ctrl.isCurrentTool(3)\\\"> <img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/window-measurer-on.edd605ae.png\\\" title=\\\"Stop Measuring Window\\\" ng-if=\\\"$ctrl.isCurrentTool(3)\\\"></button><button type=\\\"button\\\" class=\\\"btn btn-white-background btn-limited-padding btn-light\\\" ng-click=\\\"$ctrl.measureDaylight()\\\"><img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/daylight-measurer-off.b9d82975.png\\\" title=\\\"Start Measuring Glass\\\" ng-if=\\\"!$ctrl.isCurrentTool(4)\\\"> <img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/daylight-measurer-on.bd636723.png\\\" title=\\\"Stop Measuring Glass\\\" ng-if=\\\"$ctrl.isCurrentTool(4)\\\"></button><button type=\\\"button\\\" class=\\\"btn btn-white-background btn-limited-padding btn-light\\\" rsf-permissions=\\\"sidinginator\\\" permissions-on=\\\"org_measurements\\\" ng-click=\\\"$ctrl.measurePolygon()\\\"><img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/polygon-off.716472e7.png\\\" title=\\\"Start Measuring Polygon\\\" ng-if=\\\"!$ctrl.isCurrentTool(5)\\\"> <img class=\\\"btn btn-custom\\\" src=\\\"/assets/images/measure-icons/polygon-on.fd9a100e.png\\\" title=\\\"Stop Measuring Polygon\\\" ng-if=\\\"$ctrl.isCurrentTool(5)\\\"></button></div></div></div></div><div ng-attr-id=\\\"rsf-drawing-canvas{{$ctrl.id}}\\\"></div>\");\n$templateCache.put(\"src/GoogleMapsAutocomplete/gmaps_autocomplete_component.html\",\"<input focus-if=\\\"$ctrl.focus\\\" id=\\\"ac-input\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.address\\\" placeholder=\\\"< Enter Address >\\\">\");\n$templateCache.put(\"src/Estimator/estimate_editor.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"estimator\\\" rsf-permissions=\\\"read\\\" permissions-on=\\\"Estimate\\\" on-object=\\\"$ctrl.estimate\\\" style=\\\"margin-left: 0; margin-right: 0\\\"><div style=\\\"display: none\\\">{{$ctrl.total()}}</div><div ui-tour=\\\"estimate-tour\\\" ui-tour-backdrop=\\\"true\\\" ui-tour-use-hotkeys=\\\"true\\\" ui-tour-on-shown=\\\"$ctrl.EstimatorTourService.onShown()\\\" ui-tour-on-end=\\\"$ctrl.EstimatorTourService.onEnd()\\\" ui-tour-on-next=\\\"$ctrl.EstimatorTourService.onNext()\\\" ui-tour-on-prev=\\\"$ctrl.EstimatorTourService.onPrev()\\\" ui-tour-template-url=\\\"\\'src/Common/Tours/tour_step_template.html\\'\\\"><div id=\\\"uitour000\\\" class=\\\"row sticky-job-title\\\"><div class=\\\"col-6\\\"><div class=\\\"estimate-title\\\"><div class=\\\"estimate-name-spacing\\\">{{$ctrl.org.estimatorTitle()}}:&nbsp;&nbsp;</div><div ng-if=\\\"!$ctrl.editNameStatus\\\"><div class=\\\"title\\\">{{$ctrl.estimate.name}}</div>&nbsp;&nbsp;<i class=\\\"rsf-edit-link\\\" analytics-on analytics-job=\\\"{{::$ctrl.estimate.job_id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" analytics-estimate=\\\"{{::$ctrl.estimate.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-event=\\\"edit estimate name\\\" analytics-category=\\\"Estimate\\\" ng-click=\\\"$ctrl.editNameStatus = !$ctrl.editNameStatus\\\"></i></div><span class=\\\"editor\\\" ng-if=\\\"$ctrl.editNameStatus\\\"><input type=\\\"text\\\" ng-model=\\\"$ctrl.estimate.name\\\" id=\\\"estimate_name\\\" maxlength=\\\"24\\\" ng-maxlength=\\\"24\\\"> &nbsp;&nbsp;<i class=\\\"rsf-save-link\\\" id=\\\"save-estimate-name\\\" analytics-on analytics-job=\\\"{{::$ctrl.estimate.job.id}}\\\" analytics-org=\\\"{{::$ctrl.estimate.job.org_id}}\\\" analytics-estimate=\\\"{{::$ctrl.estimate.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-estimate-name=\\\"{{$ctrl.estimate.name}}\\\" analytics-event=\\\"save estimate name\\\" analytics-category=\\\"Estimate\\\" ng-click=\\\"$ctrl.editNameStatus = !$ctrl.editNameStatus\\\"></i></span></div></div><div class=\\\"col-md-6\\\"><button id=\\\"job-estimate-close\\\" class=\\\"btn btn-cancel pull-right\\\" ng-click=\\\"$ctrl.close()\\\">Close</button><button type=\\\"button\\\" id=\\\"job-estimate-save\\\" class=\\\"btn btn-default pull-right tour-save-estimate\\\" ng-disabled=\\\"!$ctrl.check() || $ctrl.calculatedFinancingsLoading\\\" ng-click=\\\"$ctrl.save()\\\" title=\\\"Save {{$ctrl.org.estimatortitle()}}\\\"><i ng-if=\\\"$ctrl.calculatedFinancingsLoading\\\" class=\\\"fa fa-spinner fa-pulse\\\"></i><span ng-if=\\\"!$ctrl.calculatedFinancingsLoading\\\">Save {{$ctrl.org.estimatortitle()}}</span></button><div class=\\\"btn-group pull-right\\\" uib-dropdown><button id=\\\"split-button\\\" type=\\\"button\\\" class=\\\"btn btn-default tour-add-template\\\" ng-click=\\\"$ctrl.addTemplate()\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add {{$ctrl.capitalizeTemplate}}</button><button id=\\\"estimate-template-dropdown\\\" type=\\\"button\\\" class=\\\"btn btn-default tour-save-template\\\" uib-dropdown-toggle><span class=\\\"caret\\\"></span></button><ul class=\\\"dropdown-menu\\\" uib-dropdown-menu role=\\\"menu\\\" aria-labelledby=\\\"split-button\\\"><a id=\\\"estimate-template-save\\\" href=\\\"#\\\" ng-click=\\\"$ctrl.saveAsTemplate()\\\" class=\\\"dropdown-item\\\" rsf-permissions=\\\"update\\\" permissions-on=\\\"EstimateTemplate\\\">Save {{$ctrl.capitalizeTemplate}}</a><a id=\\\"estimate-duplicate\\\" ng-if=\\\"!$ctrl.check() && $ctrl.estimate.id > 0\\\" href=\\\"#\\\" ng-click=\\\"$ctrl.duplicateEstimate()\\\" class=\\\"dropdown-item\\\">Duplicate</a><a id=\\\"estimate-duplicate\\\" ng-if=\\\"$ctrl.check() || $ctrl.estimate.id === \\'new\\'\\\" href=\\\"#\\\" class=\\\"dropdown-item disabled\\\">Duplicate (save estimate first)</a><a id=\\\"manual-trigger\\\" href=\\\"#\\\" class=\\\"dropdown-item\\\" ng-if=\\\"$ctrl.estimate.id > 0 && !$ctrl.check()\\\" rsf-permissions=\\\"manual_trigger\\\" permissions-on=\\\"Estimate\\\" ng-click=\\\"$ctrl.openManualTrigger()\\\">Manually Trigger</a><a id=\\\"manual-trigger-disabled\\\" href=\\\"#\\\" class=\\\"dropdown-item disabled\\\" ng-if=\\\"$ctrl.estimate.id === \\'new\\' || $ctrl.check()\\\" rsf-permissions=\\\"manual_trigger\\\" permissions-on=\\\"Estimate\\\" ng-click=\\\"$ctrl.openManualTrigger()\\\">Manually Trigger (save estimate first)</a><div rsf-permissions=\\\"email_csv\\\" permissions-on=\\\"Estimate\\\"><a id=\\\"email-order\\\" ng-if=\\\"!$ctrl.check() && $ctrl.estimate.id > 0\\\" href=\\\"#\\\" ng-click=\\\"$ctrl.openEmailOrderCsv()\\\" class=\\\"dropdown-item\\\">Email Order CSV</a><a id=\\\"email-order-disabled\\\" ng-if=\\\"$ctrl.check() || $ctrl.estimate.id === \\'new\\'\\\" href=\\\"#\\\" class=\\\"dropdown-item disabled\\\">Email Order CSV (save estimate first)</a></div></ul></div><i class=\\\"fa fa-warning alert-warning pull-right\\\" title=\\\"Price List for this Estimate is not the current one for your org\\\" ng-hide=\\\"$ctrl.hidePriceListCaution($ctrl.navDisplay)\\\"></i><finance-options-button ng-if=\\\"$ctrl.org\\\" class=\\\"pull-right\\\" estimate-id=\\\"$ctrl.estimate.id\\\"></finance-options-button><price-presentation-button is-estimate-dirty=\\\"$ctrl.check()\\\" estimate=\\\"$ctrl.estimate\\\"></price-presentation-button></div></div><br><uib-tabset class=\\\"rsf-tabs\\\" sortable-tab=\\\"$ctrl.sortableOptions\\\" ng-model=\\\"$ctrl.estimate.groups\\\" active=\\\"$ctrl.activeGroupTab\\\"><uib-tab id=\\\"uitour030\\\" index=\\\"\\'overview\\'\\\" heading=\\\"Overview\\\" select=\\\"$ctrl.EventingFactory.trackEvent(\\'overview tab selected\\', {})\\\"><div ng-show=\\\"$ctrl.estimate.lineItems().length <= 0\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/estimates.022a621b.png\\\"><h2>No line items added. Let\\'s add one.</h2><button id=\\\"estimate-add-li\\\" type=\\\"button\\\" class=\\\"btn btn-default add-line-item-1\\\" ng-click=\\\"$ctrl.addLineItem()\\\" title=\\\"Add Line Item\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Line Item</button></div></div><div ng-show=\\\"$ctrl.estimate.lineItems().length > 0\\\"><div class=\\\"row estimate-overview-title\\\"><div class=\\\"col-md-6\\\">Overview</div><div class=\\\"col-md-6\\\"><div class=\\\"btn-group pull-right\\\" style=\\\"height: 32px\\\"><button type=\\\"button\\\" class=\\\"btn no-z-index\\\" ng-class=\\\"{ \\'btn-success\\': !$ctrl.collapsedView, \\'btn-light\\': $ctrl.collapsedView }\\\" ng-model=\\\"$ctrl.collapsedView\\\" ng-change=\\\"$ctrl.collapseChanged()\\\" uib-btn-radio=\\\"false\\\"><img ng-if=\\\"$ctrl.collapsedView\\\" src=\\\"/assets/images/icons/ic_view_detailed_list.7ae5db86.png\\\"> <img ng-if=\\\"!$ctrl.collapsedView\\\" src=\\\"/assets/images/icons/ic_view_detailed_list_selected.25f56a9d.png\\\"></button><button type=\\\"button\\\" class=\\\"btn btn-success no-z-index\\\" ng-class=\\\"{ \\'btn-success\\': $ctrl.collapsedView, \\'btn-light\\': !$ctrl.collapsedView }\\\" ng-model=\\\"$ctrl.collapsedView\\\" ng-change=\\\"$ctrl.collapseChanged()\\\" uib-btn-radio=\\\"true\\\"><img ng-if=\\\"!$ctrl.collapsedView\\\" src=\\\"/assets/images/icons/ic_view_compressed_list.52ec3961.png\\\"> <img ng-if=\\\"$ctrl.collapsedView\\\" src=\\\"/assets/images/icons/ic_view_compressed_list_selected.320ff9f7.png\\\"></button></div></div></div><estimate-group ng-repeat=\\\"estimate_group in $ctrl.estimate.estimateGroups(true)\\\" editable=\\\"false\\\" estimate-group=\\\"estimate_group\\\" estimate=\\\"$ctrl.estimate\\\" org=\\\"$ctrl.org\\\" job=\\\"$ctrl.job\\\" nav-display=\\\"$ctrl.navDisplay\\\" on-remove=\\\"$ctrl.removeGroup(group)\\\" add-product=\\\"$ctrl.addLineItem(group)\\\" collapsed-view=\\\"$ctrl.collapsedView\\\" eventing-factory=\\\"$ctrl.EventingFactory\\\" tour-edit-name-action=\\\"false\\\" index=\\\"\\'overview\\'\\\"></estimate-group><br><div class=\\\"row\\\" ng-if=\\\"$ctrl.estimate.calc_method === \\'standard\\'\\\"><div class=\\\"col-lg-6\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><dl ng-if=\\\"$ctrl.estimate.total > 0 && $ctrl.org\\\"><payment-term-chooser org-id=\\\"$ctrl.org.id\\\" payment-term=\\\"$ctrl.estimate.payment_terms\\\" add-item=\\\"$ctrl.addPaymentTermItem\\\" add-template=\\\"$ctrl.addPaymentTermTemplate\\\" remove-item=\\\"$ctrl.removePaymentTermItem\\\" update-item=\\\"$ctrl.updatePaymentTermItem\\\" show-header-text=\\\"true\\\" done-button=\\\"true\\\" view=\\\"\\'display\\'\\\"></payment-term-chooser></dl></div></div></div><div class=\\\"col-lg-6\\\"><div class=\\\"form-section\\\" ng-if=\\\"$ctrl.showTotalSection\\\"><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table total-table\\\"><tbody><tr ng-if=\\\"$ctrl.estimate.total != $ctrl.estimate.subtotal\\\"><td><h4 class=\\\"name\\\">Subtotal</h4></td><td><h4>{{$ctrl.estimate.subtotal | currency}}</h4></td></tr><tr ng-repeat=\\\"discount in $ctrl.estimate.discounts\\\" ng-if=\\\"$ctrl.org.showDiscountDetail(!$ctrl.navDisplay,$ctrl.estimate.total,$ctrl.estimate.subtotal) && $ctrl.estimate.discount > 0\\\"><td><h4 class=\\\"name\\\">{{discount[\\'name\\']}}</h4></td><td><h4>-{{discount[\\'calculated\\'] | currency}}</h4></td></tr><tr ng-if=\\\"!$ctrl.org.showDiscountDetail(!$ctrl.navDisplay,$ctrl.estimate.total,$ctrl.estimate.subtotal) && $ctrl.estimate.discount > 0\\\"><td><h4 class=\\\"name\\\">Discounts</h4></td><td><h4>-{{$ctrl.estimate.discount | currency}}</h4></td></tr><tr ng-if=\\\"$ctrl.org.showSalesTax($ctrl.estimate.tax_total) && $ctrl.estimate.tax_total > 0\\\"><td><h4 class=\\\"name\\\">Sales Tax</h4></td><td><h4>({{$ctrl.estimate.tax_rate}} %) {{$ctrl.estimate.tax_total | currency}}</h4></td></tr><tr><td><h4 class=\\\"name\\\">Total</h4></td><td><h4>{{$ctrl.estimate.total | currency}}</h4></td></tr></tbody></table></div></div></div></div></div></div><div class=\\\"row\\\" ng-show=\\\"$ctrl.org.showEstimatedDates() || $ctrl.showDiscountAndPaymentEstimator\\\"><div class=\\\"col-12\\\" ng-if=\\\"$ctrl.estimate.calc_method === \\'standard\\'\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4\\\"><dl class=\\\"dl-vertical\\\" ng-show=\\\"$ctrl.org.showEstimatedDates()\\\"><dt>Estimated Start Date:</dt><dd><p class=\\\"input-group\\\"><input id=\\\"estimate-start-date\\\" type=\\\"text\\\" ng-change=\\\"$ctrl.updateMinDate()\\\" class=\\\"form-control\\\" uib-datepicker-popup ng-model=\\\"$ctrl.estimate.estimated_start\\\" is-open=\\\"$ctrl.popups.estimated_start_opened\\\" datepicker-options=\\\"$ctrl.dateOptions\\\" ng-required=\\\"true\\\" close-text=\\\"Close\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.openDate(\\'estimated_start_opened\\')\\\" title=\\\"Edit Estimated Start Date\\\"><i class=\\\"fa fa-calendar\\\"></i></button></span></p></dd></dl></div><div class=\\\"col-md-4\\\"><dl class=\\\"dl-vertical\\\" ng-show=\\\"$ctrl.org.showEstimatedDates()\\\"><dt>Estimated End Date:</dt><dd><p class=\\\"input-group\\\"><input id=\\\"estimate-end-date\\\" type=\\\"text\\\" class=\\\"form-control\\\" uib-datepicker-popup ng-model=\\\"$ctrl.estimate.estimated_end\\\" is-open=\\\"$ctrl.popups.estimated_end_opened\\\" datepicker-options=\\\"$ctrl.endDateOptions\\\" ng-required=\\\"true\\\" close-text=\\\"Close\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.openDate(\\'estimated_end_opened\\')\\\" title=\\\"Edit Estimated End Date\\\"><i class=\\\"fa fa-calendar\\\"></i></button></span></p></dd></dl></div><div class=\\\"col-md-4\\\"><button id=\\\"payment-estimator\\\" analytics-on analytics-job=\\\"{{::$ctrl.estimate.job.id}}\\\" analytics-org=\\\"{{::$ctrl.estimate.job.org_id}}\\\" analytics-estimate=\\\"{{::$ctrl.estimate.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-event=\\\"Show Loan Calc\\\" analytics-category=\\\"Estimate\\\" ng-if=\\\"!$ctrl.showLoanCalc && $ctrl.showDiscountAndPaymentEstimator\\\" type=\\\"button\\\" class=\\\"btn btn-default float-right\\\" ng-click=\\\"$ctrl.showLoanCalc = true\\\">Payment Estimator</button><button id=\\\"hide-payment-estimator\\\" analytics-on analytics-job=\\\"{{::$ctrl.estimate.job.id}}\\\" analytics-org=\\\"{{::$ctrl.estimate.job.org_id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-event=\\\"Hide Loan Calc\\\" analytics-category=\\\"Estimate\\\" ng-if=\\\"$ctrl.showLoanCalc\\\" type=\\\"button\\\" class=\\\"btn btn-default float-right\\\" ng-click=\\\"$ctrl.showLoanCalc = false\\\">Hide Payment Estimator</button></div></div><div uib-collapse=\\\"!$ctrl.showLoanCalc\\\"><loan-calc data=\\\"{amount: $ctrl.estimate.total}\\\"></loan-calc></div></div></div></div></div><sales-tax-editor ng-if=\\\"$ctrl.estimate.calc_method === \\'standard\\'\\\" estimate-or-group=\\\"$ctrl.estimate\\\" org=\\\"$ctrl.org\\\" updated=\\\"$ctrl.salesTaxUpdated(salesTaxable)\\\"></sales-tax-editor><div class=\\\"row\\\" ng-if=\\\"$ctrl.estimate.calc_method === \\'standard\\'\\\"><div class=\\\"col-md-8\\\"><discount-editor ng-if=\\\"$ctrl.showDiscountAndPaymentEstimator\\\" estimate-id=\\\"$ctrl.estimate.id\\\" editor-params=\\\"{showing: false, discountToggle: true}\\\" added=\\\"$ctrl.discountAdded(discount)\\\" updated=\\\"$ctrl.discountUpdated(discount)\\\" removed=\\\"$ctrl.discountRemoved(discount)\\\"></discount-editor></div><div class=\\\"col-md-4\\\"><button id=\\\"estimate-compare\\\" ng-if=\\\"$ctrl.org.fetchSettingsAcl(\\'estimator\\').includes(\\'price_comparison\\')\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.showEstimateComparisons()\\\">Compare</button></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.estimate.calc_method === \\'standard\\'\\\"><div class=\\\"col-md-8\\\"><markup-editor org-id=\\\"$ctrl.org.id\\\" line-item-editor-open=\\\"!!$ctrl.EstimatorService.lineItemEditorOpen()\\\" estimate-or-group=\\\"$ctrl.estimate\\\" updated=\\\"$ctrl.markupUpdated\\\"></markup-editor></div></div><hr ng-if=\\\"$ctrl.estimate.estimateGroups(false).length > 0\\\"><estimate-group ng-repeat=\\\"estimate_group in $ctrl.estimate.estimateGroups(false)\\\" editable=\\\"false\\\" estimate-group=\\\"estimate_group\\\" estimate=\\\"$ctrl.estimate\\\" org=\\\"$ctrl.org\\\" job=\\\"$ctrl.job\\\" nav-display=\\\"$ctrl.navDisplay\\\" on-remove=\\\"$ctrl.removeGroup(group)\\\" add-product=\\\"$ctrl.addLineItem(group)\\\" collapsed-view=\\\"$ctrl.collapsedView\\\" eventing-factory=\\\"$ctrl.EventingFactory\\\" tour-edit-name-action=\\\"false\\\" index=\\\"\\'overview\\'\\\"></estimate-group><button type=\\\"button\\\" class=\\\"btn btn-danger pull-right margin-bottom\\\" title=\\\"Delete Estimate\\\" rsf-confirmation-dialog=\\\"$ctrl.deleteEstimate()\\\" rsf-confirmation-message=\\\"Are you sure you wish to delete this Estimate?\\\" analytics-on analytics-category=\\\"Estimate\\\" analytics-event=\\\"delete button\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-if=\\\"$ctrl.estimate.id !== \\'new\\'\\\">Delete</button></div></uib-tab><uib-tab index=\\\"estimate_group.$$hashKey\\\" ng-repeat=\\\"estimate_group in $ctrl.estimate.groups | filter: {\\'_destroy\\': \\'!true\\'}\\\" select=\\\"$ctrl.EventingFactory.trackEvent(\\'group tab selected\\', { group_id: estimate_group.id, group_name: estimate_group.name })\\\" class=\\\"group-tab\\\"><uib-tab-heading>{{estimate_group.name}}&nbsp;<i class=\\\"fa fa-asterisk estimate-group-included estimate-group-included-graphic\\\" ng-if=\\\"estimate_group.included\\\"></i></uib-tab-heading><span ng-if=\\\"$ctrl.activeGroupTab === estimate_group.$$hashKey\\\"><estimate-group estimate-group=\\\"estimate_group\\\" estimate=\\\"$ctrl.estimate\\\" editable=\\\"true\\\" org=\\\"$ctrl.org\\\" job=\\\"$ctrl.job\\\" nav-display=\\\"$ctrl.navDisplay\\\" on-remove=\\\"$ctrl.removeGroup(group)\\\" add-product=\\\"$ctrl.addLineItem(group)\\\" collapsed-view=\\\"$ctrl.collapsedView\\\" eventing-factory=\\\"$ctrl.EventingFactory\\\" tour-edit-name-action=\\\"$ctrl.tourEditNameAction[$index]\\\" $index=\\\"$index\\\"></estimate-group></span></uib-tab><uib-tab ng-repeat=\\\"_eg in $ctrl.addGroupTabs\\\" id=\\\"uitour040\\\" index=\\\"\\'addgroup\\'\\\" classes=\\\"estimate-group-included\\\" select=\\\"$ctrl.addGroup()\\\"><uib-tab-heading><i class=\\\"fa-blue fa fa-plus\\\"></i>&nbsp;Add Group</uib-tab-heading></uib-tab></uib-tabset><payment-option-editor estimate=\\\"$ctrl.estimate\\\"><price-drawer-wrapper ng-if=\\\"$ctrl.org.fetchSettingsAcl(\\'estimator\\').includes(\\'price_comparison\\')\\\" org-id=\\\"$ctrl.org.id\\\" job-id=\\\"$ctrl.job.id\\\" current-estimate=\\\"$ctrl.estimate\\\" open-drawer=\\\"$ctrl.openDrawer\\\" save-editor-estimate=\\\"$ctrl.save\\\"></price-drawer-wrapper></payment-option-editor></div></div><br><br><div class=\\\"manual-backdrop\\\" ng-if=\\\"$ctrl.EstimatorTourService.tour.getStatus() === 1\\\"></div><estimate-template-modal show=\\\"$ctrl.show\\\" read-only=\\\"$ctrl.selectorMode\\\" save-as=\\\"$ctrl.saveAsCallback\\\" select=\\\"$ctrl.selectTemplateCallback\\\"></estimate-template-modal>\");\n$templateCache.put(\"src/Estimator/estimate_group_component.html\",\"<div class=\\\"row estimate-group-header\\\"><div ng-show=\\\"!$ctrl.editing || !$ctrl.editable\\\" class=\\\"col-md-6 estimate-group-title\\\"><div class=\\\"row col-12\\\">{{$ctrl.estimateGroup.name}}&nbsp;&nbsp;<span ng-show=\\\"$ctrl.editable\\\"><i class=\\\"rsf-edit-link\\\" id=\\\"uitour060-{{$ctrl.$index}}\\\" ng-click=\\\"$ctrl.startGroupEdit()\\\" title=\\\"Edit Estimate Group\\\"></i>&nbsp;&nbsp;<i class=\\\"rsf-delete-link\\\" rsf-confirmation-dialog=\\\"$ctrl.remove()\\\" rsf-confirmation-message=\\\"Are you sure you want to delete this estimate group?\\\" title=\\\"Delete Estimate Group\\\"></i></span><span ng-if=\\\"!$ctrl.editable && $ctrl.org.showIncludedText(!$ctrl.navDisplay)\\\">({{ ($ctrl.estimateGroup.included) ? \\\"Included\\\" : \\\"Not Included\\\"}})</span></div></div><div ng-show=\\\"$ctrl.editing && $ctrl.editable\\\" class=\\\"col-md-6\\\"><div class=\\\"row\\\"><div class=\\\"col-md-5 squash-row-padding\\\" id=\\\"uitour070-{{$ctrl.$index}}\\\"><input type=\\\"text\\\" class=\\\"form-control\\\" ng-model=\\\"$ctrl.estimateGroup.name\\\" focus-if=\\\"$ctrl.focusHere\\\"></div><div class=\\\"col-md-3\\\"><select class=\\\"form-control\\\" ng-model=\\\"$ctrl.estimateGroup.included\\\" id=\\\"uitour080-{{$ctrl.$index}}\\\" ng-change=\\\"$ctrl.toggleIncluded()\\\"><option ng-value=\\\"true\\\">Included</option><option ng-value=\\\"false\\\">Not Included</option></select></div><div class=\\\"col-md-2\\\"><button type=\\\"button\\\" class=\\\"btn btn-success\\\" ng-click=\\\"$ctrl.saveGroupEdit()\\\"><i class=\\\"fa fa-save fa-inverse\\\"></i></button></div></div></div><div class=\\\"col-md-6\\\" ng-show=\\\"$ctrl.editable\\\"><button type=\\\"button\\\" class=\\\"btn btn-default pull-right\\\" title=\\\"Add Line Item\\\" id=\\\"eg-add-line-item-top\\\" ng-click=\\\"$ctrl.addProduct({group: $ctrl.estimateGroup})\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Line Item</button><div class=\\\"btn-group pull-right\\\" id=\\\"uitour050-{{$ctrl.$index}}\\\"><button class=\\\"btn\\\" ng-class=\\\"{ \\'btn-success\\': !$ctrl.collapsedView, \\'btn-light\\': $ctrl.collapsedView }\\\" ng-model=\\\"$ctrl.collapsedView\\\" ng-change=\\\"$ctrl.collapseChanged()\\\" uib-btn-radio=\\\"false\\\"><img ng-if=\\\"$ctrl.collapsedView\\\" src=\\\"/assets/images/icons/ic_view_detailed_list.7ae5db86.png\\\"> <img ng-if=\\\"!$ctrl.collapsedView\\\" src=\\\"/assets/images/icons/ic_view_detailed_list_selected.25f56a9d.png\\\"></button><button class=\\\"btn btn-success\\\" ng-class=\\\"{ \\'btn-success\\': $ctrl.collapsedView, \\'btn-light\\': !$ctrl.collapsedView }\\\" ng-model=\\\"$ctrl.collapsedView\\\" ng-change=\\\"$ctrl.collapseChanged()\\\" uib-btn-radio=\\\"true\\\"><img ng-if=\\\"!$ctrl.collapsedView\\\" src=\\\"/assets/images/icons/ic_view_compressed_list.52ec3961.png\\\"> <img ng-if=\\\"$ctrl.collapsedView\\\" src=\\\"/assets/images/icons/ic_view_compressed_list_selected.320ff9f7.png\\\"></button></div></div></div><div class=\\\"row estimate-group-header-tagline\\\"><div class=\\\"col-12\\\" ng-if=\\\"$ctrl.editable && !$ctrl.editing\\\"><span ng-if=\\\"$ctrl.org.showIncludedText(!$ctrl.navDisplay)\\\">({{ ($ctrl.estimateGroup.included) ? \\\"Included\\\" : \\\"Not Included\\\"}})</span></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><room-summary estimate-group=\\\"$ctrl.estimateGroup\\\"></room-summary></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div ui-sortable=\\\"$ctrl.sortableOptions\\\" ng-model=\\\"$ctrl.estimateGroup.line_items\\\" class=\\\"group-connect\\\"><div class=\\\"row table-header\\\" ng-if=\\\"$ctrl.estimateGroup.existingLineItems().length > 0 && !$ctrl.hideTitles()\\\"><div ng-if=\\\"!$ctrl.collapsedView\\\" class=\\\"col-2\\\">Product</div><div ng-if=\\\"$ctrl.collapsedView\\\" ng-class=\\\"$ctrl.descriptionStyle\\\">Product</div><div ng-if=\\\"!$ctrl.collapsedView\\\" class=\\\"col-1 col-md-2\\\"></div><div ng-if=\\\"!$ctrl.collapsedView\\\" ng-class=\\\"$ctrl.descriptionStyle\\\">Description</div><div ng-if=\\\"!$ctrl.collapsedView\\\" ng-class=\\\"$ctrl.detailsStyle\\\" class=\\\"no-padding\\\"><div class=\\\"row\\\"><div ng-class=\\\"$ctrl.quantityStyle\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12 col-lg-6\\\">Quantity</div><div class=\\\"col-sm-12 col-lg-6\\\">Unit</div></div></div><div ng-class=\\\"$ctrl.pricingStyle\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12 col-lg-6\\\" ng-show=\\\"$ctrl.org.showDetailedUnitPrice(!$ctrl.navDisplay, $ctrl.getGroupType(), $ctrl.hiddenLineItems)\\\">Unit Price</div><div class=\\\"col-sm-12 col-lg-6\\\" ng-show=\\\"$ctrl.org.showDetailedPricing(!$ctrl.navDisplay, $ctrl.getGroupType(), $ctrl.hiddenLineItems)\\\">Total Price</div></div></div></div></div><div class=\\\"col-1\\\"></div></div><div class=\\\"row table-body eli-table\\\" ng-if=\\\"$ctrl.estimateGroup.existingLineItems().length > 0\\\"><estimate-line-item id=\\\"uitour100-{{$ctrl.$index}}-{{$index}}\\\" ng-repeat=\\\"line_item in $ctrl.estimateGroup.existingLineItems() track by $index\\\" ng-class=\\\"{ \\'line-item-warning\\': !line_item.validated }\\\" column-widths=\\\"$ctrl.columnWidths\\\" line-item=\\\"line_item\\\" estimate=\\\"$ctrl.estimate\\\" org=\\\"$ctrl.org\\\" remove=\\\"$ctrl.removeLineItem(lineItem)\\\" group-type=\\\"$ctrl.getGroupType()\\\" collapsed-view=\\\"$ctrl.collapsedView\\\" nav-display=\\\"$ctrl.navDisplay\\\" hidden-line-items=\\\"$ctrl.hiddenLineItems\\\" estimate-group=\\\"$ctrl.estimateGroup\\\"></estimate-line-item><button type=\\\"button\\\" class=\\\"btn btn-default\\\" id=\\\"eg-add-line-item-bottom\\\" ng-click=\\\"$ctrl.addProduct({group: $ctrl.estimateGroup})\\\" title=\\\"Add Line Item\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Line Item</button></div><div ng-show=\\\"$ctrl.estimateGroup.existingLineItems().length <= 0\\\"><div class=\\\"form-section blank-state\\\" id=\\\"uitour005\\\"><img src=\\\"/assets/images/icons-large/estimates.022a621b.png\\\"><h2>No line items added. Let\\'s add one.</h2><button type=\\\"button\\\" class=\\\"btn btn-default\\\" id=\\\"eg-add-new-line-item-bottom\\\" ng-click=\\\"$ctrl.addProduct({group: $ctrl.estimateGroup})\\\" title=\\\"Add Line Item\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Line Item</button></div></div></div></div></div><div style=\\\"display: none\\\">{{$ctrl.groupTotal()}}</div><div class=\\\"row totals\\\" ng-if=\\\"$ctrl.org.showTotals(!$ctrl.navDisplay, $ctrl.estimateGroup.included) && $ctrl.estimate.calc_method !== \\'estimate_group\\'\\\"><div class=\\\"col-9 names\\\"><h5>{{$ctrl.estimateGroup.name}} Subtotal</h5></div><div class=\\\"col-2 col-lg-1 numbers\\\"><h5>{{$ctrl.estimateGroup.total | currency}}</h5></div></div><div class=\\\"row estimate-group-totals\\\" ng-if=\\\"$ctrl.estimate.calc_method === \\'estimate_group\\'\\\"><div class=\\\"col-12\\\"><div class=\\\"row\\\"><div class=\\\"col-lg-6\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><dl ng-if=\\\"$ctrl.estimateGroup.total > 0 && $ctrl.org\\\"><payment-term-chooser org-id=\\\"$ctrl.org.id\\\" payment-term=\\\"$ctrl.estimateGroup.payment_terms\\\" add-item=\\\"$ctrl.addPaymentTermItem\\\" add-template=\\\"$ctrl.addPaymentTermTemplate\\\" remove-item=\\\"$ctrl.removePaymentTermItem\\\" update-item=\\\"$ctrl.updatePaymentTermItem\\\" show-header-text=\\\"true\\\" done-button=\\\"true\\\" view=\\\"\\'display\\'\\\"></payment-term-chooser></dl></div></div></div><div class=\\\"col-lg-6\\\"><div class=\\\"form-section\\\" ng-if=\\\"$ctrl.showTotalSection\\\" ng-if=\\\"$ctrl.showTotalSection\\\"><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table total-table\\\"><tbody><tr ng-if=\\\"$ctrl.estimateGroup.total != $ctrl.estimateGroup.subtotal\\\"><td><h4 class=\\\"name\\\">Subtotal</h4></td><td><h4>{{$ctrl.estimateGroup.subtotal | currency}}</h4></td></tr><tr ng-repeat=\\\"discount in $ctrl.estimateGroup.discounts\\\" ng-if=\\\"$ctrl.org.showDiscountDetail(!$ctrl.navDisplay,$ctrl.estimateGroup.total,$ctrl.estimateGroup.subtotal) && $ctrl.estimateGroup.discount > 0\\\"><td><h4 class=\\\"name\\\">{{discount[\\'name\\']}}</h4></td><td><h4>-{{discount[\\'calculated\\'] | currency}}</h4></td></tr><tr ng-if=\\\"!$ctrl.org.showDiscountDetail(!$ctrl.navDisplay,$ctrl.estimateGroup.total,$ctrl.estimateGroup.subtotal) && $ctrl.estimateGroup.discount > 0\\\"><td><h4 class=\\\"name\\\">Discounts</h4></td><td><h4>-{{$ctrl.estimateGroup.discount | currency}}</h4></td></tr><tr ng-if=\\\"$ctrl.org.showSalesTax($ctrl.estimateGroup.tax_total) && $ctrl.estimateGroup.tax_total > 0\\\"><td><h4 class=\\\"name\\\">Sales Tax</h4></td><td><h4>({{$ctrl.estimateGroup.tax_rate}} %) {{$ctrl.estimateGroup.tax_total | currency}}</h4></td></tr><tr><td><h4 class=\\\"name\\\">Total</h4></td><td><h4>{{$ctrl.estimateGroup.total | currency}}</h4></td></tr></tbody></table></div></div></div></div></div></div><div class=\\\"row\\\" ng-show=\\\"$ctrl.org.showEstimatedDates() || $ctrl.showDiscountAndPaymentEstimator\\\"><div class=\\\"col-12\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4\\\"><dl class=\\\"dl-vertical\\\" ng-show=\\\"$ctrl.org.showEstimatedDates()\\\"><dt>Estimated Start Date:</dt><dd><p class=\\\"input-group\\\"><input id=\\\"estimate-start-date\\\" type=\\\"text\\\" ng-change=\\\"$ctrl.updateMinDate()\\\" class=\\\"form-control\\\" uib-datepicker-popup ng-model=\\\"$ctrl.estimateGroup.estimated_start\\\" is-open=\\\"$ctrl.popups.estimated_start_opened\\\" datepicker-options=\\\"$ctrl.dateOptions\\\" ng-required=\\\"true\\\" close-text=\\\"Close\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.openDate(\\'estimated_start_opened\\')\\\" title=\\\"Edit Estimated Start Date\\\"><i class=\\\"fa fa-calendar\\\"></i></button></span></p></dd></dl></div><div class=\\\"col-md-4\\\"><dl class=\\\"dl-vertical\\\" ng-show=\\\"$ctrl.org.showEstimatedDates()\\\"><dt>Estimated End Date:</dt><dd><p class=\\\"input-group\\\"><input id=\\\"estimate-end-date\\\" type=\\\"text\\\" class=\\\"form-control\\\" uib-datepicker-popup ng-model=\\\"$ctrl.estimateGroup.estimated_end\\\" is-open=\\\"$ctrl.popups.estimated_end_opened\\\" datepicker-options=\\\"$ctrl.endDateOptions\\\" ng-required=\\\"true\\\" close-text=\\\"Close\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.openDate(\\'estimated_end_opened\\')\\\" title=\\\"Edit Estimated End Date\\\"><i class=\\\"fa fa-calendar\\\"></i></button></span></p></dd></dl></div><div class=\\\"col-md-4\\\"><button id=\\\"payment-estimator\\\" analytics-on analytics-job=\\\"{{::$ctrl.estimate.job.id}}\\\" analytics-org=\\\"{{::$ctrl.estimate.job.org_id}}\\\" analytics-estimate=\\\"{{::$ctrl.estimate.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-event=\\\"Show Loan Calc\\\" analytics-category=\\\"Estimate\\\" ng-if=\\\"!$ctrl.showLoanCalc && $ctrl.showDiscountAndPaymentEstimator\\\" type=\\\"button\\\" class=\\\"btn btn-default float-right\\\" ng-click=\\\"$ctrl.showLoanCalc = true\\\">Payment Estimator</button><button id=\\\"hide-payment-estimator\\\" analytics-on analytics-job=\\\"{{::$ctrl.estimate.job.id}}\\\" analytics-org=\\\"{{::$ctrl.estimate.job.org_id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-event=\\\"Hide Loan Calc\\\" analytics-category=\\\"Estimate\\\" ng-if=\\\"$ctrl.showLoanCalc\\\" type=\\\"button\\\" class=\\\"btn btn-default float-right\\\" ng-click=\\\"$ctrl.showLoanCalc = false\\\">Hide Payment Estimator</button></div></div><div uib-collapse=\\\"!$ctrl.showLoanCalc\\\"><loan-calc data=\\\"{amount: $ctrl.estimateGroup.total}\\\"></loan-calc></div></div></div></div></div><sales-tax-editor estimate-or-group=\\\"$ctrl.estimateGroup\\\" org=\\\"$ctrl.org\\\" updated=\\\"$ctrl.salesTaxUpdated(salesTaxable)\\\"></sales-tax-editor><div class=\\\"row\\\" ng-if=\\\"$ctrl.showDiscountAndPaymentEstimator\\\"><div class=\\\"col-md-8\\\"><group-discount-editor estimate-group=\\\"$ctrl.estimateGroup\\\" editor-params=\\\"{showing: false, discountToggle: true}\\\" added=\\\"$ctrl.discountAdded(discount)\\\" updated=\\\"$ctrl.discountUpdated(discount)\\\" removed=\\\"$ctrl.discountRemoved(discount)\\\"></group-discount-editor></div><div class=\\\"col-md-4\\\"></div></div><div class=\\\"row\\\"><div class=\\\"col-md-8\\\"><markup-editor org-id=\\\"$ctrl.org.id\\\" line-item-editor-open=\\\"!!$ctrl.EstimatorService.lineItemEditorOpen()\\\" estimate-or-group=\\\"$ctrl.estimateGroup\\\" updated=\\\"$ctrl.markupUpdated\\\"></markup-editor></div></div></div></div>\");\n$templateCache.put(\"src/Estimator/estimate_line_item_component.html\",\"<div id=\\\"{{$ctrl.lineItem.id}}\\\" ng-if=\\\"!$ctrl.lineItem.editing\\\"><div class=\\\"row estimate-table\\\" ng-show=\\\"$ctrl.lineItem.isVisible(!$ctrl.navDisplay)\\\"><div ng-if=\\\"!$ctrl.collapsedView\\\" class=\\\"col-2\\\"><div class=\\\"row\\\" ng-repeat=\\\"nameSegment in $ctrl.lineItem.splitName()\\\"><div class=\\\"col-md-12\\\"><i title=\\\"Product Validation Not Met\\\" class=\\\"validation-icon fa fa-warning\\\" ng-if=\\\"$index === 0 && !$ctrl.lineItem.validated\\\" ng-click=\\\"$ctrl.validation()\\\"></i>{{::nameSegment}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><product-color-dropdown estimate=\\\"$ctrl.estimate\\\" line-item=\\\"$ctrl.lineItem\\\" product=\\\"$ctrl.product\\\" activated-price-list-id=\\\"$ctrl.estimate.activated_price_list_id\\\" estimate-group=\\\"$ctrl.estimateGroup\\\"></product-color-dropdown></div></div></div><div ng-if=\\\"$ctrl.collapsedView\\\" ng-class=\\\"$ctrl.descriptionStyle\\\"><img class=\\\"dragHandle link\\\" ng-if=\\\"$ctrl.collapsedView\\\" src=\\\"/assets/images/icons/ic_sort.ea6f8933.png\\\">&nbsp;&nbsp; {{$ctrl.lineItem.name.replace(\\\">\\\", \\\"\\\")}}</div><div ng-if=\\\"!$ctrl.collapsedView\\\" id=\\\"big-img\\\" class=\\\"col-1 col-md-2\\\"><img onerror=\\\"this.src=\\'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\\'\\\" ng-if=\\\"$ctrl.lineItemImage($ctrl.lineItem)\\\" class=\\\"img-responsive img-product\\\" ng-src=\\\"{{$ctrl.lineItemImage($ctrl.lineItem)}}\\\"></div><div ng-if=\\\"!$ctrl.collapsedView\\\" ng-class=\\\"$ctrl.descriptionStyle\\\"><div class=\\\"row\\\" ng-if=\\\"$ctrl.lineItem.openingEstimations().length > 0\\\"><div class=\\\"col-12 text-truncate\\\"><strong>Openings:&nbsp;</strong>{{ $ctrl.EstimatorService.prettyOpeningsSize($ctrl.lineItem.openingEstimations())}} ({{$ctrl.lineItem.openingEstimations().length}} total)</div></div><div class=\\\"row\\\"><div class=\\\"col-md-12 description\\\" ng-bind-html=\\\"$ctrl.lineItem.description\\\"></div></div></div><div ng-if=\\\"!$ctrl.collapsedView\\\" ng-class=\\\"$ctrl.detailsStyle\\\"><div class=\\\"row\\\"><div ng-class=\\\"$ctrl.quantityStyle\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12 col-lg-6\\\">{{$ctrl.lineItem.quantity}}</div><div class=\\\"col-sm-12 col-lg-6\\\">{{$ctrl.lineItem.uom}}</div></div></div><div ng-class=\\\"$ctrl.pricingStyle\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12 col-lg-6\\\" ng-show=\\\"$ctrl.org.showDetailedUnitPrice(!$ctrl.navDisplay, $ctrl.groupType, $ctrl.hiddenLineItems)\\\">{{$ctrl.lineItem.price | currency}}</div><div class=\\\"col-sm-12 col-lg-6\\\" ng-show=\\\"$ctrl.org.showDetailedPricing(!$ctrl.navDisplay, $ctrl.groupType, $ctrl.hiddenLineItems)\\\">{{$ctrl.lineItem.ext_price | currency}}</div></div></div></div></div><div class=\\\"col\\\"><div class=\\\"float-right\\\"><span uib-dropdown on-toggle=\\\"\\\" ng-if=\\\"$ctrl.collapsedView\\\"><i class=\\\"rsf-ellipsis-v-link rsf-base-66 remove-caret\\\" title=\\\"More Line Item Options\\\" uib-dropdown-toggle></i><ul class=\\\"dropdown-menu dropdown-menu-right\\\" uib-dropdown-menu><h6 class=\\\"dropdown-header\\\">Change Option Group</h6><a ng-repeat=\\\"group in $ctrl.estimate.existingGroups()\\\" ng-click=\\\"$ctrl.moveLineItemGroup(group)\\\" title=\\\"Move Line Item to Option Group - {{group.name}}\\\" class=\\\"dropdown-item\\\" href=\\\"#\\\"><i class=\\\"fa fa-check\\\" ng-if=\\\"group.id === $ctrl.lineItem.estimate_group_id\\\"></i>&nbsp;{{group.name}}</a></ul></span>&nbsp;<i class=\\\"rsf-edit-link rsf-base-66 eli-edit\\\" ng-click=\\\"$ctrl.editLineItem()\\\" title=\\\"Edit Line Item\\\"></i>&nbsp;<i class=\\\"rsf-delete-link rsf-base-66 eli-delete\\\" ng-click=\\\"$ctrl.removeLineItem()\\\" title=\\\"Delete Line Item\\\"></i></div></div></div><div ng-if=\\\"!$ctrl.collapsedView\\\" ng-repeat=\\\"option in $ctrl.lineItem.optionsType(\\'default\\') | filter:{_destroy: \\'!true\\'}\\\" class=\\\"row option\\\"><div ng-if=\\\"!$ctrl.collapsedView\\\" class=\\\"col-2\\\"></div><div ng-if=\\\"$ctrl.collapsedView\\\" ng-class=\\\"$ctrl.descriptionStyle\\\">Option:</div><div ng-if=\\\"!$ctrl.collapsedView\\\" id=\\\"big-img\\\" class=\\\"col-1 col-md-2\\\"><img onerror=\\\"this.src=\\'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\\'\\\" ng-if=\\\"$ctrl.lineItemOptionImage(option)\\\" class=\\\"img-responsive img-product\\\" ng-src=\\\"{{$ctrl.lineItemOptionImage(option)}}\\\"></div><div ng-if=\\\"!$ctrl.collapsedView\\\" ng-class=\\\"$ctrl.descriptionStyle\\\">{{option.product_option_group_name}}: {{option.name}}</div><div ng-class=\\\"$ctrl.detailsStyle\\\"><div class=\\\"row\\\"><div ng-class=\\\"$ctrl.quantityStyle\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12 col-lg-6\\\"><span ng-hide=\\\"option.charge_type === \\'per\\'\\\">{{option.calculateQuantity()}}</span></div><div class=\\\"col-sm-12 col-lg-6\\\">{{option.quantity}} ea</div></div></div><div ng-class=\\\"$ctrl.pricingStyle\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12 col-lg-6\\\" ng-show=\\\"$ctrl.org.showDetailedUnitPrice(!$ctrl.navDisplay, $ctrl.groupType, $ctrl.hiddenLineItems)\\\">{{option.price | currency}}</div><div class=\\\"col-sm-12 col-lg-6\\\" ng-show=\\\"$ctrl.org.showDetailedPricing(!$ctrl.navDisplay, $ctrl.groupType, $ctrl.hiddenLineItems)\\\">{{option.ext_price | currency}}</div></div></div></div></div></div></div><div class=\\\"line-item-titles\\\" ng-if=\\\"$ctrl.lineItem.editing\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4\\\">Name</div><div class=\\\"col-md-3\\\" ng-if=\\\"$ctrl.fullTitles\\\">Description</div><div class=\\\"col-md-5\\\" ng-if=\\\"!$ctrl.fullTitles\\\">Description</div><div class=\\\"col-md-5\\\" ng-if=\\\"$ctrl.fullTitles\\\"><div class=\\\"row\\\"><div ng-if=\\\"$ctrl.showPricingInLineItemEditor\\\" class=\\\"col-md-6 col-lg-5 no-padding\\\"><div class=\\\"row\\\"><div class=\\\"col-lg-6\\\">Quantity</div><div class=\\\"col-lg-6\\\">Unit</div></div></div><div ng-if=\\\"!$ctrl.showPricingInLineItemEditor\\\" class=\\\"col-md-12 col-lg-12 no-padding\\\"><div class=\\\"row\\\"><div class=\\\"col-lg-6\\\">Quantity</div><div class=\\\"col-lg-6\\\">Unit</div></div></div><div ng-if=\\\"$ctrl.showPricingInLineItemEditor\\\" class=\\\"col-md-6 col-lg-7 no-padding\\\"><div class=\\\"row\\\"><div class=\\\"col-lg-6\\\">Unit Price</div><div class=\\\"col-lg-6\\\">Total Price</div></div></div></div></div><div class=\\\"col-md-3\\\" ng-if=\\\"!$ctrl.fullTitles\\\">Total Price</div></div></div><line-item-editor id=\\\"{{$ctrl.lineItem.id}}\\\" ng-if=\\\"$ctrl.lineItem.editing\\\" line-item=\\\"$ctrl.lineItem\\\" estimate=\\\"$ctrl.estimate\\\" measurement-id=\\\"$ctrl.EstimatorService.measurement.id\\\" controller=\\\"$ctrl\\\" estimate-group=\\\"$ctrl.estimateGroup\\\"></line-item-editor>\");\n$templateCache.put(\"src/Estimator/loan_calc.html\",\"<form name=\\\"$ctrl.loanCalcForm\\\" ng-submit=\\\"$ctrl.calculate(loanCalcForm)\\\"><div class=\\\"row loan-calc\\\"><div class=\\\"col-md-4\\\"><div class=\\\"form-group\\\"><label for=\\\"amount\\\" class=\\\"control-label\\\">Amount</label><input type=\\\"number\\\" decimal-places=\\\"2\\\" class=\\\"form-control\\\" id=\\\"amount\\\" min=\\\"1\\\" step=\\\"0.01\\\" ng-model=\\\"$ctrl.data.amount\\\" required></div></div><div class=\\\"col-md-4\\\"><div class=\\\"form-group\\\"><label for=\\\"payments\\\" class=\\\"control-label\\\">Term (Months)</label><input type=\\\"number\\\" decimal-places=\\\"0\\\" class=\\\"form-control\\\" id=\\\"payments\\\" min=\\\"1\\\" ng-model=\\\"$ctrl.data.term\\\" required></div></div><div class=\\\"col-md-4\\\"><div class=\\\"form-group\\\"><label for=\\\"rate\\\" class=\\\"control-label\\\">Rate (%)</label><input type=\\\"number\\\" decimal-places=\\\"2\\\" class=\\\"form-control\\\" id=\\\"rate\\\" min=\\\"0\\\" step=\\\"0.01\\\" ng-model=\\\"$ctrl.data.rate\\\" required></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-8\\\"><h2>Monthly Payment: {{$ctrl.result | currency}}</h2></div><div class=\\\"col-md-4\\\"><input id=\\\"estimate-calculate\\\" type=\\\"submit\\\" class=\\\"btn btn-default float-right\\\" value=\\\"Calculate\\\"></div></div></form>\");\n$templateCache.put(\"src/Estimator/openings_wizard.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"openings-wizard\\\"><div class=\\\"modal-header\\\"><uib-tabset active=\\\"$ctrl.activeStep\\\" class=\\\"wizard-tabs rsf-tabs\\\"><uib-tab index=\\\"0\\\" heading=\\\"Choose Openings\\\"><div class=\\\"row wizard-title\\\"><div class=\\\"offset-2 col-6 title\\\">Choose Openings</div><div class=\\\"col-4 modal-header-right\\\" ng-if=\\\"!$ctrl.editingEstimateLineItemOpenings\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.goManual()\\\">Skip</button></div></div><div class=\\\"row breadcrumbs\\\"><div class=\\\"col-12\\\">{{$ctrl.parentProduct.ancestral_name}} > Your Window Measurements</div></div></uib-tab><uib-tab index=\\\"1\\\" heading=\\\"Choose Size\\\"><div class=\\\"row\\\"><div class=\\\"col-2\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.goBackToMeasurements()\\\" class=\\\"btn btn-default\\\"><i class=\\\"fa fa-chevron-left\\\"></i>&nbsp;Back</button></div><div class=\\\"col-8 title\\\">Choose Size</div></div><div class=\\\"row breadcrumbs\\\"><div class=\\\"col-12\\\">{{$ctrl.parentProduct.ancestral_name}} > Your Window Measurements > Select Size</div></div></uib-tab><uib-tab index=\\\"2\\\" heading=\\\"Line Item Editor\\\"><div class=\\\"row\\\"><div class=\\\"col-2\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.cancelEditAndGoBack(1)\\\" ng-if=\\\"!$ctrl.editing\\\" class=\\\"btn btn-default\\\"><i class=\\\"fa fa-chevron-left\\\"></i>&nbsp;Back</button></div><div class=\\\"col-6 title\\\">Select a Product</div><div class=\\\"col-4 text-right\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.editEstimateLineItemOpenings()\\\" ng-if=\\\"!$ctrl.manualEstimation\\\" class=\\\"btn btn-default\\\">Edit Openings</button></div></div><div class=\\\"row breadcrumbs\\\"><div class=\\\"col-12\\\">{{$ctrl.parentProduct.ancestral_name}} > Select Size > Details & Options</div></div></uib-tab><uib-tab index=\\\"3\\\" heading=\\\"Add Openings\\\"><div class=\\\"row\\\"><div class=\\\"col-2\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.goBackToMeasurements()\\\" class=\\\"btn btn-default\\\"><i class=\\\"fa fa-chevron-left\\\"></i>&nbsp;Back</button></div><div class=\\\"col-8 title\\\">Add Opening Measurements</div></div><div class=\\\"row breadcrumbs\\\"><div class=\\\"col-12\\\">{{$ctrl.parentProduct.ancestral_name}} > Add Openings</div></div></uib-tab></uib-tabset></div><div class=\\\"modal-body breadcrumb-offset\\\"><div class=\\\"row\\\"><div class=\\\"scroll-overflow\\\" ng-class=\\\"{ \\'col-md-4\\': $ctrl.measurement.elevations.length > 0, \\'col-md-0\\': $ctrl.measurement.elevations.length <= 0 }\\\"><div class=\\\"row\\\" ng-repeat=\\\"elevation in $ctrl.measurement.elevations\\\"><div class=\\\"col-md-12\\\"><h5>{{elevation.name}}</h5><div class=\\\"aspect-ratio-box\\\"><rsf-drawing class=\\\"aspect-ratio-box-inside\\\" editable=\\\"false\\\" elevation=\\\"elevation\\\" selected-annotations=\\\"$ctrl.selectedAnnotations\\\"></rsf-drawing></div></div></div></div><div class=\\\"scroll-overflow\\\" ng-class=\\\"{ \\'col-md-8\\': $ctrl.measurement.elevations.length > 0, \\'col-md-12\\': $ctrl.measurement.elevations.length <= 0 }\\\"><uib-tabset active=\\\"$ctrl.activeStep\\\" class=\\\"wizard-tabs\\\"><uib-tab index=\\\"0\\\" heading=\\\"Choose Measurements\\\"><span ng-if=\\\"$ctrl.activeStep === 0\\\"><div class=\\\"row\\\" scroll-if=\\\"$ctrl.activeStep === 0\\\"><div class=\\\"col-5\\\"><div class=\\\"row filter-header\\\"><div class=\\\"col-6\\\">Filter Group</div></div></div></div><div class=\\\"row\\\"><div class=\\\"col-5\\\"><select id=\\\"filter\\\" class=\\\"form-control\\\" ng-model=\\\"$ctrl.openingFilter\\\" ng-change=\\\"$ctrl.filterChanged()\\\" ng-options=\\\"value as value.name for value in $ctrl.filters\\\"><option value=\\\"\\\">All</option></select></div></div><div class=\\\"row headline\\\"><div class=\\\"col-8\\\"><h3>Your Window Measurements ({{filtered.length}})</h3></div><div class=\\\"col-4\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.goToAddOpenings()\\\" class=\\\"btn btn-default pull-right\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Measurement</button></div></div><div class=\\\"row table-header\\\"><div class=\\\"col-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-2 col-12\\\"><button type=\\\"button\\\" class=\\\"btn btn-success\\\" ng-if=\\\"!$ctrl.allSelected()\\\" ng-click=\\\"$ctrl.selectAll()\\\">Select All</button><button type=\\\"button\\\" class=\\\"btn btn-danger\\\" ng-if=\\\"$ctrl.allSelected()\\\" ng-click=\\\"$ctrl.unselectAll()\\\">Unselect All</button></div><div class=\\\"col-md-2 col-6\\\">Name</div><div class=\\\"col-md-1 col-6\\\">Width</div><div class=\\\"col-md-1 col-6\\\">Height</div><div class=\\\"col-md-2 col-6\\\">Location</div><div class=\\\"col-md-1 col-6\\\">Level</div><div class=\\\"col-md-1 col-6\\\">UI</div><div class=\\\"col-md-2 col-6\\\">Area</div></div></div></div><div class=\\\"row\\\" ng-repeat=\\\"opening in $ctrl.openings | filter:$ctrl.filterOpenings as filtered\\\"><div class=\\\"col-12\\\"><div class=\\\"form-section\\\"><div class=\\\"row\\\"><div class=\\\"col-md-2 col-12\\\"><button type=\\\"button\\\" class=\\\"btn btn-outline-success\\\" ng-if=\\\"!$ctrl.selected(opening) && !$ctrl.added(opening)\\\" ng-click=\\\"$ctrl.select(opening)\\\">&nbsp;&nbsp;Select&nbsp;&nbsp;</button><button type=\\\"button\\\" class=\\\"btn btn-light disabled\\\" ng-if=\\\"$ctrl.added(opening) && !$ctrl.editing\\\">Added</button><button type=\\\"button\\\" class=\\\"btn btn-success\\\" ng-if=\\\"$ctrl.selected(opening)\\\" ng-click=\\\"$ctrl.unselect(opening)\\\">Selected</button></div><div class=\\\"col-md-2 col-6\\\">{{::opening.name}}</div><div class=\\\"col-md-1 col-6\\\">{{::opening.width}}\\\"</div><div class=\\\"col-md-1 col-6\\\">{{::opening.height}}\\\"</div><div class=\\\"col-md-2 col-6\\\">{{::opening.location}}</div><div class=\\\"col-md-1 col-6\\\" data-uib-tooltip=\\\"{{::opening.level}}\\\">{{::opening.level | limitTo : 3 : begin}}</div><div class=\\\"col-md-1 col-6\\\">{{::opening.ui}}\\\"</div><div class=\\\"col-md-2 col-6\\\">{{::opening.area}} sqft</div></div></div></div></div></span></uib-tab><uib-tab index=\\\"1\\\" heading=\\\"Choose Size\\\"><span ng-if=\\\"$ctrl.activeStep === 1\\\"><div class=\\\"row\\\" scroll-if=\\\"$ctrl.activeStep === 1\\\"><div class=\\\"col-12 title\\\"><strong>Select Size</strong></div></div><div class=\\\"row\\\"><div class=\\\"col-12 text-truncate\\\"><strong>Windows:&nbsp;</strong><span>{{$ctrl.EstimatorService.prettyOpenings($ctrl.selectedOpenings)}}&nbsp;({{$ctrl.selectedOpenings.length}} total)</span></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.groupedOpenings[\\'$nomatch\\']\\\"><div class=\\\"col-12 text-danger text-truncate\\\"><strong>No Match:&nbsp;</strong><span>{{$ctrl.EstimatorService.prettyOpenings($ctrl.groupedOpenings[\\'$nomatch\\'].openings)}}&nbsp;({{$ctrl.groupedOpenings[\\'$nomatch\\'].openings.length}} total)</span></div></div><div class=\\\"row\\\" ng-if=\\\"!$ctrl.manualEstimation\\\"><div class=\\\"col-12\\\"><div class=\\\"row table-header\\\"><div class=\\\"col-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4 col-6\\\">Suggested Sizes</div><div class=\\\"col-md-4 col-6\\\">Openings</div><div class=\\\"col-md-2 col-6\\\">Quantity</div><div class=\\\"col-md-2 col-6\\\"></div></div></div></div><div class=\\\"row\\\" ng-repeat=\\\"(key, grouped) in $ctrl.groupedOpenings\\\"><div class=\\\"col-12\\\"><div class=\\\"form-section\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4 col-6\\\"><i class=\\\"fa fa-search link\\\" ng-click=\\\"$ctrl.highlightGroup(grouped)\\\"></i>&nbsp;<span ng-if=\\\"::grouped.product.bracket_type !== \\'per_ui\\' && grouped.product.bracket_type !== \\'per_sqft\\'\\\">{{::grouped.product.name}}</span><span ng-if=\\\"::grouped.product.bracket_type == \\'per_ui\\'\\\">{{::grouped.openings[0].ui}} UI</span><span ng-if=\\\"::grouped.product.bracket_type == \\'per_sqft\\'\\\">{{::grouped.openings[0].area}} SQFT</span></div><div class=\\\"col-md-4 col-6\\\"><span>{{$ctrl.EstimatorService.prettyOpenings(grouped.openings)}}</span></div><div class=\\\"col-md-2 col-6\\\"><input type=\\\"number\\\" step=\\\"1\\\" min=\\\"0\\\" class=\\\"form-control\\\" ng-model=\\\"grouped.quantity\\\" disabled></div><div class=\\\"col-md-2 col-6\\\"><button type=\\\"button\\\" class=\\\"btn btn-success\\\" ng-click=\\\"$ctrl.addProducts(grouped)\\\">Add Products</button></div></div></div></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.manualEstimation\\\"><div class=\\\"col-12\\\"><div class=\\\"row table-header\\\"><div class=\\\"col-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4 col-6\\\">Other Sizes</div><div class=\\\"col-md-4 col-6\\\"></div><div class=\\\"col-md-2 col-6\\\">Quantity</div><div class=\\\"col-md-2 col-6\\\"></div></div></div></div><div class=\\\"row\\\" ng-repeat=\\\"other in $ctrl.siblings\\\"><div class=\\\"col-12\\\"><div class=\\\"form-section\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4 col-6\\\">{{::other.product.name}}</div><div class=\\\"col-md-4 col-6\\\"></div><div class=\\\"col-md-2 col-6\\\"><input type=\\\"number\\\" step=\\\"1\\\" min=\\\"0\\\" class=\\\"form-control\\\" ng-model=\\\"other.quantity\\\"></div><div class=\\\"col-md-2 col-6\\\"><button type=\\\"button\\\" class=\\\"btn btn-success\\\" ng-click=\\\"$ctrl.addProducts(other)\\\">Add Products</button></div></div></div></div></div></div></div></span></uib-tab><uib-tab index=\\\"2\\\" heading=\\\"Line Item Editor\\\"><span ng-if=\\\"$ctrl.activeStep === 2\\\"><div class=\\\"row\\\" scroll-if=\\\"$ctrl.activeStep === 2\\\"><div class=\\\"col-12 title\\\"><strong>Details</strong></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.addingGroup.openings.length > 0\\\"><div class=\\\"col-12 text-truncate\\\"><strong>Windows:&nbsp;</strong>{{$ctrl.EstimatorService.prettyOpenings($ctrl.estimateLineItem.openingEstimations())}} ({{$ctrl.estimateLineItem.openingEstimations().length}} total)</div></div><div class=\\\"row\\\"><div class=\\\"col-12\\\"><form><div class=\\\"row form-group\\\"><div ng-class=\\\"{ \\'col-md-12\\': !$ctrl.editPrice, \\'col-md-6\\': $ctrl.editPrice }\\\"><label for=\\\"product_name\\\" class=\\\"control-label\\\">Name</label><select id=\\\"product_name\\\" class=\\\"form-control\\\" ng-model=\\\"$ctrl.addingGroup.product\\\" ng-change=\\\"$ctrl.changeEliProduct()\\\" ng-disabled=\\\"!$ctrl.manualEstimation\\\" ng-options=\\\"product as product.ancestral_name for product in $ctrl.parentChildren.toArray()\\\"></select></div><div class=\\\"col-2\\\" ng-if=\\\"$ctrl.editPrice\\\"><label for=\\\"base_product_price\\\" class=\\\"control-label\\\">Product</label><input type=\\\"number\\\" decimal-places=\\\"2\\\" class=\\\"form-control\\\" id=\\\"base_product_price\\\" ng-change=\\\"$ctrl.pricingChanged()\\\" ng-model=\\\"$ctrl.estimateLineItem.base_product_price\\\" ng-blur=\\\"$ctrl.estimateLineItem.forceToZero()\\\" placeholder=\\\"Product\\\"></div><div class=\\\"col-2\\\" ng-if=\\\"$ctrl.editPrice\\\"><label for=\\\"base_labor_price\\\" class=\\\"control-label\\\">Labor</label><input type=\\\"number\\\" decimal-places=\\\"2\\\" class=\\\"form-control\\\" id=\\\"base_labor_price\\\" ng-change=\\\"$ctrl.pricingChanged()\\\" ng-model=\\\"$ctrl.estimateLineItem.base_labor_price\\\" ng-blur=\\\"$ctrl.estimateLineItem.forceToZero()\\\" placeholder=\\\"Product\\\"></div><div class=\\\"col-2\\\" ng-if=\\\"$ctrl.editPrice && $ctrl.showMarkupable\\\"><div class=\\\"form-group-checkbox form-check form-check-inline\\\"><input class=\\\"form-check-input\\\" type=\\\"checkbox\\\" ng-change=\\\"$ctrl.updateMarkupable()\\\" ng-model=\\\"$ctrl.markupableBool\\\"><label class=\\\"form-check-label\\\">Markup</label></div></div></div><div class=\\\"row form-group\\\"><div class=\\\"col-md-6 col-12\\\"><label for=\\\"product_type\\\" class=\\\"control-label\\\">Product Type</label><div class=\\\"form-control link\\\" id=\\\"product_type\\\" ng-if=\\\"!$ctrl.show_switch\\\" ng-click=\\\"$ctrl.toggleShowSwitch()\\\">{{$ctrl.parentProduct.name}}</div><input type=\\\"text\\\" class=\\\"form-control\\\" id=\\\"product_type\\\" ng-if=\\\"$ctrl.show_switch\\\" ng-model=\\\"$ctrl.switch_search\\\" ng-model-options=\\\"$ctrl.switch_products\\\" focus-if=\\\"$ctrl.focusHere\\\" placeholder=\\\"Start Typing to Select Another Product\\\" typeahead-on-select=\\\"$ctrl.selectTypeAhead()\\\" ng-blur=\\\"$ctrl.blurTypeAhead()\\\" uib-typeahead=\\\"product as product.ancestral_name for product in $ctrl.switch_products | filter:{ancestral_name:$viewValue} | limitTo:15\\\"></div><div class=\\\"col-md-2 col-4\\\"><div ng-if=\\\"$ctrl.showPricingInLineItemEditor\\\"><label for=\\\"price\\\" ng-click=\\\"$ctrl.editPrice = !$ctrl.editPrice;\\\" rsf-permissions=\\\"update_pricing\\\" permissions-on=\\\"Estimate\\\">Price</label><label for=\\\"price\\\" rsf-permissions=\\\"update_pricing\\\" permissions-on=\\\"Estimate\\\" inverse>Price</label><div class=\\\"form-control not-editable\\\" id=\\\"price\\\">{{$ctrl.estimateLineItem.price | currency}}</div></div></div><div class=\\\"col-md-2 col-4\\\"><label for=\\\"product_uom\\\" class=\\\"control-label\\\">Unit</label><input type=\\\"text\\\" id=\\\"product_uom\\\" class=\\\"form-control\\\" disabled ng-model=\\\"$ctrl.estimateLineItem.uom\\\"></div><div class=\\\"col-md-2 col-4\\\"><label for=\\\"product_quantity\\\">Quantity</label><input type=\\\"number\\\" decimal-places=\\\"2\\\" class=\\\"form-control\\\" id=\\\"product_quantity\\\" ng-model=\\\"$ctrl.estimateLineItem.quantity\\\" ng-change=\\\"$ctrl.pricingChanged()\\\" ng-disabled=\\\"!$ctrl.manualEstimation\\\" min=\\\"0\\\" ng-blur=\\\"$ctrl.estimateLineItem.forceToZero()\\\" placeholder=\\\"Quantity\\\"></div></div><div class=\\\"row form-group\\\"><div class=\\\"col-12\\\"><label for=\\\"product_desc\\\" class=\\\"control-label\\\">Description</label><textarea id=\\\"product_desc\\\" class=\\\"form-control\\\" ng-model=\\\"$ctrl.estimateLineItem.description\\\" height=\\\"20\\\">\\n                        </textarea></div></div><div class=\\\"row\\\"><div class=\\\"col-8 title\\\"><strong>Options</strong></div><div class=\\\"col-4\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.useDefaultOptions()\\\" title=\\\"Use the Estimate Default Options\\\" class=\\\"btn btn-save pull-right\\\">Use Options</button><button type=\\\"button\\\" ng-click=\\\"$ctrl.setDefaultOptions()\\\" title=\\\"Set the Estimate Default Options\\\" class=\\\"btn btn-save pull-right\\\">Set Options</button></div></div><div class=\\\"row\\\"><div class=\\\"col-12\\\"><uib-tabset ng-if=\\\"!$ctrl.updatingProduct\\\" class=\\\"option-tabs rsf-tabs\\\" active=\\\"$ctrl.activeOptionGroupTab\\\"><uib-tab index=\\\"$index\\\" ng-repeat=\\\"optionGroup in $ctrl.productOptionGroupsByType(\\'default\\')\\\"><uib-tab-heading>{{optionGroup.name}}&nbsp;<i class=\\\"fa fa-check checkmark\\\" ng-if=\\\"$ctrl.optionSelected(optionGroup, $ctrl.estimateLineItem)\\\"></i></uib-tab-heading><span ng-if=\\\"$ctrl.activeOptionGroupTab === $index\\\"><div class=\\\"row table-header\\\"><div class=\\\"col-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6 col-6\\\">Description</div><div class=\\\"col-md-2 col-6\\\"><span ng-if=\\\"$ctrl.showQuantity\\\">Quantity Per</span></div><div class=\\\"col-md-2 col-6\\\">{{$ctrl.showPricingInLineItemEditor ? \\\"Unit Price\\\" : \\\"\\\"}}</div><div class=\\\"col-md-2 col-6\\\" ng-if=\\\"optionGroup.selection_mode === \\'single\\'\\\">Select One</div><div class=\\\"col-md-2 col-6\\\" ng-if=\\\"optionGroup.selection_mode !== \\'single\\'\\\">Select</div></div></div></div><div class=\\\"row\\\" ng-repeat=\\\"productOption in $ctrl.productOptions(optionGroup.option_ids)\\\" ng-init=\\\"quantity[productOption.id] = $ctrl.initOptionQuantity(optionGroup, productOption)\\\"><div class=\\\"col-12\\\"><div class=\\\"form-section\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4 col-6\\\"><span><i class=\\\"fa fa-info-circle\\\" ng-if=\\\"productOption.charge_type === \\'per\\'\\\" uib-tooltip=\\\"Charge Per Line Item\\\" tooltip-placement=\\\"right\\\"></i>&nbsp;{{::productOption.name}}</span></div><div class=\\\"col-md-2 col-6\\\"><img class=\\\"img-responsive img-product\\\" ng-if=\\\"$ctrl.lineItemOptionImage(productOption)\\\" ng-src=\\\"{{$ctrl.lineItemOptionImage(productOption)}}\\\"></div><div class=\\\"col-md-2 col-6\\\"><input ng-change=\\\"$ctrl.optionQuantityChanged(optionGroup, productOption, quantity[productOption.id])\\\" ng-if=\\\"$ctrl.showQuantity\\\" type=\\\"number\\\" class=\\\"form-control\\\" ng-model=\\\"quantity[productOption.id]\\\" decimal-places=\\\"2\\\"></div><div class=\\\"col-md-2 col-6\\\"><span ng-if=\\\"$ctrl.showPricingInLineItemEditor && productOption.uom !== \\'percent\\'\\\">{{$ctrl.calculateProductOptionPrice(productOption) | currency}}</span><span ng-if=\\\"$ctrl.showPricingInLineItemEditor && productOption.uom === \\'percent\\'\\\">{{productOption.price}}%</span></div><div class=\\\"col-md-2 col-6\\\"><button type=\\\"button\\\" class=\\\"btn btn-outline-success\\\" ng-if=\\\"!$ctrl.selectedOption(optionGroup, productOption)\\\" ng-click=\\\"$ctrl.selectOption(optionGroup, productOption, quantity[productOption.id])\\\">&nbsp;&nbsp;Select&nbsp;&nbsp;</button><button type=\\\"button\\\" class=\\\"btn btn-success\\\" ng-if=\\\"$ctrl.selectedOption(optionGroup, productOption)\\\" ng-click=\\\"$ctrl.unselectOption(productOption.id, productOption.uuid)\\\">Selected</button></div></div></div></div></div></span></uib-tab><uib-tab index=\\\"cost\\\" ng-if=\\\"$ctrl.parentProductOptionGroupsByType(\\'cost\\').length > 0\\\"><uib-tab-heading>Cost</uib-tab-heading><span ng-if=\\\"$ctrl.activeOptionGroupTab === $index\\\"><div class=\\\"wizard-line-editor\\\"><product-option-selector type=\\\"\\'cost\\'\\\" line-item=\\\"$ctrl.estimateLineItem\\\" estimate=\\\"$ctrl.estimate\\\"></product-option-selector></div></span></uib-tab></uib-tabset></div></div></form></div></div></span></uib-tab><uib-tab index=\\\"3\\\" heading=\\\"Add Openings\\\"><span ng-if=\\\"$ctrl.activeStep === 3\\\"><div class=\\\"row\\\" scroll-if=\\\"$ctrl.activeStep === 3\\\"><div class=\\\"offset-8 col-4 text-right\\\" ng-if=\\\"!$ctrl.addingOpenings && !$ctrl.editingOpenings\\\"><button type=\\\"button\\\" id=\\\"startAdding\\\" class=\\\"btn btn-save btn-min\\\" ng-click=\\\"$ctrl.startAddingOpening()\\\">Add Openings</button></div></div><form id=\\\"openingForm\\\" name=\\\"measurementEditor\\\"><div class=\\\"row\\\" ng-if=\\\"$ctrl.addingOpenings || $ctrl.editingOpenings\\\"><div class=\\\"col-12\\\"><measurement-editor-component measurement=\\\"$ctrl.measurement\\\" opening=\\\"$ctrl.selectedOpening\\\" org=\\\"$ctrl.org\\\"></measurement-editor-component></div></div><div class=\\\"row\\\"><div class=\\\"col-12\\\" ng-if=\\\"$ctrl.editingOpenings\\\"><button type=\\\"button\\\" class=\\\"btn btn-cancel btn-min pull-right\\\" ng-click=\\\"$ctrl.cancelEditingOpening()\\\">Cancel</button><button type=\\\"button\\\" class=\\\"btn btn-save btn-min pull-right\\\" ng-click=\\\"$ctrl.saveOpening()\\\" ng-disabled=\\\"$ctrl.checkState()\\\">Save</button></div><div class=\\\"col-12\\\" ng-if=\\\"$ctrl.addingOpenings\\\"><button type=\\\"button\\\" class=\\\"btn btn-cancel btn-min pull-right\\\" ng-click=\\\"$ctrl.cancelAddingOpening()\\\" ng-disabled=\\\"measurementForm.$invalid\\\">Cancel</button><button type=\\\"button\\\" class=\\\"btn btn-save btn-min pull-right\\\" ng-click=\\\"$ctrl.addOpenings()\\\" ng-disabled=\\\"measurementForm.$invalid\\\">Add Opening(s)</button></div></div></form><div class=\\\"row\\\"><div class=\\\"col-12\\\"><div class=\\\"row table-header\\\"><div class=\\\"col-12\\\"><div class=\\\"row\\\"><div class=\\\"col-2\\\">Name</div><div class=\\\"col-1\\\">Width</div><div class=\\\"col-1\\\">Height</div><div class=\\\"col-2\\\">Location</div><div class=\\\"col-1\\\">Level</div><div class=\\\"col-1\\\">UI</div><div class=\\\"col-2\\\">Area</div><div class=\\\"col-2\\\"></div></div></div></div><div class=\\\"row\\\" ng-repeat=\\\"window in $ctrl.measurement.windows\\\"><div class=\\\"col-12\\\"><div class=\\\"form-section\\\"><div class=\\\"row\\\"><div class=\\\"col-md-2\\\">{{window.name}}</div><div class=\\\"col-md-1\\\">{{window.width}}\\\"</div><div class=\\\"col-md-1\\\">{{window.height}}\\\"</div><div class=\\\"col-md-2\\\">{{window.location}}</div><div class=\\\"col-md-1\\\" uib-tooltip=\\\"{{::window.level}}\\\">{{window.level | limitTo : 3 : begin}}</div><div class=\\\"col-md-1\\\">{{window.ui}}\\\"</div><div class=\\\"col-md-2\\\">{{window.area}} sqft</div><div class=\\\"col-2\\\"><i class=\\\"rsf-edit-link rsf-base-66 action-button pull-right\\\" ng-if=\\\"!window.annotation_id\\\" title=\\\"Edit Window {{::window.name}}\\\" ng-click=\\\"$ctrl.startEditingOpening(window)\\\"></i></div></div></div></div></div><div class=\\\"row\\\" ng-repeat=\\\"door in $ctrl.measurement.doors\\\"><div class=\\\"col-12\\\"><div class=\\\"form-section\\\"><div class=\\\"row\\\"><div class=\\\"col-2\\\">{{door.name}}</div><div class=\\\"col-1\\\">{{door.width}}\\\"</div><div class=\\\"col-1\\\">{{door.height}}\\\"</div><div class=\\\"col-2\\\">{{door.location}}</div><div class=\\\"col-1\\\" data-uib-tooltip=\\\"{{::door.level}}\\\">{{door.level | limitTo : 3 : begin}}</div><div class=\\\"col-1\\\">{{door.ui}}\\\"</div><div class=\\\"col-2\\\">{{door.area}} sqft</div><div class=\\\"col-2\\\"><i class=\\\"rsf-edit-link rsf-base-66 action-button pull-right\\\" ng-if=\\\"!door.annotation_id\\\" title=\\\"Edit Door {{::door.name}}\\\" ng-click=\\\"$ctrl.startEditingOpening(door)\\\"></i></div></div></div></div></div></div></div></span></uib-tab></uib-tabset></div></div></div><div class=\\\"modal-footer\\\"><uib-tabset active=\\\"$ctrl.activeStep\\\" class=\\\"wizard-tabs\\\"><uib-tab index=\\\"0\\\" heading=\\\"Choose Measurements\\\"><div class=\\\"row\\\"><div class=\\\"offset-7 col-5\\\" ng-if=\\\"!$ctrl.editingEstimateLineItemOpenings\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.goToBrackets()\\\" ng-disabled=\\\"$ctrl.selectedOpenings.length <= 0\\\" class=\\\"btn btn-default pull-right\\\">Select Sizes</button><button type=\\\"button\\\" class=\\\"btn btn-cancel pull-right\\\" ng-click=\\\"$ctrl.cancelAddProductAndClose()\\\">Cancel</button></div><div class=\\\"offset-7 col-5\\\" ng-if=\\\"$ctrl.editingEstimateLineItemOpenings\\\"><button type=\\\"button\\\" class=\\\"btn btn-cancel pull-right\\\" ng-click=\\\"$ctrl.cancelOpeningsSelection()\\\">Cancel</button><button type=\\\"button\\\" ng-click=\\\"$ctrl.updateOpeningsSelection()\\\" class=\\\"btn btn-save pull-right\\\">Update Selection</button></div></div></uib-tab><uib-tab index=\\\"1\\\" heading=\\\"Choose Size\\\"><div class=\\\"row\\\"><div class=\\\"offset-7 col-5\\\"><button type=\\\"button\\\" class=\\\"btn btn-cancel pull-right\\\" ng-click=\\\"$ctrl.cancelAddProductAndClose()\\\">Cancel</button></div></div></uib-tab><uib-tab index=\\\"2\\\" heading=\\\"Line Item Editor\\\"><div class=\\\"row\\\"><div class=\\\"offset-7 col-5\\\"><button type=\\\"button\\\" class=\\\"btn btn-cancel pull-right\\\" ng-click=\\\"$ctrl.cancelEditAndClose()\\\">Cancel</button><button type=\\\"button\\\" class=\\\"btn btn-save pull-right\\\" ng-if=\\\"$ctrl.editing\\\" ng-click=\\\"$ctrl.finishAddProduct()\\\">Update</button><button type=\\\"button\\\" class=\\\"btn btn-save pull-right\\\" ng-if=\\\"!$ctrl.editing\\\" ng-click=\\\"$ctrl.finishAddProduct()\\\">Add Products to Estimate</button></div></div></uib-tab><uib-tab index=\\\"3\\\" heading=\\\"Add Openings\\\"><div class=\\\"row\\\"><div class=\\\"offset-7 col-5\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.resetMeasurements()\\\" class=\\\"btn btn-cancel pull-right\\\">Cancel</button><button type=\\\"button\\\" ng-click=\\\"$ctrl.saveMeasurements()\\\" class=\\\"btn btn-save pull-right\\\">Save</button></div></div></uib-tab></uib-tabset></div></div>\");\n$templateCache.put(\"src/Estimator/productColorDropdown.html\",\"<select class=\\\"form-control\\\" ng-if=\\\"parent_id && current_product && lineItem.optionsType(\\'default\\').length <= 0 && lineItem.opening_estimations.length <= 0 && children.length > 1\\\" ng-options=\\\"color as color.name for color in children track by color.id\\\" ng-model=\\\"current_product\\\" ng-change=\\\"colorChanged(current_product)\\\"></select><span ng-if=\\\"parent_id && (lineItem.optionsType(\\'default\\').length > 0 || lineItem.opening_estimations.length > 0 || children.length <= 1)\\\">{{lineItem.leafName()}}</span>\");\n$templateCache.put(\"src/Estimator/productSelector.html\",\"<rsf-spinner promise=\\\"ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"product-selector-modal\\\"><div class=\\\"modal-header\\\"><div class=\\\"row\\\" ng-if=\\\"ctrl.showBack\\\"><div class=\\\"col-md-2\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"ctrl.back()\\\">Back</button></div><div class=\\\"col-md-5\\\"><h3 class=\\\"modal-title\\\" ng-if=\\\"ctrl.title\\\">{{ctrl.title}}</h3></div><div class=\\\"col-md-5\\\"><input ng-if=\\\"ctrl.showSearch\\\" type=\\\"search\\\" class=\\\"form-control\\\" id=\\\"search\\\" placeholder=\\\"Search\\\" ng-model=\\\"ctrl.search.name\\\" ng-model-options=\\\"{ debounce: 500 }\\\"></div></div><div class=\\\"row\\\" ng-if=\\\"!ctrl.showBack\\\"><div class=\\\"col-md-6\\\"><h3 class=\\\"modal-title\\\" ng-if=\\\"ctrl.title\\\">{{ctrl.title}}</h3></div><div class=\\\"col-md-6\\\"><input ng-if=\\\"ctrl.showSearch\\\" type=\\\"search\\\" class=\\\"form-control\\\" id=\\\"search\\\" placeholder=\\\"Search\\\" ng-model=\\\"ctrl.search.name\\\" ng-model-options=\\\"{ debounce: 500 }\\\"></div></div><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"ctrl.cancel()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\"><div class=\\\"product-selector-products product-selector-overflow\\\"><div class=\\\"row\\\" ng-if=\\\"ctrl.showTemplates\\\"><div class=\\\"col-md-10 offset-md-1\\\"><div class=\\\"form-section\\\" analytics-on analytics-category=\\\"Estimate\\\" analytics-event=\\\"add template\\\" ng-click=\\\"ctrl.addTemplate()\\\"><div class=\\\"row link v-align-middle\\\"><div class=\\\"col-md-3\\\"><div class=\\\"text-center\\\"><i class=\\\"fa fa-archive fa-2x fa-gray\\\"></i></div></div><div class=\\\"col-md-9\\\">My Estimate Templates</div></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"ctrl.showProductFileUpload && ctrl.org.fetchPref(\\'estimator\\').show_product_file_upload === \\'always\\'\\\"><div class=\\\"col-md-10 offset-md-1\\\"><div class=\\\"form-section\\\" ngf-select=\\\"ctrl.upload($file, $invalidFiles)\\\" ngf-max-size=\\\"30MB\\\" ngf-pattern=\\\"\\'.xml,.xlsx,.xlsm,.xls\\'\\\" ngf-accept=\\\"\\'.xml,.xlsx,.xlsm,.xls\\'\\\" analytics-on analytics-category=\\\"ProductSelector\\\" analytics-event=\\\"add xml\\\" analytics-nav-display=\\\"{{!ctrl.navDisplay}}\\\"><div class=\\\"row link v-align-middle\\\"><div class=\\\"col-md-3\\\"><div class=\\\"text-center\\\"><i class=\\\"fa fa-file-o fa-2x fa-gray\\\"></i></div></div><div class=\\\"col-md-9\\\">Add Products from File</div></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"ctrl.showProvia && ctrl.getProviaData().portal\\\"><div class=\\\"col-md-10 offset-md-1\\\"><div class=\\\"form-section\\\" analytics-on analytics-category=\\\"Estimate\\\" analytics-event=\\\"make provia selection\\\" ng-click=\\\"ctrl.makeProviaSelection(true)\\\"><div class=\\\"row link v-align-middle\\\"><div class=\\\"col-md-3\\\"><img class=\\\"img-responsive\\\" src=\\\"/assets/images/image-tools/provia-product-selector.bd408849.png\\\"></div><div class=\\\"col-md-9\\\">ProVia</div></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"ctrl.showProvia && ctrl.getProviaData().non_portal\\\"><div class=\\\"col-md-10 offset-md-1\\\"><div class=\\\"form-section\\\" analytics-on analytics-category=\\\"Estimate\\\" analytics-event=\\\"make provia non-portal selection\\\" ng-click=\\\"ctrl.makeProviaSelection(false)\\\"><div class=\\\"row link v-align-middle\\\"><div class=\\\"col-md-3\\\"><img class=\\\"img-responsive\\\" src=\\\"/assets/images/image-tools/provia-product-selector.bd408849.png\\\"></div><div class=\\\"col-md-9\\\">ProVia (Non-Portal)</div></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"ctrl.chooseTemplates\\\"><div class=\\\"offset-md-1 col-md-10\\\"><div class=\\\"row\\\" ng-repeat=\\\"template in ctrl.templates.estimate_templates | filter:ctrl.search\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\" ng-click=\\\"::ctrl.makeTemplateSelection(template)\\\"><div class=\\\"row link v-align-middle\\\"><div class=\\\"col-md-3\\\"></div><div class=\\\"col-md-3 text-link\\\">{{::template.name}}</div></div></div></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"ctrl.showProviaLogin\\\"><div class=\\\"col-md-10 offset-md-1\\\"><form name=\\\"proviaForm\\\" ng-submit=\\\"ctrl.proviaLogin()\\\"><div class=\\\"form\\\"><div class=\\\"form-group\\\"><label for=\\\"username\\\">ProVia Username</label><input type=\\\"text\\\" class=\\\"form-control\\\" id=\\\"username\\\" ng-model=\\\"ctrl.provia.username\\\"></div><div class=\\\"form-group\\\"><label for=\\\"password\\\">Password</label><input type=\\\"password\\\" class=\\\"form-control\\\" id=\\\"password\\\" ng-model=\\\"ctrl.provia.password\\\"></div><button type=\\\"submit\\\" class=\\\"btn btn-default\\\">Login</button></div></form></div></div><div class=\\\"row\\\" ng-if=\\\"ctrl.showProviaOrders\\\"><div class=\\\"offset-md-1 col-md-10\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\"><div class=\\\"row link v-align-middle\\\"><div class=\\\"col-md-3\\\">Order Number</div><div class=\\\"col-md-6\\\"><input type=\\\"number\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.order_number\\\" decimal-places=\\\"0\\\"></div><div class=\\\"col-md-3\\\"><button type=\\\"submit\\\" class=\\\"btn btn-default\\\" ng-click=\\\"ctrl.selectOrder()\\\">Submit</button></div></div></div></div></div><div class=\\\"row\\\" ng-repeat=\\\"order in ctrl.provia.orders\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\" ng-click=\\\"ctrl.selectOrder(order.orderno)\\\"><div class=\\\"row link v-align-middle\\\"><div class=\\\"col-md-3\\\">{{order.orderno}}</div><div class=\\\"col-md-3\\\">{{order.jobname}}</div><div class=\\\"col-md-3\\\">{{order.location}}</div><div class=\\\"col-md-3\\\">{{order.status}}</div></div></div></div></div></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-secondary\\\" type=\\\"button\\\" ng-click=\\\"ctrl.cancel()\\\">Cancel</button></div></div>\");\n$templateCache.put(\"src/Estimator/salesTaxEditor.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-8\\\"><div class=\\\"row discounts\\\" ng-show=\\\"$ctrl.org.showSalesTax($ctrl.salesTaxable.tax_total)\\\"><div class=\\\"col-md-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><dl><dt><div id=\\\"estimate-sales-tax-expand\\\" type=\\\"button\\\" class=\\\"btn btn-link\\\" ng-click=\\\"$ctrl.showingTax = !$ctrl.showingTax\\\">Sales Tax&nbsp;<i class=\\\"fa fa-plus\\\" ng-if=\\\"!$ctrl.showingTax\\\"></i><i class=\\\"fa fa-minus\\\" ng-if=\\\"$ctrl.showingTax\\\"></i></div></dt></dl></div></div></div><form><div class=\\\"col-md-12\\\" ng-if=\\\"$ctrl.showingTax\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-header\\\"><h3>Sales Tax</h3></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4\\\"><div class=\\\"form-group\\\"><label for=\\\"default_taxable_amount\\\" class=\\\"control-label\\\">Tax Type</label><select id=\\\"default_taxable_amount\\\" class=\\\"form-control\\\" ng-model=\\\"$ctrl.salesTaxable.default_taxable_amount\\\" ng-options=\\\"$ctrl.Pretty.name[value] for value in $ctrl.defaultTaxableAmountValues\\\" ng-change=\\\"$ctrl.updateTax()\\\"></select></div></div><div class=\\\"col-md-4\\\"><div class=\\\"form-group\\\"><label for=\\\"taxable_amount\\\" class=\\\"control-label\\\">Taxable Amount</label><input type=\\\"number\\\" decimal-places=\\\"2\\\" class=\\\"form-control\\\" id=\\\"taxable_amount\\\" ng-model=\\\"$ctrl.salesTaxable.taxable_amount\\\" min=\\\"0\\\" placeholder=\\\"Taxable Amount\\\" ng-readonly=\\\"$ctrl.salesTaxable.default_taxable_amount !== \\'none\\'\\\" ng-change=\\\"$ctrl.updateTax()\\\"></div></div><div class=\\\"col-md-4\\\"><div class=\\\"form-group\\\"><label for=\\\"tax_rate\\\" class=\\\"control-label\\\">Tax Rate</label><input type=\\\"number\\\" decimal-places=\\\"3\\\" class=\\\"form-control\\\" id=\\\"tax_rate\\\" ng-model=\\\"$ctrl.salesTaxable.tax_rate\\\" min=\\\"0\\\" placeholder=\\\"Tax Rate\\\" ng-change=\\\"$ctrl.updateTax()\\\"></div></div></div></div></div></div></form></div></div></div>\");\n$templateCache.put(\"src/Estimator/template_editor.html\",\"<div class=\\\"modal-header template-editor\\\"><h3 class=\\\"modal-title\\\">My Estimate {{ctrl.templateName}}</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"ctrl.cancel()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><form name=\\\"formTemplate\\\"><div class=\\\"modal-body\\\"><div class=\\\"template-editor-templates product-selector-overflow\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-content\\\"><table class=\\\"table table-striped\\\"><thead><tr><th class=\\\"limited-padding\\\"></th><th>Existing {{ctrl.templateName}}</th><th>Created At</th><th></th></tr></thead><tbody ui-sortable=\\\"ctrl.sortableOptions\\\" ng-model=\\\"ctrl.templates.estimate_templates\\\"><tr ng-repeat=\\\"template in ctrl.templates.estimate_templates\\\"><td class=\\\"limited-padding\\\"><img class=\\\"dragHandle link\\\" src=\\\"/assets/images/icons/ic_sort.ea6f8933.png\\\" title=\\\"Move Estimate {{ctrl.templateName}}\\\"></td><td><div class=\\\"form-group\\\" ng-show=\\\"edit\\\"><div class=\\\"input-group\\\"><div class=\\\"input-group-addon link\\\" ng-click=\\\"ctrl.updateName(template); edit = !edit\\\"><div class=\\\"rsf-save-link rsf-base-66\\\"></div></div><input class=\\\"form-control\\\" type=\\\"text\\\" name=\\\"template_name\\\" ng-model=\\\"template.name\\\" required></div></div><div ng-show=\\\"!edit\\\"><div class=\\\"form-horizontal\\\"><span ng-click=\\\"edit = !edit\\\"><i class=\\\"rsf-edit-link\\\"></i>&nbsp;&nbsp;</span><span>{{template.name}}</span></div></div></td><td>{{template.updated_at | date:\\'short\\'}}</td><td><i class=\\\"rsf-save-link\\\" rsf-confirmation-dialog=\\\"ctrl.editTemplate(template)\\\" rsf-confirmation-message=\\\"Are you sure you want to change {{template.name}} {{ctrl.Pretty.name[\\'template\\']}}?\\\" title=\\\"Change {{ctrl.templateName}}\\\"></i><br><i class=\\\"rsf-delete-link\\\" rsf-confirmation-dialog=\\\"ctrl.removeTemplate(template)\\\" rsf-confirmation-message=\\\"Are you sure you want to delete {{template.name}} {{ctrl.Pretty.name[\\'template\\']}}?\\\" title=\\\"Delete {{ctrl.templateName}}\\\"></i></td></tr></tbody></table></div></div></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><label for=\\\"name\\\" class=\\\"control-label\\\">New {{ctrl.templateName}}</label><input name=\\\"name\\\" id=\\\"name\\\" tabindex=\\\"103\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"ctrl.name\\\" required></div></div></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-default\\\" type=\\\"button\\\" ng-disabled=\\\"formTemplate.name.$invalid\\\" ng-click=\\\"ctrl.save()\\\">Save</button><button class=\\\"btn btn-secondary\\\" type=\\\"button\\\" ng-click=\\\"ctrl.cancel()\\\">Cancel</button></div></form>\");\n$templateCache.put(\"src/Estimator/window_annotating.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"general-wizard\\\"><div class=\\\"modal-header\\\"><div class=\\\"row\\\"><div class=\\\"col-md-8\\\"><h3 class=\\\"modal-title\\\" ng-if=\\\"$ctrl.activeStep === 0\\\">Window-inator</h3><h3 class=\\\"modal-title\\\" ng-if=\\\"$ctrl.activeStep === 1\\\">Create New Elevation</h3><h3 class=\\\"modal-title\\\" ng-if=\\\"$ctrl.activeStep === 2\\\">Edit Elevation</h3><h3 class=\\\"modal-title\\\" ng-if=\\\"$ctrl.activeStep === 3\\\">Measurements</h3></div><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" class=\\\"btn btn-add pull-right\\\" analytics-on analytics-category=\\\"Annotations\\\" analytics-event=\\\"add elevation\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.nextStep()\\\" ng-if=\\\"$ctrl.activeStep === 0\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add New Elevation</button></div></div></div><div class=\\\"modal-body no-scroll\\\"><div class=\\\"overlay\\\" ng-if=\\\"$ctrl.saving\\\"></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.activeStep === 0 && $ctrl.elevations.length <= 0\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state no-border\\\"><img src=\\\"/assets/images/icons-large/elevations.607da0f2.png\\\"><h2>No elevations added. Let\\'s add one.</h2><p>Click on the add new elevation button in the top right to add one.</p></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.activeStep === 0 && $ctrl.elevations.length > 0\\\"><div class=\\\"col-md-5 scroll-overflow\\\"><div class=\\\"row\\\" ng-repeat=\\\"elevation in $ctrl.elevations\\\"><div class=\\\"col-md-12\\\"><h5>{{elevation.name}} &nbsp;<button type=\\\"button\\\" class=\\\"btn btn-white-background btn-light\\\" ng-click=\\\"$ctrl.editElevation(elevation)\\\" title=\\\"Edit Elevation\\\"><img src=\\\"/assets/images/icons/edit.e3b97f80.png\\\"></button><button type=\\\"button\\\" class=\\\"btn btn-white-background btn-light\\\" rsf-permissions=\\\"elevation_scaling\\\" permissions-on=\\\"org_measurements\\\" ng-click=\\\"$ctrl.measureElevation(elevation)\\\" title=\\\"Measure Elevation\\\"><img src=\\\"/assets/images/icons/measurement.a7d7686c.png\\\"></button></h5><div class=\\\"aspect-ratio-box\\\"><rsf-drawing class=\\\"aspect-ratio-box-inside\\\" editable=\\\"false\\\" elevation=\\\"elevation\\\" selected-annotations=\\\"$ctrl.selectedAnnotations\\\"></rsf-drawing></div></div></div></div><div class=\\\"col-md-7 scroll-overflow\\\"><div class=\\\"row table-header\\\"><div class=\\\"col-md-1 text-center\\\" ng-click=\\\"$ctrl.selectAll()\\\"><i class=\\\"fa fa-check-square-o\\\" ng-if=\\\"!$ctrl.anySelected()\\\"></i><i class=\\\"fa fa-square-o\\\" ng-if=\\\"$ctrl.anySelected()\\\"></i></div><div class=\\\"col-md-2\\\">Label</div><div class=\\\"col-md-2\\\">Width</div><div class=\\\"col-md-2\\\">Height</div><div class=\\\"col-md-3\\\">Type</div><div class=\\\"col-md-2\\\">Location</div></div><div class=\\\"row table-body row-vcenter\\\" ng-repeat=\\\"annotation in $ctrl.allAnnotations()\\\" ng-class=\\\"{ \\'row-selected\\': $ctrl.selected(annotation) }\\\"><div class=\\\"col-md-1\\\"><button type=\\\"button\\\" class=\\\"btn btn-borderless\\\" ng-click=\\\"$ctrl.select(annotation)\\\"><i class=\\\"fa fa-check-square\\\" ng-if=\\\"$ctrl.selected(annotation)\\\"></i><i class=\\\"fa fa-square\\\" ng-if=\\\"!$ctrl.selected(annotation)\\\"></i></button></div><div class=\\\"col-md-2\\\">{{::annotation.text}}</div><div class=\\\"col-md-2\\\"><input type=\\\"number\\\" class=\\\"form-control\\\" ng-change=\\\"$ctrl.propChanged(annotation, \\'width\\', annotation.width)\\\" ng-model=\\\"annotation.width\\\" decimal-places=\\\"3\\\"></div><div class=\\\"col-md-2\\\"><input type=\\\"number\\\" class=\\\"form-control\\\" ng-change=\\\"$ctrl.propChanged(annotation, \\'height\\', annotation.height)\\\" ng-model=\\\"annotation.height\\\" decimal-places=\\\"3\\\"></div><div class=\\\"col-md-3\\\"><select name=\\\"opening_type\\\" id=\\\"opening_type\\\" class=\\\"form-control\\\" ng-options=\\\"$ctrl.Pretty.name[type] for type in $ctrl.openingTypes\\\" ng-model=\\\"annotation.opening_type\\\"></select></div><div class=\\\"col-md-2\\\"><select name=\\\"level\\\" id=\\\"level\\\" class=\\\"form-control\\\" ng-options=\\\"location for location in $ctrl.measurement.locations\\\" ng-change=\\\"$ctrl.propChanged(annotation, \\'location\\', annotation.location)\\\" ng-model=\\\"annotation.location\\\"></select></div></div><div>&nbsp;</div><div class=\\\"row table-header\\\" ng-if=\\\"$ctrl.allWallFacades().length > 0\\\"><div class=\\\"col-md-1 offset-md-1 text-center\\\"></div><div class=\\\"col-md-4\\\">Label</div><div class=\\\"col-md-6\\\">Area</div></div><div class=\\\"row table-body row-vcenter\\\" ng-repeat=\\\"wf in $ctrl.allWallFacades()\\\"><div class=\\\"col-md-1 offset-md-1 text-center\\\"></div><div class=\\\"col-md-4\\\">{{::wf.name}}</div><div class=\\\"col-md-6\\\"><input type=\\\"number\\\" class=\\\"form-control\\\" readonly ng-value=\\\"wf.area | number:0\\\"></div></div><div style=\\\"height: 100vh\\\">&nbsp;</div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.activeStep === 1\\\"><div class=\\\"col-md-12\\\"><div class=\\\"row row-eq-height\\\"><div class=\\\"col-md-4 text-center\\\"><job-image-upload type=\\\"button\\\" class=\\\"btn-block\\\" job=\\\"$ctrl.job\\\" classes=\\\"\\'btn btn-add btn-block\\'\\\" analytics-category=\\\"\\'Annotations\\'\\\"></job-image-upload></div><div class=\\\"col-md-1 text-center\\\">OR</div><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" class=\\\"btn btn-default btn-block\\\" ng-click=\\\"$ctrl.sendInvite()\\\"><i class=\\\"fa fa-send\\\"></i>&nbsp;Send Upload Invite</button></div><div class=\\\"col-md-3 text-center\\\"><refresh-button class=\\\"pull-right\\\" refresh=\\\"$ctrl.refreshImages()\\\" trigger=\\\"$ctrl.startRefreshing\\\"></refresh-button></div></div><hr><div class=\\\"row\\\" ng-if=\\\"$ctrl.job.images.length === 0\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state no-border\\\"><img src=\\\"/assets/images/icons-large/photos.08c0f5bd.png\\\"><h2>No images added. Let\\'s add one.</h2><p>Upload a photo (or multiple photos) to add labels to the elevations.</p></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.job.images.length > 0\\\"><div class=\\\"col-md-12 partial-scroll-overflow\\\"><div class=\\\"row\\\" ng-repeat=\\\"image in $ctrl.job.images | filter: $ctrl.noAnnotationImages\\\"><div class=\\\"col-md-4 offset-md-4\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12 text-center\\\"><div class=\\\"elevation-image\\\"><a ng-href=\\\"{{::image.file.url}}\\\" target=\\\"_blank\\\"><img ng-src=\\\"{{::image.getUrl(\\'medium\\')}}\\\" alt=\\\"\\\"></a></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\">{{image.title || image.name}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><button type=\\\"button\\\" class=\\\"btn btn-add btn-block\\\" ng-click=\\\"$ctrl.addElevation(image)\\\">Choose & Add Labels</button></div></div></div></div></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.activeStep === 2\\\"><div class=\\\"col-md-8\\\"><div class=\\\"row\\\"><div class=\\\"col-md-8\\\"><div class=\\\"form-group\\\"><label for=\\\"name\\\" class=\\\"control-label\\\">Elevation:</label><input autocomplete=\\\"off\\\" type=\\\"text\\\" typeahead-on-select=\\\"$ctrl.nameChanged()\\\" uib-typeahead=\\\"name for name in $ctrl.elevationNames | filter:$viewValue\\\" typeahead-min-length=\\\"0\\\" ng-model=\\\"$ctrl.elevation.name\\\" id=\\\"name\\\" class=\\\"form-control\\\" ng-change=\\\"$ctrl.nameChanged()\\\"></div></div><div class=\\\"col-md-4\\\"><div class=\\\"form-group\\\"><label for=\\\"abbr\\\" class=\\\"control-label\\\">Abbreviation:</label><input type=\\\"text\\\" ng-model=\\\"$ctrl.elevation.abbr\\\" id=\\\"abbr\\\" class=\\\"form-control\\\" ng-change=\\\"$ctrl.abbrChanged()\\\"></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12 drawing-scroll\\\"><rsf-drawing editable=\\\"true\\\" elevation=\\\"$ctrl.elevation\\\" updated=\\\"$ctrl.annotationsUpdated(annotations)\\\"></rsf-drawing></div></div></div><div class=\\\"col-md-4\\\" ng-if=\\\"$ctrl.elevation.annotations.length === 0\\\"><div class=\\\"form-section blank-state no-border grey-background no-padding\\\"><div class=\\\"empty-annotation\\\"><img src=\\\"/assets/images/icons-large/annotations.e1156160.png\\\"><h2>Add Labels</h2><p>Click on a window or door to add a label<img src=\\\"/assets/images/icons-large/annotation-label.33070918.png\\\" class=\\\"annotation-label\\\"></p></div></div></div><div class=\\\"col-md-4 blue-background scroll-overflow\\\" ng-if=\\\"$ctrl.elevation.annotations.length > 0\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><h4>Labels</h4></div></div><div class=\\\"row row-eq-height\\\" ng-repeat=\\\"annotation in $ctrl.elevation.annotations\\\"><div class=\\\"col-md-10 offset-md-2\\\"><div class=\\\"row row-eq-height elevation-annotation\\\"><div class=\\\"col-md-10\\\">{{annotation.text}}</div><div class=\\\"col-md-2\\\"><div class=\\\"btn pull-right\\\" ng-click=\\\"$ctrl.removeAnnotation(annotation)\\\"><i class=\\\"rsf-delete-link rsf-base-66\\\"></i></div></div></div></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.activeStep === 3\\\"><div class=\\\"col-md-8\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12 scroll-overflow\\\"><rsf-drawing editable=\\\"false\\\" measuring=\\\"true\\\" elevation=\\\"$ctrl.elevation\\\" updated=\\\"$ctrl.measurementsUpdated(annotations)\\\"></rsf-drawing></div></div></div><div class=\\\"col-md-4 scroll-overflow\\\"><div class=\\\"row table-header\\\" ng-if=\\\"$ctrl.allAnnotations().length > 0 || $ctrl.allWallFacades().length <= 0\\\"><div class=\\\"col-md-1 offset-md-1 text-center\\\" ng-click=\\\"$ctrl.selectAll()\\\"><i class=\\\"fa fa-check-square-o\\\" ng-if=\\\"!$ctrl.anySelected()\\\"></i><i class=\\\"fa fa-square-o\\\" ng-if=\\\"$ctrl.anySelected()\\\"></i></div><div class=\\\"col-md-4\\\">Label</div><div class=\\\"col-md-3\\\">Width</div><div class=\\\"col-md-3\\\">Height</div></div><div class=\\\"row table-body row-vcenter\\\" ng-repeat=\\\"annotation in $ctrl.allAnnotations()\\\" ng-class=\\\"{ \\'row-selected\\': $ctrl.selected(annotation) }\\\"><div class=\\\"col-md-1 offset-md-1 text-center\\\"><button type=\\\"button\\\" class=\\\"btn btn-borderless\\\" ng-click=\\\"$ctrl.select(annotation)\\\"><i class=\\\"fa fa-check-square\\\" ng-if=\\\"$ctrl.selected(annotation)\\\"></i><i class=\\\"fa fa-square\\\" ng-if=\\\"!$ctrl.selected(annotation)\\\"></i></button></div><div class=\\\"col-md-4\\\">{{::annotation.text}}</div><div class=\\\"col-md-3\\\"><input type=\\\"number\\\" class=\\\"form-control\\\" ng-change=\\\"$ctrl.propChanged(annotation, \\'width\\', annotation.width)\\\" ng-model=\\\"annotation.width\\\" decimal-places=\\\"3\\\"></div><div class=\\\"col-md-3\\\"><input type=\\\"number\\\" class=\\\"form-control\\\" ng-change=\\\"$ctrl.propChanged(annotation, \\'height\\', annotation.height)\\\" ng-model=\\\"annotation.height\\\" decimal-places=\\\"3\\\"></div></div><div>&nbsp;</div><div class=\\\"row table-header\\\" ng-if=\\\"$ctrl.allWallFacades().length > 0\\\"><div class=\\\"col-md-1 offset-md-1 text-center\\\"></div><div class=\\\"col-md-4\\\">Label</div><div class=\\\"col-md-6\\\">Area</div></div><div class=\\\"row table-body row-vcenter\\\" ng-repeat=\\\"wallFacade in $ctrl.allWallFacades()\\\"><div class=\\\"col-md-1 offset-md-1 text-center\\\"></div><div class=\\\"col-md-4\\\">{{::wallFacade.name}}</div><div class=\\\"col-md-6\\\"><input type=\\\"number\\\" class=\\\"form-control\\\" readonly ng-value=\\\"wallFacade.area | number:0\\\"></div></div><div style=\\\"height: 100vh\\\">&nbsp;</div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-ok\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.save()\\\" ng-if=\\\"$ctrl.activeStep === 0\\\">Save</button><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancel()\\\" ng-if=\\\"$ctrl.activeStep === 0\\\">Cancel</button><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancelAddingElevation()\\\" ng-if=\\\"$ctrl.activeStep === 1\\\">Cancel</button><button class=\\\"btn btn-ok\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.saveAnnotations(false)\\\" ng-if=\\\"$ctrl.activeStep === 2\\\">Save Elevation</button><button class=\\\"btn btn-ok\\\" rsf-permissions=\\\"elevation_scaling\\\" permissions-on=\\\"org_measurements\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.saveAnnotations(true)\\\" ng-if=\\\"$ctrl.activeStep === 2\\\">Save & Measure</button><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancelAnnotations()\\\" ng-if=\\\"$ctrl.activeStep === 2\\\">Cancel</button><button class=\\\"btn btn-ok\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.saveMeasurements()\\\" ng-if=\\\"$ctrl.activeStep === 3\\\">Save Elevation</button><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancelAnnotations()\\\" ng-if=\\\"$ctrl.activeStep === 3\\\">Cancel</button></div></div>\");\n$templateCache.put(\"src/Common/checkbox.html\",\"<div class=\\\"vertical-center\\\" ng-show=\\\"$ctrl.show && $ctrl.isPdfFile($ctrl.objectCb)\\\" title=\\\"Include Document in {{$ctrl.titleCb}}\\\"><label><input type=\\\"checkbox\\\" ng-model=\\\"$ctrl.valueCb\\\" ng-model-options=\\\"{ debounce: 1500 }\\\" ng-change=\\\"$ctrl.updateObjectData($ctrl.objectCb)\\\"></label></div><label class=\\\"checkbox-inline\\\" title=\\\"Include All Documents in {{$ctrl.titleCb}}\\\" ng-show=\\\"!$ctrl.show\\\"><input type=\\\"checkbox\\\" ng-model=\\\"checkAllCb\\\" ng-model-options=\\\"{ debounce: 500 }\\\" ng-change=\\\"$ctrl.checkAll(checkAllCb)\\\">{{$ctrl.titleCb}}</label>\");\n$templateCache.put(\"src/Common/pdfViewer.html\",\"<div class=\\\"row\\\"><div class=\\\"col-sm-4\\\"><span>Page: {{pageNum}}/{{pageCount || 1}}</span></div><div class=\\\"col-sm-4\\\"><div class=\\\"align-center\\\"><button ng-click=\\\"zoomIn()\\\">+</button>&nbsp;<button ng-click=\\\"fit()\\\">100%</button>&nbsp;<button ng-click=\\\"zoomOut()\\\">-</button></div></div><div class=\\\"col-sm-4\\\"><div class=\\\"pull-right\\\"><button ng-click=\\\"goPrevious()\\\">Previous</button>&nbsp;<button ng-click=\\\"goNext()\\\">Next</button>&nbsp;</div></div></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\">&nbsp;</div></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><canvas id=\\\"pdf-canvas\\\" class=\\\"embed-pdf\\\"></canvas></div></div>\");\n$templateCache.put(\"src/Common/screen_share_help_modal.html\",\"<div class=\\\"general-wizard\\\"><div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Screen Share Troubleshooting</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$dismiss()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\" style=\\\"overflow: scroll\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div ng-include=\\\"\\'src/Help/screen_share_help.html\\'\\\"></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$dismiss()\\\">Cancel</button></div></div>\");\n$templateCache.put(\"src/Common/spinner.html\",\"<div id=\\\"spinner-overlay\\\" class=\\\"spinner-overlay\\\" ng-if=\\\"$ctrl.show\\\"><div id=\\\"spinner\\\" class=\\\"spinner\\\"><img class=\\\"graphic\\\"></div></div>\");\n$templateCache.put(\"src/Common/termsModal.html\",\"<div class=\\\"general-wizard\\\"><div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Terms and Conditions</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$dismiss()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\" style=\\\"overflow: scroll\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div ng-include=\\\"\\'src/TermsAndConditions/terms.html\\'\\\"></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-secondary\\\" type=\\\"button\\\" ng-click=\\\"$dismiss()\\\">Cancel</button></div></div>\");\n$templateCache.put(\"src/Header/header.html\",\"<div class=\\\"rsf-header\\\"><nav class=\\\"navbar navbar-expand-md fixed-top\\\" ng-if=\\\"!ctrl.hidden\\\"><a class=\\\"navbar-brand\\\" analytics-on analytics-category=\\\"Header\\\" analytics-event=\\\"logo link\\\" ui-sref=\\\"{{ctrl.BaseConfig.DEFAULT_ROUTE}}\\\"><img ng-if=\\\"!ctrl.isCurrentState(\\'root.payment_info\\')\\\" ng-src=\\\"{{ctrl.BaseConfig.APP_ICON_URL}}\\\" alt=\\\"{{ctrl.BaseConfig.APP_NAME}}\\\" style=\\\"max-height: 40px\\\"> <img ng-if=\\\"ctrl.isCurrentState(\\'root.payment_info\\')\\\" ng-src=\\\"{{ctrl.BaseConfig.APP_ICON_BIG_URL}}\\\" alt=\\\"{{ctrl.BaseConfig.APP_NAME}}\\\" style=\\\"max-height: 40px\\\"></a><button class=\\\"navbar-toggler\\\" type=\\\"button\\\" ng-click=\\\"ctrl.isNavCollapsed = !ctrl.isNavCollapsed\\\" aria-expanded=\\\"false\\\" aria-label=\\\"Toggle navigation\\\"><span class=\\\"navbar-toggler-icon\\\"></span></button><div id=\\\"navbar\\\" class=\\\"collapse navbar-collapse\\\" uib-collapse=\\\"ctrl.isNavCollapsed\\\"><div class=\\\"search-box\\\" ng-if=\\\"ctrl.user.id && ctrl.showSearchBar\\\"><i class=\\\"fa fa-search fa-gray\\\" aria-hidden=\\\"true\\\"></i><input type=\\\"text\\\" class=\\\"form-control\\\" id=\\\"search\\\" placeholder=\\\"Search\\\" ng-model=\\\"ctrl.search\\\" ng-model-options=\\\"{ debounce: 1500 }\\\" ng-change=\\\"ctrl.searchChanged()\\\"></div><ul ng-if=\\\"ctrl.user.id\\\" class=\\\"nav navbar-nav ml-auto\\\"><li class=\\\"nav-item\\\" ng-class=\\\"{ active: ctrl.isCurrentPage(\\'/orgs\\') }\\\" rsf-permissions=\\\"link\\\" permissions-on=\\\"AdminPanel\\\"><a href=\\\"\\\" ng-click=\\\"ctrl.navigateToOccApp()\\\" class=\\\"nav-link\\\" analytics-on analytics-category=\\\"Header\\\" analytics-event=\\\"org link\\\"><span class=\\\"menu-item\\\">Administration</span></a></li><li class=\\\"nav-item\\\" ng-class=\\\"{ active: ctrl.isCurrentPage(\\'/leads\\') || ctrl.isCurrentPage(\\'/leads\\') }\\\" rsf-permissions=\\\"leads\\\" permissions-on=\\\"HeaderPanel\\\"><a ui-sref=\\\"root.leads_list\\\" class=\\\"nav-link\\\" analytics-on analytics-category=\\\"Header\\\" analytics-event=\\\"leads link\\\"><span class=\\\"menu-item\\\">Leads</span></a></li><li class=\\\"nav-item\\\" ng-class=\\\"{ active: ctrl.isCurrentPage(\\'/reports\\') }\\\" rsf-permissions=\\\"reports\\\" permissions-on=\\\"HeaderPanel\\\"><a ui-sref=\\\"root.report_list\\\" class=\\\"nav-link\\\" analytics-on analytics-category=\\\"Header\\\" analytics-event=\\\"reports link\\\"><span class=\\\"menu-item\\\">Reports</span></a></li><li class=\\\"nav-item\\\" ng-class=\\\"{ active: ctrl.isCurrentPage(\\'/jobs\\') }\\\" rsf-permissions=\\\"jobs\\\" permissions-on=\\\"HeaderPanel\\\"><a ui-sref=\\\"root.job_list\\\" class=\\\"nav-link\\\" analytics-on analytics-category=\\\"Header\\\" analytics-event=\\\"customer link\\\"><span class=\\\"menu-item\\\">Customers</span></a></li><li class=\\\"nav-item\\\" ng-class=\\\"{ active: ctrl.isCurrentPage(\\'/scheduler\\') }\\\" rsf-permissions=\\\"scheduler\\\" permissions-on=\\\"HeaderPanel\\\"><a ui-sref=\\\"root.scheduler\\\" class=\\\"nav-link\\\" analytics-on analytics-category=\\\"Header\\\" analytics-event=\\\"scheduler link\\\"><span class=\\\"menu-item\\\">Scheduler</span></a></li><li class=\\\"nav-item\\\" ng-class=\\\"{ active: ctrl.isCurrentPage(\\'/finance\\') }\\\" ng-if=\\\"ctrl.showFinanceTab()\\\"><a ui-sref=\\\"root.finance\\\" class=\\\"nav-link\\\" analytics-on analytics-category=\\\"Header\\\" analytics-event=\\\"finance link\\\"><span class=\\\"menu-item\\\">Finance</span></a></li><li class=\\\"nav-item\\\" ng-class=\\\"{ active: ctrl.isCurrentPage(\\'/calendar\\') }\\\" rsf-permissions=\\\"calendar\\\" permissions-on=\\\"HeaderPanel\\\"><a ui-sref=\\\"root.calendar\\\" class=\\\"nav-link\\\" analytics-on analytics-category=\\\"Header\\\" analytics-event=\\\"appointment link\\\"><span class=\\\"menu-item\\\">Appointments</span></a></li><li class=\\\"nav-item\\\" ng-if=\\\"!ctrl.user.id\\\"><a class=\\\"nav-link\\\" ui-sref=\\\"root.login\\\">Login</a></li></ul></div><div ng-if=\\\"ctrl.user.id\\\" class=\\\"d-flex align-items-center\\\"><message-bell class=\\\"mr-3\\\"></message-bell><user-header-info refresh-query=\\\"ctrl.refreshQuery\\\" nav-display=\\\"ctrl.navDisplay\\\" detailed=\\\"true\\\"></user-header-info></div></nav><div kendo-window=\\\"ctrl.webcamPanel\\\" k-title=\\\"\\'Webcam\\'\\\" k-width=\\\"200\\\" k-height=\\\"100\\\" k-position=\\\"{ top: 0, right: 100}\\\" k-visible=\\\"false\\\" k-on-open=\\\"ctrl.panelOpened()\\\" k-on-close=\\\"ctrl.panelClosed()\\\"><div class=\\\"webcam\\\">&nbsp;</div></div></div>\");\n$templateCache.put(\"src/Header/job_header.html\",\"<div class=\\\"rsf-header\\\"><nav class=\\\"navbar navbar-expand-md fixed-top\\\" ng-class=\\\"{ \\'navbar-push-expand\\': !$ctrl.navDisplay, \\'navbar-push\\': $ctrl.navDisplay }\\\" ng-if=\\\"!$ctrl.hidden\\\"><ul class=\\\"org-image-ul\\\"><img class=\\\"org-image\\\" title=\\\"{{::$ctrl.user.org.name}}\\\" ng-if=\\\"::$ctrl.user.org.images.length > 0\\\" ng-src=\\\"{{::$ctrl.user.org.images[0].getUrl(\\'medium\\')}}\\\"></ul><screen-share-toolbar ng-if=\\\"!$ctrl.navDisplay\\\" class=\\\"mr-auto\\\"></screen-share-toolbar><div id=\\\"navbar\\\" class=\\\"collapse navbar-collapse\\\"><ul class=\\\"nav navbar-nav ml-auto\\\"><li ng-if=\\\"!$ctrl.user\\\"><a ui-sref=\\\"root.login\\\">Login</a></li><li ng-if=\\\"$ctrl.user\\\" class=\\\"nav-item d-flex align-items-center\\\"><message-bell class=\\\"mr-3\\\" hide-left-separator=\\\"true\\\"></message-bell></li><user-header-info detailed=\\\"false\\\" refresh-query=\\\"$ctrl.refreshQuery\\\"></user-header-info></ul></div></nav></div>\");\n$templateCache.put(\"src/Header/viewer.html\",\"\");\n$templateCache.put(\"src/Help/screen_share_help.html\",\"<div><div class=\\\"col-md-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h3><strong>Question 1</strong>: Did the user receive the email?</h3><ul class=\\\"screen-share-troubles\\\"><li><u>If no:</u><br><br><ul><li><strong>Option 1</strong>: Have the user check their SPAM or Junk Email Box.</li><li><strong>Option 2</strong>: The Screen Share invite email was also sent to the Job\\'s Sales Representative. You can simply access your email and forward to the user.</li><li><strong>Option 3</strong>: Try another email address for the user.</li></ul><br></li><li><u>If yes, skip to Question 2.</u></li></ul><br><br><h3><strong>Question 2</strong>: The user has received the email and is unable to access the screen share.</h3><h4><u><strong>The User receives the \\\"Waiting for Presenter\\\" screen.</strong></u></h4><ul class=\\\"screen-share-troubles\\\"><li>Have you started the screen share? If not, start the screen share and the user should be connected momentarily.</li><li>If you already started the screen share, allow 5 to 10 seconds for the session to connect. If the user is still unable to access the screen share, please have the user click the refresh button.</li><li>If that does not work, try the options below.</li></ul><br><br><h4><u><strong>The user receives a blank white screen or is unable to connect.</strong></u></h4><ul class=\\\"screen-share-troubles\\\"><li>In most cases, this is caused by an unsupported browser. Please ask the user which browser they are using. We support Internet Explorer 10+, the latest versions of Edge, Firefox, Safari, and Chrome.</li><li>At the bottom of the screen share email invitation, there is a link you can have the user copy and paste into the other browser.</li><li>You can also text the user an invitation to the Screen Share for access on a mobile device.</li></ul></div></div></div></div>\");\n$templateCache.put(\"src/JobMenu/job_menu_manager.html\",\"<div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><div class=\\\"row\\\"><div class=\\\"col-md-10\\\"><h3>Job Menu Configuration</h3></div><div class=\\\"link col-md-2\\\" ng-click=\\\"$ctrl.addSection()\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp; Add Section</div></div></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4\\\" ng-repeat=\\\"section in $ctrl.cloneMenu.sections\\\"><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><i class=\\\"fa fa-chevron-left fa-pull-left link\\\" ng-click=\\\"$ctrl.moveSectionUp($index)\\\" ng-if=\\\"$index !== 0\\\"></i>Section:</div><div class=\\\"col-md-7\\\">{{section.renderedLabel}}</div><div class=\\\"col-md-2\\\"><i class=\\\"rsf-delete-link\\\" title=\\\"Remove Tool\\\" ng-click=\\\"$ctrl.removeSection(section)\\\"></i>&nbsp;&nbsp;<i class=\\\"fa fa-chevron-right fa-pull-right link\\\" ng-click=\\\"$ctrl.moveSectionDown($index)\\\" ng-if=\\\"($ctrl.cloneMenu.sections.length - 1) !== $index\\\"></i></div></div><br><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><input class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"section.label\\\" ng-change=\\\"$ctrl.sectionLabelChanged(section)\\\"></div></div><br><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><select ng-model=\\\"section.class\\\" class=\\\"form-control\\\" ng-change=\\\"$ctrl.triggerUpdate()\\\"><option value=\\\"yellow\\\">Yellow</option><option value=\\\"blue\\\">Blue</option><option value=\\\"green\\\">Green</option></select></div></div><table class=\\\"table table-striped\\\"><thead><tr><th style=\\\"width: 50%\\\">Menu Item</th><th style=\\\"width: 25%\\\">Hide In Presentation</th><th style=\\\"width: 25%\\\">Actions</th></tr></thead><tbody class=\\\"connected-list\\\" ui-sortable=\\\"$ctrl.sortableOptions\\\" ng-model=\\\"section.menuItems\\\"><tr ng-repeat=\\\"menuItem in section.menuItems\\\"><td><img class=\\\"dragHandle link\\\" src=\\\"/assets/images/icons/ic_sort.ea6f8933.png\\\" title=\\\"Move Menu Item\\\"> {{$ctrl.Pretty.name[menuItem.id]}}</td><td><input type=\\\"checkbox\\\" ng-model=\\\"menuItem.hideInPresentMode\\\" ng-change=\\\"$ctrl.triggerUpdate()\\\"></td><td><i class=\\\"rsf-delete-link rsf-base-66\\\" title=\\\"Remove Tool\\\" ng-click=\\\"$ctrl.removeMenuItem(section, menuItem)\\\"></i>&nbsp;&nbsp;</td></tr><tr ng-if=\\\"section.menuItems.length <= 0\\\"><td>Drag Here to add menu item</td><td></td></tr></tbody></table></div><div class=\\\"clearfix\\\" ng-if=\\\"($index + 1) % 3 === 0\\\"></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"offset-md-3 col-md-6\\\"><h4>All Available</h4><table class=\\\"table table-striped\\\"><thead><tr><th>Menu Items</th><th></th></tr></thead><tbody class=\\\"connected-list\\\" ui-sortable=\\\"$ctrl.sortableOptions\\\" ng-model=\\\"$ctrl.availableMenuItems\\\"><tr ng-repeat=\\\"menuItem in $ctrl.availableMenuItems\\\"><td><img class=\\\"dragHandle link\\\" src=\\\"/assets/images/icons/ic_sort.ea6f8933.png\\\" title=\\\"Move Menu Item\\\">&nbsp; {{$ctrl.Pretty.name[menuItem.id]}}</td><td></td></tr><tr ng-if=\\\"$ctrl.availableMenuItems.length < 1\\\"><td>Drag Here to disable the menu item</td><td></td></tr></tbody></table></div></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/list.html\",\"<div class=\\\"row\\\"><div class=\\\"col-sm-8 col-md-9\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-6\\\"><h1 class=\\\"job-list-title\\\">Customers</h1></div><div class=\\\"col-sm-6\\\"><div class=\\\"pull-right\\\"><button type=\\\"button\\\" rsf-permissions=\\\"sync_button\\\" permissions-on=\\\"CrmUser\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.sync()\\\" title=\\\"Pull Salesforce Opportunities\\\">Sync</button><div class=\\\"btn-group\\\"><button type=\\\"button\\\" class=\\\"btn\\\" ng-class=\\\"{ \\'btn-success\\': $ctrl.jobListCardView, \\'btn-light\\': !$ctrl.jobListCardView }\\\" ng-click=\\\"$ctrl.cardViewChanged()\\\"><img ng-if=\\\"!$ctrl.jobListCardView\\\" src=\\\"/assets/images/icons/ic_view_detailed_list.7ae5db86.png\\\"> <img ng-if=\\\"$ctrl.jobListCardView\\\" src=\\\"/assets/images/icons/ic_view_detailed_list_selected.25f56a9d.png\\\"></button><button type=\\\"button\\\" class=\\\"btn btn-success\\\" ng-class=\\\"{ \\'btn-success\\': !$ctrl.jobListCardView, \\'btn-light\\': $ctrl.jobListCardView }\\\" ng-click=\\\"$ctrl.cardViewChanged()\\\"><img ng-if=\\\"$ctrl.jobListCardView\\\" src=\\\"/assets/images/icons/ic_view_compressed_list.52ec3961.png\\\"> <img ng-if=\\\"!$ctrl.jobListCardView\\\" src=\\\"/assets/images/icons/ic_view_compressed_list_selected.320ff9f7.png\\\"></button></div><button analytics-on analytics-category=\\\"Job List\\\" analytics-event=\\\"add job\\\" ui-sref=\\\"job_header.job_show.info({id: \\'new\\'})\\\" title=\\\"Add New Job\\\" class=\\\"btn btn-default\\\" id=\\\"btn_add_job\\\" type=\\\"button\\\" rsf-permissions=\\\"create\\\" permissions-on=\\\"Job\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Job</button><filter-button></filter-button></div></div></div><div class=\\\"row\\\" rsf-permissions=\\\"read\\\" permissions-on=\\\"Job\\\" id=\\\"job-list-container\\\"><div id=\\\"job-list\\\" class=\\\"col-12\\\" infinite-scroll=\\\"$ctrl.throttledScroll()\\\" infinite-scroll-container=\\\"\\'#job-list-container\\'\\\" infinite-scroll-distance=\\\"2\\\" infinite-scroll-immediate-check=\\\"false\\\"><div class=\\\"row\\\" ng-if=\\\"$ctrl.loading && !$ctrl.jobResponse\\\"><div class=\\\"col-md-2 offset-md-5\\\"><img class=\\\"spinner-graphic\\\"></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.jobResponse.jobs.length == 0\\\"><div class=\\\"form-section col-12 blank-state\\\"><img src=\\\"/assets/images/icons-large/customers.13dee16d.png\\\"><h2>No Customers Exist. Let\\'s add one.</h2><p>Click on the add job button in the top right corner to get started.</p></div></div><span ng-include=\\\"$ctrl.jobListPartialUrl($ctrl.Session.currentUser.org.fetchSettingsAcl(\\'job_list\\'))\\\"></span></div></div></div><div class=\\\"col-sm-4 col-md-3\\\"><sidebar></sidebar></div></div>\");\n$templateCache.put(\"src/Jobs/measurement_editor_component.html\",\"<div ng-form name=\\\"measurementsForm\\\" class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-12 col-md-6\\\"><label for=\\\"type\\\" class=\\\"control-label\\\">Measurement Type</label><select id=\\\"type\\\" tabindex=\\\"100\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-options=\\\"type for type in $ctrl.types\\\" ng-model=\\\"$ctrl.opening.kind\\\" required></select></div><div class=\\\"col-12 col-md-6\\\"><label for=\\\"name\\\" class=\\\"control-label\\\">{{$ctrl.org.openingNameTitle()}}</label><input id=\\\"name\\\" tabindex=\\\"102\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.opening.name\\\" required></div></div><div class=\\\"row level-location\\\"><div class=\\\"col-12 col-lg-6\\\"><label for=\\\"level\\\" class=\\\"control-label\\\">Level</label><div class=\\\"row nested-row\\\"><div class=\\\"col-md-10\\\" ng-if=\\\"!$ctrl.addLevel\\\"><select tabindex=\\\"104\\\" name=\\\"level\\\" id=\\\"level\\\" class=\\\"form-control\\\" ng-options=\\\"level for level in $ctrl.measurement.levels\\\" ng-model=\\\"$ctrl.opening.level\\\"></select></div><div class=\\\"col-md-2\\\" ng-if=\\\"!$ctrl.addLevel\\\"><button type=\\\"button\\\" tabindex=\\\"105\\\" class=\\\"btn btn-default pull-right\\\" ng-click=\\\"$ctrl.enableLevelAdd()\\\" title=\\\"Add Level\\\"><i class=\\\"fa fa-plus\\\"></i></button></div><div class=\\\"col-md-10\\\" ng-if=\\\"$ctrl.addLevel\\\"><input type=\\\"text\\\" tabindex=\\\"106\\\" ng-model=\\\"$ctrl.opening.level\\\" placeholder=\\\"New Level\\\" uib-typeahead=\\\"level2 for level2 in $ctrl.measurement.levels | filter:$viewValue\\\" class=\\\"form-control\\\" typeahead-min-length=\\\"0\\\"></div><div class=\\\"col-md-2\\\" ng-if=\\\"$ctrl.addLevel\\\"><button type=\\\"button\\\" class=\\\"btn btn-default pull-right\\\" tabindex=\\\"107\\\" ng-click=\\\"$ctrl.addNewLevel()\\\" title=\\\"Save New Level\\\">Set</button></div></div></div><div class=\\\"col-12 col-lg-6\\\"><label for=\\\"location\\\" class=\\\"control-label\\\">Location</label><div class=\\\"row nested-row\\\"><div class=\\\"col-md-10\\\" ng-if=\\\"!$ctrl.addLocation\\\"><select tabindex=\\\"110\\\" name=\\\"lead_source\\\" id=\\\"location\\\" class=\\\"form-control\\\" ng-options=\\\"location for location in $ctrl.measurement.locations\\\" ng-model=\\\"$ctrl.opening.location\\\"></select></div><div class=\\\"col-md-2\\\" ng-if=\\\"!$ctrl.addLocation\\\"><button type=\\\"button\\\" tabindex=\\\"111\\\" class=\\\"btn btn-default pull-right\\\" ng-click=\\\"$ctrl.enableLocationAdd()\\\" title=\\\"Add Location\\\"><i class=\\\"fa fa-plus\\\"></i></button></div><div class=\\\"col-md-10\\\" ng-if=\\\"$ctrl.addLocation\\\"><input type=\\\"text\\\" tabindex=\\\"112\\\" ng-model=\\\"$ctrl.opening.location\\\" placeholder=\\\"New Location\\\" uib-typeahead=\\\"location2 for location2 in $ctrl.measurement.locations | filter:$viewValue\\\" class=\\\"form-control\\\" typeahead-min-length=\\\"0\\\"></div><div class=\\\"col-md-2\\\" ng-if=\\\"$ctrl.addLocation\\\"><button type=\\\"button\\\" class=\\\"btn btn-default pull-right\\\" tabindex=\\\"113\\\" ng-click=\\\"$ctrl.addNewLocation()\\\" title=\\\"Save New Location\\\">Set</button></div></div></div></div><div ng-if=\\\"$ctrl.opening.kind === \\'Door\\' || $ctrl.opening.kind === \\'Window\\'\\\"><div class=\\\"row\\\"><div class=\\\"col-3\\\"><label for=\\\"width\\\" class=\\\"control-label\\\">Width</label><input id=\\\"width\\\" tabindex=\\\"120\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"3\\\" step=\\\".001\\\" ng-model=\\\"$ctrl.opening.width\\\" required></div><div class=\\\"col-3\\\"><label for=\\\"height\\\" class=\\\"control-label\\\">Height</label><input id=\\\"height\\\" tabindex=\\\"121\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"3\\\" step=\\\".001\\\" ng-model=\\\"$ctrl.opening.height\\\" required></div><div class=\\\"col-6\\\" ng-if=\\\"!$ctrl.opening.id\\\"><label for=\\\"quantity\\\" class=\\\"control-label\\\">Qty</label><input class=\\\"form-control\\\" tabindex=\\\"122\\\" id=\\\"quantity\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" min=\\\"1\\\" step=\\\"1\\\" ng-model=\\\"$ctrl.opening.quantity\\\"></div></div><div class=\\\"row\\\"><div class=\\\"col-3\\\"><label for=\\\"area\\\" class=\\\"control-label\\\">Area</label><p id=\\\"area\\\">{{$ctrl.cleanSqft() | number: 2}} sqft</p></div><div class=\\\"col-3\\\"><label for=\\\"ui\\\" class=\\\"control-label\\\">UI</label><p id=\\\"ui\\\">{{$ctrl.cleanUi() | number: 0}}\\\"</p></div></div></div><div ng-if=\\\"$ctrl.opening.kind === \\'Room\\'\\\"><div class=\\\"row\\\"><div class=\\\"col-4\\\"><label for=\\\"area\\\" class=\\\"control-label\\\">Area</label><input id=\\\"area\\\" tabindex=\\\"130\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"2\\\" step=\\\".01\\\" ng-model=\\\"$ctrl.opening.area\\\"></div><div class=\\\"col-4\\\"><label for=\\\"perimeter\\\" class=\\\"control-label\\\">Perimeter</label><input id=\\\"perimeter\\\" tabindex=\\\"131\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"2\\\" step=\\\".01\\\" ng-model=\\\"$ctrl.opening.perimeter\\\"></div><div class=\\\"col-4\\\"><label for=\\\"threshold\\\" class=\\\"control-label\\\">Threshold</label><input id=\\\"threshold\\\" tabindex=\\\"132\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"2\\\" step=\\\".01\\\" ng-model=\\\"$ctrl.opening.threshold\\\"></div></div><div class=\\\"row\\\"><div class=\\\"col-4\\\"><label for=\\\"inside_corner\\\" class=\\\"control-label\\\">Inside Corner</label><input id=\\\"inside_corner\\\" tabindex=\\\"133\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"0\\\" ng-model=\\\"$ctrl.opening.inside_corner\\\"></div><div class=\\\"col-4\\\"><label for=\\\"outside_corner\\\" class=\\\"control-label\\\">Outside Corner</label><input id=\\\"outside_corner\\\" tabindex=\\\"134\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"0\\\" ng-model=\\\"$ctrl.opening.outside_corner\\\"></div></div></div></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/show.html\",\"<div class=\\\"row job job-show\\\" ui-tour=\\\"job-show-tour\\\" ui-tour-backdrop=\\\"true\\\" ui-tour-use-hotkeys=\\\"true\\\" ui-tour-on-shown=\\\"$ctrl.JobShowTourService.onShown()\\\" ui-tour-on-end=\\\"$ctrl.JobShowTourService.onEnd()\\\" ui-tour-on-next=\\\"$ctrl.JobShowTourService.onNext()\\\" ui-tour-on-prev=\\\"$ctrl.JobShowTourService.onPrev()\\\" ui-tour-scroll-parent-id=\\\"job-show-tour-scroll\\\" ui-tour-template-url=\\\"\\'src/Common/Tours/tour_step_template.html\\'\\\"><div id=\\\"job-show-tour-scroll\\\" ng-class=\\\"{ \\'sidenav\\': $ctrl.navDisplay, \\'sidenav-close\\': !$ctrl.navDisplay }\\\"><a id=\\\"jobs-back-to-customer\\\" class=\\\"customer-nav-back\\\" ng-if=\\\"!$ctrl.headerHidden\\\" analytics-on analytics-category=\\\"Job Show\\\" analytics-event=\\\"back to all\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" href=\\\"#\\\" ng-click=\\\"$ctrl.backToAllCustomers()\\\"><i class=\\\"fa fa-angle-left\\\" aria-hidden=\\\"true\\\"></i>&nbsp;Back to All Customers</a><header class=\\\"customer-nav-profile\\\"><p class=\\\"customer-nav-label\\\">Customer Overview</p><h1>{{$ctrl.job.customer_name}}</h1><ul><li><a href=\\\"{{\\'tel:\\' + $ctrl.job.phone_numbers[0].number}}\\\">{{$ctrl.job.phone_numbers[0].number}}</a></li><li>{{$ctrl.job.email}}</li></ul><a href=\\\"#\\\" analytics-on analytics-category=\\\"Job Show\\\" analytics-event=\\\"enter presentation\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" class=\\\"customer-nav-close\\\" ng-if=\\\"!!$ctrl.job\\\" ng-click=\\\"$ctrl.toggleNav()\\\"><i class=\\\"fa fa-2x fa-television\\\" aria-hidden=\\\"true\\\" title=\\\"Enter Presentation Mode\\\" id=\\\"presentation-mode-off\\\"></i></a><a href=\\\"#\\\" id=\\\"presentation-mode-on\\\" analytics-on analytics-category=\\\"Job Show\\\" analytics-event=\\\"exit presentation\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" class=\\\"customer-nav-hamburger\\\" ng-if=\\\"!!$ctrl.job\\\" ng-click=\\\"$ctrl.toggleNav()\\\"><i class=\\\"fa fa-close\\\" aria-hidden=\\\"true\\\" title=\\\"Exit Presentation Mode\\\"></i></a></header><section ng-repeat=\\\"section in $ctrl.sidebar.sections\\\" ng-class=\\\"section.class\\\"><p class=\\\"customer-nav-label\\\">{{::section.renderedLabel}}</p><ul class=\\\"sidebar-menu\\\"><li ng-repeat=\\\"menuItem in section.menuItems\\\" id=\\\"{{menuItem.id}}\\\" analytics-on analytics-category=\\\"Job Show\\\" analytics-event=\\\"{{::menuItem.analyticsEvent}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-class=\\\"{ \\'k-state-active\\': $ctrl.isCurrentPage(menuItem.pageUrl) }\\\" ng-hide=\\\"!$ctrl.navDisplay && menuItem.hideInPresentMode\\\" class=\\\"k-item\\\" ng-click=\\\"menuItem.navigate()\\\"><span class=\\\"k-link\\\"><span ng-class=\\\"{ \\'menu-text-selected\\': $ctrl.isCurrentPage(menuItem.pageUrl) }\\\" class=\\\"menu-text\\\"><img ng-src=\\\"{{::menuItem.iconImg}}\\\" title=\\\"{{::menuItem.label}}\\\"><span class=\\\"customer_nav_text\\\">{{::menuItem.label}}</span></span><span ng-if=\\\"::menuItem.badge\\\" class=\\\"badge pull-right\\\">{{menuItem.badge()}}</span><span class=\\\"pull-right\\\" ng-show=\\\"$ctrl.isCurrentPage(menuItem.pageUrl)\\\"></span></span></li></ul></section><br><br><br></div><div ng-class=\\\"{ \\'job-content\\': $ctrl.navDisplay, \\'job-content-expand\\': !$ctrl.navDisplay, \\'no-header\\': $ctrl.headerHidden }\\\"><div ui-view=\\\"jobShow\\\"></div><job-tabs></job-tabs></div></div>\");\n$templateCache.put(\"src/LeafletMap/leaflet_map_component.html\",\"<div id=\\\"mapid\\\"></div>\");\n$templateCache.put(\"src/Login/logout.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><rsf-spinner show=\\\"true\\\"></rsf-spinner></div></div>\");\n$templateCache.put(\"src/Login/screen_share_help.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-10 offset-md-1\\\"><button type=\\\"button\\\" class=\\\"btn btn-default pull-right\\\" ui-sref=\\\"root.login\\\">Back to Login</button></div></div><div class=\\\"row\\\"><div class=\\\"col-md-10 offset-md-1\\\"><h1><strong>Screen Share Troubleshooting</strong></h1></div></div><div class=\\\"row\\\"><div class=\\\"col-md-10 offset-md-1\\\"><div ng-include=\\\"\\'src/Help/screen_share_help.html\\'\\\"></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-10 offset-md-1\\\"><button type=\\\"button\\\" class=\\\"btn btn-default pull-right\\\" ui-sref=\\\"root.login\\\">Back to Login</button></div></div>\");\n$templateCache.put(\"src/Login/terms_and_conditions.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-10 offset-md-1\\\"><button ng-if=\\\"ctrl.user.id\\\" type=\\\"button\\\" class=\\\"btn btn-default pull-right\\\" ui-sref=\\\"root.login\\\">Back to Dashboard</button><button ng-if=\\\"!ctrl.user.id\\\" type=\\\"button\\\" class=\\\"btn btn-default pull-right\\\" ui-sref=\\\"root.login\\\" #linklogin>Back to Login</button></div></div><div class=\\\"row\\\"><div class=\\\"col-md-10 offset-md-1\\\"><div ng-include=\\\"\\'src/TermsAndConditions/terms.html\\'\\\"></div></div></div>\");\n$templateCache.put(\"src/Patterns/pattern_editor_component.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"pull-right\\\" ng-if=\\\"$ctrl.fullscreen\\\"><a class=\\\"fullscreen\\\" ng-click=\\\"$ctrl.fullScreen()\\\"><i class=\\\"fa fa-close link\\\"></i>&nbsp;Close</a></div><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><h1>PDF Patterns</h1></div><div class=\\\"col-md-6\\\"><div class=\\\"pull-right\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.save()\\\">Save</button><button type=\\\"button\\\" class=\\\"btn btn-light\\\" ng-click=\\\"$ctrl.close()\\\">Close</button></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h4>PDF Pattern</h4><label class=\\\"checkbox-inline\\\"><input type=\\\"checkbox\\\" ng-model=\\\"$ctrl.edit_pattern.active\\\">Active</label></div></div><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"name\\\">Name</label><input tabindex=\\\"2\\\" type=\\\"text\\\" class=\\\"form-control\\\" ng-model=\\\"$ctrl.edit_pattern.name\\\" id=\\\"name\\\" required></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"doc_type\\\">Document Type</label><select id=\\\"doc_type\\\" tabindex=\\\"2\\\" class=\\\"form-control\\\" ng-model=\\\"$ctrl.edit_pattern.doc_type\\\" ng-options=\\\"$ctrl.Pretty.name[value] for value in $ctrl.patternDocTypes\\\"></select></div></div></div></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h4>Test Data</h4></div></div><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"job\\\">Job</label><select id=\\\"job\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-options=\\\"job.name for job in $ctrl.jobs\\\" ng-change=\\\"$ctrl.jobChanged()\\\" ng-model=\\\"$ctrl.job\\\"></select></div><div class=\\\"form-group\\\"><label for=\\\"doc_type2\\\">Doc Type</label><select id=\\\"doc_type2\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-options=\\\"$ctrl.Pretty.name[value] for value in $ctrl.docTypes\\\" ng-change=\\\"$ctrl.estimateChanged()\\\" ng-model=\\\"$ctrl.doc_type\\\"></select></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"estimate\\\">Estimate</label><select id=\\\"estimate\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-options=\\\"est.name for est in $ctrl.estimates\\\" ng-change=\\\"$ctrl.estimateChanged()\\\" ng-model=\\\"$ctrl.estimate\\\"></select></div></div></div></div></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><p>Editor</p></div><div class=\\\"col-md-6\\\"><button class=\\\"btn btn-default pull-right\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.compile()\\\">Compile Pattern</button></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"ace-editor2\\\"><div id=\\\"editor\\\"></div></div></div></div></div><div class=\\\"col-md-6\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><p>HTML Preview</p></div><div class=\\\"col-md-6\\\"><button type=\\\"button\\\" class=\\\"btn btn-link pull-right\\\" ng-if=\\\"!$ctrl.fullscreen\\\" ng-click=\\\"$ctrl.fullScreen()\\\"><i class=\\\"fa fa-expand link\\\"></i>&nbsp;Fullscreen</button></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><textarea>{{$ctrl.compiled_html}}</textarea></div></div><div class=\\\"row\\\"><iframe srcdoc=\\\"{{$ctrl.compiled_html}}\\\" ng-class=\\\"{fullscreen: $ctrl.fullscreen}\\\"></iframe></div></div></div>\");\n$templateCache.put(\"src/ProductOptionSelector/product_option_selector_component.html\",\"<div class=\\\"col-md-4 left-column\\\" ng-show=\\\"$ctrl.productOptionGroupsByType().length > 0\\\"><div class=\\\"row title\\\"><div class=\\\"col-md-12\\\"><h4>Available Options</h4></div></div><hr><div class=\\\"row\\\" ng-repeat=\\\"optionGroup in $ctrl.productOptionGroupsByType()\\\"><div class=\\\"col-md-12\\\"><div class=\\\"row vertical-align option-name\\\"><div class=\\\"col-md-8\\\">{{::optionGroup.name}}</div><div ng-if=\\\"$ctrl.canAdd(optionGroup)\\\" class=\\\"col-md-4\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.addOptionGroup(optionGroup)\\\">Add</button></div><div ng-if=\\\"!$ctrl.canAdd(optionGroup)\\\" class=\\\"col-md-4\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.changeOptionGroup(optionGroup)\\\">Change</button></div></div></div></div></div><div ng-if=\\\"!$ctrl.addingOption\\\" class=\\\"col-md-8\\\"><div class=\\\"row title\\\"><div class=\\\"offset-md-4 col-md-4\\\"><h4>Selected Options</h4></div></div><hr><div class=\\\"row vertical-align\\\"><div class=\\\"col-md-5 table-col-header\\\">Description</div><div class=\\\"col-md-2 table-col-header\\\">Qty Per</div><div class=\\\"col-md-3 table-col-header\\\">Unit Price</div><div class=\\\"col-md-2 table-col-header\\\"></div></div><div class=\\\"row vertical-align\\\" ng-repeat=\\\"option in $ctrl.lineItem.optionsType($ctrl.type) | filter:{_destroy: \\'!true\\'}\\\"><div class=\\\"col-md-5\\\"><span><i class=\\\"fa fa-info-circle\\\" ng-if=\\\"option.charge_type === \\'per\\'\\\" uib-tooltip=\\\"Quantity is per Line Item\\\"></i>&nbsp;</span>{{::option.product_option_group_name}}: {{::option.product_option_name}}</div><div class=\\\"col-md-2\\\"><input class=\\\"form-control\\\" type=\\\"number\\\" decimal-places=\\\"2\\\" ng-model=\\\"option.quantity\\\"></div><div class=\\\"col-md-3\\\">{{::option.ext_price | currency}}</div><div class=\\\"col-md-2\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.removeOption(option)\\\">Remove</button></div></div></div><div ng-if=\\\"$ctrl.addingOption\\\" class=\\\"col-md-8\\\"><div class=\\\"row vertical-align\\\"><div class=\\\"col-md-6 table-col-header\\\">Description</div><div class=\\\"col-md-3 table-col-header\\\">Unit Price</div><div class=\\\"col-md-3 table-col-header\\\"></div></div><div class=\\\"row vertical-align\\\" ng-repeat=\\\"productOption in $ctrl.productOptions()\\\" ng-class=\\\"{\\'selected-option\\': $ctrl.alreadyAdded(productOption)}\\\"><div class=\\\"col-md-6\\\"><span><i class=\\\"fa fa-info-circle\\\" ng-if=\\\"productOption.charge_type === \\'per\\'\\\" uib-tooltip=\\\"Charge Per Line Item\\\"></i>&nbsp;{{::productOption.name}}</span></div><div class=\\\"col-md-3\\\"><span ng-if=\\\"productOption.uom !== \\'percent\\'\\\">{{productOption.calculatePrice($ctrl.estimate, $ctrl.lineItem) | currency}}</span><span ng-if=\\\"productOption.uom === \\'percent\\'\\\">{{productOption.price}}%</span></div><div class=\\\"col-md-3\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.addProductOption(productOption)\\\">Select</button></div></div><div class=\\\"row\\\"><div class=\\\"offset-md-6 col-md-3\\\"><button type=\\\"button\\\" class=\\\"btn btn-danger\\\" ng-click=\\\"$ctrl.cancelAddingOptionGroup()\\\">Cancel</button></div></div></div>\");\n$templateCache.put(\"src/Profile/accept_tos.html\",\"<div class=\\\"row tos\\\"><div id=\\\"lipsum\\\"><div class=\\\"col-md-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12 text-center\\\"><h1>Terms of Service</h1></div></div><hr><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div ng-include=\\\"\\'src/TermsAndConditions/terms.html\\'\\\"></div></div></div><hr><div class=\\\"row\\\"><div class=\\\"offset-md-8 col-md-2\\\"><button type=\\\"button\\\" class=\\\"btn btn-success\\\" ng-click=\\\"$ctrl.ok()\\\">I Agree</button></div><div class=\\\"col-md-2\\\"><button type=\\\"button\\\" class=\\\"btn btn-danger\\\" ng-click=\\\"$ctrl.cancel()\\\">I Don\\'t Agree</button></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\">&nbsp;</div></div></div></div></div>\");\n$templateCache.put(\"src/Profile/alert.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-12 text-center\\\"><div class=\\\"jumbotron\\\"><h1><strong>We are sorry!</strong></h1><p>There is a problem with your organization. Please contact our support department:</p><p><strong>Phone</strong>:&nbsp;<a href=\\\"tel:{{$ctrl.BaseConfig.CONTACT_PHONE}}\\\">{{$ctrl.BaseConfig.CONTACT_PHONE}}</a><br><strong>Email</strong>:&nbsp;<a href=\\\"mailto:{{$ctrl.BaseConfig.CONTACT_EMAIL}}\\\">{{$ctrl.BaseConfig.CONTACT_EMAIL}}</a></p><p ng-if=\\\"$ctrl.BaseConfig.CONTACT_HOURS !== \\'\\'\\\"><strong>Hours of Operation</strong>:<br>{{$ctrl.BaseConfig.CONTACT_HOURS}}</p><p><button type=\\\"button\\\" class=\\\"btn btn-default btn-lg\\\" ng-click=\\\"$ctrl.cancel()\\\">OK</button></p></div></div></div>\");\n$templateCache.put(\"src/Profile/error.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-12 text-center\\\"><div class=\\\"jumbotron\\\"><p class=\\\"error-code\\\">404</p><p class=\\\"error-message\\\">Resource Not Found</p><p><button type=\\\"button\\\" class=\\\"btn btn-default btn-lg\\\" ng-click=\\\"$ctrl.cancel()\\\">Take me back to the main page</button></p></div></div></div>\");\n$templateCache.put(\"src/Profile/profile.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"profile row\\\"><div class=\\\"col-md-8\\\"><h1>Profile</h1></div><div class=\\\"col-md-4\\\"><button type=\\\"submit\\\" form=\\\"user-form\\\" class=\\\"btn btn-default pull-right\\\" ng-disabled=\\\"!$ctrl.check()\\\" ng-show=\\\"$ctrl.userTabSelected()\\\">Save Changes</button></div><div class=\\\"col-md-12\\\"><uib-tabset vertical=\\\"true\\\" type=\\\"pills\\\" active=\\\"active\\\"><uib-tab index=\\\"0\\\" heading=\\\"User Profile\\\" select=\\\"$ctrl.tabSelected(\\'User Tab\\')\\\"><form id=\\\"user-form\\\" ng-submit=\\\"$ctrl.saveUserForm(userForm)\\\" name=\\\"userForm\\\" class=\\\"form\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h2>{{$ctrl.user.name()}}</h2><p class=\\\"small\\\"><strong>Note</strong>: This information is used on your {{$ctrl.Session.currentUser.org.estimateTitle(true)}} and {{$ctrl.Session.currentUser.org.contractTitle(true)}}.</p></div></div></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"first_name\\\" class=\\\"control-label\\\">First Name</label><input tabindex=\\\"1\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.user.first_name\\\" id=\\\"first_name\\\" ng-readonly=\\\"$ctrl.Session.authService.getIdp() !== \\'rsf\\'\\\" required></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"last_name\\\" class=\\\"control-label\\\">Last Name</label><input tabindex=\\\"2\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.user.last_name\\\" id=\\\"last_name\\\" ng-readonly=\\\"$ctrl.Session.authService.getIdp() !== \\'rsf\\'\\\" required></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"phone\\\" class=\\\"control-label\\\">Phone Number</label><input tabindex=\\\"3\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.user.phone\\\" id=\\\"phone\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"email\\\" class=\\\"control-label\\\">Email</label><input tabindex=\\\"4\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.user.email\\\" id=\\\"email\\\" ng-disabled=\\\"true\\\" title=\\\"Contact your account manager to change your email.\\\"></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"job_list_view\\\" class=\\\"control-label\\\">Customer List Default</label><select tabindex=\\\"1\\\" class=\\\"form-control\\\" name=\\\"job_list_view\\\" id=\\\"job_list_view\\\" ng-model=\\\"$ctrl.preferences.job_list_card_view\\\" ng-options=\\\"value.id as value.text for value in $ctrl.jobListViewValues\\\"></select></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"estimator_tour\\\" class=\\\"control-label\\\">Show Estimator Tour</label><select tabindex=\\\"2\\\" class=\\\"form-control\\\" name=\\\"estimator_tour\\\" id=\\\"estimator_tour\\\" ng-model=\\\"$ctrl.preferences.config.estimator_tour\\\" ng-options=\\\"value.id as value.text for value in $ctrl.showEstimatorTourValues\\\"></select></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ui-sref=\\\"root.change_password\\\" ng-if=\\\"$ctrl.Session.authService.getIdp() === \\'rsf\\'\\\">Change Password</button></div></div></div></div><notifications ng-if=\\\"$ctrl.user\\\" user=\\\"$ctrl.user\\\" user-preferences=\\\"$ctrl.preferences\\\" update-user-notifications=\\\"$ctrl.updateUserNotifications\\\" set-notification-error=\\\"$ctrl.setNotificationError\\\"></notifications></form><form ng-submit=\\\"$ctrl.saveCalendarForm(calendarForm)\\\" name=\\\"calendarForm\\\" rsf-permissions=\\\"cronofy\\\" permissions-on=\\\"org_profile\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h2>Calendar Options</h2><div class=\\\"pull-right\\\"><button ng-disabled=\\\"calendarForm.$pristine\\\" type=\\\"submit\\\" class=\\\"btn btn-default\\\">Save</button></div></div></div></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table\\\"><thead><tr><th>Provider</th><th>Profile</th><th>Calendar Name</th><th>Sync</th><th></th></tr></thead><tbody><tr ng-repeat=\\\"calendar in $ctrl.calendarResponse.calendars\\\"><td>{{calendar.provider | calendarProvider}}</td><td>{{calendar.profile_name}}</td><td>{{calendar.name}}</td><td><div class=\\\"input-group\\\"><select class=\\\"form-control\\\" name=\\\"{{calendar.id}}\\\" ng-model=\\\"calendar.sync_dir\\\"><option value=\\\"ignore\\\">Nothing</option><option value=\\\"push\\\">Push Only</option><option value=\\\"pull\\\">Pull Only</option><option value=\\\"both\\\">Sync</option></select></div></td><td><button ng-if=\\\"calendarForm[calendar.id].$pristine && calendar.sync_dir != \\'ignore\\'\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.syncEvents(calendar)\\\">Sync Events</button></td></tr></tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"btn-toolbar\\\"><div class=\\\"btn-group\\\" role=\\\"group\\\"><a class=\\\"btn btn-default\\\" href=\\\"{{$ctrl.cronofyUrl}}\\\">Setup New Account</a></div><div class=\\\"btn-group ml-3\\\" role=\\\"group\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.CalendarResource.sync()\\\">Sync Calendars</button></div></div></div></div></div></div><div class=\\\"form-section\\\"><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><p>Only use this button if you have been instructed by a member of the support team.</p><clear-workers-button></clear-workers-button><p class=\\\"mt-3\\\">Token Kind: {{$ctrl.Session.authService.getIdp()}}</p></div></div></div></div></form></uib-tab><uib-tab index=\\\"1\\\" heading=\\\"Organization Profile\\\" select=\\\"$ctrl.tabSelected(\\'Org Tab\\')\\\"><form class=\\\"form\\\" ng-submit=\\\"$ctrl.saveOrgForm(orgForm)\\\" name=\\\"orgForm\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h2>{{$ctrl.org.name}}</h2><p class=\\\"small\\\"><strong>Note</strong>: This information is used on your organization\\'s {{$ctrl.Session.currentUser.org.estimateTitle(true)}} and {{$ctrl.Session.currentUser.org.contractTitle(true)}}.</p><div class=\\\"pull-right\\\"><button type=\\\"submit\\\" class=\\\"btn btn-default\\\" rsf-permissions=\\\"update\\\" permissions-on=\\\"Org\\\" on-object=\\\"$ctrl.org\\\">Save Changes</button></div></div></div></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-group\\\"><label>Logo:</label><br><button type=\\\"button\\\" class=\\\"btn btn-default center\\\" ng-if=\\\"$ctrl.org.images.length <= 0\\\" ngf-select=\\\"$ctrl.upload($file, $invalidFiles)\\\" ngf-pattern=\\\"\\'image/*\\'\\\" ngf-accept=\\\"\\'image/*\\'\\\" ngf-max-size=\\\"10MB\\\" ngf-min-height=\\\"25\\\" rsf-permissions=\\\"update\\\" permissions-on=\\\"Org\\\" on-object=\\\"$ctrl.org\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Logo</button><div ng-repeat=\\\"image in $ctrl.org.images\\\" ng-if=\\\"$ctrl.org.images.length > 0\\\"><div class=\\\"rsf-thumbnail\\\" style=\\\"display: inline-block\\\"><img ng-src=\\\"{{::image.getUrl(\\'medium\\')}}\\\"></div><div rsf-permissions=\\\"update\\\" permissions-on=\\\"Org\\\" on-object=\\\"$ctrl.org\\\" style=\\\"display: inline-block\\\"><button type=\\\"button\\\" class=\\\"btn btn-danger\\\" title=\\\"Delete Logo\\\" rsf-confirmation-dialog=\\\"$ctrl.deleteImage(image)\\\" rsf-confirmation-message=\\\"Are you sure you wish to delete the logo?\\\"><i class=\\\"fa fa-trash-o\\\"></i></button></div></div></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_line_1\\\" class=\\\"control-label\\\">Address</label><input tabindex=\\\"1\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.org.address.line_1\\\" id=\\\"address_line_1\\\" ng-disabled=\\\"$ctrl.readOnlyOrg\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_line_2\\\" class=\\\"control-label\\\">Suite, Apt No. (Optional)</label><input tabindex=\\\"2\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.org.address.line_2\\\" id=\\\"address_line_2\\\" ng-disabled=\\\"$ctrl.readOnlyOrg\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_city\\\" class=\\\"control-label\\\">City</label><input tabindex=\\\"3\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.org.address.city\\\" id=\\\"address_city\\\" ng-disabled=\\\"$ctrl.readOnlyOrg\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_state\\\" class=\\\"control-label\\\">State</label><select tabindex=\\\"4\\\" name=\\\"address_state\\\" id=\\\"address_state\\\" ng-model=\\\"$ctrl.org.address.state\\\" ng-options=\\\"state for state in $ctrl.US_STATES\\\" class=\\\"form-control\\\" ng-disabled=\\\"$ctrl.readOnlyOrg\\\"></select></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_postal_code\\\" class=\\\"control-label\\\">Postal Code</label><input tabindex=\\\"5\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.org.address.postal_code\\\" id=\\\"address_postal_code\\\" ng-disabled=\\\"$ctrl.readOnlyOrg\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_country\\\" class=\\\"control-label\\\">Country</label><select tabindex=\\\"6\\\" name=\\\"address_country\\\" id=\\\"address_country\\\" ng-model=\\\"$ctrl.org.address.country\\\" ng-options=\\\"country for country in $ctrl.COUNTRIES\\\" class=\\\"form-control\\\" ng-disabled=\\\"$ctrl.readOnlyOrg\\\"></select></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"phone_number\\\" class=\\\"control-label\\\">Phone Number</label><input tabindex=\\\"7\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.org.phone_number\\\" id=\\\"phone_number\\\" ng-disabled=\\\"$ctrl.readOnlyOrg\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"website\\\" class=\\\"control-label\\\">Website</label><input tabindex=\\\"\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.org.website\\\" id=\\\"website\\\" ng-disabled=\\\"$ctrl.readOnlyOrg\\\"></div></div></div></div></div></form></uib-tab></uib-tabset></div></div>\");\n$templateCache.put(\"src/Reports/eagleview_login_modal.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">EagleView&trade; Authorization</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.dismiss()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><form class=\\\"form\\\" ng-submit=\\\"$ctrl.login()\\\"><div class=\\\"modal-body\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"row\\\"><div class=\\\"offset-md-2 col-md-8\\\"><div class=\\\"form-group\\\" ng-submit=\\\"$ctrl.login()\\\"><label for=\\\"username\\\" class=\\\"control-label\\\">Username:</label><input tabindex=\\\"1\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.credentials.username\\\" id=\\\"username\\\" required></div><div class=\\\"form-group\\\"><label for=\\\"password\\\" class=\\\"control-label\\\">Password:</label><input tabindex=\\\"1\\\" class=\\\"form-control\\\" type=\\\"password\\\" ng-model=\\\"$ctrl.credentials.password\\\" id=\\\"password\\\" required></div></div></div></div></div></div><div class=\\\"modal-footer\\\"><button type=\\\"submit\\\" class=\\\"btn btn-default\\\">Authorize</button><button type=\\\"button\\\" class=\\\"btn btn-cancel\\\" ng-click=\\\"$ctrl.dismiss()\\\">Cancel</button></div></form>\");\n$templateCache.put(\"src/Reports/eagleview_ordering_modal_component.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"general-wizard\\\"><div class=\\\"modal-header\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.back()\\\" ng-if=\\\"$ctrl.activeStep > 0\\\" class=\\\"btn btn-default\\\"><i class=\\\"fa fa-chevron-left\\\"></i>&nbsp;Back</button></div><div class=\\\"col-md-6\\\" ng-if=\\\"$ctrl.importExisting\\\"><h3>Choose EagleView&trade; Report</h3></div><div class=\\\"col-md-6\\\" ng-if=\\\"!$ctrl.importExisting\\\"><h3>EagleView&trade; Report</h3></div><div class=\\\"col-md-2\\\" rsf-permissions=\\\"import\\\" permissions-on=\\\"eagleview\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.importExisting = true\\\" ng-if=\\\"!$ctrl.importExisting && $ctrl.activeStep === 0\\\" class=\\\"btn btn-success\\\">Import Existing</button></div></div><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.cancel()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\"><eagleview-import ng-if=\\\"$ctrl.importExisting\\\"></eagleview-import><uib-tabset ng-if=\\\"!$ctrl.importExisting\\\" active=\\\"$ctrl.activeStep\\\" class=\\\"wizard-tabs\\\"><uib-tab index=\\\"0\\\" heading=\\\"Step 1: Choose Report Type\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><h3>Step 1: Choose Report Type</h3></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"report_type1\\\" class=\\\"control-label\\\">Report Type:</label><div class=\\\"form-check\\\" ng-repeat=\\\"product in $ctrl.products.products\\\"><input class=\\\"form-check-input\\\" type=\\\"radio\\\" name=\\\"product\\\" id=\\\"report_type1\\\" ng-change=\\\"$ctrl.productChanged()\\\" ng-model=\\\"$ctrl.order.product\\\" ng-value=\\\"product\\\"><label class=\\\"form-check-label\\\" for=\\\"report_type1\\\">&nbsp;{{product.description}}</label><br><span class=\\\"footer-text\\\">{{product.name}}</span></div></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"report_type1\\\" class=\\\"control-label\\\">Delivery Options:</label><div class=\\\"form-check\\\" ng-repeat=\\\"shipping in $ctrl.order.product.delivery_products\\\"><input class=\\\"form-check-input\\\" type=\\\"radio\\\" name=\\\"delivery_product\\\" id=\\\"delivery_options1\\\" ng-model=\\\"$ctrl.order.delivery_product\\\" ng-value=\\\"shipping\\\"><label class=\\\"form-check-label\\\" for=\\\"delivery_options1\\\">&nbsp;{{shipping.name}}<span class=\\\"footer-text\\\">&nbsp;- {{shipping.description}}</span></label></div></div><div class=\\\"form-group\\\" ng-if=\\\"$ctrl.order.product.add_on_products.length > 0\\\"><label for=\\\"report_type1\\\" class=\\\"control-label\\\">Add On Options:</label><div class=\\\"form-check\\\" ng-repeat=\\\"addOn in $ctrl.order.product.add_on_products\\\"><input class=\\\"form-check-input\\\" type=\\\"checkbox\\\" name=\\\"delivery_product\\\" ng-click=\\\"$ctrl.toggleSelection(addOn)\\\" ng-checked=\\\"$ctrl.selected(addOn)\\\" ng-value=\\\"addOn.product_id\\\"><label class=\\\"form-check-label\\\" for=\\\"delivery_options1\\\">&nbsp;{{addOn.name}}<span class=\\\"footer-text\\\">&nbsp;- {{addOn.description}}</span></label></div></div></div></div></div></div></uib-tab><uib-tab index=\\\"1\\\" heading=\\\"Step 2: Enter Address Information\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><h3>Step 2: Enter Address Information</h3></div><div class=\\\"form-section-content\\\"><form name=\\\"$ctrl.reportInfo\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_name\\\" class=\\\"control-label\\\">Customer Name</label><input tabindex=\\\"3\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.insured_name\\\" id=\\\"customer_name\\\" name=\\\"customer_name\\\" required></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_1\\\" class=\\\"control-label\\\">Address 1</label><input tabindex=\\\"3\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.address.line_1\\\" id=\\\"address_1\\\" ng-change=\\\"$ctrl.debouncedAddressChanged()\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_2\\\" class=\\\"control-label\\\">Address 2</label><input tabindex=\\\"4\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.address.line_2\\\" id=\\\"address_2\\\" ng-change=\\\"$ctrl.debouncedAddressChanged()\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_city\\\" class=\\\"control-label\\\">City</label><input tabindex=\\\"5\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.address.city\\\" id=\\\"address_city\\\" ng-change=\\\"$ctrl.debouncedAddressChanged()\\\"></div></div><div class=\\\"col-md-3\\\"><div class=\\\"form-group\\\"><label for=\\\"address_state\\\" class=\\\"control-label\\\">State</label><select tabindex=\\\"6\\\" name=\\\"address_state\\\" id=\\\"address_state\\\" ng-model=\\\"$ctrl.order.address.state\\\" ng-options=\\\"state for state in $ctrl.US_STATES\\\" class=\\\"form-control\\\" ng-change=\\\"$ctrl.debouncedAddressChanged()\\\"></select></div></div><div class=\\\"col-md-3\\\"><div class=\\\"form-group\\\"><label for=\\\"address_postal_code\\\" class=\\\"control-label\\\">Postal Code</label><input tabindex=\\\"7\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.address.postal_code\\\" id=\\\"address_postal_code\\\" name=\\\"address_postal_code\\\" required ng-change=\\\"$ctrl.debouncedAddressChanged()\\\"></div></div></div></form><hr><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_name\\\" class=\\\"control-label\\\">Measurement Request Type</label><select name=\\\"measurement_type\\\" id=\\\"measurement_type\\\" class=\\\"form-control\\\"><option value=\\\"1\\\">Primary Structure + Detached Garage</option><option value=\\\"2\\\">Primary Structure Only</option><option value=\\\"3\\\">All Structures on Parcel</option><option value=\\\"4\\\">Commercial Complex</option><option value=\\\"5\\\">Other</option></select></div></div></div><div class=\\\"row\\\" ng-show=\\\"$ctrl.order.address.isValidLatLon()\\\"><div class=\\\"col-md-12\\\"><p class=\\\"bg-warning\\\">Please make sure the correct structure is centered under the marker by clicking & dragging the map.</p></div></div><div class=\\\"row\\\" ng-show=\\\"$ctrl.order.address.isValidLatLon()\\\"><div class=\\\"col-md-12 map-view\\\"><div class=\\\"info-map\\\"><pin-drop update=\\\"$ctrl.locationUpdated(address)\\\" address=\\\"$ctrl.order.address\\\" tilt=\\\"false\\\"></pin-drop></div></div></div></div></div></uib-tab><uib-tab index=\\\"2\\\" heading=\\\"Step 3: Enter Report Information\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><h3>Step 2: Enter Report Information</h3></div><div class=\\\"form-section-content\\\"><form name=\\\"$ctrl.reportInfo\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-group\\\"><label for=\\\"claim_number\\\" class=\\\"control-label\\\">Claim Number</label><input tabindex=\\\"100\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.claim_number\\\" id=\\\"claim_number\\\" name=\\\"claim_number\\\"></div><div class=\\\"form-group\\\"><label for=\\\"claim_information\\\" class=\\\"control-label\\\">Claim Information</label><input tabindex=\\\"101\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.claim_info\\\" id=\\\"claim_information\\\" name=\\\"claim_information\\\"></div><div class=\\\"form-group\\\"><label for=\\\"po_number\\\" class=\\\"control-label\\\">PO Number</label><input tabindex=\\\"102\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.po_number\\\" id=\\\"po_number\\\" name=\\\"po_number\\\"></div><div class=\\\"form-group\\\"><label for=\\\"cat_id\\\" class=\\\"control-label\\\">Cat ID</label><input tabindex=\\\"103\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.cat_id\\\" id=\\\"cat_id\\\" name=\\\"cat_id\\\"></div><div class=\\\"form-group\\\"><label for=\\\"special_instructions\\\" class=\\\"control-label\\\">Special Instructions</label><textarea tabindex=\\\"104\\\" class=\\\"form-control full-width\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.order.comments\\\" id=\\\"special_instructions\\\" name=\\\"special_instructions\\\"></textarea></div><div class=\\\"form-group\\\"><label for=\\\"last_four\\\" class=\\\"control-label\\\">Changes in last 4 years</label><input tabindex=\\\"105\\\" type=\\\"checkbox\\\" ng-model=\\\"$ctrl.order.changes_in_last_4_years\\\" id=\\\"last_four\\\" name=\\\"last_four\\\"></div></div></div></form></div></div></uib-tab><uib-tab index=\\\"3\\\" heading=\\\"Step 3: Review Order\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><h3>Step 3: Review Order</h3></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><p><strong>Name:</strong>&nbsp;{{$ctrl.order.insured_name}}</p><br><p><strong>Address:</strong>&nbsp;{{$ctrl.order.address.fullAddress()}}</p><br><p ng-if=\\\"$ctrl.order.claim_number\\\"><strong>Claim Number:</strong>&nbsp;{{$ctrl.order.claim_number}}</p><p ng-if=\\\"$ctrl.order.claim_info\\\"><strong>Claim Info:</strong>&nbsp;{{$ctrl.order.claim_info}}</p><p ng-if=\\\"$ctrl.order.po_number\\\"><strong>PO Number:</strong>&nbsp;{{$ctrl.order.po_number}}</p><p ng-if=\\\"$ctrl.order.cat_id\\\"><strong>Cat ID:</strong>&nbsp;{{$ctrl.order.cat_id}}</p><p ng-if=\\\"$ctrl.order.changes_in_last_4_years\\\"><strong>Changes in last 4 years:</strong>&nbsp;{{$ctrl.order.changes_in_last_4_years}}</p><br ng-if=\\\"$ctrl.order.comments\\\"><p ng-if=\\\"$ctrl.order.comments\\\"><strong>Special Instructions:</strong>&nbsp;{{$ctrl.order.comments}}</p></div></div><div class=\\\"row\\\"><div class=\\\"offset-md-1 col-md-10\\\"><div class=\\\"row table-header\\\"><div class=\\\"col-md-6\\\">Item</div><div class=\\\"col-md-2\\\"></div><div class=\\\"col-md-4\\\">Price</div></div><div class=\\\"row table-body\\\"><div class=\\\"col-md-6\\\">{{$ctrl.order.product.name}}</div><div class=\\\"col-md-2\\\"></div><div class=\\\"col-md-4\\\" ng-if=\\\"$ctrl.order.product.price_min === $ctrl.order.product.price_max\\\">{{$ctrl.order.product.price_min | currency}}</div><div class=\\\"col-md-4\\\" ng-if=\\\"$ctrl.order.product.price_min !== $ctrl.order.product.price_max\\\">{{$ctrl.order.product.price_min | currency}} - {{$ctrl.order.product.price_max | currency}}</div></div><div class=\\\"row table-body\\\"><div class=\\\"col-md-6\\\">{{$ctrl.order.delivery_product.name}}</div><div class=\\\"col-md-2\\\"></div><div class=\\\"col-md-4\\\" ng-if=\\\"$ctrl.order.delivery_product.price_min === $ctrl.order.delivery_product.price_max\\\">{{$ctrl.order.delivery_product.price_min | currency}}</div><div class=\\\"col-md-4\\\" ng-if=\\\"$ctrl.order.delivery_product.price_min !== $ctrl.order.delivery_product.price_max\\\">{{$ctrl.order.delivery_product.price_min | currency}} - {{$ctrl.order.delivery_product.price_max | currency}}</div></div><div class=\\\"row table-body\\\" ng-repeat=\\\"product in $ctrl.order.add_on_products\\\"><div class=\\\"col-md-6\\\">{{product.name}}</div><div class=\\\"col-md-2\\\"></div><div class=\\\"col-md-4\\\" ng-if=\\\"product.price_min === product.price_max\\\">{{product.price_min | currency}}</div><div class=\\\"col-md-4\\\" ng-if=\\\"product.price_min !== product.price_max\\\">{{product.price_min | currency}} - {{product.price_max | currency}}</div></div></div></div></div><p>By submitting this order, you agree to the&nbsp;<a class=\\\"link link-text\\\" ng-click=\\\"$ctrl.terms()\\\">Terms and Conditions</a></p></div></uib-tab><uib-tab index=\\\"4\\\" heading=\\\"Use Existing\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><h3>Choose Existing Report</h3></div><div class=\\\"form-section-content\\\"><div class=\\\"row table-header\\\"></div><div class=\\\"row table-body\\\" ng-repeat=\\\"report in $ctrl.existingReports\\\"></div></div></div></uib-tab></uib-tabset></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancel()\\\">Cancel</button><button ng-if=\\\"!$ctrl.importExisting\\\" class=\\\"btn btn-default\\\" type=\\\"button\\\" ng-disabled=\\\"!$ctrl.isStepValid($ctrl.activeStep)\\\" ng-if=\\\"$ctrl.activeStep < 3\\\" ng-click=\\\"$ctrl.nextStep()\\\">Next</button><button class=\\\"btn btn-default\\\" type=\\\"button\\\" ng-if=\\\"!$ctrl.importExisting && $ctrl.activeStep === 3\\\" ng-click=\\\"$ctrl.submitOrder()\\\">Submit Order</button></div></div>\");\n$templateCache.put(\"src/Reports/list.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"row\\\"><div class=\\\"col-lg-12\\\"><div class=\\\"row\\\"><div class=\\\"col-lg-6\\\"><h1>Reports</h1></div><div class=\\\"col-lg-6\\\"><div class=\\\"pull-right\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.openSMOrder()\\\" rsf-permissions=\\\"create\\\" permissions-on=\\\"Report\\\">Order Report</button></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.reportResponse.reports.length == 0 && !$ctrl.search\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/docs.33cddf3f.png\\\"><h2>No reports added. Let\\'s add one.</h2><p>Click on the order report button in the top right corner to start the process.</p></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.reportResponse.reports.length == 0 && $ctrl.search\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/docs.33cddf3f.png\\\"><h2>Your search returned no results.</h2><p><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.clearSearch()\\\">Reset Search</button></p></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.reportResponse.reports.length > 0\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table\\\"><thead><tr><th><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'reports.id\\')\\\">Order&nbsp;<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'reports.id\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'reports.id\\', \\'asc\\')}\\\"></i></span></th><th>Address</th><th rsf-permissions=\\\"type\\\" permissions-on=\\\"orgpref_reports_columns\\\">Type</th><th rsf-permissions=\\\"provider\\\" permissions-on=\\\"orgpref_reports_columns\\\"><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'reports.provider, reports.kind\\')\\\">Provider&nbsp;<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'reports.provider, reports.kind\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'reports.provider, reports.kind\\', \\'asc\\')}\\\"></i></span></th><th><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'reports.created_at\\')\\\">Ordered&nbsp;<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'reports.created_at\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'reports.created_at\\', \\'asc\\')}\\\"></i></span></th><th><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'reports.status\\')\\\">Status&nbsp;<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'reports.status\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'reports.status\\', \\'asc\\')}\\\"></i></span></th><th><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'users.last_name, users.first_name\\')\\\">User&nbsp;<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'users.last_name, users.first_name\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'users.last_name, users.first_name\\', \\'asc\\')}\\\"></i></span></th><th rsf-permissions=\\\"org\\\" permissions-on=\\\"orgpref_reports_columns\\\">Org</th><th><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'reports.delivered_at\\')\\\">Delivered&nbsp;<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'reports.delivered_at\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'reports.delivered_at\\', \\'asc\\')}\\\"></i></span></th><th rsf-permissions=\\\"read\\\" permissions-on=\\\"Job\\\">Job</th></tr></thead><tbody><tr ng-repeat=\\\"report in $ctrl.reportResponse.reports\\\"><td class=\\\"link\\\" ui-sref=\\\"root.report_show({id: report.id})\\\">{{::report.prettyId()}}</td><td class=\\\"link\\\" ui-sref=\\\"root.report_show({id: report.id})\\\" ng-include=\\\"report.partialUrl(\\'address_string\\')\\\"></td><td class=\\\"link\\\" ui-sref=\\\"root.report_show({id: report.id})\\\" rsf-permissions=\\\"type\\\" permissions-on=\\\"orgpref_reports_columns\\\" ng-include=\\\"report.partialUrl(\\'type\\')\\\" onload=\\\"order_data = report.order_data\\\">Type</td><td class=\\\"link\\\" ui-sref=\\\"root.report_show({id: report.id})\\\" rsf-permissions=\\\"provider\\\" permissions-on=\\\"orgpref_reports_columns\\\">{{$ctrl.Pretty.name[report.provider]}} {{$ctrl.Pretty.name[report.kind]}}</td><td class=\\\"link\\\" ui-sref=\\\"root.report_show({id: report.id})\\\">{{::report.created_at | date:\\'short\\'}}</td><td class=\\\"link\\\" ui-sref=\\\"root.report_show({id: report.id})\\\">{{$ctrl.Pretty.name[report.status]}}</td><td class=\\\"link\\\" ui-sref=\\\"root.report_show({id: report.id})\\\">{{::report.user.name}}</td><td class=\\\"link\\\" ui-sref=\\\"root.report_show({id: report.id})\\\" rsf-permissions=\\\"org\\\" permissions-on=\\\"orgpref_reports_columns\\\">{{::report.org.name}}</td><td class=\\\"link\\\" ui-sref=\\\"root.report_show({id: report.id})\\\">{{::report.delivered_at | date:\\'short\\'}}</td><td class=\\\"link\\\" rsf-permissions=\\\"read\\\" permissions-on=\\\"Job\\\"><a ui-sref=\\\"job_header.job_show.info({id: report.job_id})\\\" ng-if=\\\"report.job_id\\\">{{::report.job_id}}</a></td></tr></tbody></table></div></div></div></div><div class=\\\"pagination-height-fix row\\\" ng-if=\\\"$ctrl.reportResponse.reports.length > 0\\\"><div class=\\\"col-md-12\\\"><ul uib-pagination total-items=\\\"$ctrl.totalCount\\\" ng-model=\\\"$ctrl.currentPage\\\" max-size=\\\"5\\\" items-per-page=\\\"$ctrl.perPage\\\" ng-change=\\\"$ctrl.pageChanged()\\\" class=\\\"pagination-sm justify-content-center\\\" boundary-link-numbers=\\\"true\\\"></ul></div></div>\");\n$templateCache.put(\"src/Reports/show.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"row\\\"><div class=\\\"col-sm-6\\\"><h1>Details for Report {{$ctrl.report.prettyId()}}</h1></div><div class=\\\"col-sm-6\\\"><div class=\\\"pull-right\\\"><button type=\\\"button\\\" ng-click=\\\"$ctrl.goBack()\\\" analytics-on analytics-category=\\\"Reports\\\" analytics-event=\\\"report list\\\" class=\\\"btn btn-default\\\">Back to List</button></div></div></div><form name=\\\"report_form\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><h3>Report Specifics</h3></div><div class=\\\"col-md-6\\\"><h3>Location</h3></div></div></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Order</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.prettyId()}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>User</label></div><div class=\\\"col-md-9\\\">{{$ctrl.fetchUser($ctrl.report.user_id).name()}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Org</label></div><div class=\\\"col-md-9\\\">{{$ctrl.fetchOrg($ctrl.report.org_id).name}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Status</label></div><div class=\\\"col-md-9\\\">{{$ctrl.Pretty.name[$ctrl.report.status]}}</div></div><div class=\\\"row\\\" rsf-permissions=\\\"type\\\" permissions-on=\\\"orgpref_reports_columns\\\"><div class=\\\"col-md-3\\\"><label>Type</label></div><div class=\\\"col-md-9\\\"><span ng-include=\\\"$ctrl.report.partialUrl(\\'type\\')\\\" onload=\\\"report = $ctrl.report\\\"></span></div></div><div class=\\\"row\\\" rsf-permissions=\\\"provider\\\" permissions-on=\\\"orgpref_reports_columns\\\"><div class=\\\"col-md-3\\\"><label>Provider</label></div><div class=\\\"col-md-9\\\">{{$ctrl.Pretty.name[$ctrl.report.provider]}} {{$ctrl.Pretty.name[$ctrl.report.kind]}}</div></div><span ng-include=\\\"$ctrl.report.partialUrl(\\'specifics\\')\\\"></span></div><div class=\\\"col-md-6\\\" ng-include=\\\"$ctrl.report.partialUrl(\\'location\\')\\\"></div></div></div></div></div></div></form><form name=\\\"report_docs\\\" ng-show=\\\"$ctrl.report.documents.length > 0\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h3>Report Documents</h3></div></div></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table table-striped\\\"><thead><tr><th>Name</th></tr></thead><tbody><tr ng-repeat=\\\"doc in $ctrl.report.documents\\\"><td><document-link document=\\\"doc\\\" icon-only=\\\"true\\\"></document-link>&nbsp;{{doc.name}}</td></tr></tbody></table></div></div></div></div></div></div></form>\");\n$templateCache.put(\"src/RsfMap/deck_wizard_component.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Deck Tool</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.cancelBtn()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body overflow-scroll\\\" ng-if=\\\"$ctrl.isValidAddress($ctrl.address)\\\"><div class=\\\"row\\\" style=\\\"height: 75%\\\"><div class=\\\"col-md-12\\\" style=\\\"height: 100%\\\"><rsf-map options=\\\"{imagery: \\'google\\', layers: [\\'measure\\']}\\\" measure-data=\\\"$ctrl.geojson\\\" measure-finished=\\\"$ctrl.measurementAdded(data)\\\" export-data=\\\"$ctrl.exportData(data)\\\" address=\\\"$ctrl.address\\\"></rsf-map></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table table-striped\\\"><thead><th>Deck Name</th><th>Area (sqft)</th><th>Perimeter (ft)</th><th>Railing (ft)</th><th>Wall (ft)</th><th>Railing Area (sqft)</th></thead><tbody><tr ng-repeat=\\\"deck in $ctrl.decks | filter:{_destroy: \\'!true\\'}\\\"><td>{{deck.name}}</td><td>{{deck.area | number:\\\"0\\\"}}</td><td>{{deck.perimeter | number:\\\"0\\\"}}</td><td><input type=\\\"number\\\" step=\\\"1\\\" min=\\\"0\\\" ng-model=\\\"deck.railing_length\\\" ng-change=\\\"$ctrl.railingChanged(deck)\\\"></td><td><input type=\\\"number\\\" step=\\\"1\\\" min=\\\"0\\\" ng-model=\\\"deck.wall_length\\\" ng-change=\\\"$ctrl.wallChanged(deck)\\\"></td><td>{{deck.railing_area | number:\\\"0\\\"}}</td></tr></tbody></table></div></div></div><div class=\\\"modal-body\\\" ng-if=\\\"!$ctrl.isValidAddress($ctrl.address)\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/location.86981dce.png\\\"><h2>No valid address</h2><p>Enter in a valid address on the Information tab to generate a map.</p></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-add\\\" type=\\\"submit\\\" ng-click=\\\"$ctrl.save()\\\">Save</button><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancelBtn()\\\">Cancel</button></div>\");\n$templateCache.put(\"src/RsfMap/pool_tool_component.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Pool Tool</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.cancelBtn()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body overflow-scroll\\\" ng-if=\\\"$ctrl.isValidAddress($ctrl.address)\\\"><div class=\\\"row\\\" style=\\\"height: 75%\\\"><div class=\\\"col-md-12\\\" style=\\\"height: 100%\\\"><rsf-map options=\\\"{imagery: \\'google\\', layers: [\\'measure\\']}\\\" measure-data=\\\"$ctrl.geojson\\\" measure-finished=\\\"$ctrl.measurementAdded(data)\\\" export-data=\\\"$ctrl.exportData(data)\\\" address=\\\"$ctrl.address\\\"></rsf-map></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table table-striped\\\"><thead><th>Pool Name</th><th>Area (sqft)</th><th>Perimeter (ft)</th><th>Average Depth (ft)</th><th>Gallons</th></thead><tbody><tr ng-repeat=\\\"pool in $ctrl.pools | filter:{_destroy: \\'!true\\'}\\\"><td>{{pool.name}}</td><td>{{pool.area | number:\\\"0\\\"}}</td><td>{{pool.perimeter | number:\\\"0\\\"}}</td>{{pool.average_depth}}<td><input type=\\\"number\\\" ng-model=\\\"pool.average_depth\\\" ng-change=\\\"$ctrl.averageDepthChanges(pool)\\\" decimal_places=\\\"2\\\"></td><td>{{pool.volume | number:\\\"0\\\"}}</td></tr></tbody></table></div></div></div><div class=\\\"modal-body\\\" ng-if=\\\"!$ctrl.isValidAddress($ctrl.address)\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/location.86981dce.png\\\"><h2>No valid address</h2><p>Enter in a valid address on the Information tab to generate a map.</p></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-add\\\" type=\\\"submit\\\" ng-click=\\\"$ctrl.save()\\\">Save</button><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancelBtn()\\\">Cancel</button></div>\");\n$templateCache.put(\"src/RsfMap/rapid_area_component.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Rapid Area</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.cancelBtn()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body overflow-scroll\\\"><div ng-if=\\\"$ctrl.address.isValid() && $ctrl.address.isValidLatLon()\\\"><uib-tabset active=\\\"$ctrl.activeTab\\\"><uib-tab index=\\\"0\\\" heading=\\\"Aerial\\\"><br><div class=\\\"row rapid-area-map\\\"><div class=\\\"col-md-12 rsf-map\\\" ng-if=\\\"$ctrl.measurement.geojson\\\"><rsf-map options=\\\"{imagery: \\'google\\', layers: [\\'measure\\'], defaultZoom: 21, one_layer: true, labels: false}\\\" measure-data=\\\"$ctrl.measurement.geojson.rapid_area\\\" measure-finished=\\\"$ctrl.measureFinished(data)\\\" address=\\\"$ctrl.address\\\"></rsf-map></div></div></uib-tab><uib-tab index=\\\"1\\\" heading=\\\"Street View\\\"><br><div ng-if=\\\"$ctrl.activeTab === 1\\\"><div class=\\\"col-md-12 map-view rapid-area-map\\\"><div class=\\\"info-map\\\"><pin-drop address=\\\"$ctrl.address\\\" tilt=\\\"false\\\"></pin-drop></div></div></div></uib-tab></uib-tabset><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label class=\\\"control-label\\\">Flat Area</label><input tabindex=\\\"1\\\" class=\\\"form-control\\\" type=\\\"number\\\" decimal-places=\\\"2\\\" name=\\\"area\\\" ng-model=\\\"$ctrl.newMeasurement.area\\\"></div><div class=\\\"col-md-4 offset-md-2\\\">Calculated Area:</div><div class=\\\"col-md-6\\\">{{$ctrl.calculate($ctrl.newMeasurement)[\\\"roof_area\\\"]}}</div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label class=\\\"control-label\\\">Degrees</label><input tabindex=\\\"2\\\" class=\\\"form-control\\\" type=\\\"number\\\" decimal-places=\\\"2\\\" name=\\\"degrees\\\" ng-change=\\\"$ctrl.convert($ctrl.newMeasurement)\\\" ng-model-options=\\\"{ debounce: 500 }\\\" ng-model=\\\"$ctrl.newMeasurement.degrees\\\"></div><div class=\\\"form-group\\\"><label class=\\\"control-label\\\">Pitch</label><input tabindex=\\\"3\\\" class=\\\"form-control\\\" type=\\\"number\\\" decimal-places=\\\"2\\\" name=\\\"pitch\\\" ng-change=\\\"$ctrl.setPitch($ctrl.newMeasurement)\\\" ng-model=\\\"$ctrl.newMeasurement.pitch\\\" ng-model-options=\\\"{ debounce: 500 }\\\"></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"!$ctrl.address.isValid() || !$ctrl.address.isValidLatLon()\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/location.86981dce.png\\\"><h2>No valid address</h2><p>Enter in a valid address on the Information tab to generate a map.</p></div></div></div></div><div class=\\\"modal-footer\\\"><div ng-if=\\\"$ctrl.address.isValid() && $ctrl.address.isValidLatLon()\\\"><button class=\\\"btn btn-add\\\" type=\\\"submit\\\" ng-click=\\\"$ctrl.save()\\\">Save</button></div><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancelBtn()\\\">Cancel</button></div>\");\n$templateCache.put(\"src/RsfMap/rsf_map_component.html\",\"<div id=\\\"rsf-map\\\" class=\\\"rsf-map\\\"></div>\");\n$templateCache.put(\"src/RsfMap/satellite_measure_component.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Satellite Measure</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.cancelBtn()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\" ng-if=\\\"$ctrl.measurement.geojson\\\"><rsf-map ng-if=\\\"$ctrl.isValidAddress($ctrl.address)\\\" options=\\\"{imagery: \\'google\\', layers: [\\'measure\\'], defaultZoom: $ctrl.measurement.geojson.leafletZoom}\\\" measure-data=\\\"$ctrl.measurement.geojson.leaflet\\\" export-data=\\\"$ctrl.exportData(data)\\\" address=\\\"$ctrl.address\\\"></rsf-map><div class=\\\"row\\\" ng-if=\\\"!$ctrl.isValidAddress($ctrl.address)\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/location.86981dce.png\\\"><h2>No valid address</h2><p>Enter in a valid address on the Information tab to generate a map.</p></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-add\\\" type=\\\"submit\\\" ng-click=\\\"$ctrl.save()\\\">Save</button><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancelBtn()\\\">Cancel</button></div>\");\n$templateCache.put(\"src/ScreenShare/host.html\",\"<host job-id=\\\"$ctrl.$stateParams.job_id\\\" class=\\\"host\\\"></host>\");\n$templateCache.put(\"src/ScreenShare/index.html\",\"<div class=\\\"row screen-share\\\" rsf-permissions=\\\"update\\\" permissions-on=\\\"ScreenShare\\\"><div class=\\\"offset-md-1 col-md-10\\\"><div class=\\\"panel panel-default\\\"><div class=\\\"panel-heading\\\"><h2>Active Screen Shares</h2></div><div class=\\\"panel-body\\\"><rsf-spinner promise=\\\"ctrl.screenShareResponse.$promise\\\"></rsf-spinner><table class=\\\"table table-striped\\\"><thead><tr><th>Org</th><th>Rep</th><th>Job</th><th>Code</th><th>Start Time</th><th>End Time</th><th>Cost</th></tr></thead><tbody><tr ng-repeat=\\\"ss in ctrl.screenShareResponse.screen_shares\\\"><td>{{::ss.job.org.name}}</td><td>{{::ss.job.assignments[0].user.email}}</td><td>{{::ss.job.name}}</td><td>{{::ss.uid}}</td><td>{{::ss.started | date:\\'short\\'}}</td><td>{{::ss.ended | date:\\'short\\'}}</td><td>{{::(ss.cost_in_cents || 0)/100 | currency}}</td></tr></tbody></table></div></div></div></div>\");\n$templateCache.put(\"src/ScreenShare/join.html\",\"<form id=\\\"join-meeting\\\" ng-submit=\\\"ctrl.openViewer()\\\"><div class=\\\"row\\\"><div class=\\\"col-md-2 offset-md-5\\\"><input type=\\\"text\\\" ng-model=\\\"ctrl.uid\\\" class=\\\"form-control\\\" placeholder=\\\"Meeting ID\\\"></div></div><div class=\\\"row\\\"><div class=\\\"col-md-2 offset-md-5\\\"><input type=\\\"submit\\\" value=\\\"Join\\\" class=\\\"form-control\\\"></div></div></form>\");\n$templateCache.put(\"src/ScreenShare/show.html\",\"<div class=\\\"screen-share-viewer\\\" ng-if=\\\"ctrl.showScreenShare\\\"><iframe ng-if=\\\"ctrl.screenShare.kind === \\'basic\\'\\\" ng-src=\\\"{{ctrl.viewerUrl}}\\\" frameborder=\\\"0\\\"></iframe><attendee ng-if=\\\"ctrl.screenShare.kind === \\'premium\\'\\\" class=\\\"attendee\\\" job-uid=\\\"ctrl.$stateParams.id\\\" screen-share=\\\"ctrl.screenShare\\\"></attendee></div><div id=\\\"waiting-to-join\\\" class=\\\"customer-viewer\\\" ng-if=\\\"!ctrl.showScreenShare && ctrl.retries > 0\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6 offset-md-3 align-center\\\">Your Representative will start the Screen Share momentarily...</div></div><div class=\\\"row\\\"><div class=\\\"col-md-4 offset-md-4 align-center\\\"><p>Meeting Code: {{ctrl.$stateParams[\\\"id\\\"]}}</p></div></div><div class=\\\"row\\\"><div class=\\\"col-md-2 offset-md-5 align-center\\\"><img class=\\\"spinner-graphic\\\"></div></div></div><div id=\\\"refresh-to-join\\\" class=\\\"customer-viewer\\\" ng-if=\\\"!ctrl.showScreenShare && ctrl.retries === 0\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4 offset-md-4 align-center\\\">The Screen Share Session has timed out. Ask the Representative to start the Screen Share and try again.<br><br><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"ctrl.refreshScreenShare()\\\" title=\\\"Refresh\\\">Refresh</button></div></div></div><script ng-if=\\\"ctrl.screenShare.kind === \\'basic\\'\\\" type=\\\"text/javascript\\\" src=\\\"https://api.screenleap.com/js/screenleap.js\\\"></script>\");\n$templateCache.put(\"src/Signature/redirect.html\",\"<div class=\\\"signature-viewer\\\" ng-if=\\\"ctrl.signatureUrlRightSignature\\\"><iframe ng-src=\\\"{{ctrl.signatureUrlRightSignature}}\\\" frameborder=\\\"0\\\"></iframe></div><div id=\\\"waiting-to-sign\\\" ng-if=\\\"!ctrl.signatureUrlRightSignature && !ctrl.signatureUrlSignNow\\\"><div class=\\\"row\\\"><div class=\\\"col-md-2 offset-md-5 align-center\\\">Retrieving Data...</div></div><div class=\\\"row\\\"><div class=\\\"col-md-2 offset-md-5 align-center\\\"><i class=\\\"fa fa-cog fa-2x fa-spin\\\"></i></div></div></div>\");\n$templateCache.put(\"src/Signature/sign.html\",\"<form id=\\\"sign-document\\\" ng-submit=\\\"ctrl.gotoSignature()\\\"><div class=\\\"row\\\"><div class=\\\"col-md-2 offset-md-5\\\"><input type=\\\"text\\\" ng-model=\\\"ctrl.guid\\\" class=\\\"form-control\\\" placeholder=\\\"Signature ID\\\"></div></div><div class=\\\"row\\\"><div class=\\\"col-md-2 offset-md-5\\\"><input type=\\\"submit\\\" value=\\\"Sign\\\" class=\\\"form-control\\\"></div></div></form>\");\n$templateCache.put(\"src/Signature/signature_notification.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Signing Recipients</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.dismiss()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\"><div class=\\\"row match-table-header\\\"><div class=\\\"col-md-5\\\">Signer</div><div class=\\\"col-md-2\\\">Status</div><div class=\\\"col-md-4\\\">Actions</div></div><div class=\\\"row\\\" ng-repeat=\\\"signee in $ctrl.signedDocument.recipients\\\"><div class=\\\"col-md-5\\\"><span class=\\\"btn-align\\\">{{signee.name}} ({{signee.email}})</span></div><div class=\\\"col-md-2\\\"><span class=\\\"btn-align\\\">{{$ctrl.Pretty.name[signee.status]}}</span></div><div class=\\\"col-md-2\\\"><button type=\\\"button\\\" class=\\\"btn btn-default btn-block\\\" ng-disabled=\\\"signee.status === \\'recipient_signed\\'\\\" ng-click=\\\"$ctrl.signOnscreen(signee)\\\">Onscreen</button></div><div class=\\\"col-md-2\\\"><button type=\\\"button\\\" class=\\\"btn btn-success btn-block\\\" ng-disabled=\\\"signee.status === \\'recipient_signed\\'\\\" ng-click=\\\"$ctrl.email(signee)\\\">Email</button></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.dismiss()\\\">Cancel</button><button class=\\\"btn btn-default\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.emailAll()\\\">Email Unsigned</button></div>\");\n$templateCache.put(\"src/Signature/signature_settings_modal.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Signing Recipients</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.cancelBtn()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><form name=\\\"$ctrl.signForm\\\" ng-submit=\\\"$ctrl.upload($ctrl.signForm)\\\"><div class=\\\"modal-body\\\"><br><p>Please review the contact information of the signing recipients below.</p><div class=\\\"row\\\"><div class=\\\"col-md-6\\\" ng-repeat=\\\"signee in $ctrl.signatureSettings.recipients\\\"><div class=\\\"card mb-4\\\"><div class=\\\"card-header\\\"><h4 class=\\\"card-title\\\">{{signee.title}}</h4></div><div class=\\\"card-body\\\"><div class=\\\"form-group\\\"><div class=\\\"row signature-row\\\"><div class=\\\"col-md-3\\\"><label>Name</label></div><div class=\\\"col-md-9\\\"><input ng-disabled=\\\"!signee.required && !signee.include\\\" type=\\\"text\\\" class=\\\"form-control\\\" name=\\\"name_{{$index}}\\\" ng-required=\\\"signee.required || signee.include\\\" ng-change=\\\"$ctrl.validateUniqueNames($ctrl.signForm)\\\" ng-model=\\\"signee.name\\\"><div ng-messages=\\\"$ctrl.signForm[\\'name_\\'+$index].$error\\\" class=\\\"has-error\\\" role=\\\"alert\\\"><div ng-message=\\\"duplicate\\\">Name must be unique</div></div></div></div></div><div class=\\\"form-group\\\"><div class=\\\"row signature-row\\\"><div class=\\\"col-md-3\\\"><label>Email</label></div><div class=\\\"col-md-9\\\"><input ng-disabled=\\\"!signee.required && !signee.include\\\" type=\\\"text\\\" class=\\\"form-control\\\" ng-pattern=\\\"$ctrl.emailPattern\\\" id=\\\"email\\\" name=\\\"email_{{$index}}\\\" ng-required=\\\"signee.required || signee.include\\\" ng-model=\\\"signee.email\\\"><div ng-messages=\\\"$ctrl.signForm[\\'email_\\'+$index].$error\\\" class=\\\"has-error\\\" role=\\\"alert\\\"><div ng-message=\\\"pattern\\\">Improperly formatted email \\'_@__.__\\'</div></div></div></div><div class=\\\"row signature-row\\\" ng-if=\\\"!signee.required\\\"><div class=\\\"col-md-3\\\"><label>Include?</label></div><div class=\\\"col-md-9\\\"><input type=\\\"checkbox\\\" ng-model=\\\"signee.include\\\" ng-change=\\\"$ctrl.validateUniqueNames($ctrl.signForm)\\\" name=\\\"include\\\"></div></div></div></div></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-borderless\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancelBtn()\\\">Cancel</button><button class=\\\"btn btn-default\\\" type=\\\"submit\\\">Onscreen</button><button class=\\\"btn btn-default\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.upload($ctrl.signForm, true)\\\">Email</button></div></form>\");\n$templateCache.put(\"src/Signature/signature_setup.html\",\"<rsf-spinner promise=\\\"$ctrl.loadingPromise.promise\\\" show=\\\"true\\\"></rsf-spinner><div class=\\\"row sign-contract\\\"><div class=\\\"col-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\" ng-if=\\\"!$ctrl.modalOpen && !$ctrl.emailPdfModal\\\"><pdf-display pdf-url=\\\"$ctrl.pdfUrl\\\" disabled-features=\\\"$ctrl.disabledFeatures\\\"></pdf-display></div></div></div></div>\");\n$templateCache.put(\"src/Signature/signed.html\",\"\");\n$templateCache.put(\"src/SignedDocuments/list.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"row\\\"><div class=\\\"col-lg-12\\\"><div class=\\\"row\\\"><div class=\\\"col-lg-6\\\"><h1>Signature Requests</h1></div><div class=\\\"col-lg-6\\\"></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.signedDocResponse.signed_documents.length == 0 && !$ctrl.search\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/docs.33cddf3f.png\\\"><h2>No signature requests exist.</h2></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.signedDocResponse.signed_documents.length == 0 && $ctrl.search\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/docs.33cddf3f.png\\\"><h2>Your search returned no results.</h2><p><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.clearSearch()\\\">Reset Search</button></p></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.signedDocResponse.signed_documents.length > 0\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table\\\"><thead><tr><th><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'estimates.name\\')\\\">Estimate&nbsp;<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'estimates.name\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'estimates.name\\', \\'asc\\')}\\\"></i></span></th><th>Job Name</th><th><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'signed_documents.created_at\\')\\\">Created&nbsp;<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'signed_documents.created_at\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'signed_documents.created_at\\', \\'asc\\')}\\\"></i></span></th><th><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'signed_documents.updated_at\\')\\\">Updated<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'signed_documents.updated_at\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'signed_documents.updated_at\\', \\'asc\\')}\\\"></i></span></th><th><span class=\\\"link\\\" ng-click=\\\"$ctrl.sortBy(\\'signed_documents.status\\')\\\">Status&nbsp;<i class=\\\"fa\\\" ng-class=\\\"{ \\'fa-caret-down\\': $ctrl.sortingBy(\\'signed_documents.status\\', \\'desc\\'), \\'fa-caret-up\\': $ctrl.sortingBy(\\'signed_documents.status\\', \\'asc\\')}\\\"></i></span></th></tr></thead><tbody><tr ng-repeat=\\\"sd in $ctrl.signedDocResponse.signed_documents\\\" ui-sref=\\\"job_header.job_show.contract({id: sd.estimate.job.id, estimate_id: sd.estimate.id})\\\"><td class=\\\"link\\\">{{::sd.estimate.name}}</td><td class=\\\"link\\\">{{::sd.estimate.job.name}}</td><td class=\\\"link\\\">{{::sd.created_at | date:\\'short\\'}}</td><td class=\\\"link\\\">{{::sd.updated_at | date:\\'short\\'}}</td><td class=\\\"link\\\">{{$ctrl.Pretty.name[sd.status]}}</td></tr></tbody></table></div></div></div></div><div class=\\\"pagination-height-fix row\\\" ng-if=\\\"$ctrl.signedDocResponse.signed_documents.length > 0\\\"><div class=\\\"col-md-12\\\"><ul uib-pagination total-items=\\\"$ctrl.totalCount\\\" ng-model=\\\"$ctrl.currentPage\\\" max-size=\\\"5\\\" items-per-page=\\\"$ctrl.perPage\\\" ng-change=\\\"$ctrl.pageChanged()\\\" class=\\\"pagination-sm justify-content-center\\\" boundary-link-numbers=\\\"true\\\"></ul></div></div>\");\n$templateCache.put(\"src/TermsAndConditions/terms.html\",\"<iframe src=\\\"https://oneclickcontractor.com/terms\\\" class=\\\"terms-iframe\\\"></iframe>\");\n$templateCache.put(\"src/Visualization/visualization_card.html\",\"<div class=\\\"rsf-card\\\"><a analytics-on analytics-category=\\\"Tools\\\" analytics-event=\\\"Show {{$ctrl.visualizationName}}\\\" analytics-visualization=\\\"{{$ctrl.visualization.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" target=\\\"_blank\\\" ng-href=\\\"{{::$ctrl.visualization.data[\\'id\\']}}\\\" ng-if=\\\"$ctrl.visualization.target === \\'blank\\'\\\"><span rsf-permissions=\\\"email\\\" permissions-on=\\\"Visualization\\\" on-object=\\\"$ctrl.visualization\\\"><i class=\\\"card-email rsf-email-link rsf-base-66\\\" title=\\\"Email Visualization Complete\\\" rsf-confirmation-message=\\\"Are you sure you wish to email this user?\\\" rsf-confirmation-dialog=\\\"$ctrl.emailVisualization()\\\" analytics-category=\\\"Tools\\\" analytics-event=\\\"Email {{$ctrl.visualizationName}}\\\" analytics-visualization=\\\"{{$ctrl.visualization.id}}\\\" analytics-nav-display=\\\"{{$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" ng-click=\\\"$event.stopPropagation()\\\"></i></span><i class=\\\"card-pencil rsf-edit-link rsf-base-66\\\" ng-click=\\\"$ctrl.editVisualization(); $event.stopPropagation()\\\"></i><i class=\\\"card-trash rsf-delete-link rsf-base-66\\\" analytics-on analytics-category=\\\"Tools\\\" analytics-event=\\\"Delete {{$ctrl.visualizationName}}\\\" analytics-visualization=\\\"{{$ctrl.visualization.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" rsf-confirmation-dialog=\\\"$ctrl.deleteVisualization()\\\" rsf-confirmation-message=\\\"Are you sure you wish to delete {{$ctrl.visualizationName}} - {{::$ctrl.visualization.name}}?\\\" title=\\\"Delete Visualization\\\" ng-click=\\\"$event.stopPropagation()\\\"></i><div class=\\\"text-center\\\"><img ng-src=\\\"{{$ctrl.ToolInfo.tools($ctrl.visualization.kind).image}}\\\"></div><h3>{{$ctrl.visualizationName}} - {{$ctrl.visualization.name}}</h3></a><a analytics-on analytics-category=\\\"Tools\\\" analytics-event=\\\"Show {{$ctrl.visualizationName}}\\\" analytics-visualization=\\\"{{$ctrl.visualization.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" ng-click=\\\"$ctrl.showVisualization()\\\" ng-if=\\\"$ctrl.visualization.target === \\'iframe\\'\\\"><span rsf-permissions=\\\"email\\\" permissions-on=\\\"Visualization\\\" on-object=\\\"$ctrl.visualization\\\"><i class=\\\"card-email rsf-email-link rsf-base-66\\\" title=\\\"Email Visualization Complete\\\" rsf-confirmation-message=\\\"Are you sure you wish to email this user?\\\" rsf-confirmation-dialog=\\\"$ctrl.emailVisualization()\\\" analytics-category=\\\"Tools\\\" analytics-event=\\\"Email {{$ctrl.visualizationName}}\\\" analytics-visualization=\\\"{{$ctrl.visualization.id}}\\\" analytics-nav-display=\\\"{{$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" ng-click=\\\"$event.stopPropagation()\\\"></i></span><i class=\\\"card-pencil rsf-edit-link rsf-base-66\\\" ng-click=\\\"$ctrl.editVisualization(); $event.stopPropagation()\\\"></i><i class=\\\"card-trash rsf-delete-link rsf-base-66\\\" analytics-on analytics-category=\\\"Tools\\\" analytics-event=\\\"Delete {{$ctrl.visualizationName}}\\\" analytics-visualization=\\\"{{$ctrl.visualization.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" rsf-confirmation-dialog=\\\"$ctrl.deleteVisualization()\\\" rsf-confirmation-message=\\\"Are you sure you wish to delete {{$ctrl.visualizationName}} - {{::$ctrl.visualization.name}}?\\\" title=\\\"Delete Visualization\\\" ng-click=\\\"$event.stopPropagation()\\\"></i><div class=\\\"text-center\\\"><img ng-src=\\\"{{$ctrl.ToolInfo.tools($ctrl.visualization.kind).image}}\\\"></div><h3>{{$ctrl.visualizationName}} - {{$ctrl.visualization.name}}</h3></a></div>\");\n$templateCache.put(\"src/Estimator/Discounts/discount_editor.html\",\"<div class=\\\"row discounts\\\"><div class=\\\"col-md-12\\\"><div class=\\\"row\\\" ng-if=\\\"$ctrl.editorParams.discountToggle\\\"><div class=\\\"col-md-12\\\"><dl><dt><button id=\\\"estimate-discounts\\\" type=\\\"button\\\" class=\\\"btn btn-link\\\" ng-click=\\\"$ctrl.showing = !$ctrl.showing\\\">DISCOUNTS&nbsp;<i class=\\\"fa fa-plus\\\" ng-if=\\\"!$ctrl.showing\\\"></i><i class=\\\"fa fa-minus\\\" ng-if=\\\"$ctrl.showing\\\"></i></button></dt></dl></div></div><discount-chooser ng-show=\\\"$ctrl.showing\\\" existing=\\\"$ctrl.discounts\\\" on-select=\\\"$ctrl.add\\\" show-header-text=\\\"$ctrl.showHeaderText\\\" update=\\\"$ctrl.update\\\" total=\\\"$ctrl.estimate.total\\\" params=\\\"$ctrl.params\\\" destroy=\\\"$ctrl.remove\\\"></discount-chooser></div></div>\");\n$templateCache.put(\"src/Common/Components/refresh_button.html\",\"<button type=\\\"button\\\" class=\\\"btn btn-borderless\\\" ng-if=\\\"$ctrl.countdown !== null && $ctrl.countdown >= 0\\\" ng-click=\\\"$ctrl.stopRefreshing()\\\">Refreshing in {{$ctrl.countdown}}&nbsp;&nbsp;<i class=\\\"fa fa-close\\\"></i></button><button type=\\\"button\\\" class=\\\"btn btn-borderless\\\" ng-if=\\\"$ctrl.countdown === null\\\" ng-click=\\\"$ctrl.startRefreshing()\\\">Refresh&nbsp;&nbsp;<i class=\\\"fa fa-refresh\\\"></i></button>\");\n$templateCache.put(\"src/Common/Components/tool.html\",\"\");\n$templateCache.put(\"src/Common/Components/tool_display.html\",\"<div class=\\\"tool-container\\\"><div class=\\\"rsf-card\\\" ng-if=\\\"$ctrl.toolConfig.action\\\"><a analytics-on analytics-category=\\\"Tools\\\" analytics-event=\\\"{{::$ctrl.toolConfig.title}}\\\" analytics-tool-id=\\\"{{::$ctrl.toolConfig.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" href=\\\"#\\\" ng-click=\\\"$ctrl.toolConfig.action($ctrl.job)\\\"><div class=\\\"text-center\\\"><img ng-src=\\\"{{$ctrl.toolConfig.image}}\\\"></div><h3>{{$ctrl.toolConfig.title}}&nbsp;&nbsp;<span ng-if=\\\"$ctrl.toolConfig.paid\\\">$</span></h3></a></div><div class=\\\"rsf-card\\\" ng-if=\\\"$ctrl.toolConfig.link\\\"><a analytics-on analytics-category=\\\"Tools\\\" analytics-event=\\\"{{::$ctrl.toolConfig.title}}\\\" analytics-tool-id=\\\"{{::$ctrl.toolConfig.id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" target=\\\"_blank\\\" href=\\\"{{$ctrl.toolConfig.link($ctrl.job, $ctrl.BASE_URL)}}\\\"><div class=\\\"text-center\\\"><img ng-src=\\\"{{$ctrl.toolConfig.image}}\\\"></div><h3>{{$ctrl.toolConfig.title}}&nbsp;&nbsp;<span ng-if=\\\"$ctrl.toolConfig.paid\\\">$</span></h3></a></div></div>\");\n$templateCache.put(\"src/Common/Tours/lightning_report.html\",\"<div class=\\\"form-section\\\"><div class=\\\"form-section-heading\\\"><h3>Lightning Events<br><small>Data Provided by Core Logic Weather Verification Services (Report #{{$ctrl.lightningData.reportId}})</small></h3></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table table-striped\\\"><thead><tr><th>Date</th><th>Time</th><th>Ground?</th><th>Signal</th><th>Lat</th><th>Lon</th><th>Chi</th></tr></thead><tbody><tr ng-repeat=\\\"event in $ctrl.lightningData.events\\\"><td>{{::event.date}}</td><td>{{::event.time}}</td><td>{{::event.ground}}</td><td>{{::event.signal}}</td><td>{{::event.lat}}</td><td>{{::event.lon}}</td><td>{{::event.chi}}</td></tr></tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h4>About STRIKEnet &reg;</h4><small>Unlike other lightning verification methodologies, The STRIKEnet Report uses 25-plus years of lightning data acquired from the U.S. National Lightning Detection Network&reg; (NLDN) and the Canadian Lightning Detection Network (CLDN). First introduced by Vaisala, Inc. in 1989 and later enhanced by the 2014 CoreLogic acquisition of Weather Fusion—a value-added reseller of Vaisala\\'s STRIKEnet&reg; Report—the lightning verification data that powers the STRIKEnet Reports is industry recognized as the standard for accuracy based on thousands of peer-reviewed citations. &copy;2015 CoreLogic Spatial Solutions LLC . &copy;2015 Vaisala Group. All rights reserved. This report is intended for the sole use of the customer; copying, modifying, or distributing this report in part or in its entirety to any third party is expressly forbidden unless express written permission is granted by Weather Fusion. Weather Fusion Terms and Conditions apply. STRIKEnet and NLDN are registered trademarks of Vaisala.</small><br><br><h4>Disclaimer<br><small>This report and the corresponding data are provided \\\"as is\\\" without warranty of any kind, either express or implied, including without limitation, any warranties of merchant-ability, non-infringement, or fitness for a particular purpose (even if that purpose is known to CoreLogic Spatial Solutions, LLC (\\\"CoreLogic\\\")), or arising from a course of dealing, usage, or trade practice. This report and the corresponding data are to be used for informational purposes only, and CoreLogic is not responsible for any use of, nor any decisions based on or in reliance on, this report and the corresponding data. CoreLogic does not represent or warrant that this report and the corresponding data are complete or free from error and does not assume, and expressly disclaims, any liability to any person or entity for any loss or damage caused by errors or omissions in this report and the corresponding data, whether such errors or omissions result from negligence, accident, or other cause. CoreLogic makes no representations or warranties about the legality or propriety of the use of this report and the corresponding data in any geographic area. Use of this report and the corresponding data is further limited by and subject to the terms and conditions at weatherfusion.com.</small></h4></div></div></div></div>\");\n$templateCache.put(\"src/Common/Tours/no_previous_next_tour_step.html\",\"<div><div class=\\\"popover-content tour-step-content\\\" bind-html-compile=\\\"tourStep.trustedContent || tourStep.content\\\"></div><div class=\\\"popover-navigation tour-step-navigation\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" class=\\\"btn btn-sm btn-default\\\" ng-click=\\\"tour.end()\\\">End tour</button></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><label class=\\\"checkbox-inline\\\"><input type=\\\"checkbox\\\" ng-model=\\\"tour.do_not_show\\\"><span class=\\\"tour-noshow\\\">Do not show this to me again.</span></label></div></div></div></div>\");\n$templateCache.put(\"src/Common/Tours/no_previous_tour_step.html\",\"<div><div class=\\\"popover-content tour-step-content\\\" bind-html-compile=\\\"tourStep.trustedContent || tourStep.content\\\"></div><div class=\\\"popover-navigation tour-step-navigation\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" class=\\\"btn btn-sm btn-default\\\" ng-click=\\\"tour.end()\\\">End tour</button></div><div class=\\\"col-md-4\\\"></div><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" class=\\\"btn btn-sm btn-default\\\" ng-if=\\\"tourStep.isNext()\\\" ng-click=\\\"tour.next()\\\">Next &raquo;</button></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><label class=\\\"checkbox-inline\\\"><input type=\\\"checkbox\\\" ng-model=\\\"tour.do_not_show\\\"><span class=\\\"tour-noshow\\\">Do not show this to me again.</span></label></div></div></div></div>\");\n$templateCache.put(\"src/Common/Tours/tour_step_template.html\",\"<div><div class=\\\"popover-content tour-step-content\\\" bind-html-compile=\\\"tourStep.trustedContent || tourStep.content\\\"></div><div class=\\\"popover-navigation tour-step-navigation\\\"><div class=\\\"row\\\"><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" class=\\\"btn btn-sm btn-default\\\" ng-click=\\\"tour.end()\\\">End tour</button></div><div class=\\\"col-md-8\\\"><button type=\\\"button\\\" class=\\\"btn btn-sm btn-default pull-right\\\" ng-if=\\\"tourStep.isNext()\\\" ng-click=\\\"tour.next()\\\">Next &raquo;</button><button type=\\\"button\\\" class=\\\"btn btn-sm btn-default pull-right\\\" ng-if=\\\"tourStep.isPrev()\\\" ng-click=\\\"tour.prev()\\\">&laquo; Prev</button></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><label class=\\\"checkbox-inline\\\"><input type=\\\"checkbox\\\" ng-model=\\\"tour.do_not_show\\\"><span class=\\\"tour-noshow\\\">Do not show this to me again.</span></label></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/Components/image_upload.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><button type=\\\"button\\\" ng-class=\\\"$ctrl.classes\\\" ngf-select=\\\"$ctrl.upload($files, $invalidFiles)\\\" ngf-pattern=\\\"\\'image/*\\'\\\" ngf-accept=\\\"\\'image/*\\'\\\" ngf-max-size=\\\"10MB\\\" ngf-min-height=\\\"100\\\" multiple analytics-on analytics-category=\\\"{{$ctrl.analyticsCategory}}\\\" analytics-event=\\\"{{$ctrl.analyticsEvent}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" rsf-permissions=\\\"update\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Photos</button>\");\n$templateCache.put(\"src/Jobs/Components/pin_drop.html\",\"<div class=\\\"map\\\"><ng-map id=\\\"addressMap\\\" map-type-id=\\\"SATELLITE\\\" zoom=\\\"19\\\" scrollwheel=\\\"false\\\"></ng-map><div class=\\\"map-overlay\\\"><i class=\\\"fa fa-3x fa-map-marker\\\"></i></div></div>\");\n$templateCache.put(\"src/Jobs/uploader/uploader.html\",\"<div class=\\\"row uploader\\\" ng-if=\\\"$ctrl.invalid\\\"><div class=\\\"col-12\\\">INVALID</div></div><div class=\\\"row uploader\\\" ng-if=\\\"!$ctrl.invalid\\\"><div class=\\\"col-12\\\"><nav class=\\\"navbar fixed-top\\\"><div class=\\\"container-fluid\\\"><div class=\\\"navbar-header\\\"><p class=\\\"navbar-brand\\\"><img class=\\\"org-image\\\" title=\\\"{{::$ctrl.org.name}}\\\" ng-src=\\\"{{::$ctrl.org.images[0].getUrl(\\'medium\\')}}\\\"></p></div><div class=\\\"navbar-header\\\" ng-show=\\\"$ctrl.org.images.length === 0\\\"><div class=\\\"navbar-text\\\"><h1>{{$ctrl.org.name}}</h1></div></div><div class=\\\"navbar-header d-none\\\"><div class=\\\"navbar-text\\\"><h1>Image Upload</h1></div></div></div></nav><div class=\\\"row uploader-header d-block\\\"><div class=\\\"col-12 text-center\\\"><h1>Image Upload</h1></div></div><div class=\\\"row uploader-body\\\"><div class=\\\"col-12 col-md-10 offset-md-2\\\"><div class=\\\"row\\\"><div class=\\\"col-12\\\">You have been sent an invitation to upload photos. Photos can be uploaded directly from a mobile device or via a computer.<br><br>To upload photos, simply click the Upload button below. You will be given an option to either select photos from your camera roll or take new photos.</div></div><hr><div class=\\\"row\\\" ng-if=\\\"$ctrl.imageTotal && ($ctrl.imageTotal !== $ctrl.imageSuccess)\\\"><div class=\\\"col-12\\\"><button type=\\\"button\\\" class=\\\"btn btn-success\\\">Uploading&nbsp;&nbsp;<i class=\\\"fa fa-circle-o-notch fa-spin\\\"></i>&nbsp;&nbsp;<span class=\\\"badge\\\">{{$ctrl.imageSuccess + 1}} of {{$ctrl.imageTotal}}</span></button></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.imageTotal && ($ctrl.imageTotal === $ctrl.imageSuccess)\\\"><div class=\\\"col-12\\\">{{$ctrl.imageTotal}} image(s) successfully uploaded! You can do it again</div><hr></div><div class=\\\"row\\\" ng-if=\\\"($ctrl.imageTotal === $ctrl.imageSuccess)\\\"><div class=\\\"col-12 text-center\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ngf-select=\\\"$ctrl.upload($files, $invalidFiles)\\\" ngf-pattern=\\\"\\'image/*\\'\\\" ngf-accept=\\\"\\'image/*\\'\\\" ngf-max-size=\\\"10MB\\\" ngf-min-height=\\\"100\\\" multiple><i class=\\\"fa fa-plus\\\"></i>&nbsp;UPLOAD</button></div></div></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/tabs/appointments.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><h1 class=\\\"tab-title\\\">Appointments</h1></div><div class=\\\"col-md-6\\\"><button type=\\\"button\\\" id=\\\"job-add-appointment\\\" class=\\\"btn btn-default pull-right add-appt\\\" analytics-on analytics-category=\\\"Appointment\\\" analytics-event=\\\"add\\\" analytics-nav-display=\\\"{{!this.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.openScheduler()\\\" rsf-permissions=\\\"create\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Appointment</button></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.job.appointments.length == 0\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/calendar.052935c6.png\\\"><h2>No appointments added. Let\\'s add one.</h2><p>Click on the add appointment button in the top right to add one.</p></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.job.appointments.length > 0\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table\\\"><thead><tr><th>Date</th><th>Time</th><th>Description</th><th ng-if=\\\"::$ctrl.hasMs()\\\">MarketSharp</th><th ng-if=\\\"::$ctrl.hasI360()\\\">Improveit360</th><th ng-if=\\\"::$ctrl.hasSr()\\\">SalesRabbit</th><th ng-if=\\\"::$ctrl.hasSalesforce()\\\">Salesforce</th><th ng-if=\\\"::$ctrl.hasLeadPerfection()\\\">LeadPerfection</th><th>Invitation</th></tr></thead><tbody ng-repeat=\\\"appointment in $ctrl.job.appointments | orderBy: \\'start_time\\'\\\"><tr><td>{{::appointment.start_time | date:\\'longDate\\' }}</td><td>{{::appointment.start_time | date:\\'shortTime\\' }} - {{::appointment.end_time | date:\\'shortTime\\'}}</td><td>{{::appointment.summary}}</td><td class=\\\"ms-results\\\" ng-if=\\\"::$ctrl.hasCRM()\\\"><div class=\\\"row\\\" ng-if=\\\"::$ctrl.isApptCRM(appointment)\\\"><div class=\\\"col-md-2\\\"><i class=\\\"rsf-cogs-link rsf-base-66\\\" ng-click=\\\"$ctrl.resultAppointment(appointment)\\\"></i></div><div class=\\\"col-md-8\\\"><ul ng-if=\\\"appointment.events_result_id\\\"><li>{{$ctrl.matchResult(appointment.events_result_id).description}}</li><li>{{$ctrl.matchReason(appointment.events_result_reason_id).description}}</li></ul></div></div></td><td><div class=\\\"row\\\"><div class=\\\"col-md-12 appt-buttons\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" analytics-on analytics-category=\\\"Appointment\\\" analytics-event=\\\"Show Invite\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" analytics-appointment=\\\"{{appointment.id}}\\\" analytics-email=\\\"{{$ctrl.job.email}}\\\" ng-click=\\\"$ctrl.sendInvite(appointment)\\\">Send Invite</button><i class=\\\"rsf-edit-link rsf-base-66 align-middle\\\" ng-if=\\\"!$ctrl.isApptCRM(appointment)\\\" analytics-category=\\\"Appointment\\\" analytics-event=\\\"Edit Appointment\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" analytics-appointment=\\\"{{appointment.id}}\\\" ng-click=\\\"$ctrl.editScheduler(appointment)\\\" title=\\\"Edit Appointment\\\"></i><i class=\\\"rsf-delete-link rsf-base-66 align-middle\\\" ng-if=\\\"!$ctrl.isApptCRM(appointment)\\\" analytics-category=\\\"Appointment\\\" analytics-event=\\\"Delete Appointment\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" analytics-appointment=\\\"{{appointment.id}}\\\" rsf-confirmation-dialog=\\\"$ctrl.deleteAppointment(appointment)\\\" rsf-confirmation-message=\\\"Are you sure you wish to delete this appointment?\\\" title=\\\"Delete Appointment\\\"></i></div></div></td></tr><tr ng-if=\\\"appointment.notes\\\"><td><span class=\\\"pull-right\\\">Notes:</span></td><td colspan=\\\"4\\\"><p style=\\\"white-space: pre-line\\\">{{appointment.notes}}</p></td></tr></tbody></table></div></div><appointment-creator job=\\\"$ctrl.job\\\"></appointment-creator><result-modal org=\\\"$ctrl.job.org\\\" event-src=\\\"$ctrl.selectedAppointment\\\" close=\\\"$ctrl.closeResult()\\\" result=\\\"$ctrl.appointmentResulted(result_id, reason_id, notes)\\\"></result-modal>\");\n$templateCache.put(\"src/Jobs/tabs/area_calculator.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Quick Measurements</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$dismiss()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\" rsf-permissions=\\\"google_maps\\\" permissions-on=\\\"org_tools\\\"><div class=\\\"rsf-card\\\" ng-show=\\\"$ctrl.job.address.isValidLatLon()\\\"><a analytics-on analytics-label=\\\"{{!$ctrl.navDisplay}}\\\" analytics-value=\\\"{{::$ctrl.job.id}}\\\" analytics-category=\\\"Area Tool\\\" analytics-event=\\\"Show Google Maps\\\" href=\\\"http://maps.google.com/maps?f=q&source=s_q&hl=en&q={{::$ctrl.job.address.lat}},+{{::$ctrl.job.address.lon}}&t=h\\\" target=\\\"_blank\\\"><div class=\\\"text-center\\\"><img src=\\\"/assets/images/image-tools/google-maps.77fc6ed8.jpg\\\"></div><h3>Google Maps</h3></a></div></div><div class=\\\"col-md-6\\\" rsf-permissions=\\\"map_developers_area\\\" permissions-on=\\\"org_tools\\\"><div class=\\\"rsf-card\\\" ng-show=\\\"$ctrl.job.address.isValidLatLon()\\\"><a analytics-on analytics-label=\\\"{{!$ctrl.navDisplay}}\\\" analytics-value=\\\"{{::$ctrl.job.id}}\\\" analytics-category=\\\"Area Tool\\\" analytics-event=\\\"Measure Area\\\" href=\\\"https://www.mapdevelopers.com/area_calculator_adv.php?zoom=19&lat={{::$ctrl.job.address.lat}}&lng={{::$ctrl.job.address.lon}}&height=600&width=600&square_meter=true&acres=true&square_mile=true&square_km=true\\\" target=\\\"_blank\\\"><div class=\\\"text-center\\\"><img src=\\\"/assets/images/image-tools/measure-area.d8345cee.jpg\\\"></div><h3>Map Developers Area Tool</h3></a></div></div></div><hr><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label class=\\\"control-label\\\">Flat Area</label><input tabindex=\\\"1\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"2\\\" name=\\\"area\\\" ng-model=\\\"$ctrl.newMeasurement.area\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label class=\\\"control-label\\\">Degrees</label><input tabindex=\\\"2\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"2\\\" name=\\\"area\\\" ng-change=\\\"$ctrl.convert($ctrl.newMeasurement)\\\" ng-model-options=\\\"{ debounce: 500 }\\\" ng-model=\\\"$ctrl.newMeasurement.degrees\\\"></div><div class=\\\"form-group\\\"><label class=\\\"control-label\\\">Pitch</label><input tabindex=\\\"3\\\" class=\\\"form-control\\\" type=\\\"number\\\" min=\\\"-9999999\\\" max=\\\"9999999\\\" decimal-places=\\\"2\\\" name=\\\"pitch\\\" ng-change=\\\"$ctrl.setPitch($ctrl.newMeasurement)\\\" ng-model=\\\"$ctrl.newMeasurement.pitch\\\" ng-model-options=\\\"{ debounce: 500 }\\\"></div></div></div><hr><div class=\\\"row\\\"><div class=\\\"col-md-4 offset-md-2\\\">Calculated Area:</div><div class=\\\"col-md-6\\\">{{$ctrl.calculate($ctrl.newMeasurement)[\\\"roof_area\\\"]}}</div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-default\\\" tabindex=\\\"4\\\" type=\\\"button\\\" ng-disabled=\\\"$ctrl.isSavable($ctrl.newMeasurement)\\\" ng-click=\\\"$close($ctrl.calculate($ctrl.newMeasurement))\\\">Save</button><button class=\\\"btn btn-secondary\\\" type=\\\"button\\\" ng-click=\\\"$dismiss()\\\">Cancel</button></div>\");\n$templateCache.put(\"src/Jobs/tabs/design_tools.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"pull-right\\\" ng-if=\\\"$ctrl.showingIFrame()\\\"><a class=\\\"fullscreen\\\" ng-if=\\\"$ctrl.fullscreen\\\" analytics-on analytics-label=\\\"{{!ctrl.navDisplay}}\\\" analytics-category=\\\"Design Tools\\\" analytics-event=\\\"Exit Fullscreen\\\" analytics-job=\\\"{{$ctrl.job.id}}\\\" analytics-org=\\\"{{$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.fullScreen()\\\"><i class=\\\"fa fa-close link\\\"></i>&nbsp; Close</a><button type=\\\"button\\\" class=\\\"btn btn-link\\\" analytics-on analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-category=\\\"Design Tools\\\" analytics-event=\\\"Fullscreen\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.fullScreen()\\\" ng-if=\\\"!$ctrl.showRenoworksIFrame\\\"><i class=\\\"fa fa-expand link\\\"></i>&nbsp;Fullscreen</button><button type=\\\"button\\\" class=\\\"btn btn-link\\\" analytics-label=\\\"{{!$ctrl.navDisplay}}\\\" analytics-category=\\\"Design Tools\\\" analytics-event=\\\"Close\\\" analytics-job=\\\"{{$ctrl.job.id}}\\\" analytics-org=\\\"{{$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.close()\\\"><i class=\\\"fa fa-close link\\\"></i>&nbsp;Close</button></div><div class=\\\"row\\\" ng-if=\\\"!$ctrl.showingIFrame()\\\"><div class=\\\"col-md-8\\\"><h1 class=\\\"tab-title\\\">Design Tools</h1></div><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" class=\\\"btn btn-default pull-right\\\" title=\\\"Add Visualization\\\" ng-if=\\\"$ctrl.job.org.fetchSettingsAcl(OrgAclType.visualizations).length > 0\\\" ng-click=\\\"$ctrl.addVisualization()\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add Visualization</button></div></div><div ng-if=\\\"$ctrl.jobLoaded\\\"><div ng-show=\\\"!$ctrl.showingIFrame()\\\"><div class=\\\"row\\\" ui-sortable=\\\"$ctrl.sortableOptions\\\" ng-model=\\\"$ctrl.job.visualizations\\\"><div class=\\\"sortable-card col-md-4\\\" ng-repeat=\\\"visualization in $ctrl.job.visualizations\\\"><visualization-card visualization=\\\"visualization\\\" job=\\\"$ctrl.job\\\" nav-display=\\\"$ctrl.navDisplay\\\" on-edit=\\\"$ctrl.editVisualization(visualization)\\\" on-click=\\\"$ctrl.showVisualization(visualization)\\\" on-delete=\\\"$ctrl.deleteVisualization(visualization)\\\" on-email=\\\"$ctrl.emailVisualization(visualization)\\\"></visualization-card></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.job.org.fetchSettingsAcl(OrgAclType.visualizations).length > 0 && $ctrl.job.visualizations.length === 0\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/design-tools.78d514fb.png\\\"><h2>No Visualization added. Let\\'s add one.</h2><p>Click on the Add Visualization button in the top right to add one.</p></div></div></div><hr><div class=\\\"row\\\" ng-if=\\\"$ctrl.toolsLoaded\\\"><div class=\\\"col-md-4\\\" ng-repeat=\\\"design_tool in $ctrl.job.org.fetchPreferencesAcl(OrgAclType.design_tools)\\\" ng-if=\\\"$ctrl.ToolInfo.tools(design_tool).visible($ctrl.job,$ctrl.navDisplay)\\\"><div class=\\\"rsf-card\\\"><a analytics-on analytics-category=\\\"Design Tools\\\" analytics-event=\\\"{{$ctrl.ToolInfo.tools(design_tool).title}}\\\" analytics-tool-id=\\\"{{::$ctrl.ToolInfo.tools(design_tool).id}}\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.showIFrame(design_tool)\\\"><div class=\\\"text-center\\\"><img ng-src=\\\"{{$ctrl.ToolInfo.tools(design_tool).image}}\\\"></div><h3>{{$ctrl.ToolInfo.tools(design_tool).title}}</h3></a></div></div></div></div><object type=\\\"text/html\\\" ng-class=\\\"{fullscreen: $ctrl.fullscreen}\\\" ng-if=\\\"$ctrl.visualizationUrl && $ctrl.showRenoworksIFrame\\\" data=\\\"{{$ctrl.visualizationUrl}}\\\"></object><iframe class=\\\"render-iframe\\\" ng-class=\\\"{fullscreen: $ctrl.fullscreen}\\\" ng-if=\\\"$ctrl.toolIFrameUrl && $ctrl.showToolIFrame\\\" ng-src=\\\"{{$ctrl.toolIFrameUrl}}\\\" frameborder=\\\"0\\\"></iframe><iframe class=\\\"render-iframe\\\" ng-class=\\\"{fullscreen: $ctrl.fullscreen}\\\" ng-if=\\\"$ctrl.visualizationUrl && $ctrl.showVisualizationIFrame\\\" ng-src=\\\"{{$ctrl.visualizationUrl}}\\\" frameborder=\\\"0\\\"></iframe></div>\");\n$templateCache.put(\"src/Jobs/tabs/email_modal.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Email Document</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$dismiss()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><form name=\\\"emailForm\\\"><div class=\\\"modal-body\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-group\\\"><label for=\\\"emails\\\">Email</label><input type=\\\"text\\\" class=\\\"form-control\\\" id=\\\"emails\\\" ng-model=\\\"$ctrl.emails\\\" name=\\\"current_emails\\\" ng-pattern=\\\"$ctrl.emailListPattern\\\" required><div ng-messages=\\\"emailForm.current_emails.$error\\\" class=\\\"has-error\\\" role=\\\"alert\\\"><div ng-message=\\\"pattern\\\">Improperly formatted emails \\'_@__.__\\' (comma separated)</div></div></div><div class=\\\"form-group\\\"><label for=\\\"message\\\">Message</label><textarea ng-model=\\\"$ctrl.message\\\" name=\\\"email_message\\\" id=\\\"message\\\" class=\\\"form-control fullwidth\\\" rows=\\\"4\\\" placeholder=\\\"Message to the email recipient\\\"></textarea></div><div class=\\\"form-group\\\" ng-repeat=\\\"(key, value) in $ctrl.pdf_options\\\"><input ng-model=\\\"$ctrl.pdf_options[key]\\\" type=\\\"checkbox\\\" name=\\\"{{key}}\\\" id=\\\"{{key}}\\\">&nbsp;<label class=\\\"control-label\\\" for=\\\"{{key}}\\\">{{$ctrl.Pretty.name[key]}}</label></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-default\\\" type=\\\"submit\\\" ng-disabled=\\\"!emailForm.current_emails.$valid\\\" ng-click=\\\"$ctrl.send()\\\">Send</button><button class=\\\"btn btn-secondary\\\" type=\\\"button\\\" ng-click=\\\"$dismiss()\\\">Cancel</button></div></form>\");\n$templateCache.put(\"src/Jobs/tabs/estimate.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"row\\\" ng-if=\\\"$ctrl.spinnerPromise.$$state.status === 1\\\"><div class=\\\"col-12\\\"><estimate-editor nav-display=\\\"$ctrl.navDisplay\\\" job=\\\"$ctrl.job\\\"></estimate-editor></div></div>\");\n$templateCache.put(\"src/Jobs/tabs/estimates.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div ng-if=\\\"!$ctrl.selectedEstimateId\\\" class=\\\"row\\\" rsf-permissions=\\\"read\\\" permissions-on=\\\"Estimate\\\"><div class=\\\"col-md-6\\\"><h1 class=\\\"tab-title\\\">{{$ctrl.job.org.estimatorTitle(true)}}</h1></div><div class=\\\"col-md-6\\\"><button type=\\\"button\\\" id=\\\"job-add-estimate\\\" class=\\\"btn btn-default pull-right\\\" ng-click=\\\"$ctrl.addEstimate()\\\" rsf-permissions=\\\"create\\\" permissions-on=\\\"Estimate\\\" ng-disabled=\\\"!$ctrl.job.org.activated_price_list\\\" on-object=\\\"$ctrl.job\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add {{$ctrl.job.org.estimatorTitle()}}</button><button type=\\\"button\\\" class=\\\"btn btn-default pull-right\\\" title=\\\"Select estimates below to present options\\\" ng-if=\\\"$ctrl.showPricePresentation\\\" ng-click=\\\"$ctrl.presentation()\\\" ng-disabled=\\\"$ctrl.disablePresent()\\\">Present Options</button></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.job.estimates.length == 0 && !$ctrl.selectedEstimateId && $ctrl.job.org.activated_price_list\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/estimates.022a621b.png\\\"><h2>No {{$ctrl.job.org.estimatorTitle(true)}} added. Let\\'s add one.</h2><p>Click on the add {{$ctrl.job.org.estimatorTitle()}} button in the top right and then begin creating your {{$ctrl.job.org.estimatorTitle()}}.</p></div></div></div><div ng-if=\\\"!$ctrl.job.org.activated_price_list\\\"><div class=\\\"form-section blank-state alert alert-danger\\\"><img src=\\\"/assets/images/icons-large/estimates.022a621b.png\\\"><h2>The Price List for this Organization doesn\\'t exist!</h2><h4>An {{$ctrl.job.org.estimatorTitle()}} can not be created without a Price List.</h4></div></div><div ng-if=\\\"!$ctrl.selectedEstimateId\\\" class=\\\"row\\\"><div class=\\\"col-md-12\\\" ng-if=\\\"$ctrl.job.estimates.length > 0\\\"><table class=\\\"table\\\"><thead><tr><th ng-if=\\\"$ctrl.showPricePresentation\\\"></th><th>Name</th><th>Last Updated</th><th>Products</th><th ng-show=\\\"$ctrl.job.org.showEstimateListPricing(!$ctrl.navDisplay)\\\">Amount</th><th></th></tr></thead><tbody><tr ng-repeat=\\\"estimate in $ctrl.job.estimates | orderBy: \\'updated_at\\':true \\\"><td ng-if=\\\"$ctrl.showPricePresentation\\\"><input type=\\\"checkbox\\\" ng-change=\\\"$ctrl.toggleCompare(estimate)\\\" ng-model=\\\"estimate.compare\\\"></td><td class=\\\"link\\\" ng-click=\\\"$ctrl.selectEstimate(estimate)\\\">{{::estimate.name}}</td><td class=\\\"link\\\" ng-click=\\\"$ctrl.selectEstimate(estimate)\\\">{{::estimate.updated_at | date:\\'short\\'}}</td><td class=\\\"link\\\" ng-click=\\\"$ctrl.selectEstimate(estimate)\\\">{{::estimate.line_items_count}}</td><td ng-show=\\\"$ctrl.job.org.showEstimateListPricing(!$ctrl.navDisplay)\\\" class=\\\"link\\\" ng-click=\\\"$ctrl.selectEstimate(estimate)\\\">{{::estimate.total | currency}}</td><td class=\\\"estimate-icons\\\"><i class=\\\"rsf-edit-link rsf-base-66 action-button\\\" ng-click=\\\"$ctrl.selectEstimate(estimate)\\\" title=\\\"Edit {{::$ctrl.job.org.estimatorTitle(false)}}\\\"></i><i class=\\\"rsf-pdf-link rsf-base-66 action-button\\\" ng-click=\\\"$ctrl.pdf(estimate,\\'estimate\\')\\\" title=\\\"Generate {{::$ctrl.job.org.estimateTitle(false)}}\\\"></i><i class=\\\"rsf-clipboard-link rsf-base-66 action-button\\\" ng-click=\\\"$ctrl.pdf(estimate,\\'contract\\')\\\" title=\\\"Generate {{::$ctrl.job.org.contractTitle(false)}}\\\"></i><i class=\\\"rsf-excel-link rsf-base-66 action-button\\\" ng-click=\\\"$ctrl.csv(estimate,\\'product\\')\\\" title=\\\"Generate Product CSV\\\" rsf-permissions=\\\"product_csv\\\" permissions-on=\\\"Estimate\\\"></i><i class=\\\"rsf-money-link rsf-base-66 action-button\\\" ng-click=\\\"$ctrl.pdf(estimate,\\'cost\\')\\\" title=\\\"Generate Cost Sheet\\\" rsf-permissions=\\\"cost_sheet\\\" permissions-on=\\\"Estimate\\\"></i><i class=\\\"rsf-ruler-link rsf-base-66 action-button\\\" ng-click=\\\"$ctrl.csv(estimate,\\'remeasure\\')\\\" title=\\\"Generate Remeasure CSV\\\" rsf-permissions=\\\"remeasure_csv\\\" permissions-on=\\\"Estimate\\\"></i><commission-actions estimate-id=\\\"estimate.id\\\"></commission-actions></td></tr></tbody></table></div></div>\");\n$templateCache.put(\"src/Jobs/tabs/history.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"row\\\" rsf-permissions=\\\"read\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\"><div class=\\\"col-md-12\\\"><h1 class=\\\"tab-title\\\">History</h1></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.job.state_logs.length == 0\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/docs.33cddf3f.png\\\"><h2>No history.</h2><p>Once this job has been updated, you\\'ll see a list of history.</p></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.job.state_logs.length > 0\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table\\\"><thead><tr><th>User</th><th>Event</th><th>From</th><th>To</th><th>Date</th></tr></thead><tbody><tr ng-repeat=\\\"log in $ctrl.job.state_logs\\\"><td>{{::log.user}}</td><td>{{::log.event | humanize}}</td><td>{{::log.from | humanize}}</td><td>{{::log.to | humanize}}</td><td>{{::log.created_at | date:\\'short\\'}}</td></tr></tbody></table></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.emailResponse.emails.length > 0\\\"><div class=\\\"col-md-12\\\"><h1>Email History</h1></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.emailResponse.emails.length > 0\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table\\\"><thead><tr><th></th><th>Date</th><th>To</th><th>Subject</th><th>Kind</th><th>Provider</th><th>Events</th></tr></thead><tbody ng-repeat=\\\"email in $ctrl.emailResponse.emails | orderBy:\\'-id\\'\\\"><tr ng-click=\\\"$ctrl.toggleEventDisplay(email)\\\" ng-class=\\\"{ \\'link\\': email.events.length > 0 }\\\"><td><span ng-if=\\\"email.events.length > 0\\\"><i class=\\\"fa fa-66 fa-caret-right\\\" ng-if=\\\"!email._display\\\"></i><i class=\\\"fa fa-66 fa-caret-down\\\" ng-if=\\\"email._display\\\"></i></span></td><td>{{::email.date | date:\\'short\\'}}</td><td>{{::email.to}}</td><td>{{::email.subject}}</td><td>{{$ctrl.Pretty.name[email.kind]}}</td><td>{{$ctrl.Pretty.name[email.provider]}}</td><td>{{::email.events.length}}</td></tr><tr ng-if=\\\"email._display\\\"><td></td><td colspan=\\\"6\\\"><table class=\\\"table\\\"><thead><tr><th>When</th><th>Recipient</th><th>Type</th></tr></thead><tbody><tr ng-repeat=\\\"event in email.events | orderBy:\\'-happened_at\\'\\\"><td>{{::event.happened_at | date:\\'short\\'}}</td><td>{{::event.recipient}}</td><td><span ng-if=\\\"event.record_type && !event.sub_type\\\">{{$ctrl.Pretty.name[event.record_type]}}</span><span ng-if=\\\"event.record_type && event.sub_type\\\">{{$ctrl.Pretty.name[event.record_type]}}: {{::event.sub_type}}</span><span ng-if=\\\"!event.record_type && event.sub_type\\\">{{::event.sub_type}}</span></td></tr></tbody></table></td></tr></tbody></table></div></div><div class=\\\"pagination-height-fix row\\\"><div class=\\\"col-md-12\\\"><ul uib-pagination total-items=\\\"$ctrl.params.totalCount\\\" ng-model=\\\"$ctrl.params.currentPage\\\" max-size=\\\"5\\\" items-per-page=\\\"$ctrl.params.perPage\\\" ng-change=\\\"$ctrl.queryEmails()\\\" class=\\\"pagination-sm justify-content-center\\\" boundary-link-numbers=\\\"true\\\"></ul></div></div><hr rsf-permissions=\\\"events\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\"><div class=\\\"row\\\" rsf-permissions=\\\"events\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\"><div class=\\\"col-md-12\\\"><h1>Analytics Report</h1></div></div><div class=\\\"row\\\" rsf-permissions=\\\"events\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\"><div class=\\\"col-md-12\\\"><div class=\\\"row panel panel-default\\\" ng-repeat=\\\"report in $ctrl.reports\\\"><div class=\\\"col-md-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h2>Appointment:</h2></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\">{{$ctrl.apptSummary(report.appointment_id)}} - {{report.date | date:\\'MMM d, yyyy h:mm a\\'}}</div></div><div class=\\\"row\\\"><table class=\\\"table table-striped\\\"><thead><tr><th width=\\\"200px\\\">Test</th><th width=\\\"75px\\\"></th><th width=\\\"75px\\\"></th><th width=\\\"75px\\\"></th><th>Notes</th></tr></thead><tbody><tr ng-repeat=\\\"result in report.data\\\"><td>{{$ctrl.reportName(result.test)}}</td><td><i class=\\\"fa fa-check btn btn-block btn-success btn-cursor-default\\\" ng-if=\\\"result.result == 1\\\"></i></td><td><i class=\\\"fa fa-ellipsis-h btn btn-block btn-warning btn-cursor-default\\\" ng-if=\\\"result.result == 0\\\"></i></td><td><i class=\\\"fa fa-close btn btn-block btn-danger btn-cursor-default\\\" ng-if=\\\"result.result == -1\\\"></i></td><td><ul style=\\\"list-style: none\\\"><li ng-repeat=\\\"message in result.messages\\\">{{$ctrl.sanitizeMessage(message)}}</li></ul></td></tr></tbody></table></div></div></div></div></div><hr rsf-permissions=\\\"events\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\"><div class=\\\"row\\\" ng-if=\\\"$ctrl.analytics.data.length > 0\\\" rsf-permissions=\\\"events\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\"><div class=\\\"col-md-12\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><table class=\\\"table\\\"><thead><tr><th>Category</th><th>Event</th><th>Presentation Mode</th><th>Data</th><th>User</th><th>Duration</th><th>Date</th></tr></thead><tbody><tr ng-repeat=\\\"event in $ctrl.analytics.data\\\"><td>{{::event.data.category}}</td><td>{{::event.data.action}}</td><td>{{::event.data.navDisplay}}</td><td><pre class=\\\"bg-white\\\">{{$ctrl.formatData(event)}}</pre></td><td>{{$ctrl.fetchUser(event.data.userId).name()}}</td><td><span uib-tooltip=\\\"{{$ctrl.duration($index)}}\\\" tooltip-placement=\\\"top\\\">{{$ctrl.humanDuration($index)}}</span></td><td>{{event.inserted_at | date:\\'short\\'}}</td></tr></tbody></table></div></div><div class=\\\"pagination-height-fix row\\\"><div class=\\\"col-md-12\\\"><ul uib-pagination total-items=\\\"$ctrl.metadata.total\\\" ng-model=\\\"$ctrl.metadata[\\'page-number\\']\\\" max-size=\\\"5\\\" items-per-page=\\\"$ctrl.metadata[\\'per-page\\']\\\" ng-change=\\\"$ctrl.query()\\\" class=\\\"pagination-sm justify-content-center\\\" boundary-link-numbers=\\\"true\\\"></ul></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/tabs/import_measurements.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Import Measurements</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.cancel()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\"><div class=\\\"scrollable\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h4>You can upload a measurement file from one of the remote measurement companies.</h4><div class=\\\"text-center\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ngf-select=\\\"$ctrl.upload($files, $invalidFiles)\\\" ngf-max-size=\\\"30MB\\\" ngf-pattern=\\\"\\'.xls,.xlsx,.csv,.xml,.json,.window\\'\\\" analytics-on ngf-accept=\\\"\\'.xls,.xlsx,.csv,.xml,.json,.window\\'\\\" analytics-category=\\\"Measurements\\\" analytics-event=\\\"Upload File\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" rsf-permissions=\\\"update\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\" multiple>Upload</button></div></div></div><report-list></report-list><div class=\\\"row\\\" rsf-permissions=\\\"create\\\" permissions-on=\\\"Report\\\"><div ng-class=\\\"{ \\'col-md-6\\': $ctrl.canOrderMultiple, \\'col-md-12\\': !$ctrl.canOrderMultiple}\\\" ng-if=\\\"$ctrl.canOrderQuickMeasure\\\"><div class=\\\"tool-container\\\"><div class=\\\"rsf-card\\\"><a analytics-on analytics-category=\\\"Measurements\\\" analytics-event=\\\"import quick measure\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.orderQuickMeasure()\\\"><div class=\\\"text-center\\\"><img alt=\\\"quick-measure-logo\\\" src=\\\"/assets/images/image-tools/quick-measure-logo.e12d25c8.png\\\"></div><h3>Request a GAF QuickMeasure&trade;</h3></a></div></div></div><div ng-class=\\\"{ \\'col-md-6\\': $ctrl.canOrderMultiple, \\'col-md-12\\': !$ctrl.canOrderMultiple}\\\" ng-if=\\\"$ctrl.canOrderEagleview\\\"><div class=\\\"tool-container\\\"><div class=\\\"rsf-card\\\"><a analytics-on analytics-category=\\\"Measurements\\\" analytics-event=\\\"order eagleview\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.orderEv()\\\"><div class=\\\"text-center\\\"><img alt=\\\"eagleview-logo\\\" src=\\\"/assets/images/icons/eagleview.7264a419.png\\\"></div><h3>Purchase an EagleView&trade; report!</h3></a></div></div></div><div ng-class=\\\"{ \\'col-md-6\\': $ctrl.canOrderMultiple, \\'col-md-12\\': !$ctrl.canOrderMultiple}\\\" ng-if=\\\"$ctrl.canImportHover\\\"><div class=\\\"tool-container\\\"><div class=\\\"rsf-card\\\"><a analytics-on analytics-category=\\\"Measurements\\\" analytics-event=\\\"import hover\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.importHover()\\\"><div class=\\\"text-center\\\"><img alt=\\\"hover-logo\\\" src=\\\"/assets/images/icons/hover.f5fc5132.png\\\"></div><h3>Import HOVER Measurements!</h3></a></div></div></div><div ng-class=\\\"{ \\'col-md-6\\': $ctrl.canOrderMultiple, \\'col-md-12\\': !$ctrl.canOrderMultiple}\\\" ng-if=\\\"$ctrl.canOrderRoofScope\\\"><div class=\\\"tool-container\\\"><div class=\\\"rsf-card\\\"><a analytics-on analytics-category=\\\"Measurements\\\" analytics-event=\\\"order scope technologies\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.orderRoofScope()\\\"><div class=\\\"text-center\\\"><img alt=\\\"scope-technologies-logo\\\" src=\\\"/assets/images/image-tools/scope-technologies-logo.c04a66a4.png\\\"></div><h3>Purchase a Scope Technologies report!</h3></a></div></div></div><div ng-class=\\\"{ \\'col-md-6\\': $ctrl.canOrderMultiple, \\'col-md-12\\': !$ctrl.canOrderMultiple}\\\" ng-if=\\\"$ctrl.canOrderPlnar\\\"><div class=\\\"tool-container\\\"><div class=\\\"rsf-card\\\"><a analytics-on analytics-category=\\\"Measurements\\\" analytics-event=\\\"order plnar\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\" ng-click=\\\"$ctrl.orderPlnar()\\\"><div class=\\\"text-center\\\"><img alt=\\\"SmartInteriors Logo\\\" src=\\\"/assets/images/image-tools/smart_interiores_powered_plnar.ddb8f997.png\\\"></div><h3>Purchase a SmartInteriors report!</h3></a></div></div></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancel()\\\">Cancel</button></div>\");\n$templateCache.put(\"src/Jobs/tabs/info.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"row\\\" ui-tour=\\\"job-info-tour\\\" ui-tour-backdrop=\\\"true\\\" ui-tour-use-hotkeys=\\\"true\\\" ui-tour-on-shown=\\\"$ctrl.JobInfoTourService.onShown()\\\" ui-tour-on-end=\\\"$ctrl.JobInfoTourService.onEnd()\\\" ui-tour-on-next=\\\"$ctrl.JobInfoTourService.onNext()\\\" ui-tour-on-prev=\\\"$ctrl.JobInfoTourService.onPrev()\\\" ui-tour-template-url=\\\"\\'src/Common/Tours/tour_step_template.html\\'\\\"><div class=\\\"col-md-8\\\"><h1 class=\\\"tab-title\\\">Customer Information</h1></div><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" id=\\\"job-top-save-changes\\\" class=\\\"btn btn-default pull-right tour-save\\\" ng-disabled=\\\"!$ctrl.form.ctrl.$valid || !$ctrl.check() || !$ctrl.saveable()\\\" ng-click=\\\"$ctrl.save()\\\">Save Changes</button></div></div><form name=\\\"$ctrl.form.ctrl\\\" class=\\\"form\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section tour-customer-details\\\"><div class=\\\"form-section-heading\\\"><h3>Customer Details</h3></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_name\\\" class=\\\"control-label\\\">Customer\\'s Name</label><input tabindex=\\\"1\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.customer_name\\\" id=\\\"customer_name\\\" ng-change=\\\"$ctrl.customerNameChanged()\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"email\\\" class=\\\"control-label\\\">Customer\\'s Email Address</label><input tabindex=\\\"2\\\" class=\\\"form-control\\\" type=\\\"text\\\" id=\\\"email\\\" name=\\\"current_emails\\\" ng-pattern=\\\"$ctrl.emailListPattern\\\" ng-model=\\\"$ctrl.job.email\\\"><div ng-messages=\\\"$ctrl.form.ctrl.current_emails.$error\\\" class=\\\"has-error\\\" role=\\\"alert\\\"><div ng-message=\\\"pattern\\\">Improperly formatted emails \\'_@__.__\\' (comma separated)</div></div></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label class=\\\"control-label\\\">Customer\\'s Phone Numbers</label><div class=\\\"form-group\\\" ng-repeat=\\\"phoneNumber in $ctrl.job.phone_numbers | filter: { \\'_destroy\\': \\'!\\' }\\\"><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><input placeholder=\\\"Desc\\\" uib-typeahead=\\\"name for name in $ctrl.phoneNames | filter:$viewValue\\\" typeahead-min-length=\\\"0\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"phoneNumber.name\\\" tabindex=\\\"3\\\"></div><div class=\\\"col-md-7\\\"><input placeholder=\\\"Number\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"phoneNumber.number\\\" tabindex=\\\"4\\\"></div><div class=\\\"col-md-2\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.removePhoneNumber(phoneNumber)\\\" title=\\\"Delete Phone Number\\\" tabindex=\\\"5\\\"><i class=\\\"fa fa-trash\\\"></i></button></div></div></div><div class=\\\"form-group\\\"><div class=\\\"row\\\"><div class=\\\"offset-md-10 col-md-2\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.addPhoneNumber()\\\" title=\\\"Add Phone Number\\\" tabindex=\\\"6\\\"><i class=\\\"fa fa-plus\\\"></i></button></div></div></div></div></div></div></div></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section tour-job-details\\\"><div class=\\\"form-section-heading\\\"><h3>Job Details</h3></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"name\\\" class=\\\"control-label\\\">Job Name</label><input tabindex=\\\"7\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.name\\\" id=\\\"name\\\" ng-change=\\\"$ctrl.jobNameChanged()\\\"></div></div><div class=\\\"col-md-3\\\"><div class=\\\"form-group\\\"><label for=\\\"state\\\" class=\\\"control-label\\\">Job Status</label><input id=\\\"state\\\" type=\\\"text\\\" readonly value=\\\"{{$ctrl.nameFromRawState()}}\\\" class=\\\"form-control\\\" tabindex=\\\"8\\\"></div></div><div class=\\\"col-md-3\\\" ng-if=\\\"$ctrl.$state.params.id != \\'new\\'\\\"><div class=\\\"form-group\\\"><label for=\\\"actions\\\" class=\\\"control-label\\\">Change Status</label><select name=\\\"actions\\\" id=\\\"actions\\\" ng-options=\\\"event for event in $ctrl.job.events\\\" ng-model=\\\"$ctrl.stateAction\\\" tabindex=\\\"9\\\" class=\\\"form-control\\\"><option value=\\\"\\\">--</option></select></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\" ng-if=\\\"$ctrl.job.additional_info\\\"><label for=\\\"additional-info\\\" class=\\\"control-label\\\">Additional Info</label><textarea name=\\\"additional_info\\\" id=\\\"additional_info\\\" ng-model=\\\"$ctrl.job.additional_info\\\" class=\\\"form-control full-width reset-margin\\\" readonly></textarea></div></div><div class=\\\"col-md-3\\\"><div class=\\\"form-group\\\"><label for=\\\"org\\\" class=\\\"control-label\\\">Organization</label><input id=\\\"org\\\" type=\\\"text\\\" readonly ng-model=\\\"$ctrl.job.org.name\\\" class=\\\"form-control\\\"></div></div><div class=\\\"col-md-3\\\"><div class=\\\"form-group\\\"><label for=\\\"user\\\" class=\\\"control-label\\\">Assign To</label><select rsf-permissions=\\\"assign\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\" class=\\\"form-control\\\" name=\\\"user\\\" id=\\\"user\\\" ng-options=\\\"user as user.name() for user in $ctrl.userResult.users track by user.id\\\" ng-model=\\\"$ctrl.assignedUser\\\" tabindex=\\\"10\\\"></select><input type=\\\"text\\\" rsf-permissions=\\\"assign\\\" permissions-on=\\\"Job\\\" on-object=\\\"$ctrl.job\\\" inverse readonly value=\\\"{{$ctrl.assignedUser.name()}}\\\" class=\\\"form-control\\\"></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.additionalAssignedUser\\\"><div class=\\\"col-md-6\\\"></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"org\\\" class=\\\"control-label\\\">Additional Assignment</label><input id=\\\"additional_assignment\\\" type=\\\"text\\\" readonly value=\\\"{{$ctrl.additionalAssignedUser.name()}}\\\" class=\\\"form-control\\\"></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"lead_source\\\" class=\\\"control-label\\\">Lead Source</label><div class=\\\"row\\\"><div class=\\\"col-md-10\\\" ng-if=\\\"!$ctrl.addLeadSource\\\"><select tabindex=\\\"11\\\" name=\\\"lead_source\\\" id=\\\"lead_source\\\" class=\\\"form-control\\\" ng-options=\\\"leadSource for leadSource in $ctrl.leadSources\\\" ng-model=\\\"$ctrl.job.lead_source\\\"></select></div><div class=\\\"col-md-2\\\" ng-if=\\\"!$ctrl.addLeadSource\\\"><button type=\\\"button\\\" tabindex=\\\"12\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.enableLeadSourceAdd()\\\" title=\\\"Add Lead Source\\\"><i class=\\\"fa fa-plus\\\"></i></button></div><div class=\\\"col-md-10\\\" ng-if=\\\"$ctrl.addLeadSource\\\"><input type=\\\"text\\\" ng-model=\\\"$ctrl.job.lead_source\\\" placeholder=\\\"New Lead Source\\\" uib-typeahead=\\\"lead_source for lead_source in $ctrl.leadSources | filter:$viewValue\\\" class=\\\"form-control\\\" typeahead-min-length=\\\"0\\\" tabindex=\\\"13\\\"></div><div class=\\\"col-md-2\\\" ng-if=\\\"$ctrl.addLeadSource\\\"><button type=\\\"button\\\" class=\\\"btn btn-default\\\" ng-click=\\\"$ctrl.addNewLeadSource()\\\" title=\\\"Save New Lead Source\\\" tabindex=\\\"14\\\">Set</button></div></div></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"job_type\\\" class=\\\"control-label\\\">Job Type</label><react-select-wrapper default-value=\\\"$ctrl.jobJobTypes()\\\" available=\\\"$ctrl.jobTypes\\\" on-change=\\\"$ctrl.updateJobTypes\\\"></react-select-wrapper></div></div></div></div></div></div></div><div ng-if=\\\"$ctrl.$state.params.id != \\'new\\'\\\"><job-resulting-section></job-resulting-section></div><div ng-if=\\\"$ctrl.$state.params.id != \\'new\\'\\\"><job-metadata update=\\\"$ctrl.updateMetadata\\\"></job-metadata></div><payments-and-applications></payments-and-applications><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section tour-job-address\\\"><div class=\\\"form-section-heading\\\"><h3>Job Address</h3></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_1\\\" class=\\\"control-label\\\">Address 1</label><input tabindex=\\\"16\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.address.line_1\\\" ng-change=\\\"$ctrl.addressChanged()\\\" id=\\\"address_1\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_2\\\" class=\\\"control-label\\\">Address 2</label><input tabindex=\\\"17\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.address.line_2\\\" ng-change=\\\"$ctrl.addressChanged()\\\" id=\\\"address_2\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"address_city\\\" class=\\\"control-label\\\">City</label><input tabindex=\\\"18\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.address.city\\\" ng-change=\\\"$ctrl.addressChanged()\\\" id=\\\"address_city\\\"></div></div><div class=\\\"col-md-2\\\"><div class=\\\"form-group\\\"><label for=\\\"address_state\\\" class=\\\"control-label\\\">State</label><select tabindex=\\\"19\\\" name=\\\"address_state\\\" id=\\\"address_state\\\" ng-model=\\\"$ctrl.job.address.state\\\" ng-change=\\\"$ctrl.addressChanged()\\\" ng-options=\\\"state for state in $ctrl.US_STATES\\\" class=\\\"form-control\\\" ng-required=\\\"$ctrl.job.address.stateRequired()\\\"></select><div ng-messages=\\\"$ctrl.form.ctrl.address_state.$error\\\" class=\\\"has-error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">Required</div></div></div></div><div class=\\\"col-md-2\\\"><div class=\\\"form-group\\\"><label for=\\\"address_postal_code\\\" class=\\\"control-label\\\">Postal Code</label><input tabindex=\\\"20\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.address.postal_code\\\" ng-change=\\\"$ctrl.addressChanged()\\\" id=\\\"address_postal_code\\\"></div></div><div class=\\\"col-md-2\\\"><div class=\\\"form-group\\\"><label for=\\\"address_country\\\" class=\\\"control-label\\\">Country</label><select tabindex=\\\"21\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.address.country\\\" ng-change=\\\"$ctrl.addressChanged()\\\" id=\\\"address_country\\\" ng-options=\\\"country for country in $ctrl.COUNTRIES\\\"></select></div></div><div class=\\\"col-md-6\\\" ng-if=\\\"$ctrl.job.address.administrative_area_level_2\\\"><div class=\\\"form-group\\\"><label for=\\\"address_administrative_area_level_2\\\" class=\\\"control-label\\\">{{::$ctrl.Pretty.name[\\\"administrative_area_level_2\\\"]}}</label><input class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.address.administrative_area_level_2\\\" id=\\\"address_administrative_area_level_2\\\" disabled></div></div><div class=\\\"col-md-6\\\" ng-if=\\\"$ctrl.job.address.administrative_area_level_3\\\"><div class=\\\"form-group\\\"><label for=\\\"address_administrative_area_level_3\\\" class=\\\"control-label\\\">{{::$ctrl.Pretty.name[\\\"administrative_area_level_3\\\"]}}</label><input class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.address.administrative_area_level_3\\\" id=\\\"address_administrative_area_level_3\\\" disabled></div></div></div></div></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section tour-job-address\\\"><div class=\\\"form-section-heading\\\"><h3>Customer Address</h3></div><div class=\\\"form-section-content\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-group\\\"><label class=\\\"checkbox-inline\\\"><input type=\\\"checkbox\\\" tabindex=\\\"22\\\" ng-model=\\\"$ctrl.useJobAddress\\\" ng-change=\\\"$ctrl.toggleUseJobAddress()\\\">Use Job Address</label></div></div></div><div class=\\\"row\\\" ng-if=\\\"!$ctrl.useJobAddress\\\"><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_address_1\\\" class=\\\"control-label\\\">Address 1</label><input tabindex=\\\"23\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.customer_address.line_1\\\" id=\\\"customer_address_1\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_address_2\\\" class=\\\"control-label\\\">Address 2</label><input tabindex=\\\"24\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.customer_address.line_2\\\" id=\\\"customer_address_2\\\"></div></div><div class=\\\"col-md-6\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_address_city\\\" class=\\\"control-label\\\">City</label><input tabindex=\\\"25\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.customer_address.city\\\" id=\\\"customer_address_city\\\"></div></div><div class=\\\"col-md-2\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_address_state\\\" class=\\\"control-label\\\">State</label><select tabindex=\\\"26\\\" name=\\\"customer_address_state\\\" id=\\\"customer_address_state\\\" ng-model=\\\"$ctrl.job.customer_address.state\\\" ng-options=\\\"state for state in $ctrl.US_STATES\\\" class=\\\"form-control\\\" required></select><div ng-messages=\\\"$ctrl.form.ctrl.customer_address_state.$error\\\" class=\\\"has-error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">Required</div></div></div></div><div class=\\\"col-md-2\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_address_postal_code\\\" class=\\\"control-label\\\">Postal Code</label><input tabindex=\\\"27\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.customer_address.postal_code\\\" id=\\\"customer_address_postal_code\\\"></div></div><div class=\\\"col-md-2\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_address_country\\\" class=\\\"control-label\\\">Country</label><select tabindex=\\\"28\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.customer_address.country\\\" id=\\\"customer_address_country\\\" ng-options=\\\"country for country in $ctrl.COUNTRIES\\\"></select></div></div><div class=\\\"col-md-6\\\" ng-if=\\\"$ctrl.job.customer_address.administrative_area_level_2\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_address_administrative_area_level_2\\\" class=\\\"control-label\\\">{{::$ctrl.Pretty.name[\\\"administrative_area_level_2\\\"]}}</label><input class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.customer_address.administrative_area_level_2\\\" id=\\\"customer_address_administrative_area_level_2\\\" disabled></div></div><div class=\\\"col-md-6\\\" ng-if=\\\"$ctrl.job.customer_address.administrative_area_level_3\\\"><div class=\\\"form-group\\\"><label for=\\\"customer_address_administrative_area_level_3\\\" class=\\\"control-label\\\">{{::$ctrl.Pretty.name[\\\"administrative_area_level_3\\\"]}}</label><input class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.job.customer_address.administrative_area_level_3\\\" id=\\\"customer_address_administrative_area_level_3\\\" disabled></div></div></div></div></div></div></div><div class=\\\"row\\\" ng-if=\\\"!$ctrl.job.address.isValidLatLon()\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/location.86981dce.png\\\"><h2>No valid address</h2><p>Enter in a valid address to generate a map.</p></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><span class=\\\"pull-right text--small\\\">Click & drag the map to center the structure under the marker.</span></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.job.address.isValidLatLon()\\\"><div class=\\\"col-md-12 map-view\\\"><div class=\\\"info-map\\\"><pin-drop update=\\\"$ctrl.locationUpdated(address)\\\" address=\\\"$ctrl.job.address\\\" tilt=\\\"true\\\"></pin-drop></div></div></div><div class=\\\"row\\\"><div class=\\\"col-md-8\\\"></div><div class=\\\"col-md-4\\\"><button type=\\\"button\\\" id=\\\"job-archive\\\" class=\\\"btn btn-danger pull-right margin-bottom\\\" title=\\\"Delete Job\\\" ng-if=\\\"$ctrl.job.id > 0 && !$ctrl.job.archived\\\" rsf-confirmation-dialog=\\\"$ctrl.deleteJob()\\\" rsf-confirmation-message=\\\"Are you sure you wish to archive this job?\\\" analytics-on analytics-category=\\\"Job\\\" analytics-event=\\\"delete button\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\">Archive</button><button type=\\\"button\\\" class=\\\"btn btn-danger pull-right margin-bottom\\\" title=\\\"Delete Job\\\" ng-if=\\\"$ctrl.job.id > 0 && $ctrl.job.archived\\\" rsf-confirmation-dialog=\\\"$ctrl.unarchiveJob()\\\" rsf-confirmation-message=\\\"Are you sure you wish to unarchive this job?\\\" analytics-on analytics-category=\\\"Job\\\" analytics-event=\\\"undelete button\\\" analytics-nav-display=\\\"{{!$ctrl.navDisplay}}\\\" analytics-job=\\\"{{::$ctrl.job.id}}\\\" analytics-org=\\\"{{::$ctrl.job.org_id}}\\\">Unarchive</button><button type=\\\"button\\\" id=\\\"job-bottom-save-changes\\\" class=\\\"btn btn-default pull-right\\\" ng-disabled=\\\"!$ctrl.form.ctrl.$valid || !$ctrl.check() || !$ctrl.saveable()\\\" ng-click=\\\"$ctrl.save()\\\">Save Changes</button></div></div></form>\");\n$templateCache.put(\"src/Jobs/tabs/inspection.html\",\"<inspection-container queue=\\\"$ctrl.fileQueue\\\" download=\\\"$ctrl.downloadPdf\\\" email=\\\"$ctrl.emailPdf\\\"></inspection-container>\");\n$templateCache.put(\"src/Jobs/tabs/measurement_editor.html\",\"<div class=\\\"measurement-editor-modal\\\"><div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Measurement Editor</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"ctrl.cancel()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><form name=\\\"measurementForm\\\" class=\\\"form\\\"><div class=\\\"modal-body\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><measurement-editor-component measurement=\\\"ctrl.measurement\\\" opening=\\\"ctrl.opening\\\" org=\\\"ctrl.org\\\" on-save=\\\"ctrl.saveOpening(opening)\\\" on-cancel=\\\"ctrl.cancelOpening()\\\"></measurement-editor-component></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-save\\\" type=\\\"submit\\\" tabindex=\\\"109\\\" ng-click=\\\"ctrl.save()\\\" ng-disabled=\\\"measurementForm.$invalid\\\">Save</button><button class=\\\"btn btn-cancel\\\" type=\\\"button\\\" tabindex=\\\"110\\\" ng-click=\\\"ctrl.cancel()\\\">Cancel</button></div></form></div>\");\n$templateCache.put(\"src/Jobs/tabs/measurements.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><quick-measure-modal address=\\\"$ctrl.addressRecord\\\"></quick-measure-modal><roof-scope-report-modal address=\\\"$ctrl.addressRecord\\\"></roof-scope-report-modal><plnar-report-modal address=\\\"$ctrl.addressRecord\\\"></plnar-report-modal>\");\n$templateCache.put(\"src/Jobs/tabs/tools.html\",\"<rsf-spinner promise=\\\"$ctrl.spinnerPromise\\\"></rsf-spinner><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><h1 class=\\\"tab-title\\\">Tools</h1></div></div><div class=\\\"row\\\" ng-show=\\\"!$ctrl.job.address.isValid() || !$ctrl.job.address.isValidLatLon()\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section blank-state\\\"><img src=\\\"/assets/images/icons-large/tools.fea01226.png\\\"><div ng-show=\\\"!$ctrl.job.address.isValid() && !$ctrl.job.address.isValidLatLon()\\\"><h2>No valid address</h2></div><div ng-show=\\\"!$ctrl.job.address.isValid() && $ctrl.job.address.isValidLatLon()\\\"><h2>Address is not complete. Missing one of: Address 1, City, State</h2></div><div ng-show=\\\"$ctrl.job.address.isValid() && !$ctrl.job.address.isValidLatLon()\\\"><h2>Address has not been geocoded. Please refresh the page to get the latest information.</h2></div><p><span>Not all tools will be available until a complete address is provided&nbsp;</span><span class=\\\"underline link\\\" ng-click=\\\"$ctrl.goToAddress()\\\">here</span><span>.</span></p></div></div></div><div class=\\\"row\\\" ng-if=\\\"$ctrl.toolsLoaded\\\"><tool-display class=\\\"tool-display\\\" ng-if=\\\"$ctrl.ToolInfo.tools(tool).visible($ctrl.job,$ctrl.navDisplay)\\\" key=\\\"tool\\\" job=\\\"$ctrl.job\\\" nav-display=\\\"$ctrl.navDisplay\\\" ng-repeat=\\\"tool in $ctrl.job.org.fetchPreferencesAcl(OrgAclType.tools)\\\"></tool-display></div>\");\n$templateCache.put(\"src/Jobs/tabs/visualization_modal.html\",\"<div class=\\\"modal-header\\\"><h3 class=\\\"modal-title\\\">Visualization</h3><button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" ng-click=\\\"$ctrl.cancel()\\\"><span aria-hidden=\\\"true\\\">&times;</span></button></div><div class=\\\"modal-body\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\"><div class=\\\"form-section\\\"><div class=\\\"form-section-content\\\"><div class=\\\"row\\\" ng-hide=\\\"$ctrl.editing\\\"><label for=\\\"kind\\\" class=\\\"control-label\\\">Kind</label><select id=\\\"kind\\\" tabindex=\\\"5\\\" class=\\\"form-control\\\" ng-options=\\\"$ctrl.Pretty.name[kind] for kind in $ctrl.job.org.fetchSettingsAcl(OrgAclType.visualizations)\\\" ng-change=\\\"$ctrl.checkKind()\\\" ng-model=\\\"$ctrl.visualization.kind\\\"></select></div><div ng-if=\\\"$ctrl.visualization.kind\\\"><div class=\\\"row\\\"><label for=\\\"name\\\" class=\\\"control-label\\\">Name</label><input id=\\\"name\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.visualization.name\\\"></div><div class=\\\"row\\\" ng-if=\\\"!$ctrl.ToolInfo.tools($ctrl.visualization.kind).api\\\"><label for=\\\"link-id\\\" class=\\\"control-label\\\">ID</label><input id=\\\"link-id\\\" class=\\\"form-control\\\" type=\\\"text\\\" ng-model=\\\"$ctrl.visualization.data.id\\\"></div></div></div></div></div></div></div><div class=\\\"modal-footer\\\"><button class=\\\"btn btn-default\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.save()\\\">Save</button><button class=\\\"btn btn-secondary\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.cancel()\\\">Cancel</button></div>\");\n$templateCache.put(\"src/Jobs/partials/card_view/_list.html\",\"<div class=\\\"row\\\" ng-if=\\\"!$ctrl.loading || $ctrl.jobResponse\\\" ng-class=\\\"{ \\'not-visible\\': !$ctrl.jobListCardView }\\\"><div ng-repeat=\\\"dataItem in $ctrl.jobResponse.jobs\\\" class=\\\"job col-sm-6 col-md-4 col-lg-3\\\" ng-if=\\\"$ctrl.jobListCardView\\\"><div class=\\\"job-wrapper\\\" ng-style=\\\"{\\'border-bottom-color\\': $ctrl.colorFromRawState(dataItem.raw_state)}\\\"><div class=\\\"new-job-badge\\\" title=\\\"New\\\" ng-if=\\\"::dataItem.viewed === false\\\"><i class=\\\"fa fa-star fa-xs\\\"></i></div><div class=\\\"new-job-badge\\\" title=\\\"Archived\\\" ng-if=\\\"::dataItem.archived === true\\\"><i class=\\\"fa fa-archive fa-xs\\\"></i></div><div class=\\\"job-list-row header\\\"><div class=\\\"title\\\"><h2>{{::dataItem.name}}<span ng-style=\\\"{\\'border-color\\': $ctrl.colorFromRawState(dataItem.raw_state), \\'background\\': $ctrl.colorFromRawState(dataItem.raw_state, 50)}\\\" class=\\\"pull-right\\\"></span></h2></div><ul><li>{{::dataItem.phone_numbers[0].number}}</li><li>{{::dataItem.email}}</li><li><small>{{$ctrl.jobTypes(dataItem.job_types)}}</small></li></ul></div><div class=\\\"job-list-row meta\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><span>Sales Rep.</span><p class=\\\"rep-name\\\">{{::dataItem.assignments[0].user.first_name}} {{::dataItem.assignments[0].user.last_name}}</p></div></div></div><div class=\\\"updated\\\">UPDATED: {{::dataItem.updated_at | date:\\'short\\'}}</div><div class=\\\"job-list-hover\\\"><a analytics-on analytics-category=\\\"Job List\\\" analytics-event=\\\"view details\\\" analytics-value=\\\"{{::dataItem.id}}\\\" analytics-job=\\\"{{::dataItem.id}}\\\" class=\\\"btn btn-success\\\" ui-sref=\\\"job_header.job_show.info(dataItem)\\\">View Details</a></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/partials/card_view/appointment_time_estimate_amount_list.html\",\"<div class=\\\"row\\\" ng-if=\\\"!$ctrl.loading || $ctrl.jobResponse\\\" ng-class=\\\"{ \\'not-visible\\': !$ctrl.jobListCardView }\\\"><div ng-repeat=\\\"dataItem in $ctrl.jobResponse.jobs\\\" class=\\\"job col-sm-6 col-md-4 col-lg-3\\\" ng-if=\\\"$ctrl.jobListCardView\\\"><div class=\\\"job-wrapper\\\" ng-style=\\\"{\\'border-bottom-color\\': $ctrl.colorFromRawState(dataItem.raw_state)}\\\"><div class=\\\"new-job-badge\\\" title=\\\"New\\\" ng-if=\\\"::dataItem.viewed === false\\\"><i class=\\\"fa fa-star fa-xs\\\"></i></div><div class=\\\"new-job-badge\\\" title=\\\"Archived\\\" ng-if=\\\"::dataItem.archived === true\\\"><i class=\\\"fa fa-archive fa-xs\\\"></i></div><div class=\\\"job-list-row header\\\"><div class=\\\"title\\\"><h2>{{::dataItem.name}}<span ng-style=\\\"{\\'border-color\\': $ctrl.colorFromRawState(dataItem.raw_state), \\'background\\': $ctrl.colorFromRawState(dataItem.raw_state, 50) }\\\" class=\\\"pull-right\\\"></span></h2></div><ul><li>{{::dataItem.phone_numbers[0].number}}</li><li>{{::dataItem.email}}</li><li><small>{{$ctrl.jobTypes(dataItem.job_types)}}</small></li></ul></div><div class=\\\"job-list-row detail\\\"><span>Price</span><p>{{::dataItem.lastPrice() | currency}}</p><span>Appointment</span><p class=\\\"mb-0\\\">{{::dataItem.nextAppointment()| date:\\'MMM d, yyyy h:mm a\\'}}</p></div><div class=\\\"job-list-row meta\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><span>Sales Rep.</span><p class=\\\"rep-name\\\">{{::dataItem.assignments[0].user.first_name}} {{::dataItem.assignments[0].user.last_name}}</p></div></div></div><div class=\\\"updated\\\">UPDATED: {{::dataItem.updated_at | date:\\'short\\'}}</div><div class=\\\"job-list-hover\\\"><a analytics-on analytics-category=\\\"Job List\\\" analytics-event=\\\"view details\\\" analytics-value=\\\"{{::dataItem.id}}\\\" analytics-job=\\\"{{::dataItem.id}}\\\" class=\\\"btn btn-success\\\" ui-sref=\\\"job_header.job_show.info(dataItem)\\\">View Details</a></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/partials/card_view/appointment_time_list.html\",\"<div class=\\\"row\\\" ng-if=\\\"!$ctrl.loading || $ctrl.jobResponse\\\" ng-class=\\\"{ \\'not-visible\\': !$ctrl.jobListCardView }\\\"><div ng-repeat=\\\"dataItem in $ctrl.jobResponse.jobs\\\" class=\\\"job col-sm-6 col-md-4 col-lg-3\\\" ng-if=\\\"$ctrl.jobListCardView\\\"><div class=\\\"job-wrapper\\\" ng-style=\\\"{\\'border-bottom-color\\': $ctrl.colorFromRawState(dataItem.raw_state)}\\\"><div class=\\\"new-job-badge\\\" title=\\\"New\\\" ng-if=\\\"::dataItem.viewed === false\\\"><i class=\\\"fa fa-star fa-xs\\\"></i></div><div class=\\\"new-job-badge\\\" title=\\\"Archived\\\" ng-if=\\\"::dataItem.archived === true\\\"><i class=\\\"fa fa-archive fa-xs\\\"></i></div><div class=\\\"job-list-row header\\\"><div class=\\\"title\\\"><h2>{{::dataItem.name}}<span ng-style=\\\"{\\'border-color\\': $ctrl.colorFromRawState(dataItem.raw_state), \\'background\\': $ctrl.colorFromRawState(dataItem.raw_state, 50)}\\\" class=\\\"pull-right\\\"></span></h2></div><ul><li>{{::dataItem.phone_numbers[0].number}}</li><li>{{::dataItem.email}}</li><li><small>{{$ctrl.jobTypes(dataItem.job_types)}}</small></li></ul></div><div class=\\\"job-list-row detail\\\"><span>Appointment</span><p class=\\\"mb-0\\\">{{::dataItem.nextAppointment()| date:\\'MMM d, yyyy h:mm a\\'}}</p></div><div class=\\\"job-list-row meta\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><span>Sales Rep.</span><p class=\\\"rep-name\\\">{{::dataItem.assignments[0].user.first_name}} {{::dataItem.assignments[0].user.last_name}}</p></div></div></div><div class=\\\"updated\\\">UPDATED: {{::dataItem.updated_at | date:\\'short\\'}}</div><div class=\\\"job-list-hover\\\"><a analytics-on analytics-category=\\\"Job List\\\" analytics-event=\\\"view details\\\" analytics-value=\\\"{{::dataItem.id}}\\\" analytics-job=\\\"{{::dataItem.id}}\\\" class=\\\"btn btn-success\\\" ui-sref=\\\"job_header.job_show.info(dataItem)\\\">View Details</a></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/partials/card_view/estimate_amount_list.html\",\"<div class=\\\"row\\\" ng-if=\\\"!$ctrl.loading || $ctrl.jobResponse\\\" ng-class=\\\"{ \\'not-visible\\': !$ctrl.jobListCardView }\\\"><div ng-repeat=\\\"dataItem in $ctrl.jobResponse.jobs\\\" class=\\\"job col-sm-6 col-md-4 col-lg-3\\\" ng-if=\\\"$ctrl.jobListCardView\\\"><div class=\\\"job-wrapper\\\" ng-style=\\\"{\\'border-bottom-color\\': $ctrl.colorFromRawState(dataItem.raw_state)}\\\"><div class=\\\"new-job-badge\\\" title=\\\"New\\\" ng-if=\\\"::dataItem.viewed === false\\\"><i class=\\\"fa fa-star fa-xs\\\"></i></div><div class=\\\"new-job-badge\\\" title=\\\"Archived\\\" ng-if=\\\"::dataItem.archived === true\\\"><i class=\\\"fa fa-archive fa-xs\\\"></i></div><div class=\\\"job-list-row header\\\"><div class=\\\"title\\\"><h2>{{::dataItem.name}}<span ng-style=\\\"{\\'border-color\\': $ctrl.colorFromRawState(dataItem.raw_state), \\'background\\': $ctrl.colorFromRawState(dataItem.raw_state, 50)}\\\" class=\\\"pull-right\\\"></span></h2></div><ul><li>{{::dataItem.phone_numbers[0].number}}</li><li>{{::dataItem.email}}</li><li><small>{{$ctrl.jobTypes(dataItem.job_types)}}</small></li></ul></div><div class=\\\"job-list-row detail\\\"><span>Price</span><p>{{::dataItem.lastPrice() | currency}}</p></div><div class=\\\"job-list-row meta\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><span>Sales Rep.</span><p class=\\\"rep-name\\\">{{::dataItem.assignments[0].user.first_name}} {{::dataItem.assignments[0].user.last_name}}</p></div></div></div><div class=\\\"updated\\\">UPDATED: {{::dataItem.updated_at | date:\\'short\\'}}</div><div class=\\\"job-list-hover\\\"><a analytics-on analytics-category=\\\"Job List\\\" analytics-event=\\\"view details\\\" analytics-value=\\\"{{::dataItem.id}}\\\" analytics-job=\\\"{{::dataItem.id}}\\\" class=\\\"btn btn-success\\\" ui-sref=\\\"job_header.job_show.info(dataItem)\\\">View Details</a></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/partials/list_view/_list.html\",\"<div class=\\\"col-sm-12\\\" ng-if=\\\"!$ctrl.jobListCardView && $ctrl.jobResponse.jobs.length > 0\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><div class=\\\"row match-table-header\\\"><div class=\\\"col\\\">Name</div><div class=\\\"col\\\">Address</div><div class=\\\"col\\\">Rep</div></div></div></div><div class=\\\"table-body row\\\"><div class=\\\"col\\\"><div class=\\\"row job-row link\\\" ng-repeat=\\\"job in $ctrl.jobResponse.jobs\\\" analytics-on analytics-category=\\\"Job List\\\" analytics-event=\\\"view details\\\" analytics-value=\\\"{{::job.id}}\\\" analytics-job=\\\"{{::job.id}}\\\" ui-sref=\\\"job_header.job_show.info({id: job.id})\\\"><div class=\\\"new-job-badge\\\" title=\\\"New\\\" ng-if=\\\"::job.viewed === false\\\"><i class=\\\"fa fa-star fa-xs\\\"></i></div><div class=\\\"new-job-badge\\\" title=\\\"Archived\\\" ng-if=\\\"::job.archived === true\\\"><i class=\\\"fa fa-archive fa-xs\\\"></i></div><div class=\\\"col\\\"><div class=\\\"row\\\"><span title=\\\"{{$ctrl.nameFromRawState(job.raw_state)}}\\\" ng-style=\\\"{\\'border-color\\': $ctrl.colorFromRawState(job.raw_state), \\'background\\': $ctrl.colorFromRawState(job.raw_state, 50)}\\\" class=\\\"pull-right\\\"></span>{{::job.name}}</div><span ng-if=\\\"job.phone_numbers.length > 0\\\" ng-click=\\\"$event.stopPropagation()\\\"><br><a href=\\\"tel:{{::job.phone_numbers[0].number}}\\\">{{::job.phone_numbers[0].number}}</a></span></div><div class=\\\"col\\\">{{::job.address.fullAddress()}}<small class=\\\"ellipsify\\\">{{$ctrl.jobTypes(job.job_types)}}</small></div><div class=\\\"col\\\">{{::job.assignments[0].user.first_name}} {{::job.assignments[0].user.last_name}}</div></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/partials/list_view/appointment_time_estimate_amount_list.html\",\"<div class=\\\"col-sm-12\\\" ng-if=\\\"!$ctrl.jobListCardView && $ctrl.jobResponse.jobs.length > 0\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><div class=\\\"row match-table-header\\\"><div class=\\\"col\\\">Name</div><div class=\\\"col\\\">Address</div><div class=\\\"col\\\">Next Appointment</div><div class=\\\"col\\\">Price</div><div class=\\\"col\\\">Rep</div></div></div></div><div class=\\\"table-body row\\\"><div class=\\\"col\\\"><div class=\\\"row job-row link\\\" ng-repeat=\\\"job in $ctrl.jobResponse.jobs\\\" analytics-on analytics-category=\\\"Job List\\\" analytics-event=\\\"view details\\\" analytics-value=\\\"{{::job.id}}\\\" analytics-job=\\\"{{::job.id}}\\\" ui-sref=\\\"job_header.job_show.info({id: job.id})\\\"><div class=\\\"new-job-badge\\\" title=\\\"New\\\" ng-if=\\\"::job.viewed === false\\\"><i class=\\\"fa fa-star fa-xs\\\"></i></div><div class=\\\"new-job-badge\\\" title=\\\"Archived\\\" ng-if=\\\"::job.archived === true\\\"><i class=\\\"fa fa-archive fa-xs\\\"></i></div><div class=\\\"col\\\"><div class=\\\"row\\\"><span title=\\\"{{$ctrl.nameFromRawState(job.raw_state)}}\\\" ng-style=\\\"{\\'border-color\\': $ctrl.colorFromRawState(job.raw_state), \\'background\\': $ctrl.colorFromRawState(job.raw_state, 50)}\\\" class=\\\"pull-right\\\"></span>{{::job.name}}</div><span ng-if=\\\"job.phone_numbers.length > 0\\\" ng-click=\\\"$event.stopPropagation()\\\"><br><a href=\\\"tel:{{::job.phone_numbers[0].number}}\\\">{{::job.phone_numbers[0].number}}</a></span></div><div class=\\\"col\\\"><p>{{::job.address.fullAddress()}}</p><small class=\\\"ellipsify\\\">{{$ctrl.jobTypes(job.job_types)}}</small></div><div class=\\\"col\\\">{{job.nextAppointment()| date:\\'short\\'}}</div><div class=\\\"col\\\">{{::job.lastPrice() | currency}}</div><div class=\\\"col\\\">{{::job.assignments[0].user.first_name}} {{::job.assignments[0].user.last_name}}</div></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/partials/list_view/appointment_time_list.html\",\"<div class=\\\"col-sm-12\\\" ng-if=\\\"!$ctrl.jobListCardView && $ctrl.jobResponse.jobs.length > 0\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><div class=\\\"row match-table-header\\\"><div class=\\\"col\\\">Name</div><div class=\\\"col\\\">Address</div><div class=\\\"col\\\">Next Appointment</div><div class=\\\"col\\\">Rep</div></div></div></div><div class=\\\"table-body row\\\"><div class=\\\"col\\\"><div class=\\\"row job-row link\\\" ng-repeat=\\\"job in $ctrl.jobResponse.jobs\\\" analytics-on analytics-category=\\\"Job List\\\" analytics-event=\\\"view details\\\" analytics-value=\\\"{{::job.id}}\\\" analytics-job=\\\"{{::job.id}}\\\" ui-sref=\\\"job_header.job_show.info({id: job.id})\\\"><div class=\\\"new-job-badge\\\" title=\\\"New\\\" ng-if=\\\"::job.viewed === false\\\"><i class=\\\"fa fa-star fa-xs\\\"></i></div><div class=\\\"new-job-badge\\\" title=\\\"Archived\\\" ng-if=\\\"::job.archived === true\\\"><i class=\\\"fa fa-archive fa-xs\\\"></i></div><div class=\\\"col\\\"><div class=\\\"row\\\"><span title=\\\"{{$ctrl.nameFromRawState(job.raw_state)}}\\\" ng-style=\\\"{\\'border-color\\': $ctrl.colorFromRawState(job.raw_state), \\'background\\': $ctrl.colorFromRawState(job.raw_state, 50)}\\\" class=\\\"pull-right\\\"></span>{{::job.name}}</div><span ng-if=\\\"job.phone_numbers.length > 0\\\" ng-click=\\\"$event.stopPropagation()\\\"><br><a href=\\\"tel:{{::job.phone_numbers[0].number}}\\\">{{::job.phone_numbers[0].number}}</a></span></div><div class=\\\"col\\\"><p>{{::job.address.fullAddress()}}</p><small class=\\\"ellipsify\\\">{{$ctrl.jobTypes(job.job_types)}}</small></div><div class=\\\"col\\\">{{job.nextAppointment()| date:\\'short\\'}}</div><div class=\\\"col\\\">{{::job.assignments[0].user.first_name}} {{::job.assignments[0].user.last_name}}</div></div></div></div></div>\");\n$templateCache.put(\"src/Jobs/partials/list_view/estimate_amount_list.html\",\"<div class=\\\"col-sm-12\\\" ng-if=\\\"!$ctrl.jobListCardView && $ctrl.jobResponse.jobs.length > 0\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><div class=\\\"row match-table-header\\\"><div class=\\\"col\\\">Name</div><div class=\\\"col\\\">Address</div><div class=\\\"col\\\">Price</div><div class=\\\"col\\\">Rep</div></div></div></div><div class=\\\"table-body row\\\"><div class=\\\"col\\\"><div class=\\\"row job-row link\\\" ng-repeat=\\\"job in $ctrl.jobResponse.jobs\\\" analytics-on analytics-category=\\\"Job List\\\" analytics-event=\\\"view details\\\" analytics-value=\\\"{{::job.id}}\\\" analytics-job=\\\"{{::job.id}}\\\" ui-sref=\\\"job_header.job_show.info({id: job.id})\\\"><div class=\\\"new-job-badge\\\" title=\\\"New\\\" ng-if=\\\"::job.viewed === false\\\"><i class=\\\"fa fa-star fa-xs\\\"></i></div><div class=\\\"new-job-badge\\\" title=\\\"Archived\\\" ng-if=\\\"::job.archived === true\\\"><i class=\\\"fa fa-archive fa-xs\\\"></i></div><div class=\\\"col\\\"><div class=\\\"row\\\"><span title=\\\"{{$ctrl.nameFromRawState(job.raw_state)}}\\\" ng-style=\\\"{\\'border-color\\': $ctrl.colorFromRawState(job.raw_state), \\'background\\': $ctrl.colorFromRawState(job.raw_state, 50)}\\\" class=\\\"pull-right\\\"></span>{{::job.name}}</div><span ng-if=\\\"job.phone_numbers.length > 0\\\" ng-click=\\\"$event.stopPropagation()\\\"><br><a href=\\\"tel:{{::job.phone_numbers[0].number}}\\\">{{::job.phone_numbers[0].number}}</a></span></div><div class=\\\"col\\\"><p>{{::job.address.fullAddress()}}</p><small class=\\\"ellipsify\\\">{{$ctrl.jobTypes(job.job_types)}}</small></div><div class=\\\"col\\\">{{::job.lastPrice() | currency}}</div><div class=\\\"col\\\">{{::job.assignments[0].user.first_name}} {{::job.assignments[0].user.last_name}}</div></div></div></div></div>\");\n$templateCache.put(\"src/Reports/partials/eagleview/address_string.html\",\"{{order_data[\\\"report_addresses\\\"][0][\\\"address\\\"]}} {{order_data[\\\"report_addresses\\\"][0][\\\"city\\\"]}}, {{order_data[\\\"report_addresses\\\"][0][\\\"state\\\"]}} {{order_data[\\\"report_addresses\\\"][0][\\\"zip\\\"]}}\");\n$templateCache.put(\"src/Reports/partials/eagleview/location.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Address</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"report_addresses\\\"][0][\\\"address\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>City</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"report_addresses\\\"][0][\\\"city\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>State</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"report_addresses\\\"][0][\\\"state\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Zip</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"report_addresses\\\"][0][\\\"zip\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Latitude</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"report_addresses\\\"][0][\\\"latitude\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Longitude</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"report_addresses\\\"][0][\\\"longitude\\\"]}}</div></div>\");\n$templateCache.put(\"src/Reports/partials/eagleview/specifics.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Primary Product</label></div><div class=\\\"col-md-9\\\">{{$ctrl.Pretty.eagleview_product_name[$ctrl.report.order_data[\\\"primary_product_id\\\"].toString()]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Delivery Product</label></div><div class=\\\"col-md-9\\\">{{$ctrl.Pretty.eagleview_delivery_product_name[$ctrl.report.order_data[\\\"delivery_product_id\\\"].toString()]}}</div></div><div class=\\\"row\\\" ng-show=\\\"$ctrl.report.order_data[\\'add_on_product_ids\\'].length > 0\\\"><div class=\\\"col-md-3\\\"><label>Add On Products</label></div><div class=\\\"col-md-9\\\"><span ng-repeat=\\\"addon in $ctrl.report.order_data[\\'add_on_product_ids\\']\\\">{{$ctrl.Pretty.eagleview_product_name[addon]}}<br></span></div></div>\");\n$templateCache.put(\"src/Reports/partials/eagleview/type.html\",\"{{$ctrl.Pretty.eagleview_product_name[report.order_data[\\\"primary_product_id\\\"].toString()]}}\");\n$templateCache.put(\"src/Reports/partials/plnar/address_string.html\",\"{{order_data[\\\"address\\\"][\\\"address1\\\"]}} {{order_data[\\\"address\\\"][\\\"address2\\\"]}} {{order_data[\\\"address\\\"][\\\"city\\\"]}}, {{order_data[\\\"address\\\"][\\\"stateProvince\\\"]}} {{order_data[\\\"address\\\"][\\\"postalCode\\\"]}}\");\n$templateCache.put(\"src/Reports/partials/plnar/location.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Address</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"address\\\"][\\\"address1\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Address</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"address\\\"][\\\"address2\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>City</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"address\\\"][\\\"city\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>State</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"address\\\"][\\\"stateProvince\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Zip</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"address\\\"][\\\"postalCode\\\"]}}</div></div>\");\n$templateCache.put(\"src/Reports/partials/plnar/specifics.html\",\"\");\n$templateCache.put(\"src/Reports/partials/plnar/type.html\",\"{{$ctrl.Pretty.name[report.provider]}} {{$ctrl.Pretty.name[report.kind]}}\");\n$templateCache.put(\"src/Reports/partials/quick_measure/address_string.html\",\"{{order_data[\\\"app_address\\\"][\\\"line_1\\\"]}} {{order_data[\\\"app_address\\\"][\\\"city\\\"]}}, {{order_data[\\\"app_address\\\"][\\\"state\\\"]}} {{order_data[\\\"app_address\\\"][\\\"postal_code\\\"]}}\");\n$templateCache.put(\"src/Reports/partials/quick_measure/location.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Address</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"app_address\\\"][\\\"line_1\\\"]}}<br>{{$ctrl.report.order_data[\\\"app_address\\\"][\\\"line_2\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>City</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"app_address\\\"][\\\"city\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>State</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"app_address\\\"][\\\"state\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Zip</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"app_address\\\"][\\\"postal_code\\\"]}}</div></div>\");\n$templateCache.put(\"src/Reports/partials/quick_measure/specifics.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Error Message</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_result[\\\"callback_params\\\"][\\\"ServerResponses\\\"][0][\\\"Response\\\"][\\\"Error\\\"][\\\"Errors\\\"][0][\\\"Message\\\"]}}</div></div>\");\n$templateCache.put(\"src/Reports/partials/quick_measure/type.html\",\"{{$ctrl.Pretty.name[report.provider]}} {{$ctrl.Pretty.name[report.kind]}}\");\n$templateCache.put(\"src/Reports/partials/roof_scope/address_string.html\",\"\");\n$templateCache.put(\"src/Reports/partials/roof_scope/type.html\",\"\");\n$templateCache.put(\"src/Reports/partials/sky_measure/address_string.html\",\"{{order_data[\\\"Address\\\"]}} {{order_data[\\\"City\\\"]}}, {{order_data[\\\"State\\\"]}} {{order_data[\\\"Zip\\\"]}}\");\n$templateCache.put(\"src/Reports/partials/sky_measure/location.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Address</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"Address\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>City</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"City\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>State</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"State\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Zip</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"Zip\\\"]}}</div></div>\");\n$templateCache.put(\"src/Reports/partials/sky_measure/specifics.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Property Type</label></div><div class=\\\"col-md-9\\\"><span ng-if=\\\"$ctrl.report.order_data[\\'Commercial\\'] === 0\\\">Residential</span><span ng-if=\\\"$ctrl.report.order_data[\\'Commercial\\'] === 1\\\">Commercial</span></div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Delivery Option</label></div><div class=\\\"col-md-9\\\"><span ng-if=\\\"$ctrl.report.order_data[\\'AdditionalDeliveryOptions\\'] === \\'\\'\\\">24 Hour</span><span ng-if=\\\"$ctrl.report.order_data[\\'AdditionalDeliveryOptions\\'] === \\'Express3\\'\\\">3 Hour Delivery</span><span ng-if=\\\"$ctrl.report.order_data[\\'AdditionalDeliveryOptions\\'] === \\'Express6\\'\\\">6 Hour Delivery</span></div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Comments</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\'Comments\\']}}</div></div>\");\n$templateCache.put(\"src/Reports/partials/sky_measure/type.html\",\"<div ng-if=\\\"report.order_data[\\'Commercial\\'] === 0\\\">Residential</div><div ng-if=\\\"report.order_data[\\'Commercial\\'] === 1\\\">Commercial</div>\");\n$templateCache.put(\"src/Reports/partials/wvs/address_string.html\",\"{{order_data[\\\"streetAddress\\\"]}} {{order_data[\\\"city\\\"]}}, {{order_data[\\\"state\\\"]}} {{order_data[\\\"zipcode\\\"]}}\");\n$templateCache.put(\"src/Reports/partials/wvs/location.html\",\"<div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Address</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"streetAddress\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>City</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"city\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>State</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"state\\\"]}}</div></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\"><label>Zip</label></div><div class=\\\"col-md-9\\\">{{$ctrl.report.order_data[\\\"zipcode\\\"]}}</div></div>\");\n$templateCache.put(\"src/Reports/partials/wvs/specifics.html\",\"\");\n$templateCache.put(\"src/Reports/partials/wvs/type.html\",\"{{$ctrl.Pretty.name[report.provider]}} {{$ctrl.Pretty.name[report.kind]}}\");}]);","export type Action<T extends string = string, P = void> = P extends void\n  ? Readonly<{ type: T }>\n  : Readonly<{ type: T; payload: P }>;\n\nexport function createAction<T extends string>(type: T): Action<T>;\nexport function createAction<T extends string, P>(type: T, payload: P): Action<T, P>;\nexport function createAction<T extends string, P>(type: T, payload?: P): Action<T> | Action<T, P> {\n  const action = payload === undefined ? { type } : { type, payload };\n  return action;\n}\n\nexport type AnyFunction = (...args: any[]) => any;\nexport type StringMap<T> = { [key: string]: T };\nexport type ActionsUnion<A extends StringMap<AnyFunction>> = ReturnType<A[keyof A]>;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.scheduler.agendaview.min\",[\"kendo.scheduler.view.min\"],e)}(function(){return function(e){function t(e){var t,s,a=0;for(t=0,s=e.length;s>t;t++)a+=e[t].items.length;return a}function s(e,t){return e.valuePrimitive&&(t=r.getter(e.dataValueField)(t)),t}function a(e){for(var t,s=0,a=e.length,r=[];a>s;s++)t=e[s],t.groups?(t=n(t.groups),r=r.concat(t)):r=r.concat(n(t.items));return r}function n(e){for(var t=[].concat(e),s=t.shift(),a=[],n=[].push;s;)s.groups?n.apply(t,s.groups):s.items?n.apply(t,s.items):n.call(a,s),s=t.shift();return a}var r=window.kendo,i=r.ui,o=\".kendoAgendaView\",l='<div class=\"k-task\" title=\"#:title.replace(/\"/g,\"\\'\")#\" data-#=kendo.ns#uid=\"#=uid#\"># if (resources[0]) {#<span class=\"k-scheduler-mark\" style=\"background-color:#=resources[0].color#\"></span># } ## if (data.isException()) { #<span class=\"k-icon k-i-exception\"></span># } else if (data.isRecurring()) {#<span class=\"k-icon k-i-refresh\"></span># } #{0}#if (showDelete) {#<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-si-close\"></span></a>#}#</div>',u=r.Class.extend({init:function(e){this._view=e},_getColumns:function(e,t){return e.concat(t)},_getGroupsInDay:function(){return[]},_getSumOfItemsForDate:function(){return 0},_renderTaskGroupsCells:function(e,t,s,a){var n=this._view;0===s&&0===a&&t.length&&n._renderTaskGroupsCells(e,t)},_renderDateCell:function(e,t,s,a,n,i){var o=this._view;e.push(r.format('<td class=\"k-scheduler-datecolumn{3}{2}\" rowspan=\"{0}\">{1}</td>',s.length,o._dateTemplate({date:a}),n!=i.length-1||t.length?\"\":\" k-last\",t.length?\"\":\" k-first\"))},_renderDates:function(){},_getParents:function(e){return e.splice(0)},_getGroupsByDate:function(){},_renderTaskGroups:function(e,t,s){var a=this._view;e.append(a._renderTaskGroups(t,s))}}),d=r.Class.extend({init:function(e){this._view=e},_getColumns:function(e,t){var s,a,n=this._view;return n._isMobilePhoneView()?e.concat(t):(s=t.slice(0,1),a=t.slice(1),s.concat(e).concat(a))},_compareDateGroups:function(e,t,s){return e[s].text==t[s].text?0===s?!0:this._compareDateGroups(e,t,s-1):!1},_getGroupsInDay:function(e,t){var s,a,n,r,i,o=[],l=null;for(s=0;e.length>s;s++)for(a=0;e[s].items.length>a;a++){if(n=0,0===o.length)for(n;t[s].length>n;n++)o.push([1]);else for(n;t[s].length>n;n++)if(this._compareDateGroups(t[s],l,n))o[n][o[n].length-1]++;else{for(r=o[n][o[n].length-1]-1,i=0;r>i;i++)o[n].push(0);o[n].push(1)}l=t[s]}return o},_getSumOfItemsForDate:function(e){var t,s=0;for(t=0;e.length>t;t++)s+=e[t].items.length;return s},_renderTaskGroupsCells:function(e,t,s,a,n,i,o,l){var u,d=this._view,c=d._isMobilePhoneView();if(c)0===s&&0===a&&t.length&&d._renderTaskGroupsCells(e,t);else for(0===s&&0===a&&e.push(r.format('<td class=\"k-scheduler-datecolumn k-first\" rowspan=\"{0}\">{1}</td>',i,d._dateTemplate({date:o}))),u=0;t[s].length>u;u++)n[u][l]&&e.push(r.format('<td class=\"k-scheduler-groupcolumn\" rowspan=\"{0}\">{1}</td>',n[u][l],d._groupTemplate({value:t[s][u].text}),t[s][u].className))},_renderDateCell:function(){},_renderDates:function(e){var t,s=this._view,a=s._groupsByDate.sort(function(e,t){return e.array[0].value.getTime()-t.array[0].value.getTime()});for(t=0;a.length>t;t++)e.append(s._renderTaskGroups(a[t].array,a[t].groups))},_getParents:function(e){return e.slice(0)},_getGroupsByDate:function(e,t,s){var a,n,r,i,o=this._view;if(e[t].items)for(a=0;e[t].items.length>a;a++){for(n=e[t].items[a].value,r=!1,i=0;o._groupsByDate.length>i;i++)o._groupsByDate[i].array[0].value.getTime()===n.getTime()&&(r=!0,o._groupsByDate[i].array.push(e[t].items[a]),o._groupsByDate[i].groups.push(s));r||o._groupsByDate.push({array:[e[t].items[a]],groups:[s]})}},_renderTaskGroups:function(){}});r.ui.scheduler.AgendaGroupedView=u,r.ui.scheduler.AgendaGroupedByDateView=d,i.AgendaView=i.SchedulerView.extend({init:function(t,s){i.SchedulerView.fn.init.call(this,t,s),this._groupedView=this._getGroupedView(),s=this.options,s.editable&&(s.editable=e.extend({\"delete\":!0},s.editable,{create:!1,update:!1})),this.title=s.title,this._eventTemplate=this._eventTmpl(s.eventTemplate,l),this._dateTemplate=r.template(s.eventDateTemplate),this._groupTemplate=r.template(s.eventGroupTemplate),this._timeTemplate=r.template(s.eventTimeTemplate),this.element.on(\"mouseenter\"+o,\".k-scheduler-agenda .k-scheduler-content tr\",\"_mouseenter\").on(\"mouseleave\"+o,\".k-scheduler-agenda .k-scheduler-content tr\",\"_mouseleave\").on(\"click\"+o,\".k-scheduler-agenda .k-scheduler-content .k-link:has(.k-si-close)\",\"_remove\"),this._renderLayout(s.date)},name:\"agenda\",_getGroupedView:function(){return this._isGroupedByDate()?new r.ui.scheduler.AgendaGroupedByDateView(this):new r.ui.scheduler.AgendaGroupedView(this)},_mouseenter:function(t){e(t.currentTarget).addClass(\"k-state-hover\")},_mouseleave:function(t){e(t.currentTarget).removeClass(\"k-state-hover\")},_remove:function(t){t.preventDefault(),this.trigger(\"remove\",{uid:e(t.currentTarget).closest(\".k-task\").attr(r.attr(\"uid\"))})},nextDate:function(){return r.date.nextDay(this.startDate())},startDate:function(){return this._startDate},endDate:function(){return this._endDate},previousDate:function(){return r.date.previousDay(this.startDate())},_renderLayout:function(e){this._startDate=e,this._endDate=r.date.addDays(e,7),this.createLayout(this._layout()),this.table.addClass(\"k-scheduler-agenda\")},_layout:function(){var e,t,s,a=[{text:this.options.messages.time,className:\"k-scheduler-timecolumn\"},{text:this.options.messages.event}];if(this._isMobilePhoneView()||a.splice(0,0,{text:this.options.messages.date,className:\"k-scheduler-datecolumn\"}),e=this.groupedResources,e.length){for(t=[],s=0;e.length>s;s++)t.push({text:\"\",className:\"k-scheduler-groupcolumn\"});a=this._groupedView._getColumns(t,a)}return{columns:a}},_tasks:function(e){var t,s,a,n,i,o,l,u=[];for(t=0;e.length>t;t++)if(s=e[t],a=s.start,n=s.end,i=Math.ceil((n-r.date.getDate(a))/r.date.MS_PER_DAY),o=s.clone(),o.startDate=r.date.getDate(a),o.startDate>=this.startDate()&&u.push(o),i>1)for(o.end=r.date.nextDay(a),o.head=!0,l=1;i>l;l++)a=o.end,o=s.clone(),o.start=a,o.startDate=r.date.getDate(a),o.end=r.date.nextDay(a),l==i-1?(o.end=new Date(o.start.getFullYear(),o.start.getMonth(),o.start.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()),o.tail=!0):(o.isAllDay=!0,o.middle=!0),(r.date.getDate(o.end)<=this.endDate()&&o.start>=this.startDate()||r.date.getDate(o.start).getTime()==this.endDate().getTime())&&u.push(o);return new r.data.Query(u).sort([{field:\"start\",dir:\"asc\"},{field:\"end\",dir:\"asc\"}]).groupBy({field:\"startDate\"}).toArray()},_renderTaskGroups:function(e,t){var s,a,n,i,o,l,u,d,c=[],h=this.options.editable,p=h&&h.destroy!==!1&&!this._isMobile(),g=this._isMobilePhoneView(),f=this._groupedView._getSumOfItemsForDate(e),m=this._groupedView._getGroupsInDay(e,t),_=0;for(s=0;e.length>s;s++)for(a=e[s].value,n=e[s].items,i=r.date.isToday(a),o=0;n.length>o;o++)l=n[o],u=[],d=g?[]:u,this._groupedView._renderTaskGroupsCells(d,t,s,o,m,f,a,_),_++,0===o&&(g?(d.push(r.format('<td class=\"k-scheduler-datecolumn\" colspan=\"2\">{0}</td>',this._dateTemplate({date:a}))),c.push('<tr role=\"row\" aria-selected=\"false\"'+(i?' class=\"k-today\">':\">\")+d.join(\"\")+\"</tr>\")):this._groupedView._renderDateCell(u,t,n,a,s,e)),l.format=l.head?\"{0:t}\":l.tail?\"{1:t}\":\"{0:t}-{1:t}\",l.resources=this.eventResources(l),u.push(r.format('<td class=\"k-scheduler-timecolumn\"><div>{0}{1}{2}</div></td><td>{3}</td>',l.tail||l.middle?'<span class=\"k-icon k-i-arrow-w\"></span>':\"\",this._timeTemplate(l.clone({start:l._startTime||l.start,end:l.endTime||l.end})),l.head||l.middle?'<span class=\"k-icon k-i-arrow-e\"></span>':\"\",this._eventTemplate(l.clone({showDelete:p})))),c.push('<tr role=\"row\" aria-selected=\"false\"'+(i?' class=\"k-today\">':\">\")+u.join(\"\")+\"</tr>\");return c.join(\"\")},_renderTaskGroupsCells:function(e,t){for(var s=0;t.length>s;s++)e.push(r.format('<td class=\"k-scheduler-groupcolumn{2}\" rowspan=\"{0}\">{1}</td>',t[s].rowSpan,this._groupTemplate({value:t[s].text}),t[s].className))},render:function(e){var t,s,n=this.content.find(\"table\").empty(),r=[];e.length>0&&(t=this.groupedResources,t.length?(r=this._createGroupConfiguration(e,t,null),this._groupsByDate=[],this._renderGroups(r,n,[]),this._groupedView._renderDates(n)):(r=this._tasks(e),n.append(this._renderTaskGroups(r,[])))),s=this._eventsList=a(r),this._angularItems(n,s),this.refreshLayout(),this.trigger(\"activate\")},_angularItems:function(e,t){this.angular(\"compile\",function(){var s=[],a=t.map(function(t){return s.push({dataItem:t}),e.find(\".k-task[\"+r.attr(\"uid\")+\"=\"+t.uid+\"]\")});return{elements:a,data:s}})},_renderGroups:function(e,t,s){var a,n,r;for(a=0,n=e.length;n>a;a++)r=this._groupedView._getParents(s),r.push(e[a]),this._groupedView._getGroupsByDate(e,a,r),e[a].groups?this._renderGroups(e[a].groups,t,r):this._groupedView._renderTaskGroups(t,e[a].items,r)},_createGroupConfiguration:function(e,a,n){var o,l,u,d,c,h,p,g=a[0],f=[],m=g.dataSource.view(),_=this._isMobilePhoneView();for(o=0;m.length>o;o++)l=s(g,m[o]),u=new r.data.Query(e).filter({field:g.field,operator:i.SchedulerView.groupEqFilter(l)}).toArray(),u.length&&(d=this._tasks(u),c=n?\"\":\" k-first\",o===m.length-1&&(!n||n.className.indexOf(\"k-last\")>-1)&&(c+=\" k-last\"),h={text:r.getter(g.dataTextField)(m[o]),value:l,rowSpan:0,className:c},a.length>1?(h.groups=this._createGroupConfiguration(u,a.slice(1),h),n&&(n.rowSpan+=h.rowSpan)):(h.items=d,p=t(h.items),_&&(p+=h.items.length),h.rowSpan=p,n&&(n.rowSpan+=p)),f.push(h));return f},selectionByElement:function(t){var s,a,n;return t=e(t),!t.hasClass(\"k-scheduler-datecolumn\")&&this._eventsList.length?(t.is(\".k-task\")&&(t=t.closest(\"td\")),this._isMobile()?(n=t.parent(),s=n.parent().children().filter(function(){return e(this).children(\":not(.k-scheduler-datecolumn)\").length}).index(n)):s=t.parent().index(),a=this._eventsList[s],{index:s,start:a.start,end:a.end,isAllDay:a.isAllDay,uid:a.uid}):void 0},select:function(e){this.clearSelection();var t=this.table.find(\".k-task\").eq(e.index).closest(\"tr\").addClass(\"k-state-selected\").attr(\"aria-selected\",!0)[0];this.current(t)},move:function(e,t){var s,a=!1,n=e.index;return t==r.keys.UP?(n--,a=!0):t==r.keys.DOWN&&(n++,a=!0),a&&(s=this._eventsList[n],s&&(e.start=s.start,e.end=s.end,e.isAllDay=s.isAllDay,e.events=[s.uid],e.index=n)),a},moveToEvent:function(){return!1},constrainSelection:function(e){var t=this._eventsList[0];t&&(e.start=t.start,e.end=t.end,e.isAllDay=t.isAllDay,e.events=[t.uid],e.index=0)},isInRange:function(){return!0},destroy:function(){this.element&&this.element.off(o),i.SchedulerView.fn.destroy.call(this)},options:{title:\"Agenda\",name:\"agenda\",editable:!0,selectedDateFormat:\"{0:D}-{1:D}\",selectedShortDateFormat:\"{0:d} - {1:d}\",eventTemplate:\"#:title#\",eventTimeTemplate:\"#if(data.isAllDay) {##=this.options.messages.allDay##} else { ##=kendo.format(format, start, end)## } #\",eventDateTemplate:'<strong class=\"k-scheduler-agendaday\">#=kendo.toString(date, \"dd\")#</strong><em class=\"k-scheduler-agendaweek\">#=kendo.toString(date,\"dddd\")#</em><span class=\"k-scheduler-agendadate\">#=kendo.toString(date, \"y\")#</span>',eventGroupTemplate:'<strong class=\"k-scheduler-adgendagroup\">#=value#</strong>',messages:{event:\"Event\",date:\"Date\",time:\"Time\",allDay:\"all day\"}}})}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,s){(s||t)()});\n//# sourceMappingURL=kendo.scheduler.agendaview.min.js.map\n","import { DiscountRecord } from \"app2/src/records/DiscountRecord\";\nimport { List, Record } from \"immutable\";\nimport * as uuid from \"uuid/v4\";\nimport { parseFloatSafe, roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport const fromJSON = (json: Partial<IEstimateDiscountData>): EstimateDiscountRecord => {\n  const record: IEstimateDiscountRecord = { ...(json as any) };\n\n  if (!record.uuid) {\n    record.uuid = uuid();\n  }\n\n  record.amount = parseFloatSafe(record.amount);\n  record.calculated = parseFloatSafe(record.calculated);\n  record.totalAfter = parseFloatSafe(record.totalAfter);\n  record.limit = parseFloatSafe(record.limit);\n\n  return new EstimateDiscountRecord(record);\n};\n\nexport const toJSON = (record: EstimateDiscountRecord): IEstimateDiscountData => {\n  return record.toJSON();\n};\n\nexport const toDiscountData = (discount: DiscountRecord): IEstimateDiscountData => {\n  const discountData = (discount?.get(\"breakdown\") as any)?.toJS() || {};\n  discountData.name = discount?.get(\"name\") || \"\";\n  discountData.discountId = discount?.get(\"id\") || 0;\n  discountData.discountRev = discount?.get(\"updated_at\") || \"\";\n\n  return discountData;\n};\n\nexport const calculate = (discount: Partial<IEstimateDiscountData>, total: number): EstimateDiscountRecord => {\n  let calculated = 0;\n  switch (discount.kind) {\n    case \"percent\":\n      calculated = roundToDecimals(total * (discount.amount / 100), -2);\n      break;\n    case \"percent_limit\":\n      calculated = roundToDecimals(total * (discount.amount / 100), -2);\n      calculated = _.min([discount.limit, calculated]);\n      break;\n    case \"flat\":\n      calculated = discount.amount;\n      break;\n  }\n\n  return fromJSON({\n    uuid: discount.uuid,\n    kind: discount.kind,\n    name: discount.name,\n    amount: discount.amount,\n    calculated: calculated,\n    totalAfter: total - calculated,\n    discountId: discount.discountId,\n    discountRev: discount.discountRev,\n    limit: discount.limit,\n  });\n};\n\nexport interface IEstimateDiscountData {\n  uuid: string;\n  kind: string;\n  name: string;\n  amount: number;\n  calculated: number;\n  totalAfter: number;\n  discountId: number;\n  discountRev: string;\n  limit: number;\n}\n\nexport type IEstimateDiscountRecord = IEstimateDiscountData;\n\nconst defaultDiscountProps: IEstimateDiscountRecord = {\n  uuid: null,\n  kind: \"percent\",\n  name: \"\",\n  amount: 0,\n  calculated: 0,\n  totalAfter: 0,\n  discountId: 0,\n  discountRev: \"\",\n  limit: 0,\n};\n\nexport class EstimateDiscountRecord extends Record(defaultDiscountProps) implements IEstimateDiscountRecord {\n  public uuid!: string;\n  public kind!: string;\n  public name!: string;\n  public amount!: number;\n  public calculated!: number;\n  public totalAfter!: number;\n  public discountId!: number;\n  public discountRev!: string;\n  public limit!: number;\n\n  public constructor(values?: Partial<IEstimateDiscountRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.scheduler.recurrence.min\",[\"kendo.dropdownlist.min\",\"kendo.datepicker.min\",\"kendo.numerictextbox.min\"],e)}(function(){return function(e,t){function n(e,t){var n;return 0!==e&&t>e?n=t-e:(n=e%t,n&&(n=t-n)),n}function a(e){var t=e.getMonth(),n=k(e)?te[t]:ne[t];return n+e.getDate()}function i(e,n){var a,i;return e=new Date(e.getFullYear(),e.getMonth(),e.getDate()),J(e,0),a=e.getFullYear(),n!==t?(G(e,n,-1),e.setDate(e.getDate()+4)):e.setDate(e.getDate()+(4-(e.getDay()||7))),J(e,0),i=Math.floor((e.getTime()-new Date(a,0,1,-6))/864e5),1+Math.floor(i/7)}function s(e,t){var n=$(e).getDay(),a=7-(n+7-(t||7))||7;return 0>a&&(a+=7),Math.ceil((e.getDate()-a)/7)+1}function r(e,t){return e+(t>e?7:0)}function l(e,t,n){var a,i,l,o,u,d=t.offset;return d?(a=new Date(e.getFullYear(),e.getMonth()+1,0),i=s(a,n),l=r(t.day,n),o=l<r(new Date(e.getFullYear(),e.getMonth(),1).getDay(),n),u=l>r(a.getDay(),n),0>d?d=i+(d+1-(u?1:0)):o&&(d+=1),i-=u?1:0,(o?1:0)>d||d>i?null:d):s(e,n)}function o(e,t){return s(new Date(e.getFullYear(),e.getMonth()+1,0),t)}function u(e,t,n){return s(e,n)===l(e,t,n)}function d(e,t,n){for(var a,i,o,u,d=r(t.getDay(),n),c=e.length,f=[],y=0;c>y;y++)if(i=e[y],u=s(t,n),a=l(t,i,n),null!==a)if(a>u)f.push(i);else if(u===a)if(o=r(i.day,n),o>d)f.push(i);else if(d===o)return null;return f}function c(e,t,n){for(var a,i=0,s=e.length,r=[];s>i;i++){if(a=e[i],n&&(a=n(a)),t===a)return null;a>t&&r.push(a)}return r}function f(e,t){for(var n,a=0,i=e.length;i>a;a++){if(n=parseInt(e[a],10),isNaN(n)||t.start>n||n>t.end||0===n&&0>t.start)return null;e[a]=n}return e.sort(m)}function y(e){for(var n,a,i,s=0,r=e.length;r>s;s++){if(n=e[s],a=n.length,i=n.substring(a-2).toUpperCase(),i=se[i],i===t)return null;e[s]={offset:parseInt(n.substring(0,a-2),10)||0,day:i}}return e}function v(e){for(var t,n,a=0,i=e.length,s=[];i>a;a++)t=e[a],\"string\"==typeof t?n=t:(n=\"\"+ie[t.day],t.offset&&(n=t.offset+n)),s.push(n);return\"\"+s}function h(e){var t=e.getMonth();return 1===t?1===new Date(e.getFullYear(),1,29).getMonth()?29:28:ae[t]}function k(e){return e=e.getFullYear(),e%4===0&&e%100!==0||e%400===0}function m(e,t){return e-t}function g(e,t){var n,a,i=0,s=[];if(e)for(e=e.split(-1!==e.indexOf(\";\")?\";\":\",\"),n=e.length;n>i;i++)a=x(e[i],t),a&&s.push(a);return s}function p(t,n,a){for(var i=e.isArray(t)?t:g(t,a),s=n.getTime()-n.getMilliseconds(),r=0,l=i.length;l>r;r++)if(i[r].getTime()===s)return!0;return!1}function _(e,t){var n,a,i=0,s=[].concat(e);for(n=s.length;n>i;i++)a=s[i],a=P.timezone.convert(a,t||a.getTimezoneOffset(),\"Etc/UTC\"),s[i]=P.toString(a,ue);return s.join(\",\")}function D(e,t){var n=new Date(e);switch(t.freq){case\"yearly\":n.setFullYear(n.getFullYear(),0,1);break;case\"monthly\":n.setFullYear(n.getFullYear(),n.getMonth(),1);break;case\"weekly\":G(n,t.weekStart,-1)}return t.hours&&n.setHours(0),t.minutes&&n.setMinutes(0),t.seconds&&n.setSeconds(0),n}function w(e,t){var n=new Date(e);switch(t.freq){case\"yearly\":n.setFullYear(n.getFullYear(),11,31);break;case\"monthly\":n.setFullYear(n.getFullYear(),n.getMonth()+1,0);break;case\"weekly\":G(n,t.weekStart,-1),n.setDate(n.getDate()+6)}return t.hours&&n.setHours(23),t.minutes&&n.setMinutes(59),t.seconds&&n.setSeconds(59),n}function b(e,t,n){var a,i,s,r,l=e.length,o=[];for(s=0,r=n.length;r>s;s++)a=n[s],0>a?a=l+a:a-=1,i=e[a],i&&i.start>=t&&o.push(i);return o}function M(e,t,n){var a,i,s=[];for(i=0;e.length>i;i++)a=e[i],p(t,a.start,n)||s.push(a);return s}function T(e,n,a,i){var s,r,l,o,u,d,c,f,y,v,h,k,m,T,x,H,E,S,O,F,q,R,B,N=Y(e.recurrenceRule,i),C=[];if(!N)return[e];for(F=N.positions,q=F?0:1,v=N.start,h=N.end,(v||h)&&(e=e.clone({start:v?new Date(v.value[0]):t,end:h?new Date(h.value[0]):t})),E=e.start,H=E.getTime(),x=ee(E),T=g(e.recurrenceException,i),!T[0]&&N.exdates&&(T=N.exdates.value,e.set(\"recurrenceException\",_(T,i))),f=n=new Date(n),a=new Date(a),m=N.freq,O=me[m],S=N.count,N.until&&a>N.until&&(a=new Date(N.until)),k=\"yearly\"===m||\"monthly\"===m||\"weekly\"===m,H>n||S||N.interval>1||k?n=new Date(H):(o=n.getHours(),u=n.getMinutes(),d=n.getSeconds(),N.hours||(o=E.getHours()),N.minutes||(u=E.getMinutes()),N.seconds||(d=E.getSeconds()),n.setHours(o,u,d,E.getMilliseconds())),N._startPeriod=new Date(n),F&&(n=D(n,N),a=w(a,N),B=ee(a)-ee(n),0>B&&(o=n.getHours(),a.setHours(o,n.getMinutes(),n.getSeconds(),n.getMilliseconds()),Q.adjustDST(a,o)),N._startPeriod=new Date(n),N._endPeriod=w(n,N)),c=e.duration(),N._startTime=s=Q.toInvariantTime(n),O.setup&&O.setup(N,E,n),O.limit(n,a,N);a>=n;)if(l=new Date(n),X(l,c),y=n>=f||l>f,(y&&!p(T,n,i)||F)&&(s=Q.toUtcTime(Q.getDate(n))+ee(N._startTime),r=s+c,H!==n.getTime()||x!==ee(N._startTime)?C.push(e.toOccurrence({start:new Date(n),end:l,_startTime:s,_endTime:r})):(e._startTime=s,e._endTime=r,C.push(e))),F){if(O.next(n,N),O.limit(n,a,N),n>N._endPeriod&&(R=b(C.slice(q),E,F),R=M(R,T,i),C=C.slice(0,q).concat(R),N._endPeriod=w(n,N),q=C.length),S&&S===q)break}else{if(S&&S===q)break;q+=1,O.next(n,N),O.limit(n,a,N)}return C}function x(e,t){return e=P.parseDate(e,re),e&&t&&(e=I.convert(e,e.getTimezoneOffset(),t)),e}function H(e,n){var a,i,s,r,l,o,u,d,c=e.split(\";\");for(u=0,d=c.length;d>u;u++)if(a=c[u].split(\":\"),i=a[0],s=a[1],-1!==i.indexOf(\"TZID\")&&(r=i.substring(i.indexOf(\"TZID\")).split(\"=\")[1]),s)for(s=s.split(\",\"),l=0,o=s.length;o>l;l++)s[l]=x(s[l],r||n);return s?{value:s,tzid:r}:t}function Y(n,a){var i,s,r,l,o,u,d,c,v,h={},k=0,m=!1,g=function(e,t){var n=e.day,a=t.day;return c>n&&(n+=7),c>a&&(a+=7),n-a};if(!n)return null;for(u=n.split(\"\\n\"),u[1]||-1===n.indexOf(\"DTSTART\")&&-1===n.indexOf(\"DTEND\")&&-1===n.indexOf(\"EXDATE\")||(u=n.split(\" \")),k=0,r=u.length;r>k;k++)o=e.trim(u[k]),-1!==o.indexOf(\"DTSTART\")?h.start=H(o,a):-1!==o.indexOf(\"DTEND\")?h.end=H(o,a):-1!==o.indexOf(\"EXDATE\")?h.exdates=H(o,a):-1!==o.indexOf(\"RRULE\")?l=o.substring(6):e.trim(o)&&(l=o);for(l=l.split(\";\"),k=0,r=l.length;r>k;k++)switch(d=l[k],i=d.split(\"=\"),s=e.trim(i[1]).split(\",\"),e.trim(i[0]).toUpperCase()){case\"FREQ\":h.freq=s[0].toLowerCase();break;case\"UNTIL\":h.until=x(s[0],a);break;case\"COUNT\":h.count=parseInt(s[0],10);break;case\"INTERVAL\":h.interval=parseInt(s[0],10);break;case\"BYSECOND\":h.seconds=f(s,{start:0,end:60}),m=!0;break;case\"BYMINUTE\":h.minutes=f(s,{start:0,end:59}),m=!0;break;case\"BYHOUR\":h.hours=f(s,{start:0,end:23}),m=!0;break;case\"BYMONTHDAY\":h.monthDays=f(s,{start:-31,end:31}),m=!0;break;case\"BYYEARDAY\":h.yearDays=f(s,{start:-366,end:366}),m=!0;break;case\"BYMONTH\":h.months=f(s,{start:1,end:12}),m=!0;break;case\"BYDAY\":h.weekDays=v=y(s),m=!0;break;case\"BYWEEKNO\":h.weeks=f(s,{start:-53,end:53}),m=!0;break;case\"BYSETPOS\":h.positions=f(s,{start:-366,end:366});break;case\"WKST\":h.weekStart=c=se[s[0]]}return h.freq===t||h.count!==t&&h.until?null:(h.interval||(h.interval=1),c===t&&(h.weekStart=c=P.culture().calendar.firstDay),v&&(h.weekDays=v.sort(g)),h.positions&&!m&&(h.positions=null),h._hasRuleValue=m,h)}function E(e,t){for(var n,a=e.value,i=e.tzid||\"\",s=a.length,r=0;s>r;r++)n=a[r],n=I.convert(n,i||t||n.getTimezoneOffset(),\"Etc/UTC\"),a[r]=P.toString(n,\"yyyyMMddTHHmmssZ\");return i&&(i=\";TZID=\"+i),i+\":\"+a.join(\",\")+\" \"}function S(e,n){var a=e.weekStart,i=\"FREQ=\"+e.freq.toUpperCase(),s=e.exdates||\"\",r=e.start||\"\",l=e.end||\"\",o=e.until;return e.interval>1&&(i+=\";INTERVAL=\"+e.interval),e.count&&(i+=\";COUNT=\"+e.count),o&&(o=I.convert(o,n||o.getTimezoneOffset(),\"Etc/UTC\"),i+=\";UNTIL=\"+P.toString(o,\"yyyyMMddTHHmmssZ\")),e.months&&(i+=\";BYMONTH=\"+e.months),e.weeks&&(i+=\";BYWEEKNO=\"+e.weeks),e.yearDays&&(i+=\";BYYEARDAY=\"+e.yearDays),e.monthDays&&(i+=\";BYMONTHDAY=\"+e.monthDays),e.weekDays&&(i+=\";BYDAY=\"+v(e.weekDays)),e.hours&&(i+=\";BYHOUR=\"+e.hours),e.minutes&&(i+=\";BYMINUTE=\"+e.minutes),e.seconds&&(i+=\";BYSECOND=\"+e.seconds),e.positions&&(i+=\";BYSETPOS=\"+e.positions),a!==t&&(i+=\";WKST=\"+ie[a]),r&&(r=\"DTSTART\"+E(r,n)),l&&(l=\"DTEND\"+E(l,n)),s&&(s=\"EXDATE\"+E(s,n)),(r||l||s)&&(i=r+l+s+\"RRULE:\"+i),i}var O,F,q,R,B,N,C,W,z,U,V,A,P=window.kendo,I=P.timezone,L=P.Class,Z=P.ui,j=Z.Widget,K=Z.DropDownList,Q=P.date,X=Q.setTime,G=Q.setDayOfWeek,J=Q.adjustDST,$=Q.firstDayOfMonth,ee=Q.getMilliseconds,te=[0,31,60,91,121,152,182,213,244,274,305,335,366],ne=[0,31,59,90,120,151,181,212,243,273,304,334,365],ae=[31,28,30,31,30,31,30,31,30,31,30,31],ie={0:\"SU\",1:\"MO\",2:\"TU\",3:\"WE\",4:\"TH\",5:\"FR\",6:\"SA\"},se={SU:0,MO:1,TU:2,WE:3,TH:4,FR:5,SA:6},re=[\"yyyy-MM-ddTHH:mm:ss.fffzzz\",\"yyyy-MM-ddTHH:mm:sszzz\",\"yyyy-MM-ddTHH:mm:ss\",\"yyyy-MM-ddTHH:mm\",\"yyyy-MM-ddTHH\",\"yyyy-MM-dd\",\"yyyyMMddTHHmmssfffzzz\",\"yyyyMMddTHHmmsszzz\",\"yyyyMMddTHHmmss\",\"yyyyMMddTHHmm\",\"yyyyMMddTHH\",\"yyyyMMdd\"],le=[\"months\",\"weeks\",\"yearDays\",\"monthDays\",\"weekDays\",\"hours\",\"minutes\",\"seconds\"],oe=le.length,ue=\"yyyyMMddTHHmmssZ\",de={months:function(e,t,n){var a=n.months,i=c(a,e.getMonth()+1),s=!1;return null!==i&&(i.length?e.setMonth(i[0]-1,1):e.setFullYear(e.getFullYear()+1,a[0]-1,1),s=!0),s},monthDays:function(e,t,n){for(var a,i,s,r=!1,l=e.getHours(),o=function(e){return 0>e&&(e=a+e),e};t>=e;){if(i=e.getMonth(),a=h(e),s=c(n.monthDays,e.getDate(),o),null===s)return r;if(r=!0,s.length){if(e.setMonth(i,s.sort(m)[0]),J(e,l),i===e.getMonth())break}else e.setMonth(i+1,1)}return r},yearDays:function(e,t,n){for(var i,s,r=!1,l=e.getHours(),o=function(e){return 0>e&&(e=i+e),e};t>e;){if(i=k(e)?366:365,s=c(n.yearDays,a(e),o),null===s)return r;if(r=!0,i=e.getFullYear(),s.length){e.setFullYear(i,0,s.sort(m)[0]),J(e,l);break}e.setFullYear(i+1,0,1)}return r},weeks:function(e,t,n){for(var a,s,r,l=n.weekStart,o=!1,u=e.getHours(),d=function(e){return 0>e&&(e=53+e),e};t>e;){if(s=c(n.weeks,i(e,l),d),null===s)return o;if(o=!0,a=e.getFullYear(),s.length){r=7*s.sort(m)[0]-1,e.setFullYear(a,0,r),G(e,l,-1),J(e,u);break}e.setFullYear(a+1,0,1)}return o},weekDays:function(e,t,n){var a,i,r=n.weekDays,l=n.weekStart,c=d(r,e,l),f=e.getHours();if(null===c)return!1;if(a=c[0],a||(a=r[0],G(e,l)),i=a.day,a.offset)for(;t>=e&&!u(e,a,l);)s(e,l)===o(e,l)?(e.setMonth(e.getMonth()+1,1),J(e,f)):(e.setDate(e.getDate()+7),J(e,f),G(e,l,-1));return e.getDay()!==i&&G(e,i),!0},hours:function(e,t,n){var a=n.hours,i=n._startTime,s=i.getHours(),r=c(a,s),l=!1;return null!==r&&(l=!0,e.setHours(s),J(e,s),r.length?(r=r[0],e.setHours(r)):(r=e.getHours(),e.setDate(e.getDate()+1),J(e,r),r=a[0],e.setHours(r),J(e,r)),n.minutes&&e.setMinutes(0),i.setHours(r,e.getMinutes())),l},minutes:function(e,t,n){var a=n.minutes,i=e.getMinutes(),s=c(a,i),r=n._startTime.getHours(),l=!1;return null!==s&&(l=!0,s.length?s=s[0]:(r+=1,s=a[0]),n.seconds&&e.setSeconds(0),e.setHours(r,s),r%=24,J(e,r),n._startTime.setHours(r,s,e.getSeconds())),l},seconds:function(e,t,n){var a=n.seconds,i=n._startTime.getHours(),s=c(a,e.getSeconds()),r=e.getMinutes(),l=!1;return null!==s&&(l=!0,s.length?e.setSeconds(s[0]):(r+=1,e.setMinutes(r,a[0]),r>59&&(r%=60,i=(i+1)%24)),n._startTime.setHours(i,r,e.getSeconds())),l}},ce=L.extend({next:function(e,t){var n,a,i=t._startTime,s=i.getDate();if(t.seconds)a=e.getSeconds()+1,e.setSeconds(a),i.setSeconds(a),i.setDate(s);else{if(!t.minutes)return!1;n=e.getMinutes()+1,e.setMinutes(n),i.setMinutes(n),i.setDate(s)}return!0},normalize:function(e){var t=e.rule;4===e.idx&&t.hours&&(t._startTime.setHours(0),this._hour(e.date,t))},limit:function(e,n,a){for(var i,s,r,l,o,u=a.interval;n>=e;){for(r=s=t,o=e.getDate(),l=0;oe>l;l++){if(i=le[l],a[i]){if(r=de[i](e,n,a),s!==t&&r)break;s=r}r&&this.normalize({date:e,rule:a,day:o,idx:l})}if((1===u||!this.interval(a,e))&&l===oe)break}},interval:function(e,t){var a,s,r=new Date(e._startPeriod),l=new Date(t),o=t.getHours(),u=e.weekStart,d=e.interval,c=e.freq,f=!1,y=0,v=0,h=1;return\"hourly\"===c?(a=l.getTimezoneOffset()-r.getTimezoneOffset(),s=e._startTime.getHours(),l=l.getTime(),o!==s&&(l+=(s-o)*Q.MS_PER_HOUR),l-=r,a&&(l-=a*Q.MS_PER_MINUTE),a=Math.floor(l/Q.MS_PER_HOUR),y=n(a,d),0!==y&&(this._hour(t,e,y),f=!0)):\"daily\"===c?(Q.setTime(l,-r,!0),a=Math.ceil(l/Q.MS_PER_DAY),y=n(a,d),0!==y&&(this._date(t,e,y),f=!0)):\"weekly\"===c?(a=52*(t.getFullYear()-r.getFullYear()),y=i(t,u)-i(r,u)+a,y=n(y,d),0!==y&&(Q.setDayOfWeek(t,e.weekStart,-1),t.setDate(t.getDate()+7*y),J(t,o),f=!0)):\"monthly\"===c?(a=t.getFullYear()-r.getFullYear(),a=t.getMonth()-r.getMonth()+12*a,y=n(a,d),0!==y&&(h=e._hasRuleValue?1:t.getDate(),t.setFullYear(t.getFullYear(),t.getMonth()+y,h),J(t,o),f=!0)):\"yearly\"===c&&(a=t.getFullYear()-r.getFullYear(),y=n(a,d),e.months||(v=t.getMonth()),e.yearDays||e.monthDays||e.weekDays||(h=t.getDate()),0!==y&&(t.setFullYear(t.getFullYear()+y,v,h),J(t,o),f=!0)),f},_hour:function(e,t,n){var a=t._startTime,i=a.getHours();n&&(i+=n),e.setHours(i),i%=24,a.setHours(i),J(e,i)},_date:function(e,t,n){var a=e.getHours();e.setDate(e.getDate()+n),J(e,a)||this._hour(e,t)}}),fe=ce.extend({next:function(e,t){ce.fn.next(e,t)||this._hour(e,t,1)},normalize:function(e){var t=e.rule;4===e.idx&&(t._startTime.setHours(0),this._hour(e.date,t))}}),ye=ce.extend({next:function(e,t){ce.fn.next(e,t)||this[t.hours?\"_hour\":\"_date\"](e,t,1)}}),ve=ye.extend({setup:function(e,t){e.weekDays||(e.weekDays=[{day:t.getDay(),offset:0}])}}),he=ce.extend({next:function(e,t){var n,a;if(!ce.fn.next(e,t))if(t.hours)this._hour(e,t,1);else if(t.monthDays||t.weekDays||t.yearDays||t.weeks)this._date(e,t,1);else{for(n=e.getDate(),a=e.getHours(),e.setMonth(e.getMonth()+1),J(e,a);e.getDate()!==n;)e.setDate(n),J(e,a);this._hour(e,t)}},normalize:function(e){var t=e.rule,n=e.date,a=n.getHours();0!==e.idx||t.monthDays||t.weekDays?ce.fn.normalize(e):(n.setDate(e.day),J(n,a))},setup:function(e,t,n){e.monthDays||e.weekDays||n.setDate(t.getDate())}}),ke=he.extend({next:function(e,t){var n,a=e.getHours();if(!ce.fn.next(e,t))if(t.hours)this._hour(e,t,1);else if(t.monthDays||t.weekDays||t.yearDays||t.weeks)this._date(e,t,1);else if(t.months){for(n=e.getDate(),e.setMonth(e.getMonth()+1),J(e,a);e.getDate()!==n;)e.setDate(n),J(e,a);this._hour(e,t)}else e.setFullYear(e.getFullYear()+1),J(e,a),this._hour(e,t)},setup:function(){}}),me={hourly:new fe,daily:new ye,weekly:new ve,monthly:new he,yearly:new ke},ge=\"click\";P.recurrence={rule:{parse:Y,serialize:S},expand:T,dayInYear:a,weekInYear:i,weekInMonth:s,numberOfWeeks:o,isException:p,toExceptionString:_},O=function(e){for(var t=P.culture().calendar.days.namesShort,n=t.length,a=\"\",i=0,s=[];n>i;i++)s.push(i);for(t=t.slice(e).concat(t.slice(0,e)),s=s.slice(e).concat(s.slice(0,e)),i=0;n>i;i++)a+='<label class=\"k-check\"><input class=\"k-recur-weekday-checkbox\" type=\"checkbox\" value=\"'+s[i]+'\" /> '+t[i]+\"</label>\";return a},F=P.template('# if (frequency !== \"never\") { #<div class=\"k-edit-label\"><label>#:messages.repeatEvery#</label></div><div class=\"k-edit-field\"><input class=\"k-recur-interval\"/>#:messages.interval#</div># } ## if (frequency === \"weekly\") { #<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div><div class=\"k-edit-field\">#=weekDayCheckBoxes(firstWeekDay)#</div># } else if (frequency === \"monthly\") { #<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div><div class=\"k-edit-field\"><ul class=\"k-reset\"><li><label><input class=\"k-recur-month-radio\" type=\"radio\" name=\"month\" value=\"monthday\" />#:messages.day#</label><input class=\"k-recur-monthday\" /></li><li><input class=\"k-recur-month-radio\" type=\"radio\" name=\"month\" value=\"weekday\" /><input class=\"k-recur-weekday-offset\" /><input class=\"k-recur-weekday\" /></li></ul></div># } else if (frequency === \"yearly\") { #<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div><div class=\"k-edit-field\"><ul class=\"k-reset\"><li><input class=\"k-recur-year-radio\" type=\"radio\" name=\"year\" value=\"monthday\" /><input class=\"k-recur-month\" /><input class=\"k-recur-monthday\" /></li><li><input class=\"k-recur-year-radio\" type=\"radio\" name=\"year\" value=\"weekday\" /><input class=\"k-recur-weekday-offset\" /><input class=\"k-recur-weekday\" />#:messages.of#<input class=\"k-recur-month\" /></li></ul></div># } ## if (frequency !== \"never\") { #<div class=\"k-edit-label\"><label>#:end.label#</label></div><div class=\"k-edit-field\"><ul class=\"k-reset\"><li><label><input class=\"k-recur-end-never\" type=\"radio\" name=\"end\" value=\"never\" />#:end.never#</label></li><li><label><input class=\"k-recur-end-count\" type=\"radio\" name=\"end\" value=\"count\" />#:end.after#</label><input class=\"k-recur-count\" />#:end.occurrence#</li><li><label><input class=\"k-recur-end-until\" type=\"radio\" name=\"end\" value=\"until\" />#:end.on#</label><input class=\"k-recur-until\" /></li></ul></div># } #'),q=[{day:0,offset:0},{day:1,offset:0},{day:2,offset:0},{day:3,offset:0},{day:4,offset:0},{day:5,offset:0},{day:6,offset:0}],R=[{day:1,offset:0},{day:2,offset:0},{day:3,offset:0},{day:4,offset:0},{day:5,offset:0}],B=[{day:0,offset:0},{day:6,offset:0}],N=j.extend({init:function(e,t){var n,a=this,i=t&&t.frequencies;j.fn.init.call(a,e,t),a.wrapper=a.element,t=a.options,t.start=n=t.start||Q.today(),i&&(t.frequencies=i),\"string\"==typeof n&&(t.start=P.parseDate(n,\"yyyyMMddTHHmmss\")),null===t.firstWeekDay&&(t.firstWeekDay=P.culture().calendar.firstDay),a._namespace=\".\"+t.name},options:{value:\"\",start:\"\",timezone:\"\",spinners:!0,firstWeekDay:null,frequencies:[\"never\",\"daily\",\"weekly\",\"monthly\",\"yearly\"],mobile:!1,messages:{frequencies:{never:\"Never\",hourly:\"Hourly\",daily:\"Daily\",weekly:\"Weekly\",monthly:\"Monthly\",yearly:\"Yearly\"},hourly:{repeatEvery:\"Repeat every: \",interval:\" hour(s)\"},daily:{repeatEvery:\"Repeat every: \",interval:\" day(s)\"},weekly:{interval:\" week(s)\",repeatEvery:\"Repeat every: \",repeatOn:\"Repeat on: \"},monthly:{repeatEvery:\"Repeat every: \",repeatOn:\"Repeat on: \",interval:\" month(s)\",day:\"Day \"},yearly:{repeatEvery:\"Repeat every: \",repeatOn:\"Repeat on: \",interval:\" year(s)\",of:\" of \"},end:{label:\"End:\",mobileLabel:\"Ends\",never:\"Never\",after:\"After \",occurrence:\" occurrence(s)\",on:\"On \"},offsetPositions:{first:\"first\",second:\"second\",third:\"third\",fourth:\"fourth\",last:\"last\"},weekdays:{day:\"day\",weekday:\"weekday\",weekend:\"weekend day\"}}},events:[\"change\"],_initInterval:function(){var e=this,t=e._value;e._container.find(\".k-recur-interval\").kendoNumericTextBox({spinners:e.options.spinners,value:t.interval||1,decimals:0,format:\"#\",min:1,change:function(){t.interval=this.value(),e._trigger()}})},_weekDayRule:function(e){var t=this,n=(t._weekDay.element||t._weekDay).val(),a=+(t._weekDayOffset.element||t._weekDayOffset).val(),i=null,s=null;e||(\"day\"===n?(i=q,s=a):\"weekday\"===n?(i=R,s=a):\"weekend\"===n?(i=B,s=a):i=[{offset:a,day:+n}]),t._value.weekDays=i,t._value.positions=s},_weekDayView:function(){var e,t,n,a,i=this,s=i._value.weekDays,r=i._value.positions,l=i._weekDayOffset;s&&(n=s.length,r&&(7===n?(t=\"day\",e=r):5===n?(t=\"weekday\",e=r):2===n&&(t=\"weekend\",e=r)),t||(s=s[0],t=s.day,e=s.offset||\"\"),a=l.value?\"value\":\"val\",l[a](e),i._weekDay[a](t))},_initWeekDay:function(){var t,n=this,a=n.options.messages.weekdays,i=n.options.messages.offsetPositions,s=n._container.find(\".k-recur-weekday\"),r=function(){n._weekDayRule(),n._trigger()};s[0]&&(n._weekDayOffset=new K(n._container.find(\".k-recur-weekday-offset\"),{change:r,dataTextField:\"text\",dataValueField:\"value\",dataSource:[{text:i.first,value:\"1\"},{text:i.second,value:\"2\"},{text:i.third,value:\"3\"},{text:i.fourth,value:\"4\"},{text:i.last,value:\"-1\"}]}),t=[{text:a.day,value:\"day\"},{text:a.weekday,value:\"weekday\"},{text:a.weekend,value:\"weekend\"}],n._weekDay=new K(s,{value:n.options.start.getDay(),change:r,dataTextField:\"text\",dataValueField:\"value\",dataSource:t.concat(e.map(P.culture().calendar.days.names,function(e,t){return{text:e,value:t}}))}),n._weekDayView())},_initWeekDays:function(){var t,n,a,i,s,r=this,l=r._value,o=r._container.find(\".k-recur-weekday-checkbox\");if(o[0]&&(o.on(ge+r._namespace,function(){l.weekDays=e.map(o.filter(\":checked\"),function(e){return{day:+e.value,offset:0}}),r.options.mobile||r._trigger()}),l.weekDays))for(a=0,i=o.length,s=l.weekDays.length;i>a;a++)for(n=o[a],t=0;s>t;t++)n.value==l.weekDays[t].day&&(n.checked=!0)},_initMonthDay:function(){var e=this,t=e._value,n=e._container.find(\".k-recur-monthday\");n[0]&&(e._monthDay=new P.ui.NumericTextBox(n,{spinners:e.options.spinners,min:1,max:31,decimals:0,format:\"#\",value:t.monthDays?t.monthDays[0]:e.options.start.getDate(),change:function(){var n=this.value();t.monthDays=n?[n]:n,e._trigger()}}))},_initCount:function(){var e=this,t=e._container.find(\".k-recur-count\"),n=e._value;e._count=t.kendoNumericTextBox({spinners:e.options.spinners,value:n.count||1,decimals:0,format:\"#\",min:1,change:function(){n.count=this.value(),e._trigger()}}).data(\"kendoNumericTextBox\")},_initUntil:function(){var e=this,t=e._container.find(\".k-recur-until\"),n=e.options.start,a=e._value,i=a.until;e._until=t.kendoDatePicker({min:i&&n>i?i:n,value:i||new Date(n.getFullYear(),n.getMonth(),n.getDate(),23,59,59),change:function(){var t=this.value();a.until=new Date(t.getFullYear(),t.getMonth(),t.getDate(),23,59,59),e._trigger()}}).data(\"kendoDatePicker\")},_trigger:function(){this.options.mobile||this.trigger(\"change\")}}),C=N.extend({init:function(e,t){var n=this;N.fn.init.call(n,e,t),n._initFrequency(),n._initContainer(),n.value(n.options.value)},options:{name:\"RecurrenceEditor\"},events:[\"change\"],destroy:function(){var e=this;e._frequency.destroy(),e._container.find(\"input[type=radio],input[type=checkbox]\").off(ge+e._namespace),P.destroy(e._container),N.fn.destroy.call(e)},value:function(e){var n,a=this,i=a.options.timezone;return e===t?a._value.freq?S(a._value,i):\"\":(a._value=Y(e,i)||{},n=a._value.freq,n?a._frequency.value(n):a._frequency.select(0),a._initView(a._frequency.value()),t)},_initContainer:function(){var t=this.element,n=e('<div class=\"k-recur-view\" />'),a=t.parent(\".k-edit-field\");a[0]?n.insertAfter(a):t.append(n),this._container=n},_initFrequency:function(){var t,n=this,a=n.options,i=a.frequencies,s=a.messages.frequencies,r=e(\"<input />\");i=e.map(i,function(e){return{text:s[e],value:e}}),t=i[0],t&&\"never\"===t.value&&(t.value=\"\"),n.element.append(r),n._frequency=new K(r,{dataTextField:\"text\",dataValueField:\"value\",dataSource:i,change:function(){n._value={},n._initView(n._frequency.value()),n.trigger(\"change\")}})},_initView:function(e){var n=this,a=n._value,i=n.options,s={frequency:e||\"never\",weekDayCheckBoxes:O,firstWeekDay:i.firstWeekDay,messages:i.messages[e],end:i.messages.end};return P.destroy(n._container),n._container.html(F(s)),e?(a.freq=e,\"weekly\"!==e||a.weekDays||(a.weekDays=[{day:i.start.getDay(),offset:0}]),n._initInterval(),n._initWeekDays(),n._initMonthDay(),n._initWeekDay(),n._initMonth(),n._initCount(),n._initUntil(),n._period(),n._end(),t):(n._value={},t)},_initMonth:function(){var t,n=this,a=n._value,i=a.months||[n.options.start.getMonth()+1],s=n._container.find(\".k-recur-month\");s[0]&&(t={change:function(){a.months=[+this.value()],n.trigger(\"change\")},dataTextField:\"text\",dataValueField:\"value\",dataSource:e.map(P.culture().calendar.months.names,function(e,t){return{text:e,value:t+1}})},n._month1=new K(s[0],t),n._month2=new K(s[1],t),i&&(i=i[0],n._month1.value(i),n._month2.value(i)))},_end:function(){var e,t=this,n=t._value,a=t._container,i=t._namespace,s=function(e){t._toggleEnd(e.currentTarget.value),t.trigger(\"change\")};t._buttonNever=a.find(\".k-recur-end-never\").on(ge+i,s),t._buttonCount=a.find(\".k-recur-end-count\").on(ge+i,s),t._buttonUntil=a.find(\".k-recur-end-until\").on(ge+i,s),n.count?e=\"count\":n.until&&(e=\"until\"),t._toggleEnd(e)},_period:function(){var e=this,t=e._value,n=\"monthly\"===t.freq,a=n?e._toggleMonthDay:e._toggleYear,i=\".k-recur-\"+(n?\"month\":\"year\")+\"-radio\",s=e._container.find(i);(n||\"yearly\"===t.freq)&&(s.on(ge+e._namespace,function(t){a.call(e,t.currentTarget.value),e.trigger(\"change\")}),e._buttonMonthDay=s.eq(0),e._buttonWeekDay=s.eq(1),a.call(e,t.weekDays?\"weekday\":\"monthday\"))},_toggleEnd:function(e){var t,n,a,i,s=this;\"count\"===e?(s._buttonCount.prop(\"checked\",!0),a=!0,i=!1,t=s._count.value(),n=null):\"until\"===e?(s._buttonUntil.prop(\"checked\",!0),a=!1,i=!0,t=null,n=s._until.value()):(s._buttonNever.prop(\"checked\",!0),a=i=!1,t=n=null),s._count.enable(a),s._until.enable(i),s._value.count=t,s._value.until=n},_toggleMonthDay:function(e){var t,n=this,a=!1,i=!0,s=!1;\"monthday\"===e?(n._buttonMonthDay.prop(\"checked\",!0),t=[n._monthDay.value()],a=!0,i=!1,s=!0):(n._buttonWeekDay.prop(\"checked\",!0),t=null),n._weekDay.enable(i),n._weekDayOffset.enable(i),n._monthDay.enable(a),n._value.monthDays=t,n._weekDayRule(s)},_toggleYear:function(e){var t,n=this,a=!1,i=!0;\"monthday\"===e?(a=!0,i=!1,t=n._month1.value()):t=n._month2.value(),n._month1.enable(a),n._month2.enable(i),n._value.months=[t],n._toggleMonthDay(e)}}),Z.plugin(C),W=P.template('<div class=\"k-edit-label\"><label>#:headerTitle#</label></div><div class=\"k-edit-field k-recur-pattern k-scheduler-toolbar\"></div><div class=\"k-recur-view\"></div>'),z=P.template('# if (frequency !== \"never\") { #<div class=\"k-edit-label\"><label>#:messages.repeatEvery#</label></div><div class=\"k-edit-field\"><input class=\"k-recur-interval\" pattern=\"\\\\\\\\d*\"/>#:messages.interval#</div># } ## if (frequency === \"weekly\") { #<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div><div class=\"k-edit-field\">#=weekDayCheckBoxes(firstWeekDay)#</div># } else if (frequency === \"monthly\") { #<div class=\"k-edit-label\"><label>#:messages.repeatBy#</label></div><div class=\"k-edit-field k-scheduler-toolbar k-repeat-rule\"></div><div class=\"k-monthday-view\" style=\"display:none\"><div class=\"k-edit-label\"><label>#:messages.day#</label></div><div class=\"k-edit-field\"><input class=\"k-recur-monthday\" pattern=\"\\\\\\\\d*\"/></div></div><div class=\"k-weekday-view\" style=\"display:none\"><div class=\"k-edit-label\"><label>#:messages.every#</label></div><div class=\"k-edit-field\"><select class=\"k-recur-weekday-offset\"></select></div><div class=\"k-edit-label\"><label>#:messages.day#</label></div><div class=\"k-edit-field\"><select class=\"k-recur-weekday\"></select></div></div># } else if (frequency === \"yearly\") { #<div class=\"k-edit-label\"><label>#:messages.repeatBy#</label></div><div class=\"k-edit-field k-scheduler-toolbar k-repeat-rule\"></div><div class=\"k-monthday-view\" style=\"display:none\"><div class=\"k-edit-label\"><label>#:messages.day#</label></div><div class=\"k-edit-field\"><input class=\"k-recur-monthday\" pattern=\"\\\\\\\\d*\"/></div></div><div class=\"k-weekday-view\" style=\"display:none\"><div class=\"k-edit-label\"><label>#:messages.every#</label></div><div class=\"k-edit-field\"><select class=\"k-recur-weekday-offset\"></select></div><div class=\"k-edit-label\"><label>#:messages.day#</label></div><div class=\"k-edit-field\"><select class=\"k-recur-weekday\"></select></div></div><div class=\"k-edit-label\"><label>#:messages.month#</label></div><div class=\"k-edit-field\"><select class=\"k-recur-month\"></select></div># } #'),U=P.template('# if (endPattern === \"count\") { #<div class=\"k-edit-label\"><label>#:messages.after#</label></div><div class=\"k-edit-field\"><input class=\"k-recur-count\" pattern=\"\\\\\\\\d*\" /></div># } else if (endPattern === \"until\") { #<div class=\"k-edit-label\"><label>#:messages.on#</label></div><div class=\"k-edit-field\"><input type=\"date\" class=\"k-recur-until\" /></div># } #'),V=P.template('<ul class=\"k-reset k-header k-scheduler-navigation\">#for (var i = 0, length = dataSource.length; i < length; i++) {#<li class=\"k-state-default #= value === dataSource[i].value ? \"k-state-selected\" : \"\" #\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\" data-#=ns#value=\"#=dataSource[i].value#\">#:dataSource[i].text#</a></li>#}#</ul>'),A=N.extend({init:function(e,t){var n=this;N.fn.init.call(n,e,t),t=n.options,n._optionTemplate=P.template('<option value=\"#:value#\">#:text#</option>'),n.value(t.value),n._pane=t.pane,n._initRepeatButton(),n._initRepeatEnd(),n._defaultValue=n._value},options:{name:\"MobileRecurrenceEditor\",animations:{left:\"slide\",right:\"slide:right\"},mobile:!0,messages:{cancel:\"Cancel\",update:\"Save\",endTitle:\"Repeat ends\",repeatTitle:\"Repeat pattern\",headerTitle:\"Repeat event\",end:{patterns:{never:\"Never\",after:\"After...\",on:\"On...\"},never:\"Never\",after:\"End repeat after\",on:\"End repeat on\"},daily:{interval:\"\"},hourly:{interval:\"\"},weekly:{interval:\"\"},monthly:{interval:\"\",repeatBy:\"Repeat by: \",dayOfMonth:\"Day of the month\",dayOfWeek:\"Day of the week\",repeatEvery:\"Repeat every\",every:\"Every\",day:\"Day \"},yearly:{interval:\"\",repeatBy:\"Repeat by: \",dayOfMonth:\"Day of the month\",dayOfWeek:\"Day of the week\",repeatEvery:\"Repeat every: \",every:\"Every\",month:\"Month\",day:\"Day\"}}},events:[\"change\"],value:function(e){var n=this,a=n.options.timezone;return e===t?n._value.freq?S(n._value,a):\"\":(n._value=Y(e,a)||{},t)},destroy:function(){this._destroyView(),P.destroy(this._endFields),this._repeatButton.off(ge+this._namespace),N.fn.destroy.call(this)},_initRepeatButton:function(){var t=this,n=t.options.messages.frequencies[this._value.freq||\"never\"];t._repeatButton=e('<a href=\"#\" class=\"k-button k-scheduler-recur\">'+n+\"</a>\").on(ge+t._namespace,function(e){e.preventDefault(),t._createView(\"repeat\"),t._pane.navigate(\"recurrence\",t.options.animations.left)}),t.element.append(t._repeatButton)},_initRepeatEnd:function(){var t=this,n=e('<div class=\"k-edit-label\"><label>'+t.options.messages.end.mobileLabel+\"</label></div>\").insertAfter(t.element.parent(\".k-edit-field\")),a=e('<div class=\"k-edit-field\"><a href=\"#\" class=\"k-button k-scheduler-recur-end\"></a></div>').on(ge+t._namespace,function(e){e.preventDefault(),t._value.freq&&(t._createView(\"end\"),t._pane.navigate(\"recurrence\",t.options.animations.left))}).insertAfter(n);t._endFields=n.add(a).toggleClass(\"k-state-disabled\",!t._value.freq),t._endButton=a.find(\".k-scheduler-recur-end\").text(t._endText())},_endText:function(){var e=this._value,t=this.options.messages.end,n=t.never;return e.count?n=P.format(\"{0} {1}\",t.after,e.count):e.until&&(n=P.format(\"{0} {1:d}\",t.on,e.until)),n},_initFrequency:function(){var t=this,n=t.options.messages.frequencies,a=V({dataSource:e.map(this.options.frequencies,function(e){return{text:n[e],value:\"never\"!==e?e:\"\"}}),value:t._value.freq||\"\",ns:P.ns});t._view.element.find(\".k-recur-pattern\").append(a).on(ge+t._namespace,\".k-scheduler-navigation li\",function(n){var a=e(this);n.preventDefault(),a.addClass(\"k-state-selected\").siblings().removeClass(\"k-state-selected\"),t._value={freq:a.children(\"a\").attr(P.attr(\"value\"))},t._initRepeatView()})},_initEndNavigation:function(){var t,n=this,a=n.options.messages.end.patterns,i=n._value,s=\"\";i.count?s=\"count\":i.until&&(s=\"until\"),t=V({dataSource:[{text:a.never,value:\"\"},{text:a.after,value:\"count\"},{text:a.on,value:\"until\"}],value:s,ns:P.ns}),n._view.element.find(\".k-recur-pattern\").append(t).on(ge+n._namespace,\".k-scheduler-navigation li\",function(t){var a=e(this),s=null,r=null;t.preventDefault(),a.addClass(\"k-state-selected\").siblings().removeClass(\"k-state-selected\"),n._initEndView(a.children(\"a\").attr(P.attr(\"value\"))),n._count?(s=n._count.value(),r=null):n._until&&(s=null,r=n._until.val?P.parseDate(n._until.val(),\"yyyy-MM-dd\"):n._until.value()),i.count=s,i.until=r})},_createView:function(t){var n=this,a=n.options,i=a.messages,s=i[\"repeat\"===t?\"repeatTitle\":\"endTitle\"],r='<div data-role=\"view\" class=\"k-popup-edit-form k-scheduler-edit-form k-mobile-list\" id=\"recurrence\"><div data-role=\"header\" class=\"k-header\"><a href=\"#\" class=\"k-button k-scheduler-cancel\">'+i.cancel+\"</a>\"+i.headerTitle+'<a href=\"#\" class=\"k-button k-scheduler-update\">'+i.update+\"</a></div>\",l=n._pane.view().id;n._view=n._pane.append(r+W({headerTitle:s})),n._view.element.on(ge+n._namespace,\"a.k-scheduler-cancel, a.k-scheduler-update\",function(t){t.preventDefault(),t.stopPropagation(),e(this).hasClass(\"k-scheduler-update\")?(n.trigger(\"change\"),n._defaultValue=e.extend({},n._value)):n._value=n._defaultValue;var a=n._value.freq;n._endButton.text(n._endText()),n._endFields.toggleClass(\"k-state-disabled\",!a),n._repeatButton.text(i.frequencies[a||\"never\"]),n._pane.one(\"viewShow\",function(){n._destroyView()}),n._pane.navigate(l,n.options.animations.right)}),n._container=n._view.element.find(\".k-recur-view\"),\"repeat\"===t?(n._initFrequency(),n._initRepeatView()):(n._initEndNavigation(),n._initEndView())},_destroyView:function(){this._view&&(this._view.destroy(),this._view.element.remove()),this._view=null},_initRepeatView:function(){\nvar e=this,n=e._value.freq||\"never\",a={frequency:n,weekDayCheckBoxes:O,firstWeekDay:e.options.firstWeekDay,messages:e.options.messages[n]},i=z(a),s=e._container,r=e._value;return P.destroy(s),s.html(i),i?(\"weekly\"!==n||r.weekDays||(r.weekDays=[{day:e.options.start.getDay(),offset:0}]),e._initInterval(),e._initMonthDay(),e._initWeekDays(),e._initWeekDay(),e._initMonth(),e._period(),t):(e._value={},t)},_initEndView:function(e){var n,a=this,i=a._value;e===t&&(i.count?e=\"count\":i.until&&(e=\"until\")),n={endPattern:e,messages:a.options.messages.end},P.destroy(a._container),a._container.html(U(n)),a._initCount(),a._initUntil()},_initWeekDay:function(){var t,n=this,a=n.options.messages.weekdays,i=n.options.messages.offsetPositions,s=n._container.find(\".k-recur-weekday\"),r=function(){n._weekDayRule(),n.trigger(\"change\")};s[0]&&(n._weekDayOffset=n._container.find(\".k-recur-weekday-offset\").html(n._options([{text:i.first,value:\"1\"},{text:i.second,value:\"2\"},{text:i.third,value:\"3\"},{text:i.fourth,value:\"4\"},{text:i.last,value:\"-1\"}])).change(r),t=[{text:a.day,value:\"day\"},{text:a.weekday,value:\"weekday\"},{text:a.weekend,value:\"weekend\"}],t=t.concat(e.map(P.culture().calendar.days.names,function(e,t){return{text:e,value:t}})),n._weekDay=s.html(n._options(t)).change(r).val(n.options.start.getDay()),n._weekDayView())},_initMonth:function(){var t,n=this,a=n._value,i=n.options.start,s=a.months||[i.getMonth()+1],r=n._container.find(\".k-recur-month\"),l=P.culture().calendar.months.names;r[0]&&(t=e.map(l,function(e,t){return{text:e,value:t+1}}),r.html(n._options(t)).change(function(){a.months=[+this.value]}),n._monthSelect=r,s&&r.val(s[0]))},_period:function(){var t,n,a,i=this,s=i._value,r=i._container,l=i.options.messages[s.freq],o=r.find(\".k-repeat-rule\"),u=r.find(\".k-weekday-view\"),d=r.find(\".k-monthday-view\");o[0]&&(t=s.weekDays?\"weekday\":\"monthday\",n=V({value:t,dataSource:[{text:l.dayOfMonth,value:\"monthday\"},{text:l.dayOfWeek,value:\"weekday\"}],ns:P.ns}),a=function(e){var t=i._weekDay.val(),n=i._weekDayOffset.val(),a=i._monthDay.value(),r=i._monthSelect?i._monthSelect.val():null;\"monthday\"===e?(s.weekDays=null,s.monthDays=a?[a]:a,s.months=r?[+r]:r,u.hide(),d.show()):(s.monthDays=null,s.months=r?[+r]:r,s.weekDays=[{offset:+n,day:+t}],u.show(),d.hide())},o.append(n).on(ge+i._namespace,\".k-scheduler-navigation li\",function(t){var n,i=e(this).addClass(\"k-state-selected\");t.preventDefault(),i.siblings().removeClass(\"k-state-selected\"),n=i.children(\"a\").attr(P.attr(\"value\")),a(n)}),a(t))},_initUntil:function(){var e=this,t=e._container.find(\".k-recur-until\"),n=e.options.start,a=e._value,i=a.until,s=i&&n>i?i:n;e._until=P.support.input.date?t.attr(\"min\",P.toString(s,\"yyyy-MM-dd\")).val(P.toString(i||n,\"yyyy-MM-dd\")).on(\"change\",function(){a.until=P.parseDate(this.value,\"yyyy-MM-dd\")}):t.kendoDatePicker({min:s,value:i||n,change:function(){a.until=this.value()}}).data(\"kendoDatePicker\")},_options:function(e,t){var n=0,a=\"\",i=e.length,s=this._optionTemplate;for(t&&(a+=s({value:\"\",text:t}));i>n;n++)a+=s(e[n]);return a}}),Z.plugin(A)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.scheduler.recurrence.min.js.map\n","import { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { DeckRecord } from \"app2/src/records/Deck\";\n\nexport const deck = (state: RootState, props: any) => state.getIn([\"decks\", \"byId\", props.deckId]);\n\nexport const decks = createSelector([(state, props) => ({ state, props })], (stateProps: any): List<DeckRecord> => {\n  const { state, props } = stateProps;\n  const { deckIds } = props;\n  return deckIds.map((id: number) => deck(state, { deckId: id }));\n});\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IOpeningEstimationData } from \"../records/OpeningEstimation\";\nimport { List } from \"immutable\";\n\nexport const RECEIVE_OPENING_ESTIMATION = \"@openingEstimations/RECEIVE_OPENING_ESTIMATION\";\nexport const DUPLICATE_OPENING_ESTIMATIONS = \"@openingEstimations/DUPLICATE_OPENING_ESTIMATIONS\";\n\nexport const Actions = {\n  receiveOpeningEstimation: (openingEstimation: Partial<IOpeningEstimationData>) =>\n    createAction(RECEIVE_OPENING_ESTIMATION, { openingEstimation }),\n  duplicateOpeningEstimations: (lineItemId: number, openingEstimationIds: List<number>) =>\n    createAction(DUPLICATE_OPENING_ESTIMATIONS, { lineItemId, openingEstimationIds }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IEstimateFinanceOptionData } from \"../records/EstimateFinanceOption\";\nimport { List } from \"immutable\";\nimport { ThunkResult } from \"app2/src/reducers\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport { RootDispatchType } from \"../store\";\n\nexport const RECEIVE_ESTIMATE_FINANCE_OPTION = \"@estimateFinanceOptions/RECEIVE_ESTIMATE_FINANCE_OPTION\";\nexport const DUPLICATE_ESTIMATE_FINANCE_OPTIONS = \"@estimateFinanceOptions/DUPLICATE_ESTIMATE_FINANCE_OPTIONS\";\nexport const ADD_FINANCE_OPTION = \"@estimateFinanceOptions/ADD_FINANCE_OPTION\";\nexport const REMOVE_FINANCE_OPTION = \"@estimateFinanceOptions/REMOVE_FINANCE_OPTION\";\nexport const CALCULATE_FINANCE_OPTION = \"@estimateFinanceOptions/CALCULATE_FINANCE_OPTIONS\";\n\nexport const Actions = {\n  receiveEstimateFinanceOption: (estimateFinanceOption: Partial<IEstimateFinanceOptionData>) =>\n    createAction(RECEIVE_ESTIMATE_FINANCE_OPTION, { estimateFinanceOption }),\n  duplicateEstimateFinanceOptions: (estimateId: number, financeOptionIds: List<number>) =>\n    createAction(DUPLICATE_ESTIMATE_FINANCE_OPTIONS, { estimateId, financeOptionIds }),\n  addFinanceOption: (estimateId: number, financeOptionId: number) =>\n    createAction(ADD_FINANCE_OPTION, { estimateId, financeOptionId }),\n  removeFinanceOption: (estimateId: number, estimateFinanceOptionId: number) =>\n    createAction(REMOVE_FINANCE_OPTION, { estimateId, estimateFinanceOptionId }),\n  calculateFinanceOption: (estimateId: number, estimateFinanceOptionId: number) =>\n    createAction(CALCULATE_FINANCE_OPTION, { estimateId, estimateFinanceOptionId }),\n};\n\nexport const AsyncActions = {\n  addFinanceOption: (estimateId: number, financeOptionId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const estimateFinanceOptionId = getState().getIn([\"estimateFinanceOptions\", \"unsavedId\"]);\n      dispatch(Actions.addFinanceOption(estimateId, financeOptionId));\n      dispatch(estimateActions.AsyncActions.addFinanceOptionId(estimateId, estimateFinanceOptionId));\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { orgService, IOrgIndexResponse } from \"app2/src/api/org.service\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"./index\";\nimport { IOrgData, OrgRecord } from \"../records/OrgRecord\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as taskActions from \"app2/src/reducers/task.actions\";\nimport * as tokenActions from \"app2/src/reducers/token.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { IPageData, QueryParamsRecord } from \"app2/src/records/Page\";\nimport { List } from \"immutable\";\nimport { Actions as PagingActions } from \"app2/src/reducers/pagination.actions\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { DocType } from \"app2/src/records/Estimate\";\nimport { DocumentRecord } from \"app2/src/records/Document\";\nimport { currentOrg, currentOrgId, preferencesConfig } from \"app2/src/selectors/org.selectors\";\nimport { migrateOldDocs } from \"app2/src/helpers/DocumentOrder\";\nimport { token } from \"app2/src/selectors/token.selectors\";\nimport { JobRecord } from \"../records/Job\";\nimport { cleanProps } from \"app2/src/api/token.service\";\n\nexport const SET_ORG = \"@org/SET_ORG\";\nexport const RESET_ORG = \"@org/RESET_ORG\";\nexport const SET_CURRENT_ORG_ID = \"@org/SET_CURRENT_ORG_ID\";\nexport const FETCH_ORG = \"@org/FETCH_ORG\";\nexport const RECEIVE_ORG_ERRORS = \"@org/RECEIVE_ORG_ERRORS\";\nexport const RECEIVE_ORGS = \"@org/RECEIVE_ORGS\";\nexport const UPDATE_SETTINGS_CONFIG = \"@org/UPDATE_SETTINGS_CONFIG\";\nexport const UPDATE_PREF_CONFIG = \"@org/UPDATE_PREF_CONFIG\";\nexport const UPDATE_DOCUMENT_ORDER = \"@org/UPDATE_DOCUMENT_ORDER\";\nexport const CLEAR_ORGS = \"@org/CLEAR_ORGS\";\nexport const ADD_TO_DOCUMENT_ORDER = \"@org/ADD_TO_DOCUMENT_ORDER\";\nexport const UPDATE_FORM = \"@org/UPDATE_FORM\";\nexport const ADD_SIGNATURE_RECIPIENTS_INFO = \"@org/ADD_SIGNATURE_RECIPIENTS_INFO\";\nexport const UPDATE_SIGNATURE_RECIPIENT_INFO = \"@org/UPDATE_SIGNATURE_RECIPIENT_INFO\";\n\nexport const Actions = {\n  setCurrentOrgId: (id: number) => createAction(SET_CURRENT_ORG_ID, { id }),\n  setOrg: (org: Partial<IOrgData>) => createAction(SET_ORG, org),\n  resetOrg: () => createAction(RESET_ORG, {}),\n  fetchOrg: (id: number) => createAction(FETCH_ORG, id),\n  receiveOrgError: (id: number, errors: string[]) => createAction(RECEIVE_ORG_ERRORS, { id: id, errors: errors }),\n  receiveOrgs: (orgs: IOrgData[]) => createAction(RECEIVE_ORGS, { orgs }),\n  updateSettingsConfig: (orgId: number, path: any, value: any) =>\n    createAction(UPDATE_SETTINGS_CONFIG, { orgId, path, value }),\n  updatePrefConfig: (orgId: number, path: any, value: any) => createAction(UPDATE_PREF_CONFIG, { orgId, path, value }),\n  updateDocumentOrder: (docType: DocType, list: List<any>) => createAction(UPDATE_DOCUMENT_ORDER, { docType, list }),\n  addToDocumentOrder: (docType: DocType, document: DocumentRecord) =>\n    createAction(ADD_TO_DOCUMENT_ORDER, { docType, document }),\n  updateForm: (event: any) => createAction(UPDATE_FORM, { event }),\n  addSignatureRecipientsInfo: (job: JobRecord, orgId: number) =>\n    createAction(ADD_SIGNATURE_RECIPIENTS_INFO, { job, orgId }),\n  updateSignatureRecipientInfo: (event: any) => createAction(UPDATE_SIGNATURE_RECIPIENT_INFO, { event }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  getOrg: (\n    id: number,\n    includes: string[] = orgService.orgIncludes,\n    set_current_org = false,\n  ): ThunkResult<Promise<IOrgData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchOrg(id));\n      if (set_current_org) {\n        dispatch(Actions.setCurrentOrgId(id));\n      }\n\n      return orgService.load(id, includes).then(\n        (org) => {\n          dispatch(Actions.setOrg(org));\n          return org;\n        },\n        (errors) => {\n          dispatch(Actions.receiveOrgError(id, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  listOrgs: (queryParams: QueryParamsRecord = new QueryParamsRecord(), modelName = \"org\"): ThunkResult<void> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(PagingActions.fetchPage(modelName, queryParams));\n      try {\n        const response: IOrgIndexResponse = await orgService.list(queryParams);\n        dispatch(Actions.receiveOrgs(response.orgs));\n        const pageData: Partial<IPageData> = {\n          ids: List(response.orgs.map((org: IOrgData) => org.id)),\n          pagination: response.meta.pagination,\n        };\n        dispatch(PagingActions.receivePage(modelName, queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(PagingActions.receivePageError(modelName, queryParams, errors));\n      }\n    };\n  },\n  updateOrg: (org: OrgRecord): ThunkResult<Promise<IOrgData>> => {\n    return (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchOrg(org.id));\n\n      return orgService.update(org).then(\n        (orgData) => {\n          dispatch(Actions.setOrg(orgData));\n          dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved organization successfully\"));\n          return orgData;\n        },\n        (errors) => {\n          dispatch(Actions.receiveOrgError(org.id, errors));\n          dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n          return Promise.reject(errors);\n        },\n      );\n    };\n  },\n  updateCurrentOrg: (): ThunkResult<Promise<IOrgData>> => {\n    return (dispatch: RootDispatchType, getState) => {\n      const orgRecord = currentOrg(getState());\n      return dispatch(AsyncActions.updateOrg(orgRecord));\n    };\n  },\n  syncIntegration: (orgId: number, process: string, name: string) => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        await orgService.sync(orgId, {\n          process: process,\n          integration: name,\n        });\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Sync Requested Successfully\"));\n      } catch (response) {\n        dispatch(\n          commonActions.Actions.flashAddAlert(\n            FlashLevels.danger,\n            \"There were problems requesting the sync. Make sure all your information is correct. If the problem continues, contact support.\",\n          ),\n        );\n      }\n    };\n  },\n  testIntegration: (integration: string): ThunkResult<Promise<{ taskId: string; close: boolean }>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const orgId = currentOrgId(getState());\n        const tokenRecord = token(getState(), { kind: integration });\n        const response = await orgService.test(orgId, { integration, token: cleanProps(tokenRecord) });\n        dispatch(taskActions.Actions.receiveTask(response.task));\n        let close = false;\n        if (response.task.status === \"finished\") {\n          await dispatch(tokenActions.AsyncActions.updateCreateToken(tokenRecord));\n          close = true;\n        } else {\n          console.error(response.task);\n          dispatch(\n            commonActions.Actions.flashAddAlert(\n              FlashLevels.danger,\n              \"There was a problem with your settings, review the log and try again. If the problem continues, contact support.\",\n            ),\n          );\n        }\n        return { taskId: response.task.id, close };\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  removeFromDocumentOrder: (documentId: number) => {\n    return (dispatch: RootDispatchType, getState: () => RootState): void => {\n      const orgId = currentOrgId(getState());\n      [\"estimate\", \"contract\", \"inspection\"].forEach((docType: DocType) => {\n        let list = preferencesConfig(getState(), { orgId, path: [\"document_order\", docType] }) || List();\n        list = migrateOldDocs(getState(), list);\n        const filteredList = list.filter((item) => {\n          if (typeof item === \"string\") {\n            return true;\n          }\n          return item.get(\"id\") !== documentId;\n        });\n        dispatch(Actions.updateDocumentOrder(docType, filteredList));\n      });\n\n      dispatch(AsyncActions.updateCurrentOrg());\n    };\n  },\n  duplicateOrg: (selectedDataTypes: List<string>, selectedOrgs: List<number>) => {\n    return async (dispatch: RootDispatchType, getState: () => RootState): Promise<void> => {\n      const sourceOrdId = currentOrgId(getState());\n\n      return new Promise((resolve, reject) => {\n        selectedOrgs.forEach(async (orgId, index) => {\n          try {\n            const { task } = await orgService.duplicate(orgId, sourceOrdId, selectedDataTypes.toJS());\n\n            dispatch(taskActions.Actions.receiveTask(task));\n            dispatch(taskActions.AsyncActions.pollTask(task));\n            dispatch(\n              commonActions.Actions.flashAddAlert(\n                FlashLevels.success,\n                `Submitted task to duplicate org ${orgId} successfully. Click on the \"Tasks\" button to see the status.`,\n              ),\n            );\n\n            if (index === selectedOrgs.size - 1) resolve();\n          } catch (errors) {\n            handleErrors(errors, dispatch);\n            if (index === selectedOrgs.size - 1) resolve();\n          }\n        });\n      });\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { RootState } from \"app2/src/reducers\";\nimport { document } from \"app2/src/selectors/document.selectors\";\nimport { List, Map } from \"immutable\";\nimport * as config from \"react-global-configuration\";\n\nexport const setupAvailableDocuments = (currentOrder: List<any>): List<any> => {\n  let availableValues = List(config.get(\"DOCUMENT_ORDER_VALUES\"));\n\n  currentOrder.forEach((option) => {\n    if (availableValues.includes(option)) {\n      return;\n    }\n\n    availableValues = availableValues.push(option);\n  });\n\n  return availableValues;\n};\n\nexport const oldDocValueIds = (currentOrder: List<any>): List<number> => {\n  return List(currentOrder)\n    .filter((co) => {\n      if (typeof co === \"string\") {\n        return false;\n      }\n      return co.get(\"file_name\") === \"Migrate\";\n    })\n    .map((co) => co.get(\"id\"));\n};\n\nexport const migrateOldDocs = (state: RootState, currentOrder: List<any>): List<any> => {\n  return currentOrder.map((doc) => {\n    if (typeof doc === \"string\" && doc.startsWith(\"org_doc:\")) {\n      const splits = doc.split(\":\");\n      let file_name = \"Migrate\";\n      const id = parseInt(splits[1]);\n      const docRecord = document(state, { documentId: id });\n      if (docRecord) {\n        file_name = docRecord.name;\n      }\n      return Map({\n        id,\n        doc_type: \"org\",\n        file_name,\n        filter_states: [],\n      });\n    }\n\n    return doc;\n  });\n};\n","export const countries = [\"United States\", \"Canada\", \"Mexico\", \"Dominican Republic\"];\n\nexport const countries_abbreviation = {\n  \"United States\": \"US\",\n  Canada: \"CA\",\n  Mexico: \"MX\",\n  \"Dominican Republic\": \"DO\",\n};\n\nexport const us_states = [\n  \"Alabama\",\n  \"Alaska\",\n  \"American Samoa\",\n  \"Arizona\",\n  \"Arkansas\",\n  \"California\",\n  \"Colorado\",\n  \"Connecticut\",\n  \"Delaware\",\n  \"District of Columbia\",\n  \"Federated States Of Micronesia\",\n  \"Florida\",\n  \"Georgia\",\n  \"Guam\",\n  \"Hawaii\",\n  \"Idaho\",\n  \"Illinois\",\n  \"Indiana\",\n  \"Iowa\",\n  \"Kansas\",\n  \"Kentucky\",\n  \"Louisiana\",\n  \"Maine\",\n  \"Marshall Islands\",\n  \"Maryland\",\n  \"Massachusetts\",\n  \"Michigan\",\n  \"Minnesota\",\n  \"Mississippi\",\n  \"Missouri\",\n  \"Montana\",\n  \"Nebraska\",\n  \"Nevada\",\n  \"New Hampshire\",\n  \"New Jersey\",\n  \"New Mexico\",\n  \"New York\",\n  \"North Dakota\",\n  \"North Carolina\",\n  \"Northern Mariana Islands\",\n  \"Ohio\",\n  \"Oklahoma\",\n  \"Oregon\",\n  \"Palau\",\n  \"Pennsylvania\",\n  \"Puerto Rico\",\n  \"Rhode Island\",\n  \"South Carolina\",\n  \"South Dakota\",\n  \"Tennessee\",\n  \"Texas\",\n  \"Utah\",\n  \"Vermont\",\n  \"Virgin Islands\",\n  \"Virginia\",\n  \"Washington\",\n  \"West Virginia\",\n  \"Wisconsin\",\n  \"Wyoming\",\n  \"Alberta\",\n  \"British Columbia\",\n  \"Manitoba\",\n  \"New Brunswick\",\n  \"Newfoundland\",\n  \"Nova Scotia\",\n  \"Ontario\",\n  \"Prince Edward Island\",\n  \"Quebec\",\n  \"Saskatchewan\",\n  \"Aguascalientes\",\n  \"Baja California Norte\",\n  \"Baja California Sur\",\n  \"Coahuila\",\n  \"Chihuahua\",\n  \"Colima\",\n  \"Campeche\",\n  \"Chiapas\",\n  \"Districto Federal\",\n  \"Durango\",\n  \"Guerrero\",\n  \"Guanajuato\",\n  \"Hidalgo\",\n  \"Jalisco\",\n  \"Michoacan\",\n  \"Morelos\",\n  \"Mexico\",\n  \"Nayarit\",\n  \"Nuevo Leon\",\n  \"Oaxaca\",\n  \"Puebla\",\n  \"Queretaro\",\n  \"Quintana Roo\",\n  \"Sinaloa\",\n  \"San Luis Potosi\",\n  \"Sonora\",\n  \"Tamaulipas\",\n  \"Tabasco\",\n  \"Tlaxcala\",\n  \"Veracruz\",\n  \"Yucatan\",\n  \"Zacatecas\",\n  \"Azua\",\n  \"Baoruco\",\n  \"Barahona\",\n  \"Dajabón\",\n  \"Distrito Nacional\",\n  \"Duarte\",\n  \"Elías Piña\",\n  \"El Seibo\",\n  \"Espaillat\",\n  \"Hato Mayor\",\n  \"Hermanas Mirabal\",\n  \"Independencia\",\n  \"La Altagracia\",\n  \"La Romana\",\n  \"La Vega\",\n  \"María Trinidad Sánchez\",\n  \"Monseñor Nouel\",\n  \"Monte Cristi\",\n  \"Monte Plata\",\n  \"Pedernales\",\n  \"Peravia\",\n  \"Puerto Plata\",\n  \"Samaná\",\n  \"Sánchez Ramírez\",\n  \"San Cristóbal\",\n  \"San José de Ocoa\",\n  \"San Juan\",\n  \"San Pedro de Macorís\",\n  \"Santiago\",\n  \"Santiago Rodríguez\",\n  \"Santo Domingo\",\n  \"Valverde\",\n];\n\nexport const us_states_abbreviation = {\n  Alabama: \"AL\",\n  Alaska: \"AK\",\n  \"American Samoa\": \"AS\",\n  Arizona: \"AZ\",\n  Arkansas: \"AR\",\n  California: \"CA\",\n  Colorado: \"CO\",\n  Connecticut: \"CT\",\n  Delaware: \"DE\",\n  \"District Of Columbia\": \"DC\",\n  \"Federated States Of Micronesia\": \"FM\",\n  Florida: \"FL\",\n  Georgia: \"GA\",\n  Guam: \"GU\",\n  Hawaii: \"HI\",\n  Idaho: \"ID\",\n  Illinois: \"IL\",\n  Indiana: \"IN\",\n  Iowa: \"IA\",\n  Kansas: \"KS\",\n  Kentucky: \"KY\",\n  Louisiana: \"LA\",\n  Maine: \"ME\",\n  \"Marshall Islands\": \"MH\",\n  Maryland: \"MD\",\n  Massachusetts: \"MA\",\n  Michigan: \"MI\",\n  Minnesota: \"MN\",\n  Mississippi: \"MS\",\n  Missouri: \"MO\",\n  Montana: \"MT\",\n  Nebraska: \"NE\",\n  Nevada: \"NV\",\n  \"New Hampshire\": \"NH\",\n  \"New Jersey\": \"NJ\",\n  \"New Mexico\": \"NM\",\n  \"New York\": \"NY\",\n  \"North Carolina\": \"NC\",\n  \"North Dakota\": \"ND\",\n  \"Northern Mariana Islands\": \"MP\",\n  Ohio: \"OH\",\n  Oklahoma: \"OK\",\n  Oregon: \"OR\",\n  Palau: \"PW\",\n  Pennsylvania: \"PA\",\n  \"Puerto Rico\": \"PR\",\n  \"Rhode Island\": \"RI\",\n  \"South Carolina\": \"SC\",\n  \"South Dakota\": \"SD\",\n  Tennessee: \"TN\",\n  Texas: \"TX\",\n  Utah: \"UT\",\n  Vermont: \"VT\",\n  \"Virgin Islands\": \"VI\",\n  Virginia: \"VA\",\n  Washington: \"WA\",\n  \"West Virginia\": \"WV\",\n  Wisconsin: \"WI\",\n  Wyoming: \"WY\",\n  Aguascalientes: \"AG\",\n  \"Baja California Norte\": \"BN\",\n  \"Baja California Sur\": \"BS\",\n  Coahuila: \"CH\",\n  Chihuahua: \"CI\",\n  Colima: \"CL\",\n  Campeche: \"CP\",\n  Chiapas: \"CS\",\n  \"Districto Federal\": \"DF\",\n  Durango: \"DG\",\n  Guerrero: \"GE\",\n  Guanajuato: \"GJ\",\n  Hidalgo: \"HD\",\n  Jalisco: \"JA\",\n  Michoacan: \"MC\",\n  Morelos: \"MR\",\n  Mexico: \"MX\",\n  Nayarit: \"NA\",\n  Oaxaca: \"OA\",\n  Puebla: \"PU\",\n  Queretaro: \"QE\",\n  \"Quintana Roo\": \"QI\",\n  Sinaloa: \"SI\",\n  \"San Luis Potosi\": \"SL\",\n  Sonora: \"SO\",\n  Tamaulipas: \"TA\",\n  Tabasco: \"TB\",\n  Tlaxcala: \"TL\",\n  Veracruz: \"VC\",\n  Yucatan: \"YU\",\n  Zacatecas: \"ZA\",\n  // Azua: \"AZ\",\n  Baoruco: \"BH\",\n  Barahona: \"BR\",\n  Dajabón: \"DJ\",\n  \"Distrito Nacional\": \"DN\",\n  Duarte: \"DU\",\n  \"Elías Piña\": \"EP\",\n  \"El Seibo\": \"ES\",\n  Espaillat: \"ET\",\n  \"Hato Mayor\": \"HM\",\n  \"Hermanas Mirabal\": \"HN\",\n  // Independencia: \"IN\",\n  // \"La Altagracia\": \"AL\",\n  \"La Romana\": \"RO\",\n  \"La Vega\": \"VE\",\n  // \"María Trinidad Sánchez\": \"MT\",\n  // \"Monseñor Nouel\": \"MN\",\n  // \"Monte Cristi\": \"MC\",\n  // \"Monte Plata\": \"MP\",\n  Pedernales: \"PD\",\n  Peravia: \"PV\",\n  \"Puerto Plata\": \"PP\",\n  Samaná: \"SM\",\n  \"Sánchez Ramírez\": \"SR\",\n  // \"San Cristóbal\": \"SC\",\n  \"San José de Ocoa\": \"JO\",\n  \"San Juan\": \"SJ\",\n  \"San Pedro de Macorís\": \"PM\",\n  Santiago: \"ST\",\n  // \"Santiago Rodríguez\": \"SO\",\n  // \"Santo Domingo\": \"SD\",\n  // Valverde: \"VA\",\n};\n","import { Record } from \"immutable\";\nimport * as moment from \"moment\";\nimport { CamelToSnakeKeys, SnakeToCamelKeys } from \"app2/src/helpers/Format\";\nimport { checkDate } from \"app2/src/records\";\n\nexport const fromJSON = (data: Partial<IFenceSegmentData>): FenceSegmentRecord => {\n  const record: Partial<IFenceSegmentRecord> = SnakeToCamelKeys(data);\n\n  if (data.created_at) {\n    record.createdAt = checkDate(data.created_at);\n  }\n\n  if (data.updated_at) {\n    record.updatedAt = checkDate(data.updated_at);\n  }\n\n  return new FenceSegmentRecord(record);\n};\n\nexport const toFormData = (record: FenceSegmentRecord): IFenceSegmentData => {\n  const data = CamelToSnakeKeys(record.toJSON());\n\n  data.updated_at = moment(record.updatedAt).format(\"YYYY-MM-DDTHH:mm:ss.SSS\");\n  data.created_at = moment(record.createdAt).format(\"YYYY-MM-DDTHH:mm:ss.SSS\");\n\n  return data;\n};\n\nexport interface IFenceSegmentData {\n  id: number;\n  section_id: string;\n  name: string;\n  length: number;\n  gate_count: number;\n  gate_length: number;\n  net_length: number;\n  line_posts_4: number;\n  line_posts_6: number;\n  line_posts_8: number;\n  fence_id: number;\n  _destroy?: boolean;\n  created_at: string;\n  updated_at: string;\n}\n\nexport interface IFenceSegmentRecord {\n  id: number;\n  sectionId: string;\n  fenceId: number;\n  name: string;\n  length: number;\n  gateCount: number;\n  gateLength: number;\n  netLength: number;\n  linePosts4: number;\n  linePosts6: number;\n  linePosts8: number;\n  _destroy: boolean;\n  createdAt: Date;\n  updatedAt: Date;\n}\n\nexport const defaultFenceSegmentProps = {\n  id: 0,\n  sectionId: \"\",\n  fenceId: 0,\n  name: \"\",\n  length: 0,\n  gateCount: 0,\n  gateLength: 0,\n  netLength: 0,\n  linePosts4: 0,\n  linePosts6: 0,\n  linePosts8: 0,\n  _destroy: false,\n  createdAt: new Date(),\n  updatedAt: new Date(),\n};\n\nexport class FenceSegmentRecord\n  extends Record<IFenceSegmentRecord>(defaultFenceSegmentProps)\n  implements IFenceSegmentRecord {}\n\nexport const emptyFenceSegmentRecord = new FenceSegmentRecord();\n","import { createAction, ActionsUnion } from \"./Utils\";\nimport { appMessageRecipientFromJSON, AppMessageRecipientRecord } from \"app2/src/records/AppMessage\";\nimport * as AppMessageService from \"app2/src/api/appMessage.service\";\nimport { RootState, ThunkResult } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { IPageData, QueryParamsRecord } from \"../records/Page\";\nimport { StoreRegistry } from \"../storeRegistry\";\nimport { RemoteStorageService } from \"../api/remoteStorage.service\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { getChannelInitialized } from \"../selectors/appMessage.selectors\";\nimport { List } from \"immutable\";\nimport { DateFormat } from \"../helpers/Format\";\n\nexport interface IAppMessageMetadata {\n  total: number;\n  unread_total: number;\n  page_number?: number;\n  per_page?: number;\n  total_pages?: number;\n}\n\nexport const SHOW_MESSAGE_MODAL = \"@appMessage/SHOW_MESSAGE_MODAL\";\nexport const HIDE_MESSAGE_MODAL = \"@appMessage/HIDE_MESSAGE_MODAL\";\nexport const RECEIVE_APP_MESSAGES = \"@appMessage/RECEIVE_APP_MESSAGES\";\nexport const RECEIVE_APP_MESSAGE = \"@appMessage/RECEIVE_APP_MESSAGE\";\nexport const UPDATE_APP_MESSAGE = \"@appMessage/UPDATE_APP_MESSAGE\";\nexport const ADD_APP_MESSAGE = \"@appMessage/ADD_APP_MESSAGE\";\nexport const SET_CHANNEL_INIT = \"@appMessage/SET_CHANNEL_INIT\";\n\nexport const Actions = {\n  receiveAppMessage: (message: AppMessageRecipientRecord) => createAction(RECEIVE_APP_MESSAGE, { message }),\n  receiveAppMessages: (messages: AppMessageRecipientRecord[], metadata: IAppMessageMetadata) =>\n    createAction(RECEIVE_APP_MESSAGES, { messages, metadata }),\n  updateAppMessage: (message: AppMessageRecipientRecord, metadata: IAppMessageMetadata) =>\n    createAction(UPDATE_APP_MESSAGE, { message, metadata }),\n  addAppMessage: (message: AppMessageRecipientRecord, metadata: IAppMessageMetadata) =>\n    createAction(ADD_APP_MESSAGE, { message, metadata }),\n  showMessageModal: (messageId: string) => createAction(SHOW_MESSAGE_MODAL, { messageId }),\n  hideMessageModal: () => createAction(HIDE_MESSAGE_MODAL, {}),\n  setChannelInitialized: (initialized: boolean) => createAction(SET_CHANNEL_INIT, { initialized }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nexport const AsyncActions = {\n  /**\n   * Initialize AppMessage WebSocket subscriptions\n   * Call this once when the component that needs app messages mounts\n   *\n   * This follows the same pattern as other async actions in the codebase:\n   * Component → dispatch(thunk) → Service (WebSocket) → dispatch(action) → Redux\n   *\n   * IMPORTANT: This must be called before joining the channel to ensure callbacks\n   * are set up to receive the initial messages from the join response.\n   */\n  initializeAppMessages: (remoteStorage: any): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const initialized = getChannelInitialized(getState());\n\n      if (initialized) {\n        // Already initialized, no need to do it again\n        return;\n      }\n\n      dispatch(Actions.setChannelInitialized(true));\n      // Step 1: Initialize the service with callbacks that dispatch Redux actions\n      AppMessageService.initialize({\n        onInitialMessages: (messages, metadata) => {\n          messages.forEach((message) => {\n            dispatch(\n              commonActions.Actions.flashAddAlert(\n                FlashLevels[message.app_message.level],\n                [\"New Message\", message.app_message.subject],\n                false, // Don't auto-dismiss\n                {\n                  text: \"View\",\n                  action: {\n                    model: \"appMessage\",\n                    handler: \"markAction\",\n                    payload: message.id,\n                  },\n                },\n                {\n                  model: \"appMessage\",\n                  handler: \"dismissMessage\",\n                  payload: message.id,\n                },\n                message.id,\n              ),\n            );\n          });\n\n          dispatch(Actions.receiveAppMessages(messages, metadata));\n        },\n        onNewMessage: (message, metadata) => {\n          dispatch(\n            commonActions.Actions.flashAddAlert(\n              FlashLevels[message.app_message.level],\n              [\"New Message\", message.app_message.subject],\n              false, // Don't auto-dismiss\n              {\n                text: \"View\",\n                action: {\n                  model: \"appMessage\",\n                  handler: \"markAction\",\n                  payload: message.id,\n                },\n              },\n              {\n                model: \"appMessage\",\n                handler: \"dismissMessage\",\n                payload: message.id,\n              },\n              message.id,\n            ),\n          );\n          dispatch(Actions.addAppMessage(message, metadata));\n          dispatch(paginationActions.Actions.prependId(message.id, \"appMessages\"));\n        },\n        onMessageUpdate: (message, metadata) => {\n          dispatch(Actions.updateAppMessage(message, metadata));\n\n          if (message.dismissed_at || message.action_at || message.archived_at || message.read_at) {\n            dispatch(commonActions.Actions.removeFlashAlertByExternalId(message.id));\n          }\n        },\n      });\n\n      // Step 2: Now that callbacks are set up, join the channel\n      // The join response will trigger onInitialMessages callback\n      await remoteStorage.joinAppMessageChannel();\n    };\n  },\n\n  /**\n   * Mark a message as dismissed\n   * This is similar to other async actions like jobActions.updateJob()\n   */\n  dismissMessage: (id: string): ThunkResult<Promise<void>> => {\n    return async () => {\n      try {\n        // Update will come back via broadcast and trigger onMessageUpdate callback\n        await AppMessageService.dismissMessage(\n          StoreRegistry.get<RemoteStorageService>(\"remoteStorage\").getAppMessageChannel(),\n          id,\n        );\n      } catch (error) {\n        const errors = handleErrors(error);\n        console.error(\"Error dismissing message:\", errors);\n      }\n    };\n  },\n\n  /**\n   * Mark a message action button as clicked\n   */\n  markAction: (id: string): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        // Update will come back via broadcast and trigger onMessageUpdate callback\n        await AppMessageService.markAction(\n          StoreRegistry.get<RemoteStorageService>(\"remoteStorage\").getAppMessageChannel(),\n          id,\n        );\n        dispatch(Actions.showMessageModal(id));\n      } catch (error) {\n        const errors = handleErrors(error);\n        console.error(\"Error marking message action as clicked:\", errors);\n      }\n    };\n  },\n\n  /**\n   * Mark a message as read\n   */\n  markAsRead: (id: string): ThunkResult<Promise<void>> => {\n    return async () => {\n      try {\n        // Update will come back via broadcast and trigger onMessageUpdate callback\n        await AppMessageService.markRead(\n          StoreRegistry.get<RemoteStorageService>(\"remoteStorage\").getAppMessageChannel(),\n          id,\n        );\n      } catch (error) {\n        const errors = handleErrors(error);\n        console.error(\"Error marking message as read:\", errors);\n      }\n    };\n  },\n\n  /**\n   * Mark a message as archived\n   */\n  archiveMessage: (id: string): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        // Update will come back via broadcast and trigger onMessageUpdate callback\n        await AppMessageService.archiveMessage(\n          StoreRegistry.get<RemoteStorageService>(\"remoteStorage\").getAppMessageChannel(),\n          id,\n        );\n        dispatch(paginationActions.Actions.removeId(id, \"appMessages\"));\n      } catch (error) {\n        const errors = handleErrors(error, dispatch);\n        console.error(\"Error archiving message:\", errors);\n      }\n    };\n  },\n\n  /**\n   * Load paginated messages\n   */\n  loadMessages: (queryParams: QueryParamsRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(paginationActions.Actions.fetchPage(\"appMessages\", queryParams));\n\n      try {\n        const response = await AppMessageService.listMessages(\n          StoreRegistry.get<RemoteStorageService>(\"remoteStorage\").getAppMessageChannel(),\n          queryParams.page,\n          queryParams.per_page,\n        );\n        const messages = response.app_messages.map(appMessageRecipientFromJSON);\n        dispatch(Actions.receiveAppMessages(messages, response.metadata));\n\n        const pageData: Partial<IPageData> = {\n          ids: List(messages.map((msg) => msg.id)),\n          pagination: {\n            total_count: response.metadata.total,\n            current_page: response.metadata.page_number || 1,\n            total_pages: response.metadata.total_pages || 1,\n          },\n        };\n        dispatch(paginationActions.Actions.receivePage(\"appMessages\", queryParams, pageData));\n      } catch (error) {\n        const errors = handleErrors(error, dispatch);\n        dispatch(paginationActions.Actions.receivePageError(\"appMessages\", queryParams, errors));\n      }\n    };\n  },\n};\n","import * as moment from \"moment\";\n\nexport type Nullable<T> = T | null | undefined;\n\nexport const checkDate = (date: Date | string): Date => {\n  if (date instanceof Date) {\n    return date;\n  }\n\n  return moment(date).toDate();\n};\n\nexport type Primitive = null | undefined | string | number | boolean | symbol | Date;\n\nexport type YesNoProp = \"yes\" | \"no\";\n\nexport type PartialDeep<T> = T extends Primitive\n  ? T\n  : T extends Map<infer KeyType, infer ValueType>\n    ? PartialMapDeep<KeyType, ValueType>\n    : T extends Set<infer ItemType>\n      ? PartialSetDeep<ItemType>\n      : T extends ReadonlyMap<infer KeyType, infer ValueType>\n        ? PartialReadonlyMapDeep<KeyType, ValueType>\n        : T extends ReadonlySet<infer ItemType>\n          ? PartialReadonlySetDeep<ItemType>\n          : T extends object\n            ? PartialObjectDeep<T>\n            : unknown;\n\n/**\nSame as `PartialDeep`, but accepts only `Map`s and  as inputs. Internal helper for `PartialDeep`.\n*/\ntype PartialMapDeep<KeyType, ValueType> = Map<PartialDeep<KeyType>, PartialDeep<ValueType>>;\n\n/**\nSame as `PartialDeep`, but accepts only `Set`s as inputs. Internal helper for `PartialDeep`.\n*/\ntype PartialSetDeep<T> = Set<PartialDeep<T>>;\n\n/**\nSame as `PartialDeep`, but accepts only `ReadonlyMap`s as inputs. Internal helper for `PartialDeep`.\n*/\ntype PartialReadonlyMapDeep<KeyType, ValueType> = ReadonlyMap<PartialDeep<KeyType>, PartialDeep<ValueType>>;\n\n/**\nSame as `PartialDeep`, but accepts only `ReadonlySet`s as inputs. Internal helper for `PartialDeep`.\n*/\ntype PartialReadonlySetDeep<T> = ReadonlySet<PartialDeep<T>>;\n\n/**\nSame as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for `PartialDeep`.\n*/\ntype PartialObjectDeep<ObjectType extends object> = {\n  [KeyType in keyof ObjectType]?: PartialDeep<ObjectType[KeyType]>;\n};\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport type PhoneNumberSmsStatus = \"subscribed\" | \"unsubscribed\";\nexport const fromJSON = (json: Partial<IPhoneNumberData>): PhoneNumberRecord => {\n  return new PhoneNumberRecord(json);\n};\n\nexport const toJSON = (phoneNumber: PhoneNumberRecord): IPhoneNumberData => {\n  const pn = phoneNumber.toJSON() as IPhoneNumberData;\n\n  if (!pn._destroy && pn._destroy !== undefined) {\n    delete pn._destroy;\n  }\n\n  if (pn.name === \"\" && pn.number === \"\") {\n    pn._destroy = true;\n  }\n\n  if (pn.id < 0) {\n    delete pn.id;\n  }\n\n  return pn;\n};\n\nexport interface IPhoneNumberData {\n  id: number;\n  name: string;\n  number: string;\n  status: PhoneNumberSmsStatus;\n\n  created_at: Date;\n  updated_at: Date;\n\n  _destroy?: boolean;\n}\n\nexport interface IPhoneNumberRecord {\n  id: Nullable<number>;\n  name: Nullable<string>;\n  number: Nullable<string>;\n  status: PhoneNumberSmsStatus;\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n\n  _destroy?: Nullable<boolean>;\n}\n\nexport const defaultPhoneNumberProps = {\n  id: 0,\n  name: null,\n  number: null,\n  status: \"subscribed\" as PhoneNumberSmsStatus,\n  created_at: null,\n  updated_at: null,\n  _destroy: false,\n};\n\nexport class PhoneNumberRecord\n  extends Record<IPhoneNumberRecord>(defaultPhoneNumberProps)\n  implements IPhoneNumberRecord\n{\n  public readonly id!: number;\n  public readonly name!: Nullable<string>;\n  public readonly number!: string;\n  public readonly status!: PhoneNumberSmsStatus;\n\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public readonly _destroy!: boolean;\n\n  public constructor(values?: Partial<IPhoneNumberRecord>) {\n    values ? super(values) : super();\n  }\n}\n","import { Record, List } from \"immutable\";\nimport { Nullable } from \".\";\nimport { EstimateLineItemRecord } from \"./EstimateLineItem\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport const fromJSON = (json: Partial<IEstimateLineItemOptionData>): EstimateLineItemOptionRecord => {\n  const record: IEstimateLineItemOptionRecord = { ...(json as any) };\n\n  return new EstimateLineItemOptionRecord(record);\n};\n\nexport const calculateQuantity = (option: EstimateLineItemOptionRecord, line_item: EstimateLineItemRecord): number => {\n  if (!line_item) {\n    return 0;\n  }\n  if (option.charge_type === \"per\") {\n    return roundToDecimals(option.quantity, -2);\n  } else {\n    return roundToDecimals(option.quantity * line_item.quantity, -2);\n  }\n};\n\nexport const calculateProductPrice = (\n  option: EstimateLineItemOptionRecord,\n  line_item: EstimateLineItemRecord,\n): number => {\n  if (!line_item) {\n    return 0;\n  }\n  // needs to handle percentage based pricing (percentage based product price already calculated in angular)\n  return roundToDecimals(option.product_price * calculateQuantity(option, line_item), -2);\n};\n\nexport const calculateLaborPrice = (\n  option: EstimateLineItemOptionRecord,\n  line_item: EstimateLineItemRecord,\n): number => {\n  if (!line_item) {\n    return 0;\n  }\n  // needs to handle percentage based pricing (percentage labor product price already calculated in angular)\n  return roundToDecimals(option.labor_price * calculateQuantity(option, line_item), -2);\n};\n\nexport interface IEstimateLineItemOptionData {\n  id: number;\n  quantity: number;\n  name: string;\n  description: string;\n  ext_price: number;\n  uom: string;\n  price: number;\n  cost: number;\n  msrp: number;\n  product_option_uuid: string;\n  product_option_match_id: string;\n  estimate_line_item_id: number;\n  product_option_group_id: number;\n  product_option_group_name: string;\n  product_option_id: number;\n  product_option_image_ids: number[];\n  labor_price: number;\n  product_price: number;\n  base_labor_price: number;\n  base_product_price: number;\n  labor_factor: number;\n  product_factor: number;\n  created_at: Date;\n  updated_at: Date;\n  charge_type: string;\n  pog_type: string;\n  _destroy: Nullable<boolean>;\n}\n\nexport interface IEstimateLineItemOptionRecord {\n  id: number;\n  quantity: number;\n  name: string;\n  description: string;\n  ext_price: number;\n  uom: string;\n  price: number;\n  cost: number;\n  msrp: number;\n  product_option_uuid: string;\n  product_option_match_id: string;\n  estimate_line_item_id: number;\n  product_option_group_id: number;\n  product_option_group_name: string;\n  product_option_id: number;\n  product_option_image_ids: List<number>;\n  labor_price: number;\n  product_price: number;\n  base_labor_price: number;\n  base_product_price: number;\n  labor_factor: number;\n  product_factor: number;\n  created_at: Date;\n  updated_at: Date;\n  charge_type: string;\n  pog_type: string;\n  _destroy: Nullable<boolean>;\n}\n\nconst defaultEstimateLineItemOptionProps: IEstimateLineItemOptionRecord = {\n  id: 0,\n  quantity: 0,\n  name: \"\",\n  description: \"\",\n  ext_price: 0,\n  uom: \"\",\n  price: 0,\n  cost: 0,\n  msrp: 0,\n  product_option_uuid: \"\",\n  product_option_match_id: \"\",\n  estimate_line_item_id: 0,\n  product_option_group_id: 0,\n  product_option_group_name: \"\",\n  product_option_id: 0,\n  product_option_image_ids: List<number>(),\n  labor_price: 0,\n  product_price: 0,\n  base_labor_price: 0,\n  base_product_price: 0,\n  labor_factor: 0,\n  product_factor: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n  charge_type: \"\",\n  pog_type: \"\",\n  _destroy: null,\n};\n\nexport class EstimateLineItemOptionRecord\n  extends Record(defaultEstimateLineItemOptionProps)\n  implements IEstimateLineItemOptionRecord {}\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IAddressData>): AddressRecord => {\n  json.lat = parseFloat(json.lat as any);\n  json.lon = parseFloat(json.lon as any);\n  return new AddressRecord(json);\n};\n\nexport const toJSON = (address: AddressRecord): IAddressData => {\n  const addr = address.toJSON() as IAddressData;\n\n  if (addr.id <= 0) {\n    delete addr.id;\n  }\n  return addr;\n};\n\nexport const toOneLiner = (address: AddressRecord): string => {\n  let oneLiner = `${address.line_1 || \"\"} ${address.line_2 || \"\"}`;\n  oneLiner = `${oneLiner.trim()} ${address.city || \"\"}`;\n  oneLiner = `${oneLiner.trim()}${address.state ? \",\" : \"\"} ${address.state || \"\"}`;\n  oneLiner = `${oneLiner.trim()} ${address.postal_code || \"\"}`.trim();\n\n  return oneLiner;\n};\n\nexport const toCityStateZip = (address: AddressRecord): string => {\n  let csz = `${address.city || \"\"}`;\n  csz = `${csz.trim()}${address.state ? \",\" : \"\"} ${address.state || \"\"}`;\n  csz = `${csz.trim()} ${address.postal_code || \"\"}`.trim();\n\n  return csz;\n};\n\nexport const toMultiLiner = (address: AddressRecord): string => {\n  let line = `${address.line_1 || \"\"}\\n${address.line_2 || \"\"}\\n`;\n  line = `${line.trim()}\\n${address.city || \"\"}`;\n  line = `${line.trim()}${!address.city ? \"\\n\" : \"\"}${address.state && address.city ? \", \" : \"\"}${address.state || \"\"}`;\n  line = `${line.trim()} ${address.postal_code || \"\"}`.trim();\n\n  return line;\n};\n\nexport const toLatLng = (address: AddressRecord): Nullable<{ latitude: number; longitude: number }> => {\n  if (!address || !address.get(\"lat\") || !address.get(\"lon\")) {\n    return null;\n  }\n\n  return {\n    latitude: address.get(\"lat\") || 0,\n    longitude: address.get(\"lon\") || 0,\n  };\n};\n\nexport type AddressKind = \"job\" | \"customer\";\n\nexport interface IAddressData {\n  id: number;\n  kind?: AddressKind;\n  description?: string;\n  addressable_id?: number;\n  addressable_type?: string;\n  line_1?: string;\n  line_2?: string;\n  city?: string;\n  state?: string;\n  postal_code?: string;\n  country?: string;\n  lat?: number;\n  lon?: number;\n  administrative_area_level_2?: string;\n  administrative_area_level_3?: string;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IAddressRecord {\n  id: Nullable<number>;\n  kind: Nullable<AddressKind>;\n  description: Nullable<string>;\n  addressable_id: Nullable<number>;\n  addressable_type: Nullable<string>;\n  line_1: Nullable<string>;\n  line_2: Nullable<string>;\n  city: Nullable<string>;\n  state: Nullable<string>;\n  postal_code: Nullable<string>;\n  country: Nullable<string>;\n  lat: Nullable<number>;\n  lon: Nullable<number>;\n  administrative_area_level_2: Nullable<string>;\n  administrative_area_level_3: Nullable<string>;\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nexport const defaultAddressProps = {\n  id: 0,\n  kind: null,\n  description: null,\n  addressable_id: null,\n  addressable_type: null,\n  line_1: null,\n  line_2: null,\n  city: null,\n  state: null,\n  postal_code: null,\n  country: null,\n  lat: null,\n  lon: null,\n  administrative_area_level_2: null,\n  administrative_area_level_3: null,\n  created_at: null,\n  updated_at: null,\n};\n\nexport class AddressRecord extends Record<IAddressRecord>(defaultAddressProps) implements IAddressRecord {}\n","import { each, chain, pluck, max, isNull, isUndefined } from \"underscore\";\n\n/**\n * Check if a value is null or undefined\n */\nexport const isNullOrUndefined = (value: any): value is null | undefined => {\n  return isNull(value) || isUndefined(value);\n};\n\n/**\n * Extend destination object with source object properties (hidden/non-enumerable)\n * Skips constructor and existing properties\n */\nexport const hiddenExtend = (dst: any, src: any): void => {\n  const keys = Object.getOwnPropertyNames(src);\n\n  each(keys, (key) => {\n    if (dst[key] || key === \"constructor\") {\n      return;\n    }\n    dst[key] = src[key];\n  });\n};\n\n/**\n * Get the next sort order value from an array of objects with sort_order property\n * Returns the maximum sort_order + 1, or 0 if array is empty\n */\nexport const getNextSortOrder = (list: { sort_order: number }[]): number => {\n  return (\n    chain(list)\n      .map((item) => item.sort_order)\n      .push(0)\n      .max()\n      .value() + 1\n  );\n};\n\n/**\n * Move an element in an array from one index to another\n * Mutates the array in place\n */\nexport const arrayMove = <T>(arr: T[], oldIndex: number, newIndex: number): void => {\n  if (newIndex >= arr.length) {\n    let k = newIndex - arr.length + 1;\n    while (k--) {\n      arr.push(undefined as any);\n    }\n  }\n  arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]);\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IElevationData } from \"../records/Elevation\";\nimport { RootState } from \"app2/src/reducers\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { list } from \"app2/src/api/elevation.service\";\nimport { currentMeasurementId } from \"app2/src/selectors/measurementCommon.selectors\";\n\n// SINGLE\nexport const RECEIVE_ELEVATION = \"@elevations/RECEIVE_ELEVATION\";\n// MULTIPLE\nexport const FETCH_ELEVATIONS = \"@elevations/FETCH_ELEVATIONS\";\nexport const RECEIVE_ELEVATIONS = \"@elevations/RECEIVE_ELEVATIONS\";\nexport const SET_ELEVATIONS_LOADED = \"@elevations/SET_ELEVATIONS_LOADED\";\n\nexport const Actions = {\n  // SINGLE\n  receiveElevation: (elevation: Partial<IElevationData>) => createAction(RECEIVE_ELEVATION, { elevation }),\n  // MULTIPLE\n  fetchElevations: (measurementId: number) => createAction(FETCH_ELEVATIONS, { measurementId }),\n  receiveElevations: (measurementId: number, elevations: Partial<IElevationData[]>) =>\n    createAction(RECEIVE_ELEVATIONS, { measurementId, elevations }),\n  setElevationsLoaded: (measurementId: number) => createAction(SET_ELEVATIONS_LOADED, { measurementId }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  listElevationsByMeasurement: (): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const measurementId = currentMeasurementId(getState(), {});\n      dispatch(Actions.fetchElevations(measurementId));\n\n      try {\n        const response = await list(measurementId);\n\n        dispatch(Actions.receiveElevations(measurementId, response.elevations));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setElevationsLoaded(measurementId));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { IElevationData } from \"app2/src/records/Elevation\";\n\nexport interface IElevationIndexResponse {\n  elevations: IElevationData[];\n}\n\nconst url = \"api/v1/measurements/:id/elevations\";\n\nexport const list = (measurementId: number): Promise<IElevationIndexResponse> => {\n  const actionUrl = url.replace(\":id\", measurementId.toString());\n\n  return fetcher.get<IElevationIndexResponse>(actionUrl);\n};\n","(window as any).$ = require(\"jquery\");\n(window as any).jQuery = $;\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.mobile.popover.min\",[\"kendo.popup.min\",\"kendo.mobile.pane.min\"],e)}(function(){return function(e,o){var i=window.kendo,t=i.mobile,n=t.ui,p=\"hide\",r=\"open\",s=\"close\",a='<div class=\"km-popup-wrapper\" />',l='<div class=\"km-popup-arrow\" />',d='<div class=\"km-popup-overlay\" />',c=\"km-up km-down km-left km-right\",h=n.Widget,u={down:{origin:\"bottom center\",position:\"top center\"},up:{origin:\"top center\",position:\"bottom center\"},left:{origin:\"center left\",position:\"center right\",collision:\"fit flip\"},right:{origin:\"center right\",position:\"center left\",collision:\"fit flip\"}},f={animation:{open:{effects:\"fade:in\",duration:0},close:{effects:\"fade:out\",duration:400}}},w={horizontal:{offset:\"top\",size:\"height\"},vertical:{offset:\"left\",size:\"width\"}},m={up:\"down\",down:\"up\",left:\"right\",right:\"left\"},v=h.extend({init:function(o,t){var n,r,s=this,c=o.closest(\".km-modalview-wrapper\"),m=o.closest(\".km-root\").children(\".km-pane\").first(),v=c[0]?c:m;t.viewport?m=t.viewport:m[0]||(m=window),t.container?v=t.container:v[0]||(v=document.body),n={viewport:m,copyAnchorStyles:!1,autosize:!0,open:function(){s.overlay.show()},activate:e.proxy(s._activate,s),deactivate:function(){s.overlay.hide(),s._apiCall||s.trigger(p),s._apiCall=!1}},h.fn.init.call(s,o,t),o=s.element,t=s.options,o.wrap(a).addClass(\"km-popup\").show(),r=s.options.direction.match(/left|right/)?\"horizontal\":\"vertical\",s.dimensions=w[r],s.wrapper=o.parent().css({width:t.width,height:t.height}).addClass(\"km-popup-wrapper km-\"+t.direction).hide(),s.arrow=e(l).prependTo(s.wrapper).hide(),s.overlay=e(d).appendTo(v).hide(),n.appendTo=s.overlay,t.className&&s.overlay.addClass(t.className),s.popup=new i.ui.Popup(s.wrapper,e.extend(!0,n,f,u[t.direction]))},options:{name:\"Popup\",width:240,height:\"\",direction:\"down\",container:null,viewport:null},events:[p],show:function(o){this.popup.options.anchor=e(o),this.popup.open()},hide:function(){this._apiCall=!0,this.popup.close()},destroy:function(){h.fn.destroy.call(this),this.popup.destroy(),this.overlay.remove()},target:function(){return this.popup.options.anchor},_activate:function(){var o=this,i=o.options.direction,t=o.dimensions,n=t.offset,p=o.popup,r=p.options.anchor,s=e(r).offset(),a=e(p.element).offset(),l=p.flipped?m[i]:i,d=2*o.arrow[t.size](),h=o.element[t.size]()-o.arrow[t.size](),u=e(r)[t.size](),f=s[n]-a[n]+u/2;d>f&&(f=d),f>h&&(f=h),o.wrapper.removeClass(c).addClass(\"km-\"+l),o.arrow.css(n,f).show()}}),g=h.extend({init:function(o,t){var p,r=this;r.initialOpen=!1,h.fn.init.call(r,o,t),p=e.extend({className:\"km-popover-root\",hide:function(){r.trigger(s)}},this.options.popup),r.popup=new v(r.element,p),r.popup.overlay.on(\"move\",function(e){e.target==r.popup.overlay[0]&&e.preventDefault()}),r.pane=new n.Pane(r.element,e.extend(this.options.pane,{$angular:this.options.$angular})),i.notify(r,n)},options:{name:\"PopOver\",popup:{},pane:{}},events:[r,s],open:function(e){this.popup.show(e),this.initialOpen?this.pane.view()._invokeNgController():(this.pane.navigateToInitial()||this.pane.navigate(\"\"),this.popup.popup._position(),this.initialOpen=!0)},openFor:function(e){this.open(e),this.trigger(r,{target:this.popup.target()})},close:function(){this.popup.hide()},destroy:function(){h.fn.destroy.call(this),this.pane.destroy(),this.popup.destroy(),i.destroy(this.element)}});n.plugin(v),n.plugin(g)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,o,i){(i||o)()});\n//# sourceMappingURL=kendo.mobile.popover.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.listview.min\",[\"kendo.data.min\",\"kendo.editable.min\",\"kendo.selectable.min\"],e)}(function(){return function(e,t){var a=window.kendo,n=\"change\",i=\"cancel\",r=\"dataBound\",l=\"dataBinding\",o=a.ui.Widget,s=a.keys,d=\">*:not(.k-loading-mask)\",c=\"progress\",u=\"error\",m=\"k-state-focused\",f=\"k-state-selected\",p=\"k-edit-item\",g=\"edit\",h=\"remove\",_=\"save\",v=\"click\",b=\".kendoListView\",S=e.proxy,E=a._activeElement,w=a.ui.progress,k=a.data.DataSource,y=a.ui.DataBoundWidget.extend({init:function(t,n){var i=this;n=e.isArray(n)?{dataSource:n}:n,o.fn.init.call(i,t,n),n=i.options,i.wrapper=t=i.element,t[0].id&&(i._itemId=t[0].id+\"_lv_active\"),i._element(),i._dataSource(),i._templates(),i._navigatable(),i._selectable(),i._pageable(),i._crudHandlers(),i.options.autoBind&&i.dataSource.fetch(),a.notify(i)},events:[n,i,l,r,g,h,_],options:{name:\"ListView\",autoBind:!0,selectable:!1,navigatable:!1,template:\"\",altTemplate:\"\",editTemplate:\"\"},setOptions:function(e){o.fn.setOptions.call(this,e),this._templates(),this.selectable&&(this.selectable.destroy(),this.selectable=null),this._selectable()},_templates:function(){var e=this.options;this.template=a.template(e.template||\"\"),this.altTemplate=a.template(e.altTemplate||e.template),this.editTemplate=a.template(e.editTemplate||\"\")},_item:function(e){return this.element.children()[e]()},items:function(){return this.element.children()},dataItem:function(t){var n=a.attr(\"uid\"),i=e(t).closest(\"[\"+n+\"]\").attr(n);return this.dataSource.getByUid(i)},setDataSource:function(e){this.options.dataSource=e,this._dataSource(),this.options.autoBind&&e.fetch()},_unbindDataSource:function(){var e=this;e.dataSource.unbind(n,e._refreshHandler).unbind(c,e._progressHandler).unbind(u,e._errorHandler)},_dataSource:function(){var e=this;e.dataSource&&e._refreshHandler?e._unbindDataSource():(e._refreshHandler=S(e.refresh,e),e._progressHandler=S(e._progress,e),e._errorHandler=S(e._error,e)),e.dataSource=k.create(e.options.dataSource).bind(n,e._refreshHandler).bind(c,e._progressHandler).bind(u,e._errorHandler)},_progress:function(){w(this.element,!0)},_error:function(){w(this.element,!1)},_element:function(){this.element.addClass(\"k-widget k-listview\").attr(\"role\",\"listbox\")},refresh:function(e){var n,i,o,s,d,c=this,u=c.dataSource.view(),m=\"\",f=c.template,p=c.altTemplate,g=E();if(e=e||{},\"itemchange\"===e.action)return c._hasBindingTarget()||c.editable||(n=e.items[0],o=c.items().filter(\"[\"+a.attr(\"uid\")+\"=\"+n.uid+\"]\"),o.length>0&&(s=o.index(),c.angular(\"cleanup\",function(){return{elements:[o]}}),o.replaceWith(f(n)),o=c.items().eq(s),o.attr(a.attr(\"uid\"),n.uid),c.angular(\"compile\",function(){return{elements:[o],data:[{dataItem:n}]}}),c.trigger(\"itemChange\",{item:o,data:n}))),t;if(!c.trigger(l,{action:e.action||\"rebind\",items:e.items,index:e.index})){for(c._angularItems(\"cleanup\"),c._destroyEditable(),s=0,d=u.length;d>s;s++)m+=s%2?p(u[s]):f(u[s]);for(c.element.html(m),i=c.items(),s=0,d=u.length;d>s;s++)i.eq(s).attr(a.attr(\"uid\"),u[s].uid).attr(\"role\",\"option\").attr(\"aria-selected\",\"false\");c.element[0]===g&&c.options.navigatable&&c.current(i.eq(0)),c._angularItems(\"compile\"),c.trigger(r)}},_pageable:function(){var t,n,i=this,r=i.options.pageable;e.isPlainObject(r)&&(n=r.pagerId,t=e.extend({},r,{dataSource:i.dataSource,pagerId:null}),i.pager=new a.ui.Pager(e(\"#\"+n),t))},_selectable:function(){var e,i,r=this,l=r.options.selectable,o=r.options.navigatable;l&&(e=a.ui.Selectable.parseOptions(l).multiple,r.selectable=new a.ui.Selectable(r.element,{aria:!0,multiple:e,filter:d,change:function(){r.trigger(n)}}),o&&r.element.on(\"keydown\"+b,function(a){if(a.keyCode===s.SPACEBAR){if(i=r.current(),a.target==a.currentTarget&&a.preventDefault(),e)if(a.ctrlKey){if(i&&i.hasClass(f))return i.removeClass(f),t}else r.selectable.clear();else r.selectable.clear();r.selectable.value(i)}}))},current:function(e){var a=this,n=a.element,i=a._current,r=a._itemId;return e===t?i:(i&&i[0]&&(i[0].id===r&&i.removeAttr(\"id\"),i.removeClass(m),n.removeAttr(\"aria-activedescendant\")),e&&e[0]&&(r=e[0].id||r,a._scrollTo(e[0]),n.attr(\"aria-activedescendant\",r),e.addClass(m).attr(\"id\",r)),a._current=e,t)},_scrollTo:function(t){var a,n,i=this,r=!1,l=\"scroll\";\"auto\"==i.wrapper.css(\"overflow\")||i.wrapper.css(\"overflow\")==l?a=i.wrapper[0]:(a=window,r=!0),n=function(n,i){var o=r?e(t).offset()[n.toLowerCase()]:t[\"offset\"+n],s=t[\"client\"+i],d=e(a)[l+n](),c=e(a)[i.toLowerCase()]();o+s>d+c?e(a)[l+n](o+s-c):d>o&&e(a)[l+n](o)},n(\"Top\",\"Height\"),n(\"Left\",\"Width\")},_navigatable:function(){var t=this,n=t.options.navigatable,i=t.element,r=function(a){t.current(e(a.currentTarget)),e(a.target).is(\":button,a,:input,a>.k-icon,textarea\")||i.focus()};n&&(t._tabindex(),i.on(\"focus\"+b,function(){var e=t._current;e&&e.is(\":visible\")||(e=t._item(\"first\")),t.current(e)}).on(\"focusout\"+b,function(){t._current&&t._current.removeClass(m)}).on(\"keydown\"+b,function(n){var r,l,o=n.keyCode,d=t.current(),c=e(n.target),u=!c.is(\":button,textarea,a,a>.t-icon,input\"),m=c.is(\":text,:password\"),f=a.preventDefault,g=i.find(\".\"+p),h=E();if(!(!u&&!m&&s.ESC!=o||m&&s.ESC!=o&&s.ENTER!=o))if(s.UP===o||s.LEFT===o)d&&(d=d.prev()),t.current(d&&d[0]?d:t._item(\"last\")),f(n);else if(s.DOWN===o||s.RIGHT===o)d&&(d=d.next()),t.current(d&&d[0]?d:t._item(\"first\")),f(n);else if(s.PAGEUP===o)t.current(null),t.dataSource.page(t.dataSource.page()-1),f(n);else if(s.PAGEDOWN===o)t.current(null),t.dataSource.page(t.dataSource.page()+1),f(n);else if(s.HOME===o)t.current(t._item(\"first\")),f(n);else if(s.END===o)t.current(t._item(\"last\")),f(n);else if(s.ENTER===o)0!==g.length&&(u||m)?(r=t.items().index(g),h&&h.blur(),t.save(),l=function(){t.element.trigger(\"focus\"),t.current(t.items().eq(r))},t.one(\"dataBound\",l)):\"\"!==t.options.editTemplate&&t.edit(d);else if(s.ESC===o){if(g=i.find(\".\"+p),0===g.length)return;r=t.items().index(g),t.cancel(),t.element.trigger(\"focus\"),t.current(t.items().eq(r))}}),i.on(\"mousedown\"+b+\" touchstart\"+b,d,S(r,t)))},clearSelection:function(){var e=this;e.selectable.clear(),e.trigger(n)},select:function(a){var n=this,i=n.selectable;return a=e(a),a.length?(i.options.multiple||(i.clear(),a=a.first()),i.value(a),t):i.value()},_destroyEditable:function(){var e=this;e.editable&&(e.editable.destroy(),delete e.editable)},_modelFromElement:function(e){var t=e.attr(a.attr(\"uid\"));return this.dataSource.getByUid(t)},_closeEditable:function(){var e,t,n,i=this,r=i.editable,l=i.template;return r&&(r.element.index()%2&&(l=i.altTemplate),i.angular(\"cleanup\",function(){return{elements:[r.element]}}),e=i._modelFromElement(r.element),i._destroyEditable(),n=r.element.index(),r.element.replaceWith(l(e)),t=i.items().eq(n),t.attr(a.attr(\"uid\"),e.uid),i._hasBindingTarget()&&a.bind(t,e),i.angular(\"compile\",function(){return{elements:[t],data:[{dataItem:e}]}})),!0},edit:function(e){var t,n,i=this,r=i._modelFromElement(e),l=r.uid;i.cancel(),e=i.items().filter(\"[\"+a.attr(\"uid\")+\"=\"+l+\"]\"),n=e.index(),e.replaceWith(i.editTemplate(r)),t=i.items().eq(n).addClass(p).attr(a.attr(\"uid\"),r.uid),i.editable=t.kendoEditable({model:r,clearContainer:!1,errorTemplate:!1,target:i}).data(\"kendoEditable\"),i.trigger(g,{model:r,item:t})},save:function(){var e,t,a=this,n=a.editable;n&&(t=n.element,e=a._modelFromElement(t),n.end()&&!a.trigger(_,{model:e,item:t})&&(a._closeEditable(),a.dataSource.sync()))},remove:function(e){var t=this,a=t.dataSource,n=t._modelFromElement(e);t.editable&&(a.cancelChanges(t._modelFromElement(t.editable.element)),t._closeEditable()),t.trigger(h,{model:n,item:e})||(e.hide(),a.remove(n),a.sync())},add:function(){var e,t=this,a=t.dataSource,n=a.indexOf((a.view()||[])[0]);0>n&&(n=0),t.cancel(),e=a.insert(n,{}),t.edit(t.element.find(\"[data-uid='\"+e.uid+\"']\"))},cancel:function(){var e,t,a=this,n=a.dataSource;a.editable&&(e=a.editable.element,t=a._modelFromElement(e),a.trigger(i,{model:t,container:e})||(n.cancelChanges(t),a._closeEditable()))},_crudHandlers:function(){var t=this,n=v+b;t.element.on(n,\".k-edit-button\",function(n){var i=e(this).closest(\"[\"+a.attr(\"uid\")+\"]\");t.edit(i),n.preventDefault()}),t.element.on(n,\".k-delete-button\",function(n){var i=e(this).closest(\"[\"+a.attr(\"uid\")+\"]\");t.remove(i),n.preventDefault()}),t.element.on(n,\".k-update-button\",function(e){t.save(),e.preventDefault()}),t.element.on(n,\".k-cancel-button\",function(e){t.cancel(),e.preventDefault()})},destroy:function(){var e=this;o.fn.destroy.call(e),e._unbindDataSource(),e._destroyEditable(),e.element.off(b),e.pager&&e.pager.destroy(),a.destroy(e.element)}});a.ui.plugin(y)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,a){(a||t)()});\n//# sourceMappingURL=kendo.listview.min.js.map\n","import { ICalculatedFinancingData } from \"app2/src/records/CalculatedFinancing\";\nimport {\n  FinanceOptionRecord,\n  IFinanceOptionData,\n  fromJSON as financeOptionFromJSON,\n} from \"app2/src/records/FinanceOption\";\nimport { Record } from \"immutable\";\n\nexport const fromJSON = (json: Partial<IEstimateFinanceOptionData>): EstimateFinanceOptionRecord => {\n  const record: IEstimateFinanceOptionRecord = { ...(json as any) };\n\n  if (json.created_at) {\n    record.created_at = new Date(json.created_at as any as string);\n  }\n\n  if (json.updated_at) {\n    record.updated_at = new Date(json.updated_at as any as string);\n  }\n\n  // Only needed for angular\n  if (json.finance_option) {\n    json.finance_option = financeOptionFromJSON(json.finance_option);\n  }\n\n  return new EstimateFinanceOptionRecord(record);\n};\n\nexport const toJSON = (record: EstimateFinanceOptionRecord): IEstimateFinanceOptionData => {\n  return record.toJS();\n};\n\nexport const toCalculatedFinancing = (\n  financedAmount: number,\n  estimateFinanceOption: IEstimateFinanceOptionData,\n): ICalculatedFinancingData => {\n  return {\n    ...estimateFinanceOption,\n    financed_amount: financedAmount,\n    error: \"\",\n  };\n};\n\nexport interface IEstimateFinanceOptionData {\n  id: number;\n  finance_option_id: number;\n  estimate_id: number;\n  monthly_payment: number;\n  promo_payment: number;\n  amount: number;\n  finance_option: IFinanceOptionData;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IEstimateFinanceOptionRecord {\n  id: number;\n  finance_option_id: number;\n  estimate_id: number;\n  monthly_payment: number;\n  promo_payment: number;\n  amount: number;\n  finance_option: FinanceOptionRecord;\n  created_at: Date;\n  updated_at: Date;\n  _destroy: boolean;\n}\n\nexport const defaultEstimateFinanceOptionProps: IEstimateFinanceOptionRecord = {\n  id: 0,\n  finance_option_id: 0,\n  estimate_id: 0,\n  monthly_payment: 0,\n  promo_payment: 0,\n  amount: 0,\n  finance_option: null,\n  created_at: new Date(),\n  updated_at: new Date(),\n  _destroy: null,\n};\n\nexport class EstimateFinanceOptionRecord\n  extends Record(defaultEstimateFinanceOptionProps)\n  implements IEstimateFinanceOptionRecord {}\n\nexport const emptyEstimateFinanceOptionRecord = fromJSON({});\n","import { recordChanged } from \"app2/src/helpers/Record\";\nimport { PresentationRecord } from \"app2/src/records/Presentation\";\nimport { ids } from \"app2/src/selectors/pagination.selectors\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { RootState } from \"../reducers\";\n\nexport const presentationsById = (state: RootState) => state.getIn([\"presentations\", \"byId\"]);\nexport const presentation = (state: RootState, props: any) =>\n  state.getIn([\"presentations\", \"byId\", props.presentationId]);\nexport const lastSavedPresentation = (state: RootState, props: any) =>\n  state.getIn([\"presentations\", \"lastSavedById\", props.presentationId]);\nexport const currentPresentationId = (state: RootState, props?: any) =>\n  state.getIn([\"presentations\", \"currentPresentationId\"]);\n\nexport const presentationChanged = createSelector(\n  [presentation, lastSavedPresentation],\n  (presentation: PresentationRecord, lastSavedPresentation: PresentationRecord) => {\n    return recordChanged(presentation, lastSavedPresentation);\n  },\n);\n\nexport const presentationsSelectedIds = createSelector(\n  [\n    presentationsById,\n    (state: RootState, props: any) => ({\n      state,\n      props,\n    }),\n  ],\n  (presentationsById, stateProps: any): List<number> => {\n    const { state } = stateProps;\n    const presentationIds = ids(state, { modelName: \"presentation\" });\n    if (!presentationIds || presentationIds.size === 0) {\n      return List();\n    }\n\n    const presentations = presentationIds.map((presentationId: number) => presentationsById.get(presentationId));\n\n    return presentations\n      .filter((presentation: PresentationRecord) => {\n        return presentation.selected === true;\n      })\n      .map((presentation: PresentationRecord) => presentation.id);\n  },\n);\n\nexport const selectedChecked = createSelector(\n  [presentationsById, (_: RootState, props: any) => props],\n  (presentationsById, props: any): boolean => {\n    const { presentationIds } = props;\n    if (!presentationIds) {\n      return false;\n    }\n\n    const presentations = presentationIds.map((docId: number) => presentationsById.get(docId));\n\n    if (presentations.size === 0) {\n      return false;\n    }\n\n    return !presentations.find((presentation: PresentationRecord) => {\n      return presentation.selected === false;\n    });\n  },\n);\n\nexport const presentationsSelected = createSelector([presentationsSelectedIds], (presentationsSelectedIds): boolean => {\n  return presentationsSelectedIds.size > 0;\n});\n","import { authService, IAuthService } from \"app2/src/helpers/Auth.service\";\nimport * as config from \"react-global-configuration\";\nimport * as authActions from \"../reducers/auth.actions\";\n\nimport { useState, dispatch, StoreRegistry } from \"../storeRegistry\";\n\nconst getAuthService = () => {\n  return StoreRegistry.get<IAuthService>(\"authService\") || authService;\n};\n\nclass Fetcher {\n  public user_includes: string[] = [\"permissions\", \"org\", \"preferences\", \"settings\"];\n\n  public baseUrl: string;\n  public inRecovery = false;\n  public recoveryPromise: Promise<any>;\n\n  public get token(): string {\n    return useState().getIn([\"auth\", \"token\"]);\n  }\n\n  public get refreshToken(): string {\n    return useState().getIn([\"auth\", \"refreshToken\"]);\n  }\n\n  public get accessUid(): string {\n    return useState().getIn([\"auth\", \"accessUid\"]) || getAuthService().getAccessUid();\n  }\n\n  constructor(baseUrl?: string) {\n    this.baseUrl = baseUrl || config.get(\"BASE_URL\");\n  }\n\n  public fetch(url: string, params = {}, options = null, recovered = false): Promise<Response> {\n    if (this.inRecovery) {\n      return this.recoveryPromise.then(() => {\n        return this.fetch(url, params, options, true);\n      });\n    }\n\n    options = this.headers(this.credentials(options, url));\n    if (options.method && (options.method === \"POST\" || options.method === \"PATCH\")) {\n      if (options.formData) {\n        options.body = params;\n        options.headers[\"Accept\"] = \"application/json\";\n        delete options.headers[\"Content-Type\"];\n        delete options.formData;\n      } else {\n        options.body = JSON.stringify(params);\n      }\n      url = this.urlOptions(url);\n    } else {\n      url = this.urlOptions(url, params);\n    }\n\n    return fetch(url, options).then((response) => this.retryStatus(response, url, options, recovered));\n  }\n\n  public get<T>(url: string, params: any = {}, options: any = {}): Promise<T> {\n    return this.fetch(url, params, options).then(this.json);\n  }\n\n  public patch<T>(url: string, params: any = {}, options: any = {}): Promise<T> {\n    options = options || {};\n    options.method = \"PATCH\";\n    return this.fetch(url, params, options).then(this.json);\n  }\n\n  public post<T>(url: string, params: any = {}, options: any = {}): Promise<T> {\n    options = options || {};\n    options.method = \"POST\";\n    return this.fetch(url, params, options).then(this.json);\n  }\n\n  public delete<T>(url: string, params: any = {}, options: any = {}): Promise<T> {\n    options = options || {};\n    options.method = \"DELETE\";\n    return this.fetch(url, params, options).then(this.json);\n  }\n\n  public urlOptions(url: string, params = {}): string {\n    let joined: URL;\n    if (url.indexOf(\"http\") !== 0) {\n      joined = new URL(url, this.baseUrl);\n    } else {\n      joined = new URL(url);\n    }\n    if (Object.keys(params).length > 0) {\n      const searchParams = new URLSearchParams();\n\n      for (const k in params) {\n        const v = params[k];\n\n        if (Array.isArray(v)) {\n          v.forEach((q) => {\n            searchParams.append(k, q);\n          });\n        } else {\n          searchParams.append(k, v);\n        }\n      }\n\n      joined.search = searchParams.toString();\n    }\n\n    return joined.toString();\n  }\n\n  /**\n   * This uses the URL API under the hood but essentially disabled the relative functionality.\n   * You can't combine \"api/v1/users\" with \"../orgs\" to get \"api/v1orgs\" like you can with raw URL\n   * @param url base URL to be joined too\n   * @param args list of parts to be attached to base URL\n   */\n  public joinUrls(url: string, ...args: string[]): string {\n    let joined = this.urlOptions(url);\n\n    if (joined.slice(-1) !== \"/\") {\n      joined = `${joined}/`;\n    }\n\n    args.forEach((arg, idx) => {\n      joined = new URL(arg, joined).toString();\n\n      if (joined.slice(-1) !== \"/\" && idx !== args.length - 1) {\n        joined = `${joined}/`;\n      }\n    });\n\n    return joined;\n  }\n\n  public headers(options) {\n    options = options || {};\n    options.headers = options.headers || {};\n    options.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\n    if (options.method && (options.method === \"PATCH\" || options.method === \"POST\")) {\n      options.headers[\"Content-Type\"] = \"application/json\";\n    }\n\n    return options;\n  }\n\n  public credentials(options, url) {\n    options = options || {};\n\n    if (this.token) {\n      options.headers = options.headers || {};\n      const authHeader = url.startsWith(config.get(\"STORAGE_URL\")) ? \"occ-authorization\" : \"Authorization\";\n      options.headers[authHeader] = \"Bearer \" + this.token;\n    }\n\n    if (this.accessUid) {\n      options.headers = options.headers || {};\n      options.headers[\"x-rsf-auth\"] = this.accessUid;\n    }\n\n    return options;\n  }\n\n  public standardStatus(response: Response) {\n    if (response.ok) {\n      return response;\n    }\n\n    const contentType = response.headers.get(\"content-type\");\n    let promise;\n    if (contentType && contentType.indexOf(\"application/json\") !== -1) {\n      promise = response.json();\n    } else {\n      promise = response.text();\n    }\n\n    return promise.then((value: any) => {\n      return Promise.reject({ status: response.status, statusText: response.statusText, data: value });\n    });\n  }\n\n  public retryStatus(response: Response, url, options, recovered) {\n    if (response.ok) {\n      return response;\n    } else if (response.status === 419 && !recovered) {\n      if (!this.recoveryPromise) {\n        this.recoveryPromise = this.retry();\n      }\n      return this.recoveryPromise.then(() => {\n        return this.fetch(url, {}, options, true);\n      });\n    } else {\n      return this.standardStatus(response);\n    }\n  }\n\n  public json(response: Response): Promise<any> {\n    const contentType = response.headers.get(\"content-type\");\n    if (contentType && contentType.indexOf(\"application/json\") !== -1) {\n      return response.json();\n    } else {\n      return response.text();\n    }\n  }\n\n  private async retry() {\n    try {\n      this.inRecovery = true;\n      const response = await getAuthService().refreshToken(this.refreshToken);\n      this.inRecovery = false;\n      this.recoveryPromise = null;\n      return response;\n    } catch (e) {\n      console.error(\"Fetcher Retry: \", e);\n      this.inRecovery = false;\n      dispatch(authActions.Actions.setRefreshTokenExpired(true));\n    }\n  }\n}\n\nexport const fetcher = new Fetcher();\nexport const analyticsFetcher = new Fetcher(config.get(\"RSF_ANALYTICS_URL\"));\n(window as any).rsfFetcher = fetcher;\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { measurement, lastSavedMeasurement } from \"app2/src/selectors/measurement.selectors\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { recordChanged } from \"app2/src/helpers/Record\";\n\n/**\n * Looks to the currentJob in redux and gets the measurement_id from there\n *\n * @params {RootState} state RootState\n * @params {{}} options NONE\n * @returns {number} measurementId\n */\nexport const currentMeasurementId = createSelector(\n  [currentJobId, (state, _) => state],\n  (jobId: number, state: RootState) => {\n    return state.getIn([\"jobs\", \"byId\", jobId, \"measurement_id\"]);\n  },\n);\n\n/**\n * Looks to the currentJob in redux to get the measurement_id then loads that measurement from the store\n *\n * @params {RootState} state RootState\n * @params {{}} options NONE\n * @returns {MeasurementRecord} measurement\n */\nexport const currentMeasurement = createSelector(\n  [currentMeasurementId, (state, _) => state],\n  (measurementId: number, state: RootState) => measurement(state, { measurementId }),\n);\n\n/**\n * Looks to the currentJob in redux to get the measurement_id then loads that measurement from the store\n *\n * @params {RootState} state RootState\n * @params {{}} options NONE\n * @returns {MeasurementRecord} measurement\n */\nexport const currentLastSavedMeasurement = createSelector(\n  [currentMeasurementId, (state, _) => state],\n  (measurementId: number, state: RootState) => lastSavedMeasurement(state, { measurementId }),\n);\n\n/**\n * Looks to the currentJob in redux to get the measurement_id then loads that measurement from the store\n *\n * @params {RootState} state RootState\n * @params {{}} options NONE\n * @returns {MeasurementRecord} measurement\n */\nexport const measurementChanged = (state: RootState, props: any): boolean =>\n  recordChanged(currentMeasurement(state, props), currentLastSavedMeasurement(state, props));\n","import { RootState } from \"../reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { ImageRecord, IImageData } from \"../records/Image\";\nimport { ids } from \"app2/src/selectors/pagination.selectors\";\nimport { recordChanged } from \"app2/src/helpers/Record\";\n\nexport const image = (state: RootState, props: any) => state.getIn([\"images\", \"byId\", props.imageId]);\nexport const lastSavedImage = (state: RootState, props: any) => state.getIn([\"images\", \"lastSavedById\", props.imageId]);\nexport const imagesById = (state: RootState) => state.getIn([\"images\", \"byId\"]);\nexport const lastSavedImagesById = (state: RootState) => state.getIn([\"images\", \"lastSavedById\"]);\nexport const currentImageId = (state: RootState, props?: any) => state.getIn([\"images\", \"currentImageId\"]);\nexport const showInfo = (state: RootState, props?: any) => state.getIn([\"images\", \"showInfo\"]);\n\n/**\n * Loads image records of ids passed in\n *\n * @param {RootState} state The RootState\n * @param {{ imagesIds: List<number>, fullEstimate: boolean }} options\n * @returns {ImageRecord} ImageRecord\n */\nexport const images = createSelector(\n  [imagesById, (_: RootState, props: any) => props],\n  (imagesById: Map<number, ImageRecord>, props: any): List<ImageRecord> => {\n    return imagesProcess(imagesById, props);\n  },\n);\n\n/**\n * Fetches image records of ids passed in (lastSaved version)\n *\n * @param {RootState} state The RootState\n * @param {{ imagesIds: List<number>, fullEstimate: boolean }} options\n * @returns {ImageRecord} ImageRecord\n */\nexport const lastSavedImages = createSelector(\n  [lastSavedImagesById, (_: RootState, props: any) => props],\n  (imagesById: Map<number, ImageRecord>, props: any): List<ImageRecord> => {\n    return imagesProcess(imagesById, props);\n  },\n);\n\n/**\n * Checks to see if an image record has been edited since last loaded from the server\n *\n * @param {RootState} state The RootState\n * @param {{ imagesId: number }} options\n * @returns boolean\n */\nexport const imageChanged = createSelector(\n  [image, lastSavedImage],\n  (image: ImageRecord, lastSavedImage: ImageRecord) => {\n    return recordChanged(image, lastSavedImage);\n  },\n);\n\n/**\n * Fetches imageIds that have a booleanName property === true\n *\n * @param {RootState} state The RootState\n * @param {{ booleanName: string }} options\n * @returns List<number>\n */\nexport const imagesBooleanIds = createSelector(\n  [\n    imagesById,\n    (state: RootState, props: any) => ({\n      state,\n      props,\n    }),\n  ],\n  (imagesById, stateProps: any): List<number> => {\n    const { state } = stateProps;\n    const { props } = stateProps;\n    const { booleanName } = props;\n    const imageIds = ids(state, { modelName: \"image\" });\n    if (!imageIds) {\n      return List();\n    }\n\n    return imageIds.filter((imageId: number) => {\n      return imagesById.getIn([imageId, booleanName]) === true;\n    });\n  },\n);\n\n/**\n * Returns true if at least one booleanName property === true\n *\n * @param {RootState} state The RootState\n * @param {{ booleanName: string }} options\n * @returns boolean\n */\nexport const imagesBoolean = createSelector([imagesBooleanIds], (imagesBooleanIds): boolean => {\n  return imagesBooleanIds.size > 0;\n});\n\n/**\n * Returns true if all the images with booleanName property === true\n *\n * @param {RootState} state The RootState\n * @param {{ booleanName: string }} options\n * @returns boolean\n */\nexport const allImagesBoolean = createSelector(\n  [\n    imagesBooleanIds,\n    (state: RootState, props: any) => ({\n      state,\n      props,\n    }),\n  ],\n  (imagesBooleanIds, stateProps): boolean => {\n    const imageIds = ids(stateProps.state, { modelName: \"image\" });\n    return imagesBooleanIds.size === imageIds.size;\n  },\n);\n\nconst imagesProcess = (imagesById, props) => {\n  const { imageIds } = props;\n  let { fullEstimate } = props;\n  if (_.isUndefined(fullEstimate)) {\n    fullEstimate = false;\n  }\n  return imageIds\n    .map((imageId: number) => {\n      return imagesById.get(imageId);\n    })\n    .filter((image: ImageRecord) => {\n      return fullEstimate || !image._destroy;\n    })\n    .toList();\n};\n\n/**\n * Returns json of all imageIds passed in\n *\n * @param {RootState} state The RootState\n * @param {{ imagesIds: List<number>, fullEstimate: boolean }} options\n * @returns List<number>\n */\nexport const toImagesJson = createSelector(\n  [images, (state, props) => ({ state, props })],\n  (images: List<ImageRecord>, stateProps: any): IImageData[] => {\n    return images\n      .map((image: ImageRecord) => {\n        const imageData = image.toJS();\n\n        if (!imageData._destroy) {\n          delete imageData._destroy;\n        }\n\n        delete imageData.loading;\n        delete imageData.selected;\n        delete imageData.displayInProposal;\n        delete imageData.displayInAgreement;\n        delete imageData.file_queue;\n\n        return imageData as IImageData;\n      })\n      .toArray();\n  },\n);\n","import { ActionsUnion, createAction, handleErrors } from \"./Utils\";\nimport { IAccessData, IUserData } from \"app2/src/records/UserRecord\";\nimport { RootState, ThunkResult } from \".\";\nimport { RootDispatchType } from \"../store\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as userActions from \"app2/src/reducers/user.actions\";\nimport { QueryParamsRecord } from \"../records/Page\";\nimport { getAccess, loadAccesses, updateAccess } from \"../api/access.service\";\nimport { List } from \"immutable\";\nimport { currentOrgId } from \"../selectors/org.selectors\";\nimport { selectById } from \"app2/src/selectors/access.selectors\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport const SET_ACCESS = \"@access/SET_ACCESS\";\nexport const RESET_ACCESS = \"@access/RESET_ACCESS\";\nexport const SET_ACCESS_ACL = \"@access/SET_ACCESS_ACL\";\nexport const RECEIVE_ACCESSES = \"@access/RECEIVE_ACCESSES\";\nexport const UPDATE_FORM_ACL = \"@access/UPDATE_FORM_ACL\";\nexport const UPDATE_FORM_RECORD = \"@access/UPDATE_FORM_RECORD\";\n\nexport const Actions = {\n  setAccess: (id: number, access: IAccessData) => createAction(SET_ACCESS, { id, access }),\n  resetAccess: (id: number) => createAction(RESET_ACCESS, { id }),\n  setAccessAcl: (id: number, acl: { [key: string]: string[] }) => createAction(SET_ACCESS_ACL, { id, acl }),\n  receiveAccesses: (accesses: IAccessData[]) => createAction(RECEIVE_ACCESSES, { accesses }),\n  updateFormAcl: (id: number, resource: string, permission: string, value: boolean) =>\n    createAction(UPDATE_FORM_ACL, { id, resource, permission, value }),\n  updateFormRecord: (id: number, path: string, value: any) => createAction(UPDATE_FORM_RECORD, { id, path, value }),\n};\n\nexport const AsyncActions = {\n  loadAccesses: (userId: number, orgName: string, queryParams: QueryParamsRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(paginationActions.Actions.fetchPage(\"accesses\", queryParams));\n\n        const response = await loadAccesses(userId, orgName, queryParams);\n        const pageData = {\n          ids: List(_.pluck(response.accesses, \"id\")),\n          pagination: response.meta.pagination,\n        };\n\n        dispatch(Actions.receiveAccesses(response.accesses));\n        dispatch(\n          userActions.Actions.addAccesses(\n            userId,\n            response.accesses.map((a) => a.id),\n          ),\n        );\n        dispatch(paginationActions.Actions.receivePage(\"accesses\", queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response, dispatch);\n        dispatch(paginationActions.Actions.receivePageError(\"accesses\", queryParams, errors));\n      }\n    };\n  },\n  getAccess: (userId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const orgId = currentOrgId(getState());\n        const { access } = await getAccess(userId, orgId);\n        dispatch(Actions.setAccess(access.id, access));\n        dispatch(userActions.Actions.addAccesses(userId, [access.id]));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  updateAccess: (accessId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const config = selectById(getState(), { accessId }).get(\"config\");\n        const { access } = await updateAccess(accessId, config);\n        dispatch(Actions.setAccess(access.id, access));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Commission values saved\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IAccessData } from \"../records/UserRecord\";\nimport { IMetaPaginationData } from \"../records/MetaPagination\";\nimport { QueryParamsRecord } from \"../records/Page\";\nimport { listParams } from \"./Api\";\n\nexport interface IAccessIndexResponse {\n  accesses: IAccessData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nexport interface IAccessShowResponse {\n  access: IAccessData;\n  error?: string;\n}\n\nexport const loadAccesses = (\n  userId: number,\n  orgName: string,\n  queryParams: QueryParamsRecord,\n): Promise<IAccessIndexResponse> => {\n  const actionUrl = `api/v1/users/${userId}/accesses`;\n  const params = listParams(queryParams);\n  params.org_name = orgName;\n\n  if (queryParams.getIn([\"parameters\", \"includes\"])) {\n    params[\"include[]\"] = queryParams.getIn([\"parameters\", \"includes\"]).toJS();\n  }\n\n  return fetcher.get<IAccessIndexResponse>(actionUrl, params);\n};\n\nexport const getAccess = (user_id: number, org_id: number): Promise<IAccessShowResponse> => {\n  const actionUrl = `api/v1/users/${user_id}/accesses/by_org_id`;\n  return fetcher.get<IAccessShowResponse>(actionUrl, { user_id, org_id, include: [\"config\"] });\n};\n\nexport const updateAccess = (access_id: number, config: any): Promise<IAccessShowResponse> => {\n  const actionUrl = `api/v1/accesses/${access_id}`;\n  return fetcher.patch<IAccessShowResponse>(actionUrl, { config });\n};\n","import * as estimateLineItemOptionActions from \"./estimateLineItemOption.actions\";\nimport { Map, Record, List } from \"immutable\";\nimport { EstimateLineItemOptionRecord, fromJSON } from \"../records/EstimateLineItemOption\";\nimport { RootState, RootActions } from \".\";\n\nexport const EstimateLineItemOptionStateRecord = Record({\n  byId: Map<number, EstimateLineItemOptionRecord>(),\n  lastSavedById: Map<number, EstimateLineItemOptionRecord>(),\n  unsavedId: -1,\n});\n\nexport const initialState = EstimateLineItemOptionStateRecord();\n\nexport type EstimateState = typeof initialState;\n\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  const model = \"estimateLineItemOptions\";\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  let estimateLineItemOption: EstimateLineItemOptionRecord;\n  switch (action.type) {\n    case estimateLineItemOptionActions.RECEIVE_ESTIMATE_LINE_ITEM_OPTION:\n      estimateLineItemOption = fromJSON({ ...action.payload });\n\n      return state\n        .setIn([model, \"byId\", estimateLineItemOption.id], estimateLineItemOption)\n        .setIn([model, \"lastSavedById\", estimateLineItemOption.id], estimateLineItemOption);\n\n    case estimateLineItemOptionActions.DUPLICATE_ESTIMATE_LINE_ITEM_OPTIONS:\n      const lineItem = state.getIn([\"estimateLineItems\", \"byId\", action.payload.lineItemId]);\n\n      let optionIds = List();\n      let unsavedId = state.getIn([model, \"unsavedId\"]);\n      action.payload.optionIds.map((optId: number) => {\n        let option = state.getIn([model, \"byId\", optId]);\n        option = option.set(\"id\", unsavedId);\n        optionIds = optionIds.push(unsavedId);\n        state = state.setIn([model, \"byId\", option.id], option);\n        unsavedId -= 1;\n      });\n\n      return state\n        .setIn([\"estimateLineItems\", \"byId\", lineItem.id, \"option_ids\"], optionIds)\n        .setIn([model, \"unsavedId\"], unsavedId);\n\n    default:\n      return state;\n  }\n};\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.view.min\",[\"kendo.core.min\",\"kendo.binder.min\",\"kendo.fx.min\"],e)}(function(){return function(e,n){function t(e){if(!e)return{};var n=e.match(v)||[];return{type:n[1],direction:n[3],reverse:\"reverse\"===n[5]}}var i=window.kendo,r=i.Observable,o=\"SCRIPT\",a=\"init\",s=\"show\",c=\"hide\",d=\"transitionStart\",h=\"transitionEnd\",f=\"attach\",l=\"detach\",u=/unrecognized expression/,m=r.extend({init:function(e,n){var t=this;n=n||{},r.fn.init.call(t),t.content=e,t.id=i.guid(),t.tagName=n.tagName||\"div\",t.model=n.model,t._wrap=n.wrap!==!1,this._evalTemplate=n.evalTemplate||!1,t._fragments={},t.bind([a,s,c,d,h],n)},render:function(n){var t=this,r=!t.element;return r&&(t.element=t._createElement()),n&&e(n).append(t.element),r&&(i.bind(t.element,t.model),t.trigger(a)),n&&(t._eachFragment(f),t.trigger(s)),t.element},clone:function(){return new g(this)},triggerBeforeShow:function(){return!0},triggerBeforeHide:function(){return!0},showStart:function(){this.element.css(\"display\",\"\")},showEnd:function(){},hideEnd:function(){this.hide()},beforeTransition:function(e){this.trigger(d,{type:e})},afterTransition:function(e){this.trigger(h,{type:e})},hide:function(){this._eachFragment(l),this.element.detach(),this.trigger(c)},destroy:function(){var e=this.element;e&&(i.unbind(e),i.destroy(e),e.remove())},fragments:function(n){e.extend(this._fragments,n)},_eachFragment:function(e){for(var n in this._fragments)this._fragments[n][e](this,n)},_createElement:function(){var n,t,r,a=this,s=\"<\"+a.tagName+\" />\";try{t=e(document.getElementById(a.content)||a.content),t[0].tagName===o&&(t=t.html())}catch(c){u.test(c.message)&&(t=a.content)}return\"string\"==typeof t?(t=t.replace(/^\\s+|\\s+$/g,\"\"),a._evalTemplate&&(t=i.template(t)(a.model||{})),n=e(s).append(t),a._wrap||(n=n.contents())):(n=t,a._evalTemplate&&(r=e(i.template(e(\"<div />\").append(n.clone(!0)).html())(a.model||{})),e.contains(document,n[0])&&n.replaceWith(r),n=r),a._wrap&&(n=n.wrapAll(s).parent())),n}}),g=i.Class.extend({init:function(n){e.extend(this,{element:n.element.clone(!0),transition:n.transition,id:n.id}),n.element.parent().append(this.element)},hideEnd:function(){this.element.remove()},beforeTransition:e.noop,afterTransition:e.noop}),w=m.extend({init:function(e,n){m.fn.init.call(this,e,n),this.containers={}},container:function(e){var n=this.containers[e];return n||(n=this._createContainer(e),this.containers[e]=n),n},showIn:function(e,n,t){this.container(e).show(n,t)},_createContainer:function(e){var n,t=this.render(),i=t.find(e);if(!i.length&&t.is(e)){if(!t.is(e))throw Error(\"can't find a container with the specified \"+e+\" selector\");i=t}return n=new _(i),n.bind(\"accepted\",function(e){e.view.render(i)}),n}}),p=m.extend({attach:function(e,n){e.element.find(n).replaceWith(this.render())},detach:function(){}}),v=/^(\\w+)(:(\\w+))?( (\\w+))?$/,_=r.extend({init:function(e){r.fn.init.call(this),this.container=e,this.history=[],this.view=null,this.running=!1},after:function(){this.running=!1,this.trigger(\"complete\",{view:this.view}),this.trigger(\"after\")},end:function(){this.view.showEnd(),this.previous.hideEnd(),this.after()},show:function(e,n,r){if(!e.triggerBeforeShow()||this.view&&!this.view.triggerBeforeHide())return this.trigger(\"after\"),!1;r=r||e.id;var o=this,a=e===o.view?e.clone():o.view,s=o.history,c=s[s.length-2]||{},d=c.id===r,h=n||(d?s[s.length-1].transition:e.transition),f=t(h);return o.running&&o.effect.stop(),\"none\"===h&&(h=null),o.trigger(\"accepted\",{view:e}),o.view=e,o.previous=a,o.running=!0,d?s.pop():s.push({id:r,transition:h}),a?(h&&i.effects.enabled?(e.element.addClass(\"k-fx-hidden\"),e.showStart(),d&&!n&&(f.reverse=!f.reverse),o.effect=i.fx(e.element).replace(a.element,f.type).beforeTransition(function(){e.beforeTransition(\"show\"),a.beforeTransition(\"hide\")}).afterTransition(function(){e.afterTransition(\"show\"),a.afterTransition(\"hide\")}).direction(f.direction).setReverse(f.reverse),o.effect.run().then(function(){o.end()})):(e.showStart(),o.end()),!0):(e.showStart(),e.showEnd(),o.after(),!0)}});i.ViewContainer=_,i.Fragment=p,i.Layout=w,i.View=m,i.ViewClone=g}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,n,t){(t||n)()});\n//# sourceMappingURL=kendo.view.min.js.map\n","import { Record } from \"immutable\";\nimport { roundToDecimals } from \"app2/src/helpers/Number\";\n\nexport interface IBaseRecord {\n  id: number | string;\n  loading: boolean;\n}\nexport interface IEditPayload<T> {\n  id: number;\n  name: string;\n  value: T;\n}\n\nexport const fetch = <T extends IBaseRecord>(state: Record<any>, model: string, record: Record<T>): Record<any> => {\n  const id = record.get(\"id\");\n  if (state.getIn([model, \"byId\", id])) {\n    return state.setIn([model, \"byId\", id, \"loading\"], true);\n  }\n  return state.setIn([model, \"byId\", id], record.setIn([\"loading\"], true));\n};\n\nexport const receive = <T extends IBaseRecord>(state: Record<any>, model: string, record: Record<T>): Record<any> => {\n  const id = record.get(\"id\");\n  record = record.set(\"loading\", false);\n  return state.setIn([model, \"byId\", id], record).setIn([model, \"lastSavedById\", id], record);\n};\n\nexport const reset = (state: Record<any>, model: string, id: number | string): Record<any> => {\n  const lastSaved = state.getIn([model, \"lastSavedById\", id]);\n\n  if (!lastSaved) return state.deleteIn([model, \"byId\", id]);\n  return state.setIn([model, \"byId\", id], lastSaved);\n};\n\nexport const loaded = (state: Record<any>, model: string, id: number | string): Record<any> => {\n  return state.setIn([model, \"byId\", id, \"loading\"], false);\n};\n\n/**\n * Made for usage in FinalForm/Redux based forms.\n *\n * Takes the default values for a record and uses the typeof the value to determine\n * if the value found at the name should be coerced to a number from a form.\n *\n * @param {{[key: string]: Record<any>}} defaultProps - the default props for the Record expected at the `name` keypath.\n * @param {string} name - period (.) seperated keypaths: e.g. job.user.first_name\n * @param {string} value - the value to be coerced\n * @returns  {string|number} - either the value or the value coerced into a {number}\n */\nexport const parseUpdateForm = (\n  defaultProps: { [key: string]: Record<any> },\n  name: string,\n  value: string,\n): number | string => {\n  const nameArray = name.split(\".\");\n  const lastName = nameArray[nameArray.length - 1];\n\n  if (typeof defaultProps[lastName] === \"number\") {\n    value = roundToDecimals(+value || 0, -2);\n  }\n\n  return value;\n};\n","import * as config from \"react-global-configuration\";\nimport { dispatch } from \"../storeRegistry\";\nimport * as authActions from \"../reducers/auth.actions\";\nimport { OktaAuth, TokenResponse, UserClaims } from \"@okta/okta-auth-js\";\nimport { loadByAltId, includes as userIncludes } from \"../api/user.service\";\nimport { getPayload } from \"../services/jwtToken.service\";\nimport { Dispatch } from \"app2/src/helpers/Analytics\";\nimport { createAuth0Client, Auth0Client, User as OidcUser } from \"@auth0/auth0-spa-js\";\n\nexport type TokenType = \"occ\" | \"dabella\";\n\nconst auth0RefreshToken = \"auth0 refresh token\";\n\nclass AuthService implements IAuthService {\n  private _userManager: Promise<Auth0Client>;\n  private _oktaUserManager: OktaAuth;\n  private _auth0Updater: NodeJS.Timeout | null = null;\n\n  public get userManager() {\n    return this._userManager;\n  }\n\n  public get oktaUserManager() {\n    return this._oktaUserManager;\n  }\n\n  constructor() {\n    this.setupAuth0Client();\n\n    this._oktaUserManager = new OktaAuth({\n      issuer: `https://${config.get(\"DABELLA_OKTA_DOMAIN\")}`,\n      clientId: config.get(\"DABELLA_OKTA_CLIENT_ID\"),\n      redirectUri: config.get(\"DABELLA_OKTA_REDIRECT_URL\"),\n      postLogoutRedirectUri: config.get(\"DABELLA_OKTA_LOGOUT_URL\"),\n      scopes: [\"email\", \"profile\", \"openid\", \"offline_access\", \"groups\", \"address\", \"phone\"],\n      pkce: true,\n      services: {\n        autoRenew: false,\n        autoRemove: false,\n      },\n      tokenManager: {\n        autoRenew: true,\n        expireEarlySeconds: 120,\n        storage: \"localStorage\",\n        responseType: [\"id_token\", \"token\", \"refresh_token\"],\n      },\n    });\n    (window as any).currentOktaUserManager = this._oktaUserManager;\n  }\n\n  public async setupAuth0Client() {\n    try {\n      this._userManager = createAuth0Client({\n        domain: config.get(\"OIDC_DOMAIN\"),\n        clientId: config.get(\"OIDC_CLIENT_ID\"),\n        useRefreshTokens: true,\n        cacheLocation: \"localstorage\",\n        authorizationParams: {\n          redirect_uri: config.get(\"OIDC_REDIRECT_URL\"),\n          audience: config.get(\"OIDC_AUDIENCE\"),\n          scope: \"openid profile email offline_access\",\n        },\n      });\n\n      (window as any).currentUserManager = await this._userManager;\n\n      if (this.hasToken() && (this.getIdp() === \"occ\" || this.tokenType(this.getToken()) === \"occ\")) {\n        this.setIdp(\"occ\");\n        this.setupOccManualTokenRefresh();\n      }\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  public hasToken(): boolean {\n    const user = localStorage.getItem(\"ngStorage-currentUser\");\n    if (!user || user === \"null\" || user === \"undefined\") {\n      return false;\n    }\n\n    try {\n      const currentUser = JSON.parse(user);\n      return !_.isEmpty(currentUser.token);\n    } catch (e) {\n      return false;\n    }\n  }\n\n  public getToken() {\n    if (!this.hasToken()) {\n      return \"\";\n    }\n\n    const user = localStorage.getItem(\"ngStorage-currentUser\");\n\n    const currentUser = JSON.parse(user);\n    return currentUser.token;\n  }\n\n  public getCurrentUser(): { id: number; email: string; token: string } {\n    const user = localStorage.getItem(\"ngStorage-currentUser\");\n    if (user === null || user === \"null\") {\n      return {} as any;\n    }\n\n    return JSON.parse(user);\n  }\n\n  public setCurrentUser(id: number, email: string, token: string): void {\n    const currentUser = {\n      id: id,\n      email: email,\n      token: token,\n    };\n\n    localStorage.setItem(\"ngStorage-currentUser\", JSON.stringify(currentUser));\n  }\n\n  public hasRefreshToken() {\n    const refresh = localStorage.getItem(\"ngStorage-refresh\");\n    if (!refresh || refresh === \"null\" || refresh === \"undefined\") {\n      return \"\";\n    }\n\n    try {\n      const refreshObj = JSON.parse(refresh);\n      return !_.isEmpty(refreshObj.token);\n    } catch (e) {\n      return false;\n    }\n  }\n\n  public getRefreshToken() {\n    if (!this.hasRefreshToken()) {\n      return \"\";\n    }\n\n    const refresh = localStorage.getItem(\"ngStorage-refresh\");\n    const refreshObj = JSON.parse(refresh);\n    return refreshObj.token;\n  }\n\n  public setRefreshToken(token: string): void {\n    const refresh = {\n      token: token,\n    };\n\n    localStorage.setItem(\"ngStorage-refresh\", JSON.stringify(refresh));\n  }\n\n  public hasAccessUid() {\n    const rsfAuth = sessionStorage.getItem(\"rsf-auth\");\n    if (!rsfAuth || rsfAuth === \"null\" || rsfAuth === \"undefined\") {\n      return \"\";\n    }\n\n    try {\n      const rsfAuthObj = JSON.parse(rsfAuth);\n      return !_.isEmpty(rsfAuthObj.accessUid);\n    } catch (e) {\n      return false;\n    }\n  }\n\n  public getAccessUid() {\n    if (!this.hasAccessUid()) {\n      return \"\";\n    }\n\n    const rsfAuth = sessionStorage.getItem(\"rsf-auth\");\n    const rsfAuthObj = JSON.parse(rsfAuth);\n    return rsfAuthObj.accessUid;\n  }\n\n  public setAccessUid(accessUid: string): void {\n    let rsfAuthJson = sessionStorage.getItem(\"rsf-auth\");\n    if (!rsfAuthJson || rsfAuthJson === \"null\" || rsfAuthJson === \"undefined\") {\n      rsfAuthJson = \"{}\";\n    }\n\n    const rsfAuth = JSON.parse(rsfAuthJson);\n\n    rsfAuth.accessUid = accessUid;\n\n    sessionStorage.setItem(\"rsf-auth\", JSON.stringify(rsfAuth));\n  }\n\n  public getIdp(): TokenType {\n    let rsfAuthJson = localStorage.getItem(\"rsf-auth\");\n    if (!rsfAuthJson || rsfAuthJson === \"\" || rsfAuthJson === \"null\" || rsfAuthJson === \"undefined\") {\n      rsfAuthJson = \"{}\";\n    }\n\n    let rsfAuth;\n    try {\n      rsfAuth = JSON.parse(rsfAuthJson);\n    } catch (_) {\n      rsfAuth = {};\n    }\n\n    return rsfAuth.idp || \"occ\";\n  }\n\n  public setIdp(idp: TokenType): void {\n    let rsfAuthJson = localStorage.getItem(\"rsf-auth\");\n    if (!rsfAuthJson || rsfAuthJson === \"null\" || rsfAuthJson === \"undefined\") {\n      rsfAuthJson = \"{}\";\n    }\n\n    const rsfAuth = JSON.parse(rsfAuthJson);\n\n    rsfAuth.idp = idp;\n\n    localStorage.setItem(\"rsf-auth\", JSON.stringify(rsfAuth));\n  }\n\n  public clearRsfAuth(): void {\n    if (this.getIdp() === \"dabella\") {\n      sessionStorage.setItem(\"rsf-auth\", JSON.stringify({ idp: \"dabella\" }));\n    } else {\n      sessionStorage.setItem(\"rsf-auth\", null);\n    }\n  }\n\n  public clearRefreshToken(): void {\n    localStorage.setItem(\"ngStorage-refresh\", null);\n  }\n\n  public clearUser(): void {\n    localStorage.setItem(\"ngStorage-currentUser\", null);\n  }\n\n  public getLoginRoute() {\n    switch (this.getIdp()) {\n      case \"dabella\":\n        return \"root.dabellalogin\";\n      case \"occ\":\n      default:\n        return \"root.ssologin\";\n    }\n  }\n\n  public async logout(refreshToken: string): Promise<void> {\n    const authType = this.tokenType(refreshToken);\n    Dispatch.dispatch({\n      action: \"logout\",\n      category: \"User\",\n      user: authService.getCurrentUser().id,\n      authType,\n    });\n\n    authService.clearRefreshToken();\n    authService.clearRsfAuth();\n    authService.clearUser();\n\n    const userManager = await this.userManager;\n\n    switch (authType) {\n      case \"dabella\":\n        await this._oktaUserManager.signOut();\n        this._oktaUserManager.stop();\n        this._oktaUserManager.tokenManager.clear();\n        return;\n      case \"occ\":\n      default:\n        await userManager.logout();\n        return;\n    }\n  }\n\n  /**\n   * Parent method for refreshing a token. Takes into account the type of authentication for this deployment\n   * and then delegates the refreshing to the proper, auth specific, method.\n   *\n   * @param token refresh token to use to get a new auth token\n   * @returns Promise<void>\n   */\n  public async refreshToken(token: string, forceRefresh?: boolean): Promise<any> {\n    try {\n      return await this._refreshTokenInner(token, forceRefresh);\n    } catch (e) {\n      console.warn(\"Refresh Token Error (attempt 1): \", e);\n\n      await new Promise((resolve) => setTimeout(resolve, 500));\n\n      try {\n        return await this._refreshTokenInner(token, forceRefresh);\n      } catch (retryError) {\n        Dispatch.dispatch({\n          action: \"failed refresh\",\n          category: \"User\",\n          authType: this.tokenType(token),\n        });\n\n        console.error(\"Refresh Token Error (attempt 2, logging out): \", retryError);\n        await this.logout(this.getRefreshToken());\n        window.location.href = config.get(\"APP_URL\");\n      }\n    }\n  }\n\n  /**\n   * This sets a timeout to refresh the token before it expires.\n   * It calculates the time to refresh based on the token's expiration time,\n   * and sets a buffer to ensure the token is refreshed before it expires.\n   * If the token is not available, it defaults to refreshing in 1 hour.\n   */\n  public setupOccManualTokenRefresh() {\n    if (this._auth0Updater) {\n      clearInterval(this._auth0Updater);\n      this._auth0Updater = null;\n    }\n\n    const token = this.getToken(); // JWT string\n    let refreshInMs = 60 * 60 * 1000; // default to 1 hour\n\n    if (token) {\n      const payload = getPayload(token);\n      const expiresAt = payload.exp * 1000;\n      const now = Date.now();\n      refreshInMs = Math.max(expiresAt - now, 0);\n      const bufferMs = Math.min(Math.floor(refreshInMs * 0.05), 60 * 1000);\n      refreshInMs = Math.max(refreshInMs - bufferMs, 0);\n    }\n\n    this._auth0Updater = setTimeout(() => {\n      this.refreshToken(this.getRefreshToken(), false);\n    }, refreshInMs);\n  }\n\n  public async oktaLogin(loginState: any): Promise<boolean> {\n    Dispatch.dispatch({\n      action: \"redirect login\",\n      category: \"User\",\n      authType: \"dabella\",\n    });\n    this.setIdp(\"dabella\");\n    sessionStorage.setItem(\"LoginAppState\", JSON.stringify(loginState));\n    this._oktaUserManager.tokenManager.clear();\n    this._oktaUserManager.token.getWithRedirect({\n      responseType: \"code\",\n      scopes: [\"offline_access\", \"openid\", \"profile\", \"email\"],\n    });\n    return false;\n  }\n\n  public async loginWithRedirect(loginState: any): Promise<boolean> {\n    const userManager = await this.userManager;\n    await userManager.loginWithRedirect({ authorizationParams: { prompt: \"none\" } });\n    sessionStorage.setItem(\"LoginAppState\", JSON.stringify(loginState));\n    return true;\n  }\n\n  public async oidcLogin(loginState: any): Promise<boolean> {\n    let user: OidcUser;\n    let token: string;\n    const userManager = await this.userManager;\n\n    try {\n      token = await userManager.getTokenSilently();\n      user = await userManager.getUser();\n      user.token = token;\n    } catch (e) {\n      console.error(\"SilentLogin Attempt: \", e);\n\n      sessionStorage.setItem(\"LoginAppState\", JSON.stringify(loginState));\n      userManager.loginWithRedirect();\n      return false;\n    }\n\n    const result = await this.setupOidcUser(user);\n\n    this.setupOccManualTokenRefresh();\n\n    return result;\n  }\n\n  public async setupOidcUser(user: OidcUser): Promise<boolean> {\n    const id = user.sub;\n\n    const rsfUser = await loadByAltId(\"idp_id\", id, userIncludes, user.token);\n\n    dispatch(authActions.AsyncActions.fromData(user.token, rsfUser, auth0RefreshToken));\n    this.setIdp(\"occ\");\n\n    return true;\n  }\n\n  public async handleOktaRedirect() {\n    let res: TokenResponse;\n    try {\n      res = await this.oktaUserManager.token.parseFromUrl();\n    } catch (e) {\n      console.error(\"Handle Okta Redirect Error: \", e);\n    }\n\n    if (!res) {\n      console.error(\"No Okta Response: \", res);\n      return;\n    }\n    this.setIdp(\"dabella\");\n\n    this.oktaUserManager.tokenManager.add(\"idToken\", res.tokens.idToken);\n    this.oktaUserManager.tokenManager.add(\"accessToken\", res.tokens.accessToken);\n    this.oktaUserManager.tokenManager.add(\"refreshToken\", res.tokens.refreshToken);\n\n    dispatch(\n      authActions.Actions.setTokens({\n        token: res.tokens.accessToken.accessToken,\n        refreshToken: res.tokens.idToken.idToken,\n      }),\n    );\n    const userInfo: UserClaims = await this.oktaUserManager.token.getUserInfo(\n      res.tokens.accessToken,\n      res.tokens.idToken,\n    );\n\n    this.oktaUserManager.tokenManager.on(\"renewed\", (key: any, newToken: any, oldToken: any) => {\n      if (key === \"accessToken\") {\n        dispatch(authActions.Actions.setToken(newToken.accessToken));\n      }\n    });\n\n    this.oktaUserManager.start();\n\n    let appState = sessionStorage.getItem(\"LoginAppState\") || undefined;\n    sessionStorage.removeItem(\"LoginAppState\");\n\n    if (appState) {\n      appState = JSON.parse(appState);\n    }\n\n    let id: string = userInfo.uid as any;\n    if (!id) {\n      id = userInfo.sub;\n    }\n    const rsfUser = await loadByAltId(\"dabella_id\", id, userIncludes, res.tokens.idToken.idToken);\n\n    return {\n      appState: appState,\n      user: rsfUser,\n      userInfo: userInfo,\n      token: res.tokens.accessToken.accessToken,\n      idToken: res.tokens.idToken.idToken,\n    };\n  }\n\n  public tokenType(token: string): TokenType {\n    if (token === auth0RefreshToken) {\n      return \"occ\";\n    }\n\n    const payload = getPayload(token);\n\n    if (payload.iss && payload.iss.indexOf(\"dabella\") >= 0) {\n      return \"dabella\";\n    }\n\n    return \"occ\";\n  }\n\n  public initialize(): void {\n    if (!this.hasToken()) {\n      return;\n    }\n\n    switch (this.tokenType(this.getToken())) {\n      case \"occ\":\n        return;\n      case \"dabella\":\n        return;\n      default:\n        return;\n    }\n  }\n\n  private async _refreshTokenInner(token: string, forceRefresh?: boolean): Promise<any> {\n    const authType = this.tokenType(token);\n    switch (authType) {\n      case \"dabella\": {\n        if (forceRefresh) {\n          await this._oktaUserManager.revokeAccessToken();\n        }\n        const res: string = await this._oktaUserManager.getOrRenewAccessToken();\n\n        if (res === null) {\n          throw new Error(\"Failed to refresh Okta token\");\n        }\n        Dispatch.dispatch({\n          action: \"success refresh\",\n          category: \"User\",\n          authType,\n          user: this.getCurrentUser().id,\n        });\n        dispatch(authActions.Actions.setToken(res));\n        const userInfo = this.getCurrentUser();\n        this.setCurrentUser(userInfo.id, userInfo.email, res);\n\n        this._oktaUserManager.stop();\n        this._oktaUserManager.start();\n\n        return { token: res };\n      }\n      case \"occ\":\n      default: {\n        const userManager = await this.userManager;\n        const occToken = await userManager.getTokenSilently({\n          ignoreCache: forceRefresh,\n        });\n        this.setRefreshToken(auth0RefreshToken);\n        const user = this.getCurrentUser();\n        user.token = occToken;\n        this.setCurrentUser(user.id, user.email, occToken);\n        await dispatch(authActions.Actions.setTokens({ token: occToken, refreshToken: auth0RefreshToken }));\n        this.setupOccManualTokenRefresh();\n        return { token: occToken };\n      }\n    }\n  }\n}\n\nexport interface IAuthService {\n  hasToken(): boolean;\n  getToken(): string;\n\n  hasRefreshToken(): boolean | \"\";\n  getRefreshToken(): string;\n  setRefreshToken(token: string): void;\n\n  hasAccessUid(): boolean | \"\";\n  getAccessUid(): string;\n  setAccessUid(accessUid: string): void;\n\n  refreshToken(token: string, forceRefresh?: boolean): Promise<any>;\n\n  setCurrentUser(id: number, email: string, token: string): void;\n  getCurrentUser(): { id: number; email: string; token: string };\n\n  logout(refreshToken: string): Promise<void>;\n\n  initialize(): void;\n}\n\nexport const authService = new AuthService();\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { Map, List } from \"immutable\";\nimport { FencingRecord } from \"app2/src/records/measurements/Fencing\";\nimport { FenceRecord } from \"app2/src/records/measurements/Fence\";\nimport { fencesById, dirtyTree as fenceDirtyTree } from \"./fence.selectors\";\nimport { segmentsById } from \"./segment.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const rootKey = \"measurementsFencings\";\n\n/**\n * Fetches the byId map for FencingRecord\n *\n * @param {RootState} state\n * @returns {Map<number, FencingRecord>}\n */\nexport const fencingsById = (state: RootState) => state.getIn([rootKey, \"byId\"]);\n\n/**\n * Fetches the lastSavedById map for FencingRecord\n *\n * @param {RootState} state\n * @returns {Map<number, FencingRecord>}\n */\nexport const fencingsLastSavedById = (state: RootState) => state.getIn([rootKey, \"lastSavedById\"]);\n\n/**\n * Takes a measurementId and returns the associated fenceId\n * @param {RootState} state\n * @param {{measurementId: number }} props\n * @returns {number} fencingId\n */\nexport const measurementIdFencingId = (state: RootState, props: { measurementId: number }) =>\n  state.getIn([rootKey, \"byMeasurementId\", props.measurementId]);\n\n/**\n * Takes a fencingId and returns the FencingRecord from the byId map\n * @param {RootState} state\n * @param {{fencingId: number}} props\n * @returns FencingRecord\n */\nexport const fencing = (state: RootState, props: { fencingId: number }) =>\n  state.getIn([rootKey, \"byId\", props.fencingId]);\n\n/**\n * Takes a measurementId and returns the normalize FencingRecords (fenceIds, not fences)\n *\n * @param {RootState} state\n * @param {{ measurementId: number }} props\n * @returns {FencingRecord} fencing\n */\nexport const measurementFencing = createSelector([measurementIdFencingId, fencingsById], (byMeasurementId, byId) => {\n  return byId.get(byMeasurementId);\n});\n\n/**\n * Takes a fencingId and returns the List of fenceIds associated with that FencingRecord\n *\n * @param {RootState} state\n * @param {{fencingId: number}} props\n * @returns {List<number>} fenceIds\n */\nexport const fencingFenceIds = (state: RootState, props: { fencingId: number }) =>\n  state.getIn([rootKey, \"byId\", props.fencingId, \"fenceIds\"], List());\n\n/**\n * Takes a fencingId and returns the List of FenceRecords associated with that FencingRecord\n * Pulls the FenceRecords from the normalized state\n *\n * @param {RootState} state\n * @param {{fencingId: number}} props\n * @returns {List<FenceRecord>} fences\n */\nexport const fencingFences = createSelector(\n  fencingFenceIds,\n  fencesById,\n  (fenceIds: List<number>, fById: Map<number, FenceRecord>) => {\n    return fenceIds.map((id) => fById.get(id));\n  },\n);\n\n/**\n * Takes a measurementId and builds the full Fencing Tree (denormalized)\n * Fencing -> Fences -> Segments\n *\n * @param {RootState} state\n * @param {{measurementId: number}} params\n * @returns {FencingRecord} fencing - fully hydrated down the tree\n */\nexport const measurementIdFullFencing = createSelector(\n  [measurementFencing, fencesById, segmentsById],\n  (fencing, fencesById, segmentsById) => {\n    if (isNullOrUndefined(fencing)) {\n      return fencing;\n    }\n    return fencing.update(\"fences\", () => {\n      let fences = List();\n      fencing.fenceIds.forEach((id) => {\n        let fence = fencesById.get(id);\n\n        fence = fence.update(\"segments\", () => {\n          let segments = List();\n\n          fence.segmentIds.forEach((sId) => {\n            segments = segments.push(segmentsById.get(sId));\n          });\n\n          return segments;\n        });\n\n        fences = fences.push(fence);\n      });\n      return fences;\n    }) as FencingRecord;\n  },\n);\n\n/**\n * Takes a fencingId and gets the FenceRecord from the lastSavedBy Map\n *\n * @param {RootState} state\n * @param {{fencingId: number}} params\n * @returns {FencingRecord} fence\n */\nexport const fencingLastSavedById = createSelector(\n  fencingsLastSavedById,\n  (_, props: { fencingId: number }) => props,\n  (byId, props) => {\n    return byId.get(props.fencingId);\n  },\n);\n\n/**\n * Takes a fencingId and checks to see if the FencingRecord is dirty\n * This does NOT look down the tree to Fences/Segments.\n *\n * @param {RootState} state\n * @param {{ fencingId: number }} params\n * @returns {boolean} dirty\n */\nexport const dirty = createSelector(\n  fencing,\n  fencingLastSavedById,\n  (fencing: FencingRecord, lastSaved: FencingRecord) => {\n    if (!fencing) return false;\n\n    return !fencing.equals(lastSaved);\n  },\n);\n\n/**\n * Takes a fencingId and checks to see if the FencingRecord, or it's tree, is dirty\n * This DOES look down the tree to Fences/Segments and anything dirty returns true\n *\n * @param {RootState} state\n * @param {{ fencingId: number }} params\n * @returns {boolean} dirty\n */\nexport const dirtyTree = createSelector(\n  dirty,\n  fencingFenceIds,\n  (state: RootState, _) => ({ state }),\n  (dirty: boolean, fenceIds: List<number>, stateProps: { state: RootState }) => {\n    if (dirty) return dirty;\n\n    if (fenceIds.size <= 0) return false;\n\n    const fenceDirty = fenceIds.every((fenceId) => !fenceDirtyTree(stateProps.state, { fenceId }));\n\n    return !fenceDirty;\n  },\n);\n\n/**\n * Takes a measurementId and checks to see if the associated FencingRecord, or it's tree, is dirty\n * This DOES look down the tree to Fences/Segments and anything dirty returns true\n *\n * @param {RootState} state\n * @param {{ fencingId: number }} params\n * @returns {boolean} dirty\n */\nexport const measurementFencingDirtyTree = createSelector(\n  measurementIdFencingId,\n  (state, _) => ({ state }),\n  (fencingId: number, stateProps: { state: RootState }) => {\n    return dirtyTree(stateProps.state, { fencingId });\n  },\n);\n","import { ThunkResult } from \".\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { getEventResultReasons } from \"../api/eventResultReason.service\";\nimport { IEventResultReasonData } from \"../records/EventResultReason\";\nimport { RootDispatchType } from \"../store\";\n\nimport { ActionsUnion, createAction } from \"./Utils\";\n\nexport const RECEIVE_EVENT_RESULT_REASON = \"@eventResults/RECEIVE_EVENT_RESULT_REASON\";\nexport const RECEIVE_EVENT_RESULT_REASONS = \"@eventResults/RECEIVE_EVENT_RESULT_REASONS\";\n\nexport const Actions = {\n  receiveEventResultReason: (orgId: number, reason: IEventResultReasonData) =>\n    createAction(RECEIVE_EVENT_RESULT_REASON, { orgId, reason }),\n  receiveEventResultReasons: (orgId: number, reasons: IEventResultReasonData[]) =>\n    createAction(RECEIVE_EVENT_RESULT_REASONS, { orgId, reasons }),\n};\n\nexport const AsyncActions = {\n  getEventResultReasons: (orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        const { result_reasons } = await getEventResultReasons(orgId);\n        dispatch(Actions.receiveEventResultReasons(orgId, result_reasons));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IEventResultReasonData } from \"../records/EventResultReason\";\n\nexport const getEventResultReasons = (orgId: number): Promise<{ result_reasons: IEventResultReasonData[] }> => {\n  return fetcher.get(`api/v1/orgs/${orgId}/events/result_reasons`);\n};\n","import { RootState, RootActions } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { PaymentTermTemplateRecord } from \"app2/src/records/PaymentTermTemplate\";\nimport { Map, List } from \"immutable\";\n\nconst paymentTermTemplatesById = (state: RootState) =>\n  state.getIn([\"paymentTermTemplates\", \"paymentTermTemplatesById\"]);\n\nexport const paymentTermTemplate = (state: RootState, props: any) => paymentTermTemplatesById(state).get(props.id);\n\nconst orgPaymentTermTemplateIds = (state: RootState, props: any) =>\n  state.getIn([\"paymentTermTemplates\", \"paymentTermTemplatesByOrgId\", parseInt(props.orgId), \"paymentTermTemplates\"]);\n\nexport const getOrgPaymentTermTemplates = createSelector(\n  [paymentTermTemplatesById, orgPaymentTermTemplateIds],\n  (byId: Map<number, PaymentTermTemplateRecord>, paymentTermTemplates: List<number>) => {\n    if (!paymentTermTemplates) {\n      return List();\n    }\n\n    const interim = paymentTermTemplates.map((id) => byId.get(id)).sortBy((d) => d.sort_order);\n    return interim;\n  },\n);\n","import { baseCleanProps } from \"app2/src/api/Api\";\nimport { fetcher } from \"../helpers/Fetcher\";\nimport { IValidationData, ValidationRecord } from \"../records/Validation\";\n\ninterface IValidationIndexResponse {\n  validations: IValidationData[];\n}\n\ninterface IValidationResponse {\n  validation: IValidationData;\n}\n\nclass ValidationService {\n  public orgUrl = \"api/v1/orgs/:id/validations\";\n\n  public loadByOrg(orgId: number): Promise<IValidationIndexResponse> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n\n    return fetcher.get<IValidationIndexResponse>(actionUrl);\n  }\n\n  public create(orgId: number, validation: ValidationRecord): Promise<IValidationResponse> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n    const validationData = cleanProps(validation);\n\n    return fetcher.post<IValidationResponse>(actionUrl, validationData);\n  }\n\n  public update(validation: ValidationRecord): Promise<IValidationResponse> {\n    const actionUrl = fetcher.joinUrls(\n      this.orgUrl.replace(\":id\", validation.org_id.toString()),\n      validation.id.toString(),\n    );\n    const validationData = cleanProps(validation);\n\n    return fetcher.patch<IValidationResponse>(actionUrl, validationData);\n  }\n\n  public archive(validation: ValidationRecord): Promise<any> {\n    const actionUrl = fetcher.joinUrls(\n      this.orgUrl.replace(\":id\", validation.org_id.toString()),\n      validation.id.toString(),\n    );\n\n    return fetcher.delete(actionUrl);\n  }\n}\n\nexport const validationService = new ValidationService();\n\n/**\n * ToJSON while removing fields that shouldn't go back to the server.\n * @param record - Estimate Record to be transformed\n */\nexport const cleanProps = (validation: ValidationRecord) => {\n  const json = baseCleanProps(validation.toJS() as any as IValidationData);\n\n  return json;\n};\n","import { ActionsUnion, createAction } from \"app2/src/reducers/Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { IValidationData } from \"app2/src/records/Validation\";\nimport { validationService } from \"app2/src/api/validation.service\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport const RECEIVE_VALIDATION = \"@validations/RECEIVE_VALIDATION\";\nexport const FETCH_ORG_VALIDATIONS = \"@validations/FETCH_ORG_VALIDATIONS\";\nexport const RECEIVE_ORG_VALIDATIONS = \"@validations/RECEIVE_ORG_VALIDATIONS\";\nexport const ORG_VALIDATIONS_LOADED = \"@validations/RECEIVE_VALIDATION_ERROR\";\n\nexport const Actions = {\n  receiveValidation: (validation: Partial<IValidationData>) => createAction(RECEIVE_VALIDATION, { validation }),\n  fetchValidations: (orgId: number) => createAction(FETCH_ORG_VALIDATIONS, { orgId }),\n  receiveValidations: (orgId: number, validations: Partial<IValidationData>[]) =>\n    createAction(RECEIVE_ORG_VALIDATIONS, { orgId, validations }),\n  validationsLoaded: (orgId: number) => createAction(ORG_VALIDATIONS_LOADED, { orgId }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  listValidations: (orgId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchValidations(orgId));\n\n      try {\n        const response = await validationService.loadByOrg(orgId);\n        dispatch(Actions.receiveValidations(orgId, response.validations));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.validationsLoaded(orgId));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { ActionsUnion, createAction } from \"app2/src/reducers/Utils\";\nimport { FenceRecord, IFenceData } from \"app2/src/records/measurements/Fence\";\nimport { ThunkResult, RootState } from \"app2/src/reducers\";\nimport * as fencingActions from \"app2/src/reducers/measurements/fencing.actions\";\nimport { fenceFencingId } from \"app2/src/selectors/measurements/fence.selectors\";\nimport { RootDispatchType } from \"app2/src/store\";\n\nexport const RECEIVE_FENCE = \"@measurements_fences/RECEIVE_FENCE\";\nexport const SET_FENCE = \"@measurements_fences/SET_FENCE\";\nexport const RESET_FENCE = \"@measurements_fences/RESET_FENCE\";\nexport const DELETE_FENCE = \"@measurements_fences/DELETE_FENCE\";\nexport const UPDATE_TOTALS = \"@measurements_fences/UPDATE_TOTALS\";\n\nexport const Actions = {\n  receiveFence: (fence: Partial<IFenceData>) => createAction(RECEIVE_FENCE, { fence }),\n  setFence: (fence: FenceRecord) => createAction(SET_FENCE, { fence }),\n  resetFence: (fenceId: number) => createAction(RESET_FENCE, { fenceId }),\n  deleteFence: (fenceId: number, cascade = true) => createAction(DELETE_FENCE, { fenceId, cascade }),\n  updateTotals: (fenceId: number) => createAction(UPDATE_TOTALS, { fenceId }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nexport const AsyncActions = {\n  updateTotals: (fenceId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      dispatch(Actions.updateTotals(fenceId));\n      dispatch(fencingActions.Actions.updateTotals(fenceFencingId(getState(), { fenceId })));\n    };\n  },\n};\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.popup.min\",[\"kendo.core.min\"],e)}(function(){return function(e,t){function o(t,o){return t&&o?t===o||e.contains(t,o):!1}var i=window.kendo,n=i.ui,s=n.Widget,r=i.support,a=i.getOffset,l=\"open\",p=\"close\",d=\"deactivate\",c=\"activate\",f=\"center\",u=\"left\",h=\"right\",g=\"top\",m=\"bottom\",w=\"absolute\",v=\"hidden\",_=\"body\",k=\"location\",y=\"position\",z=\"visible\",b=\"effects\",C=\"k-state-active\",x=\"k-state-border\",T=/k-state-border-(\\w+)/,P=\".k-picker-wrap, .k-dropdown-wrap, .k-link\",E=\"down\",S=e(document.documentElement),H=e(window),W=\"scroll\",O=r.transitions.css,R=O+\"transform\",I=e.extend,A=\".kendoPopup\",D=[\"font-size\",\"font-family\",\"font-stretch\",\"font-style\",\"font-weight\",\"line-height\"],L=s.extend({init:function(t,o){var n,a=this;o=o||{},o.isRtl&&(o.origin=o.origin||m+\" \"+h,o.position=o.position||g+\" \"+h),s.fn.init.call(a,t,o),t=a.element,o=a.options,a.collisions=o.collision?o.collision.split(\" \"):[],a.downEvent=i.applyEventMap(E,i.guid()),1===a.collisions.length&&a.collisions.push(a.collisions[0]),n=e(a.options.anchor).closest(\".k-popup,.k-group\").filter(\":not([class^=km-])\"),o.appendTo=e(e(o.appendTo)[0]||n[0]||_),a.element.hide().addClass(\"k-popup k-group k-reset\").toggleClass(\"k-rtl\",!!o.isRtl).css({position:w}).appendTo(o.appendTo).on(\"mouseenter\"+A,function(){a._hovered=!0}).on(\"mouseleave\"+A,function(){a._hovered=!1}),a.wrapper=e(),o.animation===!1&&(o.animation={open:{effects:{}},close:{hide:!0,effects:{}}}),I(o.animation.open,{complete:function(){a.wrapper.css({overflow:z}),a._activated=!0,a._trigger(c)}}),I(o.animation.close,{complete:function(){a._animationClose()}}),a._mousedownProxy=function(e){a._mousedown(e)},a._resizeProxy=r.mobileOS.android?function(e){setTimeout(function(){a._resize(e)},600)}:function(e){a._resize(e)},o.toggleTarget&&e(o.toggleTarget).on(o.toggleEvent+A,e.proxy(a.toggle,a))},events:[l,c,p,d],options:{name:\"Popup\",toggleEvent:\"click\",origin:m+\" \"+u,position:g+\" \"+u,anchor:_,appendTo:null,collision:\"flip fit\",viewport:window,copyAnchorStyles:!0,autosize:!1,modal:!1,adjustSize:{width:0,height:0},animation:{open:{effects:\"slideIn:down\",transition:!0,duration:200},close:{duration:100,hide:!0}}},_animationClose:function(){var e=this,t=e.wrapper.data(k);e.wrapper.hide(),t&&e.wrapper.css(t),e.options.anchor!=_&&e._hideDirClass(),e._closing=!1,e._trigger(d)},destroy:function(){var t,o=this,n=o.options,r=o.element.off(A);s.fn.destroy.call(o),n.toggleTarget&&e(n.toggleTarget).off(A),n.modal||(S.unbind(o.downEvent,o._mousedownProxy),o._toggleResize(!1)),i.destroy(o.element.children()),r.removeData(),n.appendTo[0]===document.body&&(t=r.parent(\".k-animation-container\"),t[0]?t.remove():r.remove())},open:function(t,o){var n,s,a=this,p={isFixed:!isNaN(parseInt(o,10)),x:t,y:o},d=a.element,c=a.options,f=e(c.anchor),u=d[0]&&d.hasClass(\"km-widget\");if(!a.visible()){if(c.copyAnchorStyles&&(u&&\"font-size\"==D[0]&&D.shift(),d.css(i.getComputedStyles(f[0],D))),d.data(\"animating\")||a._trigger(l))return;a._activated=!1,c.modal||(S.unbind(a.downEvent,a._mousedownProxy).bind(a.downEvent,a._mousedownProxy),a._toggleResize(!1),a._toggleResize(!0)),a.wrapper=s=i.wrap(d,c.autosize).css({overflow:v,display:\"block\",position:w}),r.mobileOS.android&&s.css(R,\"translatez(0)\"),s.css(y),e(c.appendTo)[0]==document.body&&s.css(g,\"-10000px\"),a.flipped=a._position(p),n=a._openAnimation(),c.anchor!=_&&a._showDirClass(n),d.data(b,n.effects).kendoStop(!0).kendoAnimate(n)}},_openAnimation:function(){var e=I(!0,{},this.options.animation.open);return e.effects=i.parseEffects(e.effects,this.flipped),e},_hideDirClass:function(){var t=e(this.options.anchor),o=((t.attr(\"class\")||\"\").match(T)||[\"\",\"down\"])[1],n=x+\"-\"+o;t.removeClass(n).children(P).removeClass(C).removeClass(n),this.element.removeClass(x+\"-\"+i.directions[o].reverse)},_showDirClass:function(t){var o=t.effects.slideIn?t.effects.slideIn.direction:\"down\",n=x+\"-\"+o;e(this.options.anchor).addClass(n).children(P).addClass(C).addClass(n),this.element.addClass(x+\"-\"+i.directions[o].reverse)},position:function(){this.visible()&&(this.flipped=this._position())},toggle:function(){var e=this;e[e.visible()?p:l]()},visible:function(){return this.element.is(\":\"+z)},close:function(o){var n,s,r,a,l=this,d=l.options;if(l.visible()){if(n=l.wrapper[0]?l.wrapper:i.wrap(l.element).hide(),l._toggleResize(!1),l._closing||l._trigger(p))return l._toggleResize(!0),t;l.element.find(\".k-popup\").each(function(){var t=e(this),i=t.data(\"kendoPopup\");i&&i.close(o)}),S.unbind(l.downEvent,l._mousedownProxy),o?s={hide:!0,effects:{}}:(s=I(!0,{},d.animation.close),r=l.element.data(b),a=s.effects,!a&&!i.size(a)&&r&&i.size(r)&&(s.effects=r,s.reverse=!0),l._closing=!0),l.element.kendoStop(!0),n.css({overflow:v}),l.element.kendoAnimate(s),o&&l._animationClose()}},_trigger:function(e){return this.trigger(e,{type:e})},_resize:function(e){var t=this;-1!==r.resize.indexOf(e.type)?(clearTimeout(t._resizeTimeout),t._resizeTimeout=setTimeout(function(){t._position(),t._resizeTimeout=null},50)):(!t._hovered||t._activated&&t.element.hasClass(\"k-list-container\"))&&t.close()},_toggleResize:function(e){var t=e?\"on\":\"off\",o=r.resize;r.mobileOS.ios||r.mobileOS.android||(o+=\" \"+W),this._scrollableParents()[t](W,this._resizeProxy),H[t](o,this._resizeProxy)},_mousedown:function(t){var n=this,s=n.element[0],r=n.options,a=e(r.anchor)[0],l=r.toggleTarget,p=i.eventTarget(t),d=e(p).closest(\".k-popup\"),c=d.parent().parent(\".km-shim\").length;d=d[0],!c&&d&&d!==n.element[0]||\"popover\"!==e(t.target).closest(\"a\").data(\"rel\")&&(o(s,p)||o(a,p)||l&&o(e(l)[0],p)||n.close())},_fit:function(e,t,o){var i=0;return e+t>o&&(i=o-(e+t)),0>e&&(i=-e),i},_flip:function(e,t,o,i,n,s,r){var a=0;return r=r||t,s!==n&&s!==f&&n!==f&&(e+r>i&&(a+=-(o+t)),0>e+a&&(a+=o+t)),a},_scrollableParents:function(){return e(this.options.anchor).parentsUntil(\"body\").filter(function(e,t){return i.isScrollable(t)})},_position:function(t){var o,n,s,l,p,d,c,f,u,h,g,m,v,_,z,b,C=this,x=C.element,T=C.wrapper,P=C.options,E=e(P.viewport),S=r.zoomLevel(),H=!!(E[0]==window&&window.innerWidth&&1.02>=S),W=e(P.anchor),O=P.origin.toLowerCase().split(\" \"),R=P.position.toLowerCase().split(\" \"),A=C.collisions,D=10002,L=0,j=document.documentElement;if(p=P.viewport===window?{top:window.pageYOffset||document.documentElement.scrollTop||0,left:window.pageXOffset||document.documentElement.scrollLeft||0}:E.offset(),H?(d=window.innerWidth,c=window.innerHeight):(d=E.width(),c=E.height()),H&&j.scrollHeight-j.clientHeight>0&&(d-=i.support.scrollbar()),o=W.parents().filter(T.siblings()),o[0])if(s=Math.max(+o.css(\"zIndex\"),0))D=s+10;else for(n=W.parentsUntil(o),l=n.length;l>L;L++)s=+e(n[L]).css(\"zIndex\"),s&&s>D&&(D=s+10);return T.css(\"zIndex\",D),T.css(t&&t.isFixed?{left:t.x,top:t.y}:C._align(O,R)),f=a(T,y,W[0]===T.offsetParent()[0]),u=a(T),h=W.offsetParent().parent(\".k-animation-container,.k-popup,.k-group\"),h.length&&(f=a(T,y,!0),u=a(T)),u.top-=p.top,u.left-=p.left,C.wrapper.data(k)||T.data(k,I({},f)),g=I({},u),m=I({},f),v=P.adjustSize,\"fit\"===A[0]&&(m.top+=C._fit(g.top,T.outerHeight()+v.height,c/S)),\"fit\"===A[1]&&(m.left+=C._fit(g.left,T.outerWidth()+v.width,d/S)),_=I({},m),z=x.outerHeight(),b=T.outerHeight(),!T.height()&&z&&(b+=z),\"flip\"===A[0]&&(m.top+=C._flip(g.top,z,W.outerHeight(),c/S,O[0],R[0],b)),\"flip\"===A[1]&&(m.left+=C._flip(g.left,x.outerWidth(),W.outerWidth(),d/S,O[1],R[1],T.outerWidth())),x.css(y,w),T.css(m),m.left!=_.left||m.top!=_.top},_align:function(t,o){var i,n=this,s=n.wrapper,r=e(n.options.anchor),l=t[0],p=t[1],d=o[0],c=o[1],u=a(r),g=e(n.options.appendTo),w=s.outerWidth(),v=s.outerHeight(),_=r.outerWidth(),k=r.outerHeight(),y=u.top,z=u.left,b=Math.round;return g[0]!=document.body&&(i=a(g),y-=i.top,z-=i.left),l===m&&(y+=k),l===f&&(y+=b(k/2)),d===m&&(y-=v),d===f&&(y-=b(v/2)),p===h&&(z+=_),p===f&&(z+=b(_/2)),c===h&&(z-=w),c===f&&(z-=b(w/2)),{top:y,left:z}}});n.plugin(L)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,o){(o||t)()});\n//# sourceMappingURL=kendo.popup.min.js.map\n","import { createSelector } from \"reselect\";\nimport { RootState } from \"app2/src/reducers\";\nimport { FenceSegmentRecord } from \"app2/src/records/measurements/Segment\";\n\nexport const rootKey = \"measurementsSegments\";\n\n/**\n * Fetches the segments 'byId' map\n *\n * @param {RootState} state\n * @returns {Map<number, FenceSegmentRecord>}\n */\nexport const segmentsById = (state: RootState) => state.getIn([rootKey, \"byId\"]);\n\n/**\n * Fetches the segments 'lastSavedById' map\n *\n * @param {RootState} state\n * @returns {Map<number, FenceSegmentRecord>}\n */\nexport const segmentsLastSavedById = (state: RootState) => state.getIn([rootKey, \"lastSavedById\"]);\n\n/**\n * Takes a segmentId and finds the associated segment in the byId map\n *\n * @param {RootState} state\n * @param {{ segmentId: number }} params\n * @returns {Map<number, FenceSegmentRecord>}\n */\nexport const segment = (state: RootState, props: { segmentId: number }) =>\n  state.getIn([rootKey, \"byId\", props.segmentId]);\n\n/**\n * Takes a segmentId and finds the associated segment in the lastSavedById map\n *\n * @param {RootState} state\n * @param {{ segmentId: number }} params\n * @returns {Map<number, FenceSegmentRecord>}\n */\nexport const segmentLastSaved = (state: RootState, props: { segmentId: number }) =>\n  state.getIn([rootKey, \"lastSavedById\", props.segmentId]);\n\n/**\n * Takes a segmentId and finds the associated FenceSegmentRecords fenceId\n *\n * @param {RootState} state\n * @param {{ segmentId: number }} params\n * @returns {number} fenceId\n */\nexport const segmentFenceId = createSelector(segment, (segment: FenceSegmentRecord) => segment.fenceId);\n\n/**\n * Takes a segmentId and checks to see if the FenceSegmentRecord is dirty\n *\n * @param {RootState} state\n * @param {{ segmentId: number }} params\n * @returns {boolean} dirty\n */\nexport const dirty = createSelector(\n  segment,\n  segmentLastSaved,\n  (segment: FenceSegmentRecord, lastSaved: FenceSegmentRecord) => {\n    if (!segment) return false;\n\n    return !segment.equals(lastSaved);\n  },\n);\n","import { getLocations, submitApplication } from \"app2/src/api/oneLook.service\";\nimport { ThunkResult } from \"app2/src/reducers\";\nimport { OneLookActions } from \"app2/src/reducers/oneLook.actions\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport { oneLookLocations } from \"app2/src/selectors/oneLook.selectors\";\nimport { RootDispatchType, RootGetState } from \"app2/src/store\";\nimport { Actions as EstimateActions, AsyncActions as EstimateAsyncActions } from \"app2/src/reducers/estimate.actions\";\nimport { fromJS } from \"immutable\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\n\nexport const OneLookAsyncActions = {\n  getLocations:\n    (extendedErrorMsg = false): ThunkResult<Promise<void>> =>\n    async (dispatch: RootDispatchType, getState: RootGetState) => {\n      try {\n        dispatch(OneLookActions.setLoading(true));\n        const response = await getLocations();\n        dispatch(OneLookActions.receiveLocations(response.locations));\n      } catch (e) {\n        if (e.status === 400) {\n          dispatch(\n            commonActions.Actions.flashAddAlert(\n              FlashLevels.danger,\n              `There is a problem with your 1LOOK account. ${extendedErrorMsg ? \"You will NOT be able to submit a finance application from Price Presentation. \" : \"\"}Please contact 1LOOK support and provide them your email address`,\n            ),\n          );\n        } else {\n          handleErrors(e, dispatch);\n        }\n      } finally {\n        dispatch(OneLookActions.setLoading(false));\n      }\n    },\n  submitApplication:\n    (estimateId: number, estimateTotal: number, preOpenedWindow?: Window | null): ThunkResult<Promise<void>> =>\n    async (dispatch: RootDispatchType, getState: RootGetState) => {\n      try {\n        dispatch(OneLookActions.setLoading(true));\n\n        const state = getState();\n        const job = currentJob(state);\n        const form = state.getIn([\"rsfForms\", \"byForm\", \"oneLookFinanceApplication\"]);\n        const locations = oneLookLocations(state);\n        const selectedProduct = form.get(\"product\");\n        const method = form.get(\"method\");\n\n        const location = locations.find((l) => l.code === form.get(\"location\"));\n        const url = location?.get(\"create\").get(method);\n        if (!url) {\n          throw new Error(\"No URL found for the selected method\");\n        }\n\n        const response = await submitApplication(url, estimateId, estimateTotal, job, selectedProduct);\n\n        dispatch(EstimateActions.updateMetadata(estimateId, \"one_look\", fromJS({ id: response.id })));\n        await dispatch(EstimateAsyncActions.updateOrCreateEstimate(estimateId));\n\n        const link = response.kiosk || response.link || response.cash;\n        if (link) {\n          dispatch(\n            commonActions.Actions.flashAddAlert(\n              FlashLevels.info,\n              \"Finance application link is being opened in a new tab\",\n            ),\n          );\n          if (preOpenedWindow && !preOpenedWindow.closed) {\n            preOpenedWindow.location.href = link;\n          } else {\n            window.open(link, \"_blank\");\n          }\n        } else {\n          dispatch(\n            commonActions.Actions.flashAddAlert(FlashLevels.success, \"Finance application submitted successfully\"),\n          );\n          // Close the pre-opened window if no link is needed\n          if (preOpenedWindow && !preOpenedWindow.closed) {\n            preOpenedWindow.close();\n          }\n        }\n      } catch (e) {\n        handleErrors(e);\n        // Close the pre-opened window if there was an error\n        if (preOpenedWindow && !preOpenedWindow.closed) {\n          preOpenedWindow.close();\n        }\n      } finally {\n        dispatch(OneLookActions.setLoading(false));\n      }\n    },\n};\n","import { fetcher } from \"app2/src/helpers/Fetcher\";\nimport { JobRecord } from \"app2/src/records/Job\";\nimport { IOneLookLocationData } from \"app2/src/records/OneLookLocation\";\nimport { us_states_abbreviation } from \"configs/states/us-ca\";\nimport * as config from \"react-global-configuration\";\n\nexport interface IOneLookLocationIndexResponse {\n  locations: IOneLookLocationData[];\n}\n\nexport interface IOneLookApplicationResponse {\n  id: string;\n  friendly_id: string;\n  link?: string;\n  kiosk?: string;\n  cash?: string;\n}\n\nexport interface IOneLookApplicationBody {\n  project_amount: number;\n  project_type: string;\n  email: string;\n  given_name: string;\n  family_name: string;\n  mobile: string;\n  street: string;\n  locality: string;\n  region: string;\n  postal_code: string;\n  billing_street: string;\n  billing_locality: string;\n  billing_region: string;\n  billing_postal_code: string;\n  source_platform: string;\n  source_platform_id: string;\n  lead_source: string;\n  project_numbers: string[];\n}\n\nexport const getLocations = async (): Promise<IOneLookLocationIndexResponse> => {\n  return fetcher.get(`${config.get(\"ONE_LOOK_API_URL\")}/api/v4/application/options`);\n};\n\nexport const submitApplication = async (\n  url: string,\n  estimateId: number,\n  estimateTotal: number,\n  job: JobRecord,\n  selectedProduct: string,\n): Promise<IOneLookApplicationResponse> => {\n  const body: IOneLookApplicationBody = {\n    project_amount: estimateTotal,\n    project_type: selectedProduct,\n    email: job.email,\n    given_name: job.customer_name.split(\" \")[0] || \"\",\n    family_name: job.customer_name.split(\" \")[1] || \"\",\n    mobile: job.phone_numbers.find((p) => p.name === \"Mobile\")?.number || \"\",\n    street: job.address.line_1,\n    locality: job.address.city,\n    region: us_states_abbreviation[job.address.state],\n    postal_code: job.address.postal_code,\n    billing_street: job.use_job_address ? job.address.line_1 : job.customer_address.line_1,\n    billing_locality: job.use_job_address ? job.address.city : job.customer_address.city,\n    billing_region: us_states_abbreviation[job.use_job_address ? job.address.state : job.customer_address.state],\n    billing_postal_code: job.use_job_address ? job.address.postal_code : job.customer_address.postal_code,\n    source_platform: \"oce-web\",\n    source_platform_id: `${job.org_id.toString()}-${job.id.toString()}-${estimateId.toString()}`,\n    lead_source: \"email_campaign\",\n    project_numbers: [job.org_id.toString(), job.id.toString(), estimateId.toString()],\n  };\n  return fetcher.post(url, body);\n};\n","import { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { RoofFaceRecord } from \"app2/src/records/RoofFace\";\n\nexport const roofFace = (state: RootState, props: any) => state.getIn([\"roofFaces\", \"byId\", props.roofFaceId]);\n\nexport const roofFaces = createSelector(\n  [(state, props) => ({ state, props })],\n  (stateProps: any): List<RoofFaceRecord> => {\n    const { state, props } = stateProps;\n    const { roofFaceIds } = props;\n    return roofFaceIds.map((id: number) => roofFace(state, { roofFaceId: id }));\n  },\n);\n","import { Record } from \"immutable\";\nimport { Nullable } from \".\";\nimport { fromJSON as userFromJSON, IUserData, IUserRecord, UserRecord } from \"./UserRecord\";\n\nexport const fromJSON = (json: Partial<IJobAssignmentData>): JobAssignmentRecord => {\n  const data: IJobAssignmentRecord = json as any as IJobAssignmentRecord;\n\n  if (json.user) {\n    if (json.user.org) {\n      delete json.user.org;\n    }\n    data.user = userFromJSON(json.user) as any;\n  }\n\n  return new JobAssignmentRecord(data);\n};\n\nexport const toJSON = (jobAssignment: JobAssignmentRecord): IJobAssignmentData => {\n  const json = jobAssignment.toJSON() as any as IJobAssignmentData;\n\n  if (json.id <= 0) {\n    delete json.id;\n  }\n\n  return json;\n};\n\nexport interface IJobAssignmentData {\n  id: number;\n  status: string;\n  status_changed: Date;\n  user: IUserData;\n  user_id?: number;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IJobAssignmentRecord {\n  id: Nullable<number>;\n  status: Nullable<string>;\n  status_changed: Nullable<Date>;\n  user: Nullable<UserRecord>;\n  user_id: Nullable<number>;\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nexport const defaultJobAssignmentProps = {\n  id: 0,\n  status: null,\n  status_changed: null,\n  user: null,\n  user_id: null,\n  created_at: null,\n  updated_at: null,\n};\n\nexport class JobAssignmentRecord\n  extends Record<IJobAssignmentRecord>(defaultJobAssignmentProps)\n  implements IJobAssignmentRecord\n{\n  public readonly id!: number;\n  public readonly status!: string;\n  public readonly status_changed!: Date;\n  public readonly user!: UserRecord;\n  public readonly user_id!: number;\n\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public constructor(values?: Partial<IJobAssignmentRecord>) {\n    values ? super(values) : super();\n  }\n}\n\nexport const emptyJobAssignmentValue = fromJSON({} as IJobAssignmentData);\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.datetimepicker.min\",[\"kendo.datepicker.min\",\"kendo.timepicker.min\"],e)}(function(){return function(e,t){function a(e){var t=new Date(2100,0,1);return t.setMinutes(-e),t}function n(e){e.preventDefault()}function i(t){var a,n=r.getCulture(t.culture).calendars.standard.patterns,i=!t.parseFormats.length;t.format=d(t.format||n.g),t.timeFormat=a=d(t.timeFormat||n.t),r.DateView.normalize(t),i&&t.parseFormats.unshift(\"yyyy-MM-ddTHH:mm:ss\"),-1===e.inArray(a,t.parseFormats)&&t.parseFormats.splice(1,0,a)}var r=window.kendo,o=r.TimeView,l=r.parseDate,s=r._activeElement,d=r._extractFormat,m=r.calendar,u=m.isInRange,c=m.restrictValue,p=m.isEqualDatePart,f=o.getMilliseconds,_=r.ui,v=_.Widget,g=\"open\",w=\"close\",h=\"change\",x=\".kendoDateTimePicker\",k=\"click\"+x,y=\"disabled\",b=\"readonly\",V=\"k-state-default\",D=\"k-state-focused\",T=\"k-state-hover\",A=\"k-state-disabled\",I=\"mouseenter\"+x+\" mouseleave\"+x,F=\"mousedown\"+x,C=\"month\",O=\"<span/>\",R=\"aria-activedescendant\",M=\"aria-expanded\",H=\"aria-hidden\",W=\"aria-owns\",B=\"aria-disabled\",S=Date,E=new S(1800,0,1),q=new S(2099,11,31),N={view:\"date\"},P={view:\"time\"},j=e.extend,Y=v.extend({init:function(t,a){var n,o=this;v.fn.init.call(o,t,a),t=o.element,a=o.options,a.disableDates=r.calendar.disabled(a.disableDates),a.min=l(t.attr(\"min\"))||l(a.min),a.max=l(t.attr(\"max\"))||l(a.max),i(a),o._initialOptions=j({},a),o._wrapper(),o._views(),o._icons(),o._reset(),o._template();try{t[0].setAttribute(\"type\",\"text\")}catch(s){t[0].type=\"text\"}t.addClass(\"k-input\").attr({role:\"combobox\",\"aria-expanded\":!1}),o._midnight=o._calculateMidnight(a.min,a.max),n=t.is(\"[disabled]\")||e(o.element).parents(\"fieldset\").is(\":disabled\"),n?o.enable(!1):o.readonly(t.is(\"[readonly]\")),o._old=o._update(a.value||o.element.val()),o._oldText=t.val(),r.notify(o)},options:{name:\"DateTimePicker\",value:null,format:\"\",timeFormat:\"\",culture:\"\",parseFormats:[],dates:[],min:new S(E),max:new S(q),interval:30,height:200,footer:\"\",start:C,depth:C,animation:{},month:{},ARIATemplate:'Current focused date is #=kendo.toString(data.current, \"d\")#',dateButtonText:\"Open the date view\",timeButtonText:\"Open the time view\"},events:[g,w,h],setOptions:function(e){var t,a,n,o=this,s=o._value;v.fn.setOptions.call(o,e),e=o.options,e.min=t=l(e.min),e.max=a=l(e.max),i(e),o._midnight=o._calculateMidnight(e.min,e.max),n=e.value||o._value||o.dateView._current,t&&!p(t,n)&&(t=new S(E)),a&&!p(a,n)&&(a=new S(q)),o.dateView.setOptions(e),o.timeView.setOptions(j({},e,{format:e.timeFormat,min:t,max:a})),s&&(o.element.val(r.toString(s,e.format,e.culture)),o._updateARIA(s))},_editable:function(t){var a=this,i=a.element.off(x),o=a._dateIcon.off(x),l=a._timeIcon.off(x),d=a._inputWrapper.off(x),m=t.readonly,u=t.disable;m||u?(d.addClass(u?A:V).removeClass(u?V:A),i.attr(y,u).attr(b,m).attr(B,u)):(d.addClass(V).removeClass(A).on(I,a._toggleHover),i.removeAttr(y).removeAttr(b).attr(B,!1).on(\"keydown\"+x,e.proxy(a._keydown,a)).on(\"focus\"+x,function(){a._inputWrapper.addClass(D)}).on(\"focusout\"+x,function(){a._inputWrapper.removeClass(D),i.val()!==a._oldText&&a._change(i.val()),a.close(\"date\"),a.close(\"time\")}),o.on(F,n).on(k,function(){a.toggle(\"date\"),r.support.touch||i[0]===s()||i.focus()}),l.on(F,n).on(k,function(){a.toggle(\"time\"),r.support.touch||i[0]===s()||i.focus()}))},readonly:function(e){this._editable({readonly:e===t?!0:e,disable:!1})},enable:function(e){this._editable({readonly:!1,disable:!(e=e===t?!0:e)})},destroy:function(){var e=this;v.fn.destroy.call(e),e.dateView.destroy(),e.timeView.destroy(),e.element.off(x),e._dateIcon.off(x),e._timeIcon.off(x),e._inputWrapper.off(x),e._form&&e._form.off(\"reset\",e._resetHandler)},close:function(e){\"time\"!==e&&(e=\"date\"),this[e+\"View\"].close()},open:function(e){\"time\"!==e&&(e=\"date\"),this[e+\"View\"].open()},min:function(e){return this._option(\"min\",e)},max:function(e){return this._option(\"max\",e)},toggle:function(e){var t=\"timeView\";\"time\"!==e?e=\"date\":t=\"dateView\",this[e+\"View\"].toggle(),this[t].close()},value:function(e){var a=this;return e===t?a._value:(a._old=a._update(e),null===a._old&&a.element.val(\"\"),a._oldText=a.element.val(),t)},_change:function(e){var t,a,n,i=this,r=i.element.val();e=i._update(e),t=+i._old!=+e,a=t&&!i._typing,n=r!==i.element.val(),(a||n)&&i.element.trigger(h),t&&(i._old=e,i._oldText=i.element.val(),i.trigger(h)),i._typing=!1},_option:function(e,n){var i,r,o=this,s=o.options,d=o.timeView,m=d.options,u=o._value||o._old;if(n===t)return s[e];if(n=l(n,s.parseFormats,s.culture)){if(s.min.getTime()===s.max.getTime()&&(m.dates=[]),s[e]=new S(n.getTime()),o.dateView[e](n),o._midnight=o._calculateMidnight(s.min,s.max),u&&(i=p(s.min,u),r=p(s.max,u)),i||r){if(m[e]=n,i&&!r&&(m.max=a(s.interval)),r){if(o._midnight)return d.dataBind([q]),t;i||(m.min=E)}}else m.max=q,m.min=E;d.bind()}},_toggleHover:function(t){e(t.currentTarget).toggleClass(T,\"mouseenter\"===t.type)},_update:function(t){var n,i,o,s,d,m=this,f=m.options,_=f.min,v=f.max,g=f.dates,w=m.timeView,x=m._value,k=l(t,f.parseFormats,f.culture),y=null===k&&null===x||k instanceof Date&&x instanceof Date;return f.disableDates&&f.disableDates(k)&&(k=null,m._old||m.element.val()||(t=null)),+k===+x&&y?(d=r.toString(k,f.format,f.culture),d!==t&&(m.element.val(null===k?t:d),t instanceof String&&m.element.trigger(h)),k):(null!==k&&p(k,_)?k=c(k,_,v):u(k,_,v)||(k=null),m._value=k,w.value(k),m.dateView.value(k),k&&(o=m._old,i=w.options,g[0]&&(g=e.grep(g,function(e){return p(k,e)}),g[0]&&(w.dataBind(g),s=!0)),s||(p(k,_)&&(i.min=_,i.max=a(f.interval),n=!0),p(k,v)&&(m._midnight?(w.dataBind([q]),s=!0):(i.max=v,n||(i.min=E),n=!0))),!s&&(!o&&n||o&&!p(o,k))&&(n||(i.max=q,i.min=E),w.bind())),m.element.val(r.toString(k||t,f.format,f.culture)),m._updateARIA(k),k)},_keydown:function(e){var t=this,a=t.dateView,n=t.timeView,i=t.element.val(),o=a.popup.visible();e.altKey&&e.keyCode===r.keys.DOWN?t.toggle(o?\"time\":\"date\"):o?(a.move(e),t._updateARIA(a._current)):n.popup.visible()?n.move(e):e.keyCode===r.keys.ENTER&&i!==t._oldText?t._change(i):t._typing=!0},_views:function(){var e,t,a,n,i,s,d=this,m=d.element,c=d.options,p=m.attr(\"id\");d.dateView=e=new r.DateView(j({},c,{id:p,anchor:d.wrapper,change:function(){var t,a,n=e.calendar.value(),i=+n,o=+c.min,l=+c.max;i!==o&&i!==l||(t=i===o?o:l,t=new S(d._value||t),t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),u(t,o,l)&&(n=t)),d._value&&(a=r.date.setHours(new Date(n),d._value),u(a,o,l)&&(n=a)),d._change(n),d.close(\"date\")},close:function(e){d.trigger(w,N)?e.preventDefault():(m.attr(M,!1),a.attr(H,!0),t.popup.visible()||m.removeAttr(W))},open:function(t){d.trigger(g,N)?t.preventDefault():(m.val()!==d._oldText&&(s=l(m.val(),c.parseFormats,c.culture),d.dateView[s?\"current\":\"value\"](s)),a.attr(H,!1),m.attr(M,!0).attr(W,e._dateViewID),d._updateARIA(s))}})),a=e.div,i=c.min.getTime(),d.timeView=t=new o({id:p,value:c.value,anchor:d.wrapper,animation:c.animation,format:c.timeFormat,culture:c.culture,height:c.height,interval:c.interval,min:new S(E),max:new S(q),dates:i===c.max.getTime()?[new Date(i)]:[],parseFormats:c.parseFormats,change:function(a,n){a=t._parse(a),c.min>a?(a=new S(+c.min),t.options.min=a):a>c.max&&(a=new S(+c.max),t.options.max=a),n?(d._timeSelected=!0,d._change(a)):(m.val(r.toString(a,c.format,c.culture)),e.value(a),d._updateARIA(a))},close:function(t){d.trigger(w,P)?t.preventDefault():(n.attr(H,!0),m.attr(M,!1),e.popup.visible()||m.removeAttr(W))},open:function(e){t._adjustListWidth(),d.trigger(g,P)?e.preventDefault():(m.val()!==d._oldText&&(s=l(m.val(),c.parseFormats,c.culture),d.timeView.value(s)),n.attr(H,!1),m.attr(M,!0).attr(W,t._timeViewID),t.options.active(t.current()))},active:function(e){m.removeAttr(R),e&&m.attr(R,t._optionID)}}),n=t.ul},_icons:function(){var t=this,a=t.element,n=t.options,i=a.next(\"span.k-select\");i[0]||(i=e('<span unselectable=\"on\" class=\"k-select\"><span class=\"k-link k-link-date\" aria-label=\"'+n.dateButtonText+'\"><span unselectable=\"on\" class=\"k-icon k-i-calendar\"></span></span><span class=\"k-link k-link-time\" aria-label=\"'+n.timeButtonText+'\"><span unselectable=\"on\" class=\"k-icon k-i-clock\"></span></span></span>').insertAfter(a)),i=i.children(),i=i.children(),t._dateIcon=i.eq(0).attr(\"aria-controls\",t.dateView._dateViewID),t._timeIcon=i.eq(1).attr(\"aria-controls\",t.timeView._timeViewID)},_wrapper:function(){var t,a=this,n=a.element;t=n.parents(\".k-datetimepicker\"),t[0]||(t=n.wrap(O).parent().addClass(\"k-picker-wrap k-state-default\"),t=t.wrap(O).parent()),t[0].style.cssText=n[0].style.cssText,n.css({width:\"100%\",height:n[0].style.height}),a.wrapper=t.addClass(\"k-widget k-datetimepicker k-header\").addClass(n[0].className),a._inputWrapper=e(t[0].firstChild)},_reset:function(){var t=this,a=t.element,n=a.attr(\"form\"),i=n?e(\"#\"+n):a.closest(\"form\");i[0]&&(t._resetHandler=function(){t.value(a[0].defaultValue),t.max(t._initialOptions.max),t.min(t._initialOptions.min)},t._form=i.on(\"reset\",t._resetHandler))},_template:function(){this._ariaTemplate=r.template(this.options.ARIATemplate)},_calculateMidnight:function(e,t){return f(e)+f(t)===0},_updateARIA:function(e){var t,a=this,n=a.dateView.calendar;a.element.removeAttr(R),n&&(t=n._cell,t.attr(\"aria-label\",a._ariaTemplate({current:e||n.current()})),a.element.attr(R,t.attr(\"id\")))}});_.plugin(Y)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,a){(a||t)()});\n//# sourceMappingURL=kendo.datetimepicker.min.js.map\n","import { List, Record } from \"immutable\";\n\nexport const estimateSignedDocumentFromJSON = (\n  json: Partial<IEstimateSignedDocumentData>,\n): EstimateSignedDocumentRecord => {\n  const recordData: IEstimateSignedDocumentRecord = { ...(json as any) };\n\n  recordData.signedDocumentIds = List(recordData.signedDocumentIds);\n\n  return new EstimateSignedDocumentRecord(recordData);\n};\nexport interface IEstimateSignedDocumentData {\n  estimateId: number;\n  signedDocumentIds: number[];\n}\n\nexport interface IEstimateSignedDocumentRecord {\n  estimateId: number;\n  signedDocumentIds: List<number>;\n}\n\nconst defaultEstimateSignedDocumentRecord: IEstimateSignedDocumentRecord = {\n  estimateId: 0,\n  signedDocumentIds: List(),\n};\n\nexport class EstimateSignedDocumentRecord\n  extends Record(defaultEstimateSignedDocumentRecord)\n  implements IEstimateSignedDocumentRecord {}\n","import { RootState } from \".\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport {\n  ICreateOptions,\n  IValidateSignedDocumentResponse,\n  create,\n  loadSigned,\n  notify,\n  validate,\n  voidDocument,\n} from \"../api/signedDocument.service\";\nimport { ISignedDocumentData } from \"../records/SignedDocument\";\nimport { RecipientRecord } from \"../records/Recipient\";\nimport { RootDispatchType, RootGetState } from \"../store\";\nimport { ActionsUnion, createAction } from \"./Utils\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\nimport * as taskActions from \"app2/src/reducers/task.actions\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { QueryParamsRecord } from \"../records/Page\";\nimport { jobOverviewEstimates } from \"../selectors/estimate.selectors\";\nimport { getPaginationByModel } from \"../selectors/pagination.selectors\";\nimport { DocumentRecord } from \"../records/Document\";\nimport { List } from \"immutable\";\nimport { estimateSignedDocumentFromJSON, EstimateSignedDocumentRecord } from \"../records/EstimateSignedDocument\";\nimport { EstimateOverviewRecord } from \"../records/EstimateOverview\";\nimport { currentSignedDocument, currentSignedDocumentId } from \"../selectors/signedDocument.selectors\";\nimport { Nullable } from \"app2/src/records\";\nimport { format } from \"date-fns\";\nimport { contractTitle } from \"app2/src/selectors/org.selectors\";\nimport { currentJob } from \"app2/src/selectors/job.selectors\";\nimport * as rsfFormActions from \"app2/src/reducers/rsfForm.actions\";\n\nexport const SET_CURRENT_ID = \"@signedDocuments/SET_CURRENT_ID\";\nexport const FETCH_DOCUMENT = \"@signedDocuments/FETCH_DOCUMENT\";\nexport const RECEIVE_DOCUMENT = \"@signedDocuments/RECEIVE_DOCUMENT\";\nexport const SET_DOCUMENT_LOADED = \"@signedDocuments/SET_DOCUMENT_LOADED\";\nexport const VALIDATE = \"@signedDocuments/VALIDATE\";\nexport const INIT_RECIPIENT_INFO = \"@signedDocuments/INIT_RECIPIENT_INFO\";\nexport const UPDATE_FORM = \"@signedDocuments/UPDATE_FORM\";\nexport const INIT_RECIPIENTS = \"@signedDocuments/INIT_RECIPIENTS\";\nexport const CREATE_SIGNED_DOCUMENT = \"@signedDocuments/CREATE_SIGNED_DOCUMENT\";\nexport const CLEAR_SIGNED_DOCUMENT = \"@signedDocuments/CLEAR_SIGNED_DOCUMENT\";\n\nexport const Actions = {\n  setCurrentSignedDocumentId: (id: number) => createAction(SET_CURRENT_ID, { id }),\n  fetchDocument: (id: number) => createAction(FETCH_DOCUMENT, { id }),\n  receiveDocument: (document: Partial<ISignedDocumentData>) => createAction(RECEIVE_DOCUMENT, { document }),\n  setDocumentLoaded: (id: number, status?: Nullable<number>) => createAction(SET_DOCUMENT_LOADED, { id, status }),\n  validate: (documentId: number) => createAction(VALIDATE, { documentId }),\n  initRecipientInfo: (recipient: RecipientRecord, id: number, index: number) =>\n    createAction(INIT_RECIPIENT_INFO, { recipient, id, index }),\n  updateForm: (event: { rootPath: (string | number)[]; name: string; value: any }) =>\n    createAction(UPDATE_FORM, { event }),\n  initRecipients: (id: number, validations: any) => createAction(INIT_RECIPIENTS, { id, validations }),\n  createSignedDocument: (response: IValidateSignedDocumentResponse, estimateId: Nullable<number>) =>\n    createAction(CREATE_SIGNED_DOCUMENT, { response, estimateId }),\n  clearSignedDocument: (id: number) => createAction(CLEAR_SIGNED_DOCUMENT, { id }),\n  updateDocument: (document: DocumentRecord) => createAction(UPDATE_DOCUMENT, { document }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  loadSignedDocument: (documentId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        dispatch(Actions.fetchDocument(documentId));\n        const { signed_document } = await loadSigned(documentId);\n        dispatch(Actions.receiveDocument(signed_document));\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setDocumentLoaded(documentId));\n      }\n    };\n  },\n  notify: (documentId: number, recipient?: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        await notify(documentId, recipient);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Signature Document successfully sent.\"));\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  listEstimateSignedDocuments: (jobId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        await dispatch(estimateActions.AsyncActions.getJobEstimates(jobId));\n        await dispatch(\n          documentActions.AsyncActions.listDocuments(\n            { documentableId: jobId, documentableType: \"job\", signed: \"signed\", signed_kind: \"contract\" },\n            new QueryParamsRecord(),\n            \"estimateDocuments\",\n          ),\n        );\n        const estimateOverviews: List<EstimateOverviewRecord> = jobOverviewEstimates(getState(), { jobId });\n        const documents: List<DocumentRecord> = getPaginationByModel(getState(), {\n          modelName: \"estimateDocuments\",\n          path: [\"documents\", \"byId\"],\n        });\n\n        const estimateSignedDocuments: List<EstimateSignedDocumentRecord> = estimateOverviews\n          .map((estimateOverview) => {\n            const estimateDocuments = documents.filter((d) => d.signed_document.estimate_id === estimateOverview.id);\n            if (estimateDocuments.size > 0)\n              return estimateSignedDocumentFromJSON({\n                estimateId: estimateOverview.id,\n                signedDocumentIds: estimateDocuments.map((d) => d.id).toJS(),\n              });\n          })\n          .filter((record) => record); // filter undefined\n\n        dispatch(estimateActions.Actions.setEstimateSignedDocuments(jobId, estimateSignedDocuments));\n      } catch (error) {\n        handleErrors(error, dispatch);\n      }\n    };\n  },\n  validateDocument: (\n    document: DocumentRecord,\n    isModified: boolean,\n  ): ThunkResult<Promise<IValidateSignedDocumentResponse>> => {\n    return async (dispatch: RootDispatchType) => {\n      try {\n        if (document.id) {\n          dispatch(documentActions.Actions.fetchDocument(document.id));\n        }\n\n        const response = await validate(document, isModified);\n        dispatch(documentActions.Actions.receiveDocument(response.document));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Document validated successfully\"));\n        return response;\n      } catch (response) {\n        dispatch(documentActions.Actions.resetDocument(document.id));\n\n        const detailedError = response.data?.errors?.[0]?.message;\n        if (detailedError) {\n          handleErrors({ ...response, data: { errors: detailedError } }, dispatch);\n        } else {\n          handleErrors(response, dispatch);\n        }\n\n        return Promise.reject(response);\n      }\n    };\n  },\n  validateSignedDocument: (\n    document: DocumentRecord,\n    isModified = false,\n    estimateId?: number,\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      const signedDocumentId = -1;\n\n      try {\n        dispatch(Actions.setCurrentSignedDocumentId(signedDocumentId));\n        dispatch(Actions.fetchDocument(signedDocumentId));\n        const response = await dispatch(AsyncActions.validateDocument(document, isModified));\n\n        dispatch(Actions.createSignedDocument(response, estimateId));\n      } catch (response) {\n        dispatch(Actions.setDocumentLoaded(signedDocumentId, response.status));\n      }\n    };\n  },\n  combineDocument: (document_ids: List<number>, name: string, jobId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        const documentId = await dispatch(documentActions.AsyncActions.combine(document_ids, name, jobId));\n        const id = currentSignedDocumentId(getState());\n        dispatch(\n          Actions.updateForm({\n            rootPath: [\"signedDocuments\", \"byId\", id],\n            name: \"document_id\",\n            value: documentId,\n          }),\n        );\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n      }\n    };\n  },\n  contractFlowCreate: (document: DocumentRecord, options: ICreateOptions): ThunkResult<Promise<number>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const state = getState();\n      const job = currentJob(state);\n      const orgContractName = contractTitle(state);\n      const name = job.name + \" - \" + format(new Date(), \"MM-dd-Y HH:mm\") + \" - \" + orgContractName + \".pdf\";\n\n      return dispatch(AsyncActions.create(document.set(\"name\", name), options));\n    };\n  },\n  create: (document: DocumentRecord, options: ICreateOptions): ThunkResult<Promise<number>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const signedDocument = currentSignedDocument(getState());\n      try {\n        dispatch(Actions.fetchDocument(signedDocument.id));\n        const { signed_document: sd } = await create(document, signedDocument, options);\n        dispatch(Actions.setCurrentSignedDocumentId(sd.id));\n        dispatch(Actions.receiveDocument(sd));\n        dispatch(documentActions.Actions.receiveDocument(sd.document));\n        // TODO: make modelName configurable\n        dispatch(paginationActions.Actions.pushId(sd.document.id, \"signableDocuments\"));\n        await dispatch(taskActions.AsyncActions.pollTask(sd.document.task));\n        return sd.id;\n      } catch (response) {\n        dispatch(Actions.setDocumentLoaded(signedDocument.id));\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  voidDocument: (documentId: number, signedDocumentId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: RootGetState) => {\n      try {\n        dispatch(Actions.fetchDocument(documentId));\n\n        const reason = getState().getIn([\"rsfForms\", \"byForm\", \"voidDocument\", \"reason\"]);\n        await voidDocument(signedDocumentId, reason);\n\n        dispatch(documentActions.Actions.updateSignedDocumentStatus(documentId, \"voided\"));\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Document voided successfully\"));\n        dispatch(\n          rsfFormActions.Actions.update({\n            rootPath: [\"rsfForms\", \"byForm\", \"voidDocument\"],\n            name: \"reason\",\n            value: \"\",\n          }),\n        );\n      } catch (response) {\n        handleErrors(response, dispatch);\n      } finally {\n        dispatch(Actions.setDocumentLoaded(documentId));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IPaymentTermTemplateData } from \"../records/PaymentTermTemplate\";\n\ninterface IPaymentTermTemplateIndexResponse {\n  payment_terms: IPaymentTermTemplateData[];\n}\n\ninterface IPaymentTermTemplateResponse {\n  payment_term: IPaymentTermTemplateData;\n}\n\nclass PaymentTermTemplateService {\n  public orgUrl = \"api/v1/orgs/:id/payment_terms\";\n\n  public loadByOrg(orgId: number): Promise<IPaymentTermTemplateData[]> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n\n    return fetcher.get<IPaymentTermTemplateIndexResponse>(actionUrl).then((response) => response.payment_terms);\n  }\n\n  public create(\n    orgId: number,\n    paymentTermTemplate: Partial<IPaymentTermTemplateData>,\n  ): Promise<IPaymentTermTemplateData> {\n    const actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n\n    return fetcher.post<IPaymentTermTemplateResponse>(actionUrl, { payment_term: paymentTermTemplate }).then(\n      (response) => response.payment_term,\n      (response) => Promise.reject(response.data.errors),\n    );\n  }\n\n  public update(\n    orgId: number,\n    paymentTermTemplate: Partial<IPaymentTermTemplateData>,\n  ): Promise<IPaymentTermTemplateData> {\n    let actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n    actionUrl = fetcher.joinUrls(actionUrl, paymentTermTemplate.id.toString());\n\n    return fetcher.patch<IPaymentTermTemplateResponse>(actionUrl, { payment_term: paymentTermTemplate }).then(\n      (response) => response.payment_term,\n      (response) => {\n        if (response.status === 500) {\n          return Promise.reject([\"Internal Server Error\"]);\n        }\n\n        if (!_.isArray(response.data.errors)) {\n          return Promise.reject(response.data.errors);\n        }\n\n        return Promise.reject([\"Unknown Error\"]);\n      },\n    );\n  }\n\n  // public archive(orgId: number, paymentTermTemplate: PaymentTermTemplateRecord): Promise<IPaymentTermTemplateData> {\n  //   let actionUrl = this.orgUrl.replace(\":id\", orgId.toString());\n  //   actionUrl = fetcher.joinUrls(actionUrl, paymentTermTemplate.id.toString());\n\n  //   return fetcher.delete<any>(actionUrl).then(() => {\n\n  //     return paymentTermTemplate.set(\"archived\", true);\n  //   }, (response) => Promise.reject(response.data.errors));\n  // }\n}\n\nexport const paymentTermTemplateService = new PaymentTermTemplateService();\n","import { ActionsUnion, createAction } from \"../Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState } from \"../index\";\nimport { IPaymentTermTemplateData, PaymentTermTemplateRecord } from \"app2/src/records/PaymentTermTemplate\";\nimport { paymentTermTemplateService } from \"app2/src/api/paymentTermTemplate.service\";\nimport { RootDispatchType } from \"../../store\";\n\nexport const FETCH_ORG_PAYMENT_TERM_TEMPLATES = \"@paymentTermTemplates/FETCH_ORG_PAYMENT_TERM_TEMPLATES\";\nexport const FETCH_PAYMENT_TERM_TEMPLATE = \"@paymentTermTemplates/FETCH_PAYMENT_TERM_TEMPLATE\";\nexport const RECEIVE_ORG_PAYMENT_TERM_TEMPLATES = \"@paymentTermTemplates/RECEIVE_ORG_PAYMENT_TERM_TEMPLATES\";\nexport const RECEIVE_PAYMENT_TERM_TEMPLATE = \"@paymentTermTemplates/RECEIVE_PAYMENT_TERM_TEMPLATE\";\nexport const REMOVE_ORG_PAYMENT_TERM_TEMPLATE = \"@paymentTermTemplates/REMOVE_ORG_PAYMENT_TERM_TEMPLATE\";\nexport const REMOVE_PAYMENT_TERM_TEMPLATE = \"@paymentTermTemplates/REMOVE_PAYMENT_TERM_TEMPLATE\";\nexport const RECEIVE_ORG_ERRORS = \"@paymentTermTemplates/RECEIVE_ORG_ERRORS\";\nexport const RECEIVE_PAYMENT_TERM_TEMPLATE_ERROR = \"@paymentTermTemplates/RECEIVE_PAYMENT_TERM_TEMPLATE_ERROR\";\n\nexport const Actions = {\n  fetchPaymentTermTemplate: (orgId: number, paymentTermTemplateId: number) =>\n    createAction(FETCH_PAYMENT_TERM_TEMPLATE, { orgId: orgId, paymentTermTemplateId: paymentTermTemplateId }),\n  receivePaymentTermTemplateError: (orgId: number, paymentTermTemplateId: number, errors: string[]) =>\n    createAction(RECEIVE_PAYMENT_TERM_TEMPLATE_ERROR, {\n      orgId: orgId,\n      paymentTermTemplateId: paymentTermTemplateId,\n      errors: errors,\n    }),\n  receivePaymentTermTemplate: (paymentTermTemplate: Partial<IPaymentTermTemplateData>) =>\n    createAction(RECEIVE_PAYMENT_TERM_TEMPLATE, paymentTermTemplate),\n  fetchPaymentTermTemplates: (orgId: number) => createAction(FETCH_ORG_PAYMENT_TERM_TEMPLATES, { orgId }),\n  receiveErrors: (orgId, errors: string[]) => createAction(RECEIVE_ORG_ERRORS, { orgId: orgId, errors: errors }),\n  receivePaymentTermTemplates: (orgId: number, paymentTermTemplates: Partial<IPaymentTermTemplateData>[]) =>\n    createAction(RECEIVE_ORG_PAYMENT_TERM_TEMPLATES, { orgId: orgId, paymentTermTemplates: paymentTermTemplates }),\n  removeOrgPaymentTermTemplate: (orgId: number, paymentTermTemplateId: number) =>\n    createAction(REMOVE_ORG_PAYMENT_TERM_TEMPLATE, { orgId: orgId, paymentTermTemplateId: paymentTermTemplateId }),\n  removePaymentTermTemplate: (paymentTermTemplateId: number) =>\n    createAction(REMOVE_PAYMENT_TERM_TEMPLATE, paymentTermTemplateId),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  listPaymentTermTemplates: (orgId: number): ThunkResult<any> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchPaymentTermTemplates(orgId));\n\n      try {\n        const paymentTermTemplates = await paymentTermTemplateService.loadByOrg(orgId);\n        dispatch(Actions.receivePaymentTermTemplates(orgId, paymentTermTemplates));\n        return paymentTermTemplates;\n      } catch (errors) {\n        dispatch(Actions.receiveErrors(orgId, errors));\n        return Promise.reject(errors);\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { IPaymentRequestData, PaymentRequestRecord } from \"app2/src/records/PaymentRequest\";\nimport { analyticsFetcher } from \"../helpers/Fetcher\";\nimport { IMetaPaginationData } from \"../records/MetaPagination\";\nimport { QueryParamsRecord } from \"../records/Page\";\n\nexport interface IPaymentRequestResponse {\n  payment_request: IPaymentRequestData;\n}\n\nexport interface IPaymentRequestIndexResponse {\n  payment_requests: IPaymentRequestData[];\n  meta: { pagination: IMetaPaginationData };\n}\n\nexport const url = \"payments/v1/requests\";\n\nexport const create = async (paymentRequest: PaymentRequestRecord): Promise<IPaymentRequestResponse> => {\n  const options = { method: \"POST\" };\n  const response = (await analyticsFetcher.fetch(url, { payment_request: paymentRequest.toJS() }, options)) as any;\n  return response.json();\n};\n\nexport const loadPaymentRequests = async (\n  jobId: number,\n  queryParams: QueryParamsRecord,\n): Promise<IPaymentRequestIndexResponse> => {\n  const params = {\n    job_id: jobId,\n    page_size: 5,\n    page: queryParams.get(\"page\"),\n    sort_by: \"updated_at\",\n    sort_order: \"desc\",\n  };\n\n  const response = await analyticsFetcher.fetch(url, params);\n  const data = await analyticsFetcher.json(response);\n\n  return {\n    payment_requests: data.payment_requests,\n    meta: {\n      pagination: {\n        total_count: parseInt(response.headers.get(\"total\")),\n        total_pages: parseInt(response.headers.get(\"total-pages\")),\n        current_page: parseInt(response.headers.get(\"page-number\")),\n      },\n    },\n  };\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction } from \"redux-thunk\";\nimport { RootState, RootActions } from \".\";\nimport { RootDispatchType } from \"../store\";\nimport { create, loadPaymentRequests } from \"../api/paymentRequest.service\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { IPaymentRequestData } from \"app2/src/records/PaymentRequest\";\nimport { paymentRequest } from \"app2/src/reducers/paymentRequest.selectors\";\nimport { AsyncActions as EmailAsyncActions } from \"app2/src/reducers/email.actions\";\nimport { QueryParamsRecord } from \"../records/Page\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport { currentJobId } from \"../selectors/job.selectors\";\nimport { List } from \"immutable\";\n\nexport const INIT_PAYMENT_REQUEST = \"@paymentRequest/INIT_PAYMENT_REQUEST\";\nexport const FETCH_PAYMENT_REQUEST = \"@paymentRequest/FETCH_PAYMENT_REQUEST\";\nexport const RECEIVE_PAYMENT_REQUEST = \"@paymentRequest/RECEIVE_PAYMENT_REQUEST\";\nexport const SET_LOADED = \"@paymentRequest/SET_LOADED\";\nexport const UPDATE_FORM = \"@paymentRequest/UPDATE_FORM\";\nexport const RECEIVE_PAYMENT_REQUESTS = \"@paymentRequest/RECEIVE_PAYMENT_REQUESTS\";\n\nexport const Actions = {\n  initializePaymentRequest: () => createAction(INIT_PAYMENT_REQUEST, {}),\n  fetchPaymentRequest: (id: number) => createAction(FETCH_PAYMENT_REQUEST, { id }),\n  receivePaymentRequest: (paymentRequest: Partial<IPaymentRequestData>) =>\n    createAction(RECEIVE_PAYMENT_REQUEST, { paymentRequest }),\n  setLoaded: (id: number) => createAction(SET_LOADED, { id }),\n  update: (event: { rootPath: (string | number)[]; name: string; value: string }) =>\n    createAction(UPDATE_FORM, { event }),\n  receivePaymentRequests: (paymentRequests: IPaymentRequestData[]) =>\n    createAction(RECEIVE_PAYMENT_REQUESTS, { paymentRequests }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, {}, RootActions>;\n\nexport const AsyncActions = {\n  createPaymentRequest: (paymentRequestId: number, provider: \"email\" | \"text\"): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      let paymentRequestRecord = paymentRequest(getState(), { paymentRequestId });\n      let to = \"\";\n      switch (provider) {\n        case \"email\":\n          to = paymentRequestRecord.emails;\n          break;\n        case \"text\":\n          to = paymentRequestRecord.sms;\n          break;\n      }\n      dispatch(Actions.fetchPaymentRequest(paymentRequestId));\n      paymentRequestRecord = paymentRequestRecord.merge({ provider, to });\n\n      try {\n        const response = await create(paymentRequestRecord);\n        dispatch(Actions.receivePaymentRequest(response.payment_request));\n        await dispatch(\n          EmailAsyncActions.sendMessage({ kind: \"payment_request\", provider, to, data: response.payment_request }),\n        );\n      } catch (response) {\n        handleErrors(response, dispatch);\n        dispatch(Actions.setLoaded(paymentRequestId));\n      }\n    };\n  },\n  loadPaymentRequests: (queryParams: QueryParamsRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      try {\n        dispatch(paginationActions.Actions.fetchPage(\"paymentRequests\", queryParams));\n\n        const jobId = currentJobId(getState());\n        const response = await loadPaymentRequests(jobId, queryParams);\n        const pageData = {\n          ids: List(_.pluck(response.payment_requests, \"id\")),\n          pagination: response.meta.pagination,\n        };\n\n        dispatch(Actions.receivePaymentRequests(response.payment_requests));\n        dispatch(paginationActions.Actions.receivePage(\"paymentRequests\", queryParams, pageData));\n      } catch (response) {\n        const errors = handleErrors(response, dispatch);\n        dispatch(paginationActions.Actions.receivePageError(\"paymentRequests\", queryParams, errors));\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","angular.module(\"RSF.globals\", [])\n.constant(\"VERSION\", \"d6131501b\")\n.constant(\"BaseConfig\", {\"ENVIRONMENT\":\"rsf\",\"BASE_URL\":\"https://api.remotesf.com\",\"PRICELIST_API_URL\":\"https://api.remotesf.com\",\"APP_URL\":\"https://app.remotesf.com\",\"APP_V2_URL\":\"https://app.remotesf.com/v2\",\"STORAGE_URL\":\"https://storage.remotesf.com\",\"CUSTOMER_URL\":\"http://customer.remotesf.com\",\"CUSTOMER_URL_SSL\":\"https://customer.remotesf.com\",\"ALT_URL\":\"https://app2.remotesf.com\",\"LEADS_URL\":\"https://app.remotesf.com/leads_module/\",\"GA_KEY\":\"G-4XKZ6G1615\",\"NEWRELIC_APP_ID\":\"1588648437\",\"RSF_ANALYTICS_KEY\":\"prod_a2efr83sspq\",\"RSF_ANALYTICS_URL\":\"https://analytics.remotesf.com\",\"RSF_ANALYTICS_WS\":\"wss://analytics.remotesf.com\",\"OIDC_DOMAIN\":\"auth.1andfund.com\",\"OIDC_CLIENT_ID\":\"7hXFINQ3VLhin4aUJkjERVck8zzFbPZi\",\"OIDC_REDIRECT_URL\":\"https://app.remotesf.com/sso/callback\",\"OIDC_AUDIENCE\":\"https://api.oneclickcontractor.com\",\"OIDC_SCOPE\":\"email offline_access\",\"DABELLA_OKTA_DOMAIN\":\"dabella.okta.com\",\"DABELLA_OKTA_CLIENT_ID\":\"0oakwkexmkrxqCVNU697\",\"DABELLA_OKTA_REDIRECT_URL\":\"https://app.remotesf.com/okta/callback\",\"DABELLA_OKTA_LOGOUT_URL\":\"https://app.remotesf.com/okta/logout\",\"STRIPE_KEY\":\"pk_live_0wOH6GDjH8wlzgN51EccRNwH\",\"LEARN_MORE_URL\":\"https://oneclickcontractor.com\",\"APP_NAME\":\"One Click Contractor\",\"APP_NAME_SHORT\":\"One Click Contractor\",\"APP_LOGO_URL\":\"/assets/images/big_logo-01.a3b2ddd4.png\",\"APP_ICON_URL\":\"/assets/images/logo.d0e212c3.png\",\"APP_ICON_BIG_URL\":\"/assets/images/occ-logo_rgb_lightbkg.a3b2ddd4.png\",\"COMPANY_NAME\":\"Remote Sales Force\",\"STATES_FILE\":\"us-ca.ts\",\"FAVICON_FILE\":\"occ-favicon.ico\",\"ENFORCE_TOS\":false,\"DEFAULT_ROUTE\":\"root.job_list\",\"DEFAULT_ROUTE_LINK\":\"/jobs\",\"REPORT_PROVIDERS\":[\"wvs\",\"eagleview\"],\"REPORT_KINDS\":[\"roofing\",\"walls\",\"hail\",\"wind\",\"lightning\"],\"REPORT_INIT_LAT\":38.8668583,\"REPORT_INIT_LNG\":-100.6228446,\"REPORT_INIT_ZOOM\":4,\"AUTOCOMPLETE_COUNTRIES\":[\"us\",\"ca\"],\"NEARMAP_API_KEY\":\"MTgzNzU5NzItMDVmZi00NGYyLWI1ZGItNTFhZmUxNjBiMzNi\",\"SUPPORT_URL\":\"https://help.oneclickcontractor.com/knowledge\",\"SAMPLE_JOB_CSV_FILE_URL\":\"https://help.oneclickcontractor.com/knowledge/how-to-import-jobs-from-a-csv-file\",\"IMAGERY_AVAILABLE\":false,\"CONTACT_ADDRESS\":\"879 W Carmel Drive\",\"CONTACT_CITY\":\"Carmel\",\"CONTACT_STATE\":\"IN\",\"CONTACT_POSTAL\":\"46032\",\"CONTACT_COUNTRY\":\"US\",\"CONTACT_PHONE\":\"877-320-2391\",\"CONTACT_EMAIL\":\"support@oneclickcontractor.com\",\"CONTACT_HOURS\":\"\",\"ADS_URL\":\"https://s3.us-east-2.amazonaws.com/ads.oneclickcontractor.com/occ-freemium/occ_freemium_ads.json\",\"CUSTOMERIO_SITEID\":\"\",\"ONBOARDING_NAME\":\"Customer Support\",\"ONBOARDING_EMAIL\":\"onboarding@oneclickcontractor.com\",\"ONBOARDING_PHONE\":\"877-320-2391\",\"ONBOARDING_PHONE_DIAL\":\"tel:+18773202391\",\"PAYSIMPLE_SCRIPT\":\"https://api.paysimple.com/paysimplejs/v1/scripts/client.js\",\"CARD_CONNECT_IFRAME_URL\":\"https://fts.cardconnect.com/itoke/ajax-tokenizer.html\",\"TWILIO_NUMBER\":\"(844) 299-2269\",\"BILLING_LEAD_SOURCES\":[\"unset\",\"RSF\",\"Marketsharp\",\"Royal\",\"LP\",\"GAF\",\"James Hardie\",\"EcoView\",\"Sunrise\",\"LivingSpace\",\"Renoworks\",\"Chameleon\",\"Internal\",\"LP Freemium\",\"OCC Freemium\",\"Sunrise TSM\"],\"DOCUMENT_ORDER_VALUES\":[\"cover_page\",\"estimate_pdf\",\"product_images\",\"job_photos\",\"job_documents\",\"product_brochures\",\"resource_documents\",\"inspection\",\"inspection_pdf\"],\"STRIPE_NAME\":\"OCC Subscription Plan\",\"STRIPE_IMAGE\":\"/assets/images/rsf-circle-128x128.d0e212c3.png\",\"HOMEVEST_CALLBACK\":\"https://api.remotesf.com/integrations/fin_mkt/callback\",\"HOMEVEST_FAILURE\":\"https://homevestfinance.com/result/failure\",\"HOMEVEST_SUCCESS\":\"https://homevestfinance.com/result/success\",\"HOMEVEST_PREQUALSUCCESS\":\"https://homevestfinance.com/result/offers\",\"HOMEVEST_PREQUALFAILURE\":\"https://homevestfinance.com/result/offersfailure\",\"VGS_VAULT_ID\":\"tntwuexevnt\",\"VGS_ENVIRONMENT\":\"live\",\"ONE_LOOK_API_URL\":\"https://1look.1andfund.com\"});\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(t,define){define(\"kendo.tabstrip.min\",[\"kendo.data.min\"],t)}(function(){return function(t,e){function n(e){e.children(b).addClass(G),e.children(\"a\").addClass(k).children(b).addClass(G),e.filter(\":not([disabled]):not([class*=k-state-disabled])\").addClass(B),e.filter(\"li[disabled]\").addClass(W).removeAttr(\"disabled\"),e.filter(\":not([class*=k-state])\").children(\"a\").filter(\":focus\").parent().addClass(H+\" \"+q),e.attr(\"role\",\"tab\"),e.filter(\".\"+H).attr(\"aria-selected\",!0),e.each(function(){var e=t(this);e.children(\".\"+k).length||e.contents().filter(function(){return!(this.nodeName.match(h)||3==this.nodeType&&!d(this.nodeValue))}).wrapAll(\"<span class='\"+k+\"'/>\")})}function r(t){var e=t.children(\".k-item\");e.filter(\".k-first:not(:first-child)\").removeClass(A),e.filter(\".k-last:not(:last-child)\").removeClass(w),e.filter(\":first-child\").addClass(A),e.filter(\":last-child\").addClass(w)}function a(t,e){return\"<span class='k-button k-button-icon k-button-bare k-tabstrip-\"+t+\"' unselectable='on'><span class='k-icon \"+e+\"'></span></span>\"}var i=window.kendo,o=i.ui,s=i.keys,l=t.map,c=t.each,d=t.trim,p=t.extend,u=i.template,f=o.Widget,h=/^(a|div)$/i,m=\".kendoTabStrip\",b=\"img\",g=\"href\",v=\"prev\",_=\"show\",k=\"k-link\",w=\"k-last\",C=\"click\",x=\"error\",y=\":empty\",G=\"k-image\",A=\"k-first\",T=\"select\",S=\"activate\",E=\"k-content\",I=\"contentUrl\",R=\"mouseenter\",P=\"mouseleave\",U=\"contentLoad\",W=\"k-state-disabled\",B=\"k-state-default\",H=\"k-state-active\",D=\"k-state-focused\",N=\"k-state-hover\",q=\"k-tab-on-top\",F=\".k-item:not(.\"+W+\")\",z=\".k-tabstrip-items > \"+F+\":not(.\"+H+\")\",L={content:u(\"<div class='k-content'#= contentAttributes(data) # role='tabpanel'>#= content(item) #</div>\"),itemWrapper:u(\"<#= tag(item) # class='k-link'#= contentUrl(item) ##= textAttributes(item) #>#= image(item) ##= sprite(item) ##= text(item) #</#= tag(item) #>\"),item:u(\"<li class='#= wrapperCssClass(group, item) #' role='tab' #=item.active ? \\\"aria-selected='true'\\\" : ''#>#= itemWrapper(data) #</li>\"),image:u(\"<img class='k-image' alt='' src='#= imageUrl #' />\"),sprite:u(\"<span class='k-sprite #= spriteCssClass #'></span>\"),empty:u(\"\")},M={wrapperCssClass:function(t,e){var n=\"k-item\",r=e.index;return n+=e.enabled===!1?\" k-state-disabled\":\" k-state-default\",0===r&&(n+=\" k-first\"),r==t.length-1&&(n+=\" k-last\"),n},textAttributes:function(t){return t.url?\" href='\"+t.url+\"'\":\"\"},text:function(t){return t.encoded===!1?t.text:i.htmlEncode(t.text)},tag:function(t){return t.url?\"a\":\"span\"},contentAttributes:function(t){return t.active!==!0?\" style='display:none' aria-hidden='true' aria-expanded='false'\":\"\"},content:function(t){return t.content?t.content:t.contentUrl?\"\":\"&nbsp;\"},contentUrl:function(t){return t.contentUrl?i.attr(\"content-url\")+'=\"'+t.contentUrl+'\"':\"\"}},j=f.extend({init:function(e,n){var r,a,o,s=this;f.fn.init.call(s,e,n),s._animations(s.options),n=s.options,s._wrapper(),s._isRtl=i.support.isRtl(s.wrapper),s._tabindex(),s._updateClasses(),s._dataSource(),n.dataSource&&s.dataSource.fetch(),s._tabPosition(),s._scrollable(),s.options.contentUrls&&s.wrapper.find(\".k-tabstrip-items > .k-item\").each(function(e,n){t(n).find(\">.\"+k).data(I,s.options.contentUrls[e])}),s.wrapper.on(R+m+\" \"+P+m,z,s._toggleHover).on(\"focus\"+m,t.proxy(s._active,s)).on(\"blur\"+m,function(){s._current(null)}),s._keyDownProxy=t.proxy(s._keydown,s),n.navigatable&&s.wrapper.on(\"keydown\"+m,s._keyDownProxy),s.options.value&&(r=s.options.value),s.wrapper.children(\".k-tabstrip-items\").on(C+m,\".k-state-disabled .k-link\",!1).on(C+m,\" > \"+F,function(e){var n,r=s.wrapper[0];if(r!==document.activeElement)if(n=i.support.browser.msie)try{r.setActive()}catch(a){r.focus()}else r.focus();s._click(t(e.currentTarget))&&e.preventDefault()}),a=s.tabGroup.children(\"li.\"+H),o=s.contentHolder(a.index()),a[0]&&o.length>0&&0===o[0].childNodes.length&&s.activateTab(a.eq(0)),s.element.attr(\"role\",\"tablist\"),s.element[0].id&&(s._ariaId=s.element[0].id+\"_ts_active\"),s.value(r),i.notify(s)},_active:function(){var t=this.tabGroup.children().filter(\".\"+H);t=t[0]?t:this._endItem(\"first\"),t[0]&&this._current(t)},_endItem:function(t){return this.tabGroup.children(F)[t]()},_item:function(t,e){var n;return n=e===v?\"last\":\"first\",t?(t=t[e](),t[0]||(t=this._endItem(n)),t.hasClass(W)&&(t=this._item(t,e)),t):this._endItem(n)},_current:function(t){var n=this,r=n._focused,a=n._ariaId;return t===e?r:(r&&(r[0].id===a&&r.removeAttr(\"id\"),r.removeClass(D)),t&&(t.hasClass(H)||t.addClass(D),n.element.removeAttr(\"aria-activedescendant\"),a=t[0].id||a,a&&(t.attr(\"id\",a),n.element.attr(\"aria-activedescendant\",a))),n._focused=t,e)},_keydown:function(t){var n,r=this,a=t.keyCode,i=r._current(),o=r._isRtl;if(t.target==t.currentTarget){if(a==s.DOWN||a==s.RIGHT)n=o?v:\"next\";else if(a==s.UP||a==s.LEFT)n=o?\"next\":v;else if(a==s.ENTER||a==s.SPACEBAR)r._click(i),t.preventDefault();else{if(a==s.HOME)return r._click(r._endItem(\"first\")),t.preventDefault(),e;if(a==s.END)return r._click(r._endItem(\"last\")),t.preventDefault(),e}n&&(r._click(r._item(i,n)),t.preventDefault())}},_dataSource:function(){var e=this;e.dataSource&&e._refreshHandler?e.dataSource.unbind(\"change\",e._refreshHandler):e._refreshHandler=t.proxy(e.refresh,e),e.dataSource=i.data.DataSource.create(e.options.dataSource).bind(\"change\",e._refreshHandler)},setDataSource:function(t){var e=this;e.options.dataSource=t,e._dataSource(),e.dataSource.fetch()},_animations:function(t){t&&\"animation\"in t&&!t.animation&&(t.animation={open:{effects:{}},close:{effects:{}}})},refresh:function(t){var e,n,r,a,o=this,s=o.options,l=i.getter(s.dataTextField),c=i.getter(s.dataContentField),d=i.getter(s.dataContentUrlField),p=i.getter(s.dataImageUrlField),u=i.getter(s.dataUrlField),f=i.getter(s.dataSpriteCssClass),h=[],m=o.dataSource.view();for(t=t||{},r=t.action,r&&(m=t.items),e=0,a=m.length;a>e;e++)n={text:l(m[e])},s.dataContentField&&(n.content=c(m[e])),s.dataContentUrlField&&(n.contentUrl=d(m[e])),s.dataUrlField&&(n.url=u(m[e])),s.dataImageUrlField&&(n.imageUrl=p(m[e])),s.dataSpriteCssClass&&(n.spriteCssClass=f(m[e])),h[e]=n;if(\"add\"==t.action)t.index<o.tabGroup.children().length?o.insertBefore(h,o.tabGroup.children().eq(t.index)):o.append(h);else if(\"remove\"==t.action)for(e=0;m.length>e;e++)o.remove(t.index);else\"itemchange\"==t.action?(e=o.dataSource.view().indexOf(m[0]),t.field===s.dataTextField&&o.tabGroup.children().eq(e).find(\".k-link\").text(m[0].get(t.field))):(o.trigger(\"dataBinding\"),o.remove(\"li\"),o.append(h),o.trigger(\"dataBound\"))},value:function(n){var r=this;return n===e?r.select().text():(n!=r.value()&&r.tabGroup.children().each(function(){t.trim(t(this).text())==n&&r.select(this)}),e)},items:function(){return this.tabGroup[0].children},setOptions:function(t){var e=this,n=e.options.animation;e._animations(t),t.animation=p(!0,n,t.animation),t.navigatable?e.wrapper.on(\"keydown\"+m,e._keyDownProxy):e.wrapper.off(\"keydown\"+m,e._keyDownProxy),f.fn.setOptions.call(e,t)},events:[T,S,_,x,U,\"change\",\"dataBinding\",\"dataBound\"],options:{name:\"TabStrip\",dataTextField:\"\",dataContentField:\"\",dataImageUrlField:\"\",dataUrlField:\"\",dataSpriteCssClass:\"\",dataContentUrlField:\"\",tabPosition:\"top\",animation:{open:{effects:\"expand:vertical fadeIn\",duration:200},close:{duration:200}},collapsible:!1,navigatable:!0,contentUrls:!1,scrollable:{distance:200}},destroy:function(){var t=this,e=t.scrollWrap;f.fn.destroy.call(t),t._refreshHandler&&t.dataSource.unbind(\"change\",t._refreshHandler),t.wrapper.off(m),t.wrapper.children(\".k-tabstrip-items\").off(m),t._scrollableModeActive&&(t._scrollPrevButton.off().remove(),t._scrollNextButton.off().remove()),i.destroy(t.wrapper),e.children(\".k-tabstrip\").unwrap()},select:function(e){var n=this;return 0===arguments.length?n.tabGroup.children(\"li.\"+H):(isNaN(e)||(e=n.tabGroup.children().get(e)),e=n.tabGroup.find(e),t(e).each(function(e,r){r=t(r),r.hasClass(H)||n.trigger(T,{item:r[0],contentElement:n.contentHolder(r.index())[0]})||n.activateTab(r)}),n)},enable:function(t,e){return this._toggleDisabled(t,e!==!1),this},disable:function(t){return this._toggleDisabled(t,!1),this},reload:function(e){e=this.tabGroup.find(e);var n=this;return e.each(function(){var e=t(this),r=e.find(\".\"+k).data(I),a=n.contentHolder(e.index());r&&n.ajaxRequest(e,a,null,r)}),n},append:function(t){var e=this,n=e._create(t);return c(n.tabs,function(t){var r=n.contents[t];e.tabGroup.append(this),\"bottom\"==e.options.tabPosition?e.tabGroup.before(r):e._scrollableModeActive?e._scrollPrevButton.before(r):e.wrapper.append(r),e.angular(\"compile\",function(){return{elements:[r]}})}),r(e.tabGroup),e._updateContentElements(),e.resize(!0),e},insertBefore:function(e,n){n=this.tabGroup.find(n);var a=this,i=a._create(e),o=t(a.contentElement(n.index()));return c(i.tabs,function(t){var e=i.contents[t];n.before(this),o.before(e),a.angular(\"compile\",function(){return{elements:[e]}})}),r(a.tabGroup),a._updateContentElements(),a.resize(!0),a},insertAfter:function(e,n){n=this.tabGroup.find(n);var a=this,i=a._create(e),o=t(a.contentElement(n.index()));return c(i.tabs,function(t){var e=i.contents[t];n.after(this),o.after(e),a.angular(\"compile\",function(){return{elements:[e]}})}),r(a.tabGroup),a._updateContentElements(),a.resize(!0),a},remove:function(e){var n,r=this,a=typeof e;return\"string\"===a?e=r.tabGroup.find(e):\"number\"===a&&(e=r.tabGroup.children().eq(e)),n=e.map(function(){var e=r.contentElement(t(this).index());return i.destroy(e),e}),e.remove(),n.remove(),r._updateContentElements(),r.resize(!0),r},_create:function(r){var a,i,o,s=t.isPlainObject(r),c=this;return s||t.isArray(r)?(r=t.isArray(r)?r:[r],a=l(r,function(e,n){return t(j.renderItem({group:c.tabGroup,item:p(e,{index:n})}))}),i=l(r,function(n,r){return\"string\"==typeof n.content||n.contentUrl?t(j.renderContent({item:p(n,{index:r})})):e})):(a=\"string\"==typeof r&&\"<\"!=r[0]?c.element.find(r):t(r),i=t(),a.each(function(){if(o=t(\"<div class='\"+E+\"'/>\"),/k-tabstrip-items/.test(this.parentNode.className)){var e=parseInt(this.getAttribute(\"aria-controls\").replace(/^.*-/,\"\"),10)-1;o=t(c.contentElement(e))}i=i.add(o)}),n(a)),{tabs:a,contents:i}},_toggleDisabled:function(e,n){e=this.tabGroup.find(e),e.each(function(){t(this).toggleClass(B,n).toggleClass(W,!n)})},_updateClasses:function(){var a,i,o,s=this;s.wrapper.addClass(\"k-widget k-header k-tabstrip\"),s.tabGroup=s.wrapper.children(\"ul\").addClass(\"k-tabstrip-items k-reset\"),s.tabGroup[0]||(s.tabGroup=t(\"<ul class='k-tabstrip-items k-reset'/>\").appendTo(s.wrapper)),a=s.tabGroup.find(\"li\").addClass(\"k-item\"),a.length&&(i=a.filter(\".\"+H).index(),o=i>=0?i:e,s.tabGroup.contents().filter(function(){return 3==this.nodeType&&!d(this.nodeValue)}).remove()),i>=0&&a.eq(i).addClass(q),s.contentElements=s.wrapper.children(\"div\"),s.contentElements.addClass(E).eq(o).addClass(H).css({display:\"block\"}),a.length&&(n(a),r(s.tabGroup),s._updateContentElements())},_updateContentElements:function(){var e=this,n=e.options.contentUrls||[],r=e.tabGroup.find(\".k-item\"),a=(e.element.attr(\"id\")||i.guid())+\"-\",o=e.wrapper.children(\"div\");o.length&&r.length>o.length?(o.each(function(t){var e=parseInt(this.id.replace(a,\"\"),10),n=r.filter(\"[aria-controls=\"+a+e+\"]\"),i=a+(t+1);n.data(\"aria\",i),this.setAttribute(\"id\",i)}),r.each(function(){var e=t(this);this.setAttribute(\"aria-controls\",e.data(\"aria\")),e.removeData(\"aria\")})):r.each(function(r){var i=o.eq(r),s=a+(r+1);this.setAttribute(\"aria-controls\",s),!i.length&&n[r]?t(\"<div class='\"+E+\"'/>\").appendTo(e.wrapper).attr(\"id\",s):(i.attr(\"id\",s),t(this).children(\".k-loading\")[0]||n[r]||t(\"<span class='k-loading k-complete'/>\").prependTo(this)),i.attr(\"role\",\"tabpanel\"),i.filter(\":not(.\"+H+\")\").attr(\"aria-hidden\",!0).attr(\"aria-expanded\",!1),i.filter(\".\"+H).attr(\"aria-expanded\",!0)}),e.contentElements=e.contentAnimators=e.wrapper.children(\"div\"),e.tabsHeight=e.tabGroup.outerHeight()+parseInt(e.wrapper.css(\"border-top-width\"),10)+parseInt(e.wrapper.css(\"border-bottom-width\"),10),i.kineticScrollNeeded&&i.mobile.ui.Scroller&&(i.touchScroller(e.contentElements),e.contentElements=e.contentElements.children(\".km-scroll-container\"))},_wrapper:function(){var t=this;t.wrapper=t.element.is(\"ul\")?t.element.wrapAll(\"<div />\").parent():t.element,t.scrollWrap=t.wrapper.parent(\".k-tabstrip-wrapper\"),t.scrollWrap[0]||(t.scrollWrap=t.wrapper.wrapAll(\"<div class='k-tabstrip-wrapper' />\").parent())},_tabPosition:function(){var t=this,e=t.options.tabPosition;t.wrapper.addClass(\"k-floatwrap k-tabstrip-\"+e),\"bottom\"==e&&t.tabGroup.appendTo(t.wrapper),t.resize(!0)},_setContentElementsDimensions:function(){var t,e,n,r,a,i,o=this,s=o.options.tabPosition;\"left\"!=s&&\"right\"!=s||(t=o.wrapper.children(\".k-content\"),e=t.filter(\":visible\"),n=\"margin-\"+s,r=o.tabGroup,a=r.outerWidth(),i=Math.ceil(r.height())-parseInt(e.css(\"padding-top\"),10)-parseInt(e.css(\"padding-bottom\"),10)-parseInt(e.css(\"border-top-width\"),10)-parseInt(e.css(\"border-bottom-width\"),10),setTimeout(function(){t.css(n,a).css(\"min-height\",i)}))},_resize:function(){this._setContentElementsDimensions(),this._scrollable()},_sizeScrollWrap:function(t){var e,n;t.is(\":visible\")&&(e=this.options.tabPosition,n=Math.floor(t.outerHeight(!0))+(\"left\"===e||\"right\"===e?2:this.tabsHeight),this.scrollWrap.css(\"height\",n).css(\"height\"))},_toggleHover:function(e){t(e.currentTarget).toggleClass(N,e.type==R)},_click:function(t){var e,n,r=this,a=t.find(\".\"+k),i=a.attr(g),o=r.options.collapsible,s=r.contentHolder(t.index());if(t.closest(\".k-widget\")[0]==r.wrapper[0]){if(t.is(\".\"+W+(o?\"\":\",.\"+H)))return!0;if(n=a.data(I)||i&&(\"#\"==i.charAt(i.length-1)||-1!=i.indexOf(\"#\"+r.element[0].id+\"-\")),e=!i||n,r.tabGroup.children(\"[data-animating]\").length)return e;if(r.trigger(T,{item:t[0],contentElement:s[0]}))return!0;if(e!==!1)return o&&t.is(\".\"+H)?(r.deactivateTab(t),!0):(r.activateTab(t)&&(e=!0),e)}},_scrollable:function(){var t,e,n,r,o=this,s=o.options;o._scrollableAllowed()&&(o.wrapper.addClass(\"k-tabstrip-scrollable\"),t=o.wrapper[0].offsetWidth,e=o.tabGroup[0].scrollWidth,e>t&&!o._scrollableModeActive?(o._nowScrollingTabs=!1,o._isRtl=i.support.isRtl(o.element),o.wrapper.append(a(\"prev\",\"k-i-arrow-w\")+a(\"next\",\"k-i-arrow-e\")),n=o._scrollPrevButton=o.wrapper.children(\".k-tabstrip-prev\"),r=o._scrollNextButton=o.wrapper.children(\".k-tabstrip-next\"),o.tabGroup.css({marginLeft:n.outerWidth()+9,marginRight:r.outerWidth()+12}),n.on(\"mousedown\"+m,function(){o._nowScrollingTabs=!0,o._scrollTabsByDelta(s.scrollable.distance*(o._isRtl?1:-1))}),r.on(\"mousedown\"+m,function(){o._nowScrollingTabs=!0,o._scrollTabsByDelta(s.scrollable.distance*(o._isRtl?-1:1))}),n.add(r).on(\"mouseup\"+m,function(){o._nowScrollingTabs=!1}),o._scrollableModeActive=!0,o._toggleScrollButtons()):o._scrollableModeActive&&t>=e?(o._scrollableModeActive=!1,o.wrapper.removeClass(\"k-tabstrip-scrollable\"),o._scrollPrevButton.off().remove(),o._scrollNextButton.off().remove(),o.tabGroup.css({marginLeft:\"\",marginRight:\"\"})):o._scrollableModeActive?o._toggleScrollButtons():o.wrapper.removeClass(\"k-tabstrip-scrollable\"))},_scrollableAllowed:function(){var t=this.options;return t.scrollable&&!isNaN(t.scrollable.distance)&&(\"top\"==t.tabPosition||\"bottom\"==t.tabPosition)},_scrollTabsToItem:function(t){var e,n=this,r=n.tabGroup,a=r.scrollLeft(),i=t.outerWidth(),o=n._isRtl?t.position().left:t.position().left-r.children().first().position().left,s=r[0].offsetWidth,l=Math.ceil(parseFloat(r.css(\"padding-left\")));n._isRtl?0>o?e=a+o-(s-a)-l:o+i>s&&(e=a+o-i+2*l):o+i>a+s?e=o+i-s+2*l:a>o&&(e=o-l),r.finish().animate({scrollLeft:e},\"fast\",\"linear\",function(){n._toggleScrollButtons()})},_scrollTabsByDelta:function(t){var e=this,n=e.tabGroup,r=n.scrollLeft();n.finish().animate({scrollLeft:r+t},\"fast\",\"linear\",function(){e._nowScrollingTabs?e._scrollTabsByDelta(t):e._toggleScrollButtons()})},_toggleScrollButtons:function(){var t=this,e=t.tabGroup,n=e.scrollLeft();t._scrollPrevButton.toggle(t._isRtl?e[0].scrollWidth-e[0].offsetWidth-1>n:0!==n),t._scrollNextButton.toggle(t._isRtl?0!==n:e[0].scrollWidth-e[0].offsetWidth-1>n)},deactivateTab:function(t){var e=this,n=e.options.animation,r=n.open,a=p({},n.close),o=a&&\"effects\"in a;t=e.tabGroup.find(t),a=p(o?a:p({reverse:!0},r),{hide:!0}),i.size(r.effects)?(t.kendoAddClass(B,{duration:r.duration}),t.kendoRemoveClass(H,{duration:r.duration})):(t.addClass(B),t.removeClass(H)),t.removeAttr(\"aria-selected\"),e.contentAnimators.filter(\".\"+H).kendoStop(!0,!0).kendoAnimate(a).removeClass(H).attr(\"aria-hidden\",!0)},activateTab:function(t){var e,n,r,a,o,s,l,c,d,u,f,h,m,b,g;if(!this.tabGroup.children(\"[data-animating]\").length)return t=this.tabGroup.find(t),e=this,n=e.options.animation,r=n.open,a=p({},n.close),o=a&&\"effects\"in a,s=t.parent().children(),l=s.filter(\".\"+H),c=s.index(t),a=p(o?a:p({reverse:!0},r),{hide:!0}),i.size(r.effects)?(l.kendoRemoveClass(H,{duration:a.duration}),t.kendoRemoveClass(N,{duration:a.duration})):(l.removeClass(H),t.removeClass(N)),d=e.contentAnimators,e.inRequest&&(e.xhr.abort(),e.inRequest=!1),0===d.length?(e.tabGroup.find(\".\"+q).removeClass(q),t.addClass(q).css(\"z-index\"),t.addClass(H),e._current(t),e.trigger(\"change\"),e._scrollableModeActive&&e._scrollTabsToItem(t),!1):(u=d.filter(\".\"+H),f=e.contentHolder(c),h=f.closest(\".k-content\"),e.tabsHeight=e.tabGroup.outerHeight()+parseInt(e.wrapper.css(\"border-top-width\"),10)+parseInt(e.wrapper.css(\"border-bottom-width\"),10),e._sizeScrollWrap(u),0===f.length?(u.removeClass(H).attr(\"aria-hidden\",!0).kendoStop(!0,!0).kendoAnimate(a),!1):(t.attr(\"data-animating\",!0),m=(t.children(\".\"+k).data(I)||!1)&&f.is(y),b=function(){e.tabGroup.find(\".\"+q).removeClass(q),t.addClass(q).css(\"z-index\"),i.size(r.effects)?(l.kendoAddClass(B,{duration:r.duration}),t.kendoAddClass(H,{duration:r.duration})):(l.addClass(B),t.addClass(H)),l.removeAttr(\"aria-selected\"),t.attr(\"aria-selected\",!0),e._current(t),e._sizeScrollWrap(h),h.addClass(H).removeAttr(\"aria-hidden\").kendoStop(!0,!0).attr(\"aria-expanded\",!0).kendoAnimate(p({init:function(){e.trigger(_,{item:t[0],contentElement:f[0]}),i.resize(f)}},r,{complete:function(){t.removeAttr(\"data-animating\"),e.trigger(S,{item:t[0],contentElement:f[0]}),i.resize(f),e.scrollWrap.css(\"height\",\"\").css(\"height\")}}))},g=function(){m?(t.removeAttr(\"data-animating\"),e.ajaxRequest(t,f,function(){t.attr(\"data-animating\",!0),b(),e.trigger(\"change\")})):(b(),e.trigger(\"change\")),e._scrollableModeActive&&e._scrollTabsToItem(t)},u.removeClass(H),u.attr(\"aria-hidden\",!0),u.attr(\"aria-expanded\",!1),u.length?u.kendoStop(!0,!0).kendoAnimate(p({complete:g},a)):g(),!0))},contentElement:function(t){var n,r,a,o;if(isNaN(t-0))return e;if(n=this.contentElements&&this.contentElements[0]&&!i.kineticScrollNeeded?this.contentElements:this.contentAnimators,t=n&&0>t?n.length+t:t,r=RegExp(\"-\"+(t+1)+\"$\"),n)for(a=0,o=n.length;o>a;a++)if(r.test(n.eq(a).closest(\".k-content\")[0].id))return n[a];return e},contentHolder:function(e){var n=t(this.contentElement(e)),r=n.children(\".km-scroll-container\");return i.support.touch&&r[0]?r:n},ajaxRequest:function(e,n,r,a){var o,s,l,c,d,p,u,f,h;e=this.tabGroup.find(e),o=this,s=t.ajaxSettings.xhr,l=e.find(\".\"+k),c={},d=e.width()/2,p=!1,u=e.find(\".k-loading\").removeClass(\"k-complete\"),u[0]||(u=t(\"<span class='k-loading'/>\").prependTo(e)),f=2*d-u.width(),h=function(){u.animate({marginLeft:(parseInt(u.css(\"marginLeft\"),10)||0)<d?f:0},500,h)},i.support.browser.msie&&10>i.support.browser.version&&setTimeout(h,40),a=a||l.data(I)||l.attr(g),o.inRequest=!0,o.xhr=t.ajax({type:\"GET\",cache:!1,url:a,dataType:\"html\",data:c,xhr:function(){var e=this,n=s(),r=e.progressUpload?\"progressUpload\":e.progress?\"progress\":!1;return n&&t.each([n,n.upload],function(){this.addEventListener&&this.addEventListener(\"progress\",function(t){r&&e[r](t)},!1)}),e.noProgress=!(window.XMLHttpRequest&&\"upload\"in new XMLHttpRequest),n},progress:function(t){if(t.lengthComputable){var e=parseInt(t.loaded/t.total*100,10)+\"%\";u.stop(!0).addClass(\"k-progress\").css({width:e,marginLeft:0})}},error:function(t,e){o.trigger(\"error\",{xhr:t,status:e})&&this.complete()},stopProgress:function(){clearInterval(p),u.stop(!0).addClass(\"k-progress\")[0].style.cssText=\"\"},complete:function(t){o.inRequest=!1,this.noProgress?setTimeout(this.stopProgress,500):this.stopProgress(),\"abort\"==t.statusText&&u.remove()},success:function(t){var s,l,c;u.addClass(\"k-complete\");try{s=this,l=10,s.noProgress&&(u.width(l+\"%\"),p=setInterval(function(){s.progress({lengthComputable:!0,loaded:Math.min(l,100),total:100}),l+=10},40)),o.angular(\"cleanup\",function(){return{elements:n.get()}}),i.destroy(n),n.html(t)}catch(d){c=window.console,c&&c.error&&c.error(d.name+\": \"+d.message+\" in \"+a),this.error(this.xhr,\"error\")}r&&r.call(o,n),o.angular(\"compile\",function(){return{elements:n.get()}}),o.trigger(U,{item:e[0],contentElement:n[0]})}})}});p(j,{renderItem:function(t){t=p({tabStrip:{},group:{}},t);var e=L.empty,n=t.item;return L.item(p(t,{image:n.imageUrl?L.image:e,sprite:n.spriteCssClass?L.sprite:e,itemWrapper:L.itemWrapper},M))},renderContent:function(t){return L.content(p(t,M))}}),i.ui.plugin(j)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(t,e,n){(n||e)()});\n//# sourceMappingURL=kendo.tabstrip.min.js.map\n","import { EstimateLineItemOptionRecord, IEstimateLineItemOptionData } from \"../records/EstimateLineItemOption\";\nimport { createSelector } from \"reselect\";\nimport { RootState } from \"../reducers\";\nimport { List, Map } from \"immutable\";\n\nexport const estimateLineItemOptionsById = (state: RootState) => state.getIn([\"estimateLineItemOptions\", \"byId\"]);\nexport const lastSavedEstimateLineItemOptionsById = (state: RootState) =>\n  state.getIn([\"estimateLineItemOptions\", \"lastSavedById\"]);\n\nexport const estimateLineItemOptions = createSelector(\n  [estimateLineItemOptionsById, (_, props: any) => props],\n  (\n    estimateLineItemOptionsById: Map<number, EstimateLineItemOptionRecord>,\n    props: any,\n  ): List<EstimateLineItemOptionRecord> => {\n    return estimateLineItemOptionsProcess(estimateLineItemOptionsById, props);\n  },\n);\n\nexport const lastSavedEstimateLineItemOptions = createSelector(\n  [lastSavedEstimateLineItemOptionsById, (_, props: any) => props],\n  (\n    estimateLineItemOptionsById: Map<number, EstimateLineItemOptionRecord>,\n    props: any,\n  ): List<EstimateLineItemOptionRecord> => {\n    return estimateLineItemOptionsProcess(estimateLineItemOptionsById, props);\n  },\n);\n\nconst estimateLineItemOptionsProcess = (estimateLineItemOptionsById, props) => {\n  const { estimateLineItemOptionIds } = props;\n  let { fullEstimate } = props;\n  if (_.isUndefined(fullEstimate)) {\n    fullEstimate = false;\n  }\n\n  return estimateLineItemOptionIds\n    .map((optionId: number) => {\n      return estimateLineItemOptionsById.get(optionId);\n    })\n    .filter((lineItemOption: EstimateLineItemOptionRecord) => {\n      return fullEstimate || !lineItemOption._destroy;\n    })\n    .toList();\n};\n\nexport const toEstimateLineItemOptionsJson = createSelector(\n  [estimateLineItemOptions, (state, props) => ({ state, props })],\n  (estimateLineItemOptions: List<EstimateLineItemOptionRecord>, stateProps: any): IEstimateLineItemOptionData[] => {\n    return estimateLineItemOptions\n      .map((option: EstimateLineItemOptionRecord) => {\n        const optionData = option.toJSON() as any;\n\n        if (!optionData._destroy) {\n          delete optionData._destroy;\n        }\n\n        return optionData as IEstimateLineItemOptionData;\n      })\n      .toArray();\n  },\n);\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { IEstimateComparisonData, EstimateComparisonRecord, toJSON } from \"../records/EstimateComparison\";\n\ninterface IEstimateComparisonResponse {\n  estimate_comparison: IEstimateComparisonData;\n}\n\nexport const url = \"api/v1/jobs/:job_id/estimate_comparisons\";\n\nexport const loadByJob = async (jobId: number): Promise<IEstimateComparisonData> => {\n  const actionUrl = url.replace(\":job_id\", jobId.toString());\n  const resp = await fetcher.get<IEstimateComparisonResponse>(actionUrl);\n  return resp.estimate_comparison;\n};\n\nexport const create = async (estimateComparison: EstimateComparisonRecord): Promise<IEstimateComparisonData> => {\n  const actionUrl = url.replace(\":job_id\", estimateComparison.job_id.toString());\n\n  const resp = await fetcher.post<IEstimateComparisonResponse>(actionUrl, {\n    estimate_comparison: cleanProps(toJSON(estimateComparison)),\n  });\n  return resp.estimate_comparison;\n};\n\nexport const update = async (estimateComparison: EstimateComparisonRecord): Promise<IEstimateComparisonData> => {\n  const tempUrl = url.replace(\":job_id\", estimateComparison.job_id.toString());\n  const actionUrl = fetcher.joinUrls(tempUrl, estimateComparison.id.toString());\n  const resp = await fetcher.patch<IEstimateComparisonResponse>(actionUrl, {\n    estimate_comparison: cleanProps(toJSON(estimateComparison)),\n  });\n  return resp.estimate_comparison;\n};\n\nexport const cleanProps = (ecl: IEstimateComparisonData): any => {\n  if (ecl.id === 0) {\n    delete ecl.id;\n  }\n\n  if (ecl.estimate_comparison_links) {\n    (ecl as any).estimate_comparison_links_attributes = ecl.estimate_comparison_links.map((link) => {\n      if (link.id === 0) {\n        delete link.id;\n      }\n      return link;\n    });\n    delete ecl.estimate_comparison_links;\n  }\n  return ecl;\n};\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { ThunkAction, ThunkDispatch } from \"redux-thunk\";\nimport { RootActions, RootState } from \"./index\";\nimport { EstimateComparisonRecord } from \"app2/src/records/EstimateComparison\";\nimport * as estimateComparisonService from \"app2/src/api/estimateComparison.service\";\nimport { fromJSON as ecFromJSON } from \"app2/src/records/EstimateComparison\";\nimport * as estimateActions from \"app2/src/reducers/estimate.actions\";\n\nexport const FETCH_ESTIMATE_COMPARISON = \"@estimateComparison/FETCH_ESTIMATE_COMPARISON\";\nexport const RECEIVE_ESTIMATE_COMPARISON = \"@estimateComparison/RECEIVE_ESTIMATE_COMPARISON\";\nexport const SET_LOADED = \"@estimateComparison/SET_LOADED\";\nexport const BUILD_ESTIMATE_COMPARISON = \"@estimateComparison/BUILD_ESTIMATE_COMPARISON\";\nexport const SHOW_DRAWER = \"@estimateComparison/SHOW_DRAWER\";\nexport const HIDE_DRAWER = \"@estimateComparison/HIDE_DRAWER\";\nexport const VIEW_ESTIMATE_COMPARISON = \"@estimateComparison/VIEW_ESTIMATE_COMPARISON\";\nexport const ADD_ESTIMATE_COMPARISON_LINK = \"@estimateComparison/ADD_ESTIMATE_COMPARISON_LINK\";\nexport const REMOVE_ESTIMATE_COMPARISON_LINK = \"@estimateComparison/REMOVE_ESTIMATE_COMPARISON_LINK\";\n\nexport const Actions = {\n  fetchEstimateComparison: (jobId: number) => createAction(FETCH_ESTIMATE_COMPARISON, { jobId }),\n  receiveEstimateComparison: (estimateComparison: EstimateComparisonRecord) =>\n    createAction(RECEIVE_ESTIMATE_COMPARISON, { estimateComparison }),\n  setLoaded: (jobId: number) => createAction(SET_LOADED, { jobId }),\n  buildEstimateComparison: (jobId: number, estimateIds: number[]) =>\n    createAction(BUILD_ESTIMATE_COMPARISON, { jobId, estimateIds }),\n  viewEstimateComparison: (jobId: number) => createAction(VIEW_ESTIMATE_COMPARISON, { jobId }),\n  showDrawer: () => createAction(SHOW_DRAWER),\n  hideDrawer: () => createAction(HIDE_DRAWER),\n  addEstimateComparisonLink: (estimateId: number, jobId: number) =>\n    createAction(ADD_ESTIMATE_COMPARISON_LINK, { estimateId, jobId }),\n  removeEstimateComparisonLink: (estimateId: number, jobId: number) =>\n    createAction(REMOVE_ESTIMATE_COMPARISON_LINK, { estimateId, jobId }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  saveEstimateComparison: (estimateComparison: EstimateComparisonRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: ThunkDispatch<RootState, {}, RootActions>) => {\n      dispatch(Actions.fetchEstimateComparison(estimateComparison.job_id));\n      const promises = [];\n      estimateComparison.estimate_comparison_links.forEach((ecl, idx) => {\n        if (ecl._destroy && ecl.id === 0) {\n          promises.push(Promise.resolve({ id: 0, index: idx }));\n        } else {\n          promises.push(dispatch(estimateActions.AsyncActions.updateOrCreateEstimate(ecl.estimate_id, idx)));\n        }\n      });\n\n      const response = await Promise.all(promises);\n      let ecls = estimateComparison.estimate_comparison_links.map((ecl, index) => {\n        if (ecl.id === 0 || ecl.estimate_id < 1) {\n          return ecl.set(\"estimate_id\", response.find((object) => object.index === index).id);\n        } else {\n          return ecl;\n        }\n      });\n\n      ecls = ecls.filter((ecl) => ecl.estimate_id > 0);\n\n      estimateComparison = estimateComparison.set(\"estimate_comparison_links\", ecls);\n\n      if (estimateComparison.id === 0) {\n        try {\n          const response = await estimateComparisonService.create(estimateComparison);\n          dispatch(Actions.receiveEstimateComparison(ecFromJSON(response)));\n        } catch (response) {\n          dispatch(Actions.setLoaded(estimateComparison.job_id));\n        }\n      } else {\n        try {\n          const response = await estimateComparisonService.update(estimateComparison);\n          dispatch(Actions.receiveEstimateComparison(ecFromJSON(response)));\n        } catch (response) {\n          dispatch(Actions.setLoaded(estimateComparison.job_id));\n        }\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { Record } from \"immutable\";\nimport { Nullable, checkDate } from \".\";\nimport { FlashLevelTypes } from \"app/src/Common/FlashLevels\";\n\n/**\n * AppMessage content (nested structure from backend)\n */\nexport interface IAppMessageContentData {\n  id: string;\n  subject: string;\n  body_html: string;\n  level: FlashLevelTypes;\n  created_at: string;\n}\n\nexport interface IAppMessageContent extends Omit<IAppMessageContentData, \"created_at\"> {\n  created_at: Date;\n}\n\nexport class AppMessageContentRecord extends Record<IAppMessageContent>({\n  id: \"\",\n  subject: \"\",\n  body_html: \"\",\n  level: \"info\",\n  created_at: new Date(),\n}) {}\n\nexport const appMessageContentFromJSON = (json: Partial<IAppMessageContentData>): AppMessageContentRecord => {\n  const record: Partial<IAppMessageContent> = {\n    ...json,\n  };\n\n  if (json.created_at) {\n    record.created_at = checkDate(json.created_at);\n  }\n\n  return new AppMessageContentRecord(record as IAppMessageContent);\n};\n\n/**\n * AppMessageRecipient (the main message record from backend)\n */\nexport interface IAppMessageRecipientData {\n  id: string;\n  app_message_id: string;\n  action_at: Nullable<string>;\n  dismissed_at: Nullable<string>;\n  read_at: Nullable<string>;\n  archived_at: Nullable<string>;\n  created_at: string;\n  app_message: IAppMessageContentData;\n}\n\nexport interface IAppMessageRecipient\n  extends Omit<\n    IAppMessageRecipientData,\n    \"app_message\" | \"action_at\" | \"dismissed_at\" | \"read_at\" | \"archived_at\" | \"created_at\"\n  > {\n  action_at: Nullable<Date>;\n  dismissed_at: Nullable<Date>;\n  read_at: Nullable<Date>;\n  archived_at: Nullable<Date>;\n  created_at: Date;\n  app_message: AppMessageContentRecord;\n}\n\nexport class AppMessageRecipientRecord extends Record<IAppMessageRecipient>({\n  id: \"\",\n  app_message_id: \"\",\n  action_at: null,\n  dismissed_at: null,\n  read_at: null,\n  archived_at: null,\n  created_at: new Date(),\n  app_message: new AppMessageContentRecord(),\n}) {}\n\nexport const appMessageRecipientFromJSON = (json: Partial<IAppMessageRecipientData>): AppMessageRecipientRecord => {\n  const record: Partial<IAppMessageRecipient> = {\n    ...json,\n  } as any;\n\n  // Convert date strings to Date objects\n  if (json.action_at) {\n    record.action_at = checkDate(json.action_at);\n  }\n\n  if (json.dismissed_at) {\n    record.dismissed_at = checkDate(json.dismissed_at);\n  }\n\n  if (json.read_at) {\n    record.read_at = checkDate(json.read_at);\n  }\n\n  if (json.archived_at) {\n    record.archived_at = checkDate(json.archived_at);\n  }\n\n  if (json.created_at) {\n    record.created_at = checkDate(json.created_at);\n  }\n\n  // Convert nested app_message\n  if (json.app_message) {\n    record.app_message = appMessageContentFromJSON(json.app_message);\n  } else {\n    record.app_message = new AppMessageContentRecord();\n  }\n\n  return new AppMessageRecipientRecord(record as IAppMessageRecipient);\n};\n\nexport const appMessageRecipientToJSON = (record: AppMessageRecipientRecord): IAppMessageRecipientData => {\n  return {\n    id: record.id,\n    app_message_id: record.app_message_id,\n    action_at: record.action_at ? record.action_at.toISOString() : null,\n    dismissed_at: record.dismissed_at ? record.dismissed_at.toISOString() : null,\n    read_at: record.read_at ? record.read_at.toISOString() : null,\n    archived_at: record.archived_at ? record.archived_at.toISOString() : null,\n    created_at: record.created_at.toISOString(),\n    app_message: {\n      id: record.app_message.id,\n      subject: record.app_message.subject,\n      body_html: record.app_message.body_html,\n      level: record.app_message.level,\n      created_at: record.app_message.created_at.toISOString(),\n    },\n  };\n};\n\nexport const isRead = (message: AppMessageRecipientRecord): boolean => {\n  if (!message) return false;\n\n  return message.read_at !== null || message.action_at !== null;\n};\n","import { QueryParamsRecord } from \"app2/src/records/Page\";\n\nexport interface IBaseData {\n  id: number;\n  selected: boolean;\n  loading: boolean;\n  _destroy: boolean;\n  sort_order: number;\n  errors: string[];\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const baseCleanProps = <T extends Partial<IBaseData>>(params: T): T => {\n  if (params.id <= 0) {\n    delete params.id;\n  }\n\n  if (params.sort_order === null || params.sort_order === undefined) delete params.sort_order;\n  if (!params._destroy) delete params._destroy;\n\n  delete params.selected;\n  delete params.loading;\n  delete params.errors;\n  delete params.created_at;\n  delete params.updated_at;\n\n  return params;\n};\n\nexport const listParams = (queryParams: QueryParamsRecord): any => {\n  let params: any = { sort_by: \"sort_order\", sort_order: \"asc\" };\n\n  if (!queryParams.equals(new QueryParamsRecord())) {\n    params = { ...params, ...queryParams.toJS() };\n    delete params.parameters;\n  }\n  if (!params.folder_id) delete params.folder_id;\n  if (!params.filter) delete params.filter;\n  if (!params.query) delete params.query;\n\n  return params;\n};\n","import { List, Record } from \"immutable\";\nimport { fromJSON as fileFromJSON, IFileData, FileRecord } from \"./File\";\nimport { fromJSON as signedDocFromJSON, ISignedDocumentData, SignedDocumentRecord } from \"./SignedDocument\";\nimport { Nullable } from \".\";\nimport { ITaskData } from \"app2/src/records/Task\";\n\nexport const fromJSON = (json: Partial<IDocumentData>): DocumentRecord => {\n  const record: IDocumentRecord = { ...(json as any) };\n\n  if (json.file) {\n    record.file = fileFromJSON(json.file);\n  }\n\n  if (json.signed_document) {\n    record.signed_document = signedDocFromJSON(json.signed_document);\n  }\n\n  if (json.task) {\n    record.task_id = json.task.id;\n  }\n\n  record.displayInProposal = record.display === \"both\" || record.display === \"estimate\";\n  record.displayInAgreement = record.display === \"both\" || record.display === \"contract\";\n  record.displayInProposalWatermark = record.display === \"estimate_watermark\";\n  record.displayInAgreementWatermark = record.display === \"contract_watermark\";\n  record.displayInResource = record.display === \"resource\";\n\n  return new DocumentRecord(record);\n};\n\nexport const toJSON = (record: DocumentRecord): IDocumentData => {\n  return record.toJS();\n};\n\nexport const toFormData = (record: DocumentRecord): any => {\n  const data = new FormData();\n  if (record.uuid) {\n    data.set(\"document[uuid]\", record.uuid);\n  }\n  if (record.id > 0) {\n    data.set(\"document[id]\", record.id as any);\n  }\n  data.set(\"document[name]\", record.name);\n  data.set(\"document[link]\", record.import_type);\n  if (record.data && record.data instanceof File) {\n    data.set(\"document[file]\", record.data as any);\n  } else if (record.data) {\n    data.set(\"document[file]\", record.data as any, record.name);\n  }\n  data.set(\"document[display]\", record.display);\n  data.set(\"document[documentable_id]\", record.documentable_id.toString());\n  data.set(\"document[documentable_type]\", record.documentable_type);\n  if (record.folder_id > 0) {\n    data.set(\"document[folder_id]\", record.folder_id.toString());\n  }\n  return data;\n};\n\nexport const setDisplay = (record: DocumentRecord): DocumentDisplayType => {\n  let display = DocumentDisplay.do_not_display;\n  if (record.displayInProposal === true && record.displayInAgreement === true) {\n    display = DocumentDisplay.both;\n  } else if (record.displayInProposal === false && record.displayInAgreement === true) {\n    display = DocumentDisplay.contract;\n  } else if (record.displayInProposal === true && record.displayInAgreement === false) {\n    display = DocumentDisplay.estimate;\n  } else if (record.displayInProposalWatermark === true) {\n    display = DocumentDisplay.estimate_watermark;\n  } else if (record.displayInAgreementWatermark === true) {\n    display = DocumentDisplay.contract_watermark;\n  } else if (record.displayInResource === true) {\n    display = DocumentDisplay.resource;\n  }\n  return display;\n};\n\nexport const isMeasurementFile = (document: DocumentRecord) => {\n  return _.contains(validImportTypes, document.import_type);\n};\n\nexport const isPdfFile = (document: DocumentRecord): boolean => {\n  return document?.content_type === \"application/pdf\";\n};\n\nexport const documentName = (document: Nullable<DocumentRecord>): string | undefined => {\n  return document?.get(\"name\", \"\")?.split(\".\")[0];\n};\n\nexport const validImportTypes: string[] = [\n  \"hover_excel\",\n  \"roofscope_csv\",\n  \"roofsnap_csv\",\n  \"eagleview_xml\",\n  \"window_nation_json\",\n  \"hover_xml\",\n  \"picto_connect_csv\",\n  \"skymeasure_csv\",\n  \"skymeasure_xml\",\n  \"aerialreports_xml\",\n  \"gaf_quickmeasure_xml\",\n  \"xactimate_xml\",\n  \"ez3d_csv\",\n];\n\nexport enum DocumentDisplay {\n  do_not_display = \"do_not_display\",\n  contract = \"contract\",\n  estimate = \"estimate\",\n  both = \"both\",\n  estimate_watermark = \"estimate_watermark\",\n  contract_watermark = \"contract_watermark\",\n  resource = \"resource\",\n}\n\nexport type DocumentDisplayType =\n  | \"do_not_display\"\n  | \"contract\"\n  | \"estimate\"\n  | \"both\"\n  | \"estimate_watermark\"\n  | \"contract_watermark\"\n  | \"resource\";\n\nexport interface IDocumentData {\n  uuid: string;\n  id: number;\n  content_type: string;\n  name?: string;\n  import_type?: string;\n  file?: IFileData | File;\n  display?: DocumentDisplayType;\n  folder_id?: number;\n  documentable_id?: number;\n  documentable_type?: string;\n  md5_sum?: string;\n  sort_order?: number;\n  url?: string;\n  data?: Nullable<File>;\n  task?: ITaskData;\n  signed_document?: ISignedDocumentData;\n  loading?: boolean;\n\n  created_at: Date;\n  updated_at: Date;\n  base64: Nullable<string>;\n}\n\nexport interface IDocumentRecord {\n  uuid: Nullable<string>;\n  id: Nullable<number>;\n  content_type: Nullable<string>;\n  title: Nullable<string>;\n  name: Nullable<string>;\n  display: DocumentDisplayType;\n  displayInProposal: Nullable<boolean>;\n  displayInAgreement: Nullable<boolean>;\n  displayInProposalWatermark: Nullable<boolean>;\n  displayInAgreementWatermark: Nullable<boolean>;\n  displayInResource: Nullable<boolean>;\n  file: Nullable<FileRecord>;\n  file_size: Nullable<number>;\n  import_type?: Nullable<string>;\n  folder_id: Nullable<number>;\n  documentable_id: Nullable<number>;\n  documentable_type: Nullable<string>;\n  md5_sum: Nullable<string>;\n  sort_order: Nullable<number>;\n  data?: Nullable<File>;\n  task_id?: Nullable<string>;\n  url: Nullable<string>;\n  loading: boolean;\n  selected: boolean;\n  _destroy: Nullable<boolean>;\n\n  signed_document: Nullable<SignedDocumentRecord>;\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n  base64: Nullable<string>;\n}\n\nexport const defaultDocumentProps = {\n  uuid: null,\n  id: 0,\n  content_type: null,\n  title: null,\n  name: null,\n  display: null,\n  displayInProposal: null,\n  displayInAgreement: null,\n  displayInProposalWatermark: null,\n  displayInAgreementWatermark: null,\n  displayInResource: null,\n  file: null,\n  data: null,\n  task_id: null,\n  url: null,\n  file_size: null,\n  folder_id: null,\n  documentable_id: null,\n  documentable_type: null,\n  import_type: null,\n  md5_sum: null,\n  sort_order: null,\n  signed_document: null,\n  _destroy: null,\n  created_at: null,\n  updated_at: null,\n  selected: false,\n  loading: false,\n  base64: null,\n};\n\nexport class DocumentRecord extends Record<IDocumentRecord>(defaultDocumentProps) implements IDocumentRecord {}\n","import { RootState } from \"app2/src/reducers\";\nimport { List } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { WallFacadeRecord } from \"app2/src/records/WallFacade\";\n\nexport const rootKey = \"wallFacades\";\n\n/**\n * Returns a WallFacade record\n *\n * @param {RootState} state\n * @param {{ wallFacadeId: number }} options\n * @returns {WallFacadeRecord}\n */\nexport const wallFacade = (state: RootState, props: any) => state.getIn([rootKey, \"byId\", props.wallFacadeId]);\n\n/**\n * Returns a list of WallFacade records\n *\n * @param {RootState} state\n * @param {{ wallFacadeIds: number }} options\n * @returns {List<WallFacadeRecord>}\n */\nexport const wallFacades = createSelector(\n  [(state, props) => ({ state, props })],\n  (stateProps: any): List<WallFacadeRecord> => {\n    const { state, props } = stateProps;\n    const { wallFacadeIds } = props;\n    return wallFacadeIds.map((id: number) => wallFacade(state, { wallFacadeId: id }));\n  },\n);\n","import { baseCleanProps } from \"app2/src/api/Api\";\nimport { ITaskData, TaskRecord } from \"app2/src/records/Task\";\nimport { fetcher } from \"../helpers/Fetcher\";\nimport { IJobData, JobRecord } from \"../records/Job\";\nimport { calculateUpdatedSince, JobQueryRecord } from \"app2/src/components/JobList/JobQuery\";\nimport { downloadFile } from \"app2/src/helpers/File\";\nimport { useSelector } from \"app2/src/storeRegistry\";\nimport { currentUserOrg } from \"app2/src/selectors/user.selectors\";\n\nexport interface IJobOptions {\n  org_id: number;\n  id?: number;\n}\n\nexport interface IJobIndexResponse {\n  jobs: IJobData[];\n}\n\nexport interface IJobResponse {\n  job: IJobData;\n}\n\nexport interface IJobIndexOptions {\n  org_id: number;\n}\n\nexport interface IInviteArgs {\n  id?: number;\n  options?: any;\n  emails: string;\n  invite_method: \"sms\" | \"email\";\n  invite_type: \"image_uploader\" | \"screenshare\";\n}\n\nexport const includes = [\n  \"address\",\n  \"customer_address\",\n  \"assignments\",\n  \"notes\",\n  \"state_log\",\n  \"job_states\",\n  \"appointments\",\n  \"org\",\n  \"settings\",\n  \"lead_sources\",\n  \"job_types\",\n  \"presentation_count\",\n  \"visualizations\",\n  \"preferences\",\n  \"reports\",\n  \"lead\",\n  \"weather_property\",\n  \"estimate_comparison\",\n];\n\nexport const url = \"api/v1/orgs/:org_id/jobs\";\nexport const jobUrl = \"api/v1/jobs\";\n\nexport const load = async (options: IJobOptions): Promise<IJobResponse> => {\n  const { org_id, id } = options;\n  const actionUrl = fetcher.joinUrls(url.replace(\":org_id\", org_id.toString()), id.toString());\n  return await fetcher.get<IJobResponse>(actionUrl);\n};\n\nexport const update = async (job: JobRecord): Promise<IJobResponse> => {\n  const actionUrl = fetcher.joinUrls(jobUrl, job.id.toString());\n  return fetcher.patch<IJobResponse>(actionUrl, { job: cleanProps(job), include: includes });\n};\n\nexport const archive = async (options: IJobOptions): Promise<void> => {\n  const { org_id, id } = options;\n  const actionUrl = fetcher.joinUrls(url.replace(\":org_id\", org_id.toString()), id.toString());\n  await fetcher.delete<void>(actionUrl);\n};\n\nexport const unarchive = async (options: IJobOptions): Promise<void> => {\n  const { org_id, id } = options;\n  const actionUrl = fetcher.joinUrls(url.replace(\":org_id\", org_id.toString()), id.toString(), \"unarchive\");\n  await fetcher.patch<void>(actionUrl);\n};\n\nexport const view = async (orgId: number, jobId: number): Promise<any> => {\n  const actionUrl = fetcher.joinUrls(url.replace(\":org_id\", orgId.toString()), jobId.toString(), \"view\");\n  const response = await fetcher.post(actionUrl);\n  return response;\n};\n\nexport const importJobs = async (orgId: number, jobCsvData: string) => {\n  const actionUrl = fetcher.joinUrls(url.replace(\":org_id\", orgId.toString()), \"import\");\n  const response = await fetcher.post(actionUrl, { file: jobCsvData });\n  return response;\n};\n\nexport const invite = async (args: IInviteArgs): Promise<{ task: TaskRecord }> => {\n  const actionUrl = fetcher.joinUrls(jobUrl, args.id.toString(), \"invite\");\n\n  return await fetcher.post(actionUrl, args);\n};\n\nexport const cleanProps = (job: JobRecord): IJobData => {\n  let jobParams = job.toJS();\n  jobParams = baseCleanProps(jobParams);\n\n  return jobParams as any as IJobData;\n};\n\nexport const loadSamples = async (org_id: number): Promise<{ sample_jobs: string[] }> => {\n  const url = fetcher.joinUrls(jobUrl, \"sample_list\");\n  return await fetcher.get(url, { org_id });\n};\n\nexport const createSample = async (\n  org_id: number,\n  user_assigned_id: number,\n  sample_types: string[],\n): Promise<{ task: ITaskData }> => {\n  const url = fetcher.joinUrls(jobUrl, \"sample\");\n  return await fetcher.post(url, { org_id, user_assigned_id, sample_types });\n};\n\nexport const exportJobs = async (jobQuery: JobQueryRecord) => {\n  const defaultParams: any = {\n    \"include[]\": [\"address\", \"assignments\", \"appointments\", \"job_types\", \"stats\"],\n  };\n\n  const jobQueryParams = jobQuery.toJS();\n\n  defaultParams.page = 1;\n\n  if (jobQueryParams.state.length > 0) {\n    defaultParams[\"state[]\"] = jobQueryParams.state.map((state) => state.id);\n  }\n\n  if (jobQueryParams.job_type) {\n    defaultParams[\"job_type\"] = jobQueryParams.job_type;\n  }\n\n  if (jobQueryParams.user.id > -1) {\n    defaultParams[\"user_id\"] = jobQueryParams.user.id;\n  }\n\n  const orgId = jobQueryParams.org.id > -1 ? jobQueryParams.org.id : useSelector((state) => currentUserOrg(state))?.id;\n  if (orgId) {\n    defaultParams[\"org_id\"] = orgId;\n  }\n\n  if (jobQueryParams.updated_since || jobQueryParams.filter_by_updated_since) {\n    defaultParams[\"updated_since\"] = calculateUpdatedSince(jobQueryParams);\n  }\n\n  if (jobQueryParams.filter_by_updated_before) {\n    defaultParams[\"updated_before\"] = jobQueryParams.filter_by_updated_before;\n  }\n\n  if (jobQueryParams.lead_source !== \"_allleads_\") {\n    defaultParams[\"lead_source\"] = jobQueryParams.lead_source;\n  }\n\n  defaultParams[\"sort_by\"] = jobQueryParams.sort_by;\n  defaultParams[\"sort_order\"] = jobQueryParams.sort_order;\n  defaultParams[\"archived\"] = jobQueryParams.archived;\n\n  const date = defaultParams[\"updated_since\"];\n  const fileName = `jobs_${date.toISOString()}.csv`;\n  const urlWithParams = jobUrl + \".csv\" + \"?\" + new URLSearchParams(defaultParams).toString();\n  await downloadFile(urlWithParams, fileName);\n};\n","import { IEstimateGroupData, EstimateGroupRecord } from \"../records/EstimateGroup\";\nimport { createSelector } from \"reselect\";\nimport { List } from \"immutable\";\nimport { RootState } from \"../reducers\";\nimport { estimateLineItems, toEstimateLineItemsJson } from \"./estimateLineItem.selectors\";\nimport { IBaseTotals } from \"app2/src/records/Estimate\";\nimport { EstimateLineItemRecord } from \"app2/src/records/EstimateLineItem\";\nimport { calculateLineItemSum, estimate } from \"app2/src/selectors/estimate.selectors\";\nimport { selectedEstimateId } from \"./job.selectors\";\n\nexport const estimateGroupsById = (state: RootState) => state.getIn([\"estimateGroups\", \"byId\"]);\nexport const lastSavedEstimateGroupsById = (state: RootState) => state.getIn([\"estimateGroups\", \"lastSavedById\"]);\nexport const estimateGroup = (state: RootState, props: any) =>\n  state.getIn([\"estimateGroups\", \"byId\", props.estimateGroupId]);\n\nexport const lastSavedEstimateGroups = createSelector(\n  [lastSavedEstimateGroupsById, (_: RootState, props: any) => props],\n  (estimateGroupsById: Map<number, EstimateGroupRecord>, props: any): List<EstimateGroupRecord> => {\n    return estimateGroupsProcess(estimateGroupsById, props);\n  },\n);\n\nexport const estimateGroups = createSelector(\n  [estimateGroupsById, (_: RootState, props: any) => props],\n  (estimateGroupsById: Map<number, EstimateGroupRecord>, props: any): List<EstimateGroupRecord> => {\n    return estimateGroupsProcess(estimateGroupsById, props);\n  },\n);\n\nexport const estimateGroupsProcess = (estimateGroupsById, props: any) => {\n  const { estimateGroupIds } = props;\n  let { included, fullEstimate } = props;\n  if (_.isUndefined(included)) {\n    included = true;\n  }\n  if (_.isUndefined(fullEstimate)) {\n    fullEstimate = false;\n  }\n\n  return estimateGroupIds\n    .map((gid: number) => {\n      const group = estimateGroupsById.get(gid) as EstimateGroupRecord;\n      return group;\n    })\n    .filter((group: EstimateGroupRecord) => {\n      return fullEstimate || (!group._destroy && group.included === included);\n    })\n    .toList();\n};\n\nexport const lineItemsEstimateGroup = createSelector(\n  [estimateGroup, (state, props) => ({ state, props })],\n  (estimateGroup: EstimateGroupRecord, stateProps: any) => {\n    const { state, props } = stateProps;\n    const estimateLineItemIds = estimateGroup.line_item_ids;\n    return estimateLineItems(state, { ...props, estimateLineItemIds });\n  },\n);\n\nexport const lineItemTotals = createSelector(\n  [lineItemsEstimateGroup, (state, props) => ({ state, props })],\n  (lineItemsEstimateGroup: List<EstimateLineItemRecord>, stateProps: any): IBaseTotals => {\n    return calculateLineItemSum(stateProps, lineItemsEstimateGroup);\n  },\n);\n\nexport const updateBaseTotal = createSelector(\n  [estimateGroup, lineItemTotals],\n  (estimateGroup: EstimateGroupRecord, lineItemTotals: IBaseTotals): EstimateGroupRecord => {\n    delete lineItemTotals.discountable_total;\n    lineItemTotals.total = lineItemTotals.subtotal;\n    return estimateGroup.merge(lineItemTotals);\n  },\n);\n\nexport const toEstimateGroupsJson = createSelector(\n  [estimateGroups, (state, props) => ({ state, props })],\n  (estimateGroups: List<EstimateGroupRecord>, stateProps: any): IEstimateGroupData[] => {\n    const { state, props } = stateProps;\n    return estimateGroups\n      .map((group: EstimateGroupRecord) => {\n        const groupData = group.toJSON() as any;\n\n        groupData.line_items = toEstimateLineItemsJson(state, {\n          ...props,\n          estimateLineItemIds: groupData.line_item_ids,\n        });\n\n        groupData.room_estimations = group.room_estimations.toJS();\n        groupData.payment_terms = group.payment_terms?.toJS();\n        groupData.discounts = group.discounts?.toJS();\n\n        delete groupData.product_total;\n        delete groupData.labor_total;\n        delete groupData.running_discountable;\n        delete groupData.discountable_total;\n        delete groupData.line_item_ids;\n        if (!groupData._destroy) {\n          delete groupData._destroy;\n        }\n\n        return groupData as IEstimateGroupData;\n      })\n      .toArray();\n  },\n);\n\n/**\n * Gets the selected estimate's groups\n * Pass in the `includeAll` prop to get all groups, not just the included ones.\n * @param {RootState} state The RootState\n * @param {{ includeAll?: boolean }} props The props\n */\nexport const currentEstimateGroups = createSelector(\n  [selectedEstimateId, (state, props) => ({ state, props })],\n  (estimateId: number, { state, props }) => {\n    const estimateGroupIds = estimate(state, { estimateId })?.group_ids;\n    if (!estimateGroupIds) return List();\n\n    return props.includeAll\n      ? List([\n          ...estimateGroups(state, { estimateGroupIds, included: true }),\n          ...estimateGroups(state, { estimateGroupIds, included: false }),\n        ])\n      : estimateGroups(state, { estimateGroupIds });\n  },\n);\n","import { RootState } from \"../reducers\";\n\nexport const skuValue = (state: RootState, skuId: number) => {\n  return state.getIn([\"skus\", \"byId\", skuId, \"value\"]);\n};\n\nexport const skuRecord = (state: RootState, skuId: number) => {\n  return state.getIn([\"skus\", \"byId\", skuId]);\n};\n","import { fetcher } from \"../helpers/Fetcher\";\nimport { ISkuData, SkuRecord } from \"app2/src/records/Sku\";\nimport { baseCleanProps } from \"app2/src/api/Api\";\n\nexport interface ISkuResponse {\n  sku?: ISkuData;\n}\n\nconst url = \"api/v1/orgs/:id/skus\";\n\nexport const create = (sku: SkuRecord): Promise<ISkuResponse> => {\n  const actionUrl = urlSetup(sku);\n  return fetcher.post<ISkuResponse>(actionUrl, { sku: baseCleanProps(sku.toJS()) });\n};\n\nexport const update = (sku: SkuRecord): Promise<ISkuResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(sku), sku.id.toString());\n  return fetcher.patch(actionUrl, { sku: baseCleanProps(sku.toJS()) });\n};\n\nexport const destroy = (sku: SkuRecord): Promise<ISkuResponse> => {\n  const actionUrl = fetcher.joinUrls(urlSetup(sku), sku.id.toString());\n  return fetcher.delete(actionUrl);\n};\n\nexport const urlSetup = (sku: SkuRecord): string => {\n  return url.replace(\":id\", sku.org_id.toString());\n};\n","import { ThunkAction } from \"redux-thunk\";\nimport { ActionsUnion, createAction } from \"app2/src/reducers/Utils\";\nimport { RootState } from \"app2/src/reducers\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { ISkuData } from \"../records/Sku\";\nimport { skuRecord, skuValue } from \"../selectors/sku.selectors\";\nimport { create, update, destroy } from \"../api/sku.service\";\n\nexport const FETCH_SKU = \"@skus/FETCH_SKU\";\nexport const RECEIVE_SKU = \"@skus/RECEIVE_SKU\";\nexport const SET_LOADED = \"@skus/SET_LOADED\";\nexport const UPDATE_FORM = \"@skus/UPDATE_FORM\";\nexport const CLEAR_SKU = \"@skus/CLEAR_SKU\";\nexport const UPDATE_VALUE = \"@skus/UPDATE_VALUE\";\n\nexport const Actions = {\n  fetchSku: (id: number) => createAction(FETCH_SKU, { id }),\n  receiveSku: (sku: ISkuData) => createAction(RECEIVE_SKU, { sku }),\n  setLoaded: (id: number) => createAction(SET_LOADED, { id }),\n  update: (event: any) => createAction(UPDATE_FORM, { event }),\n  clearSku: (id: number) => createAction(CLEAR_SKU, { id }),\n  updateValue: (id: number, newValue: string) => createAction(UPDATE_VALUE, { id, newValue }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  saveOrCreateOrDestroy: (skuId: number): ThunkResult<Promise<void | number>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState): Promise<void | number> => {\n      const value = skuValue(getState(), skuId).trim();\n      dispatch(Actions.updateValue(skuId, value));\n\n      if (skuId <= 0 && value) {\n        return dispatch(AsyncActions.create(skuId));\n      }\n      if (value) {\n        await dispatch(AsyncActions.save(skuId));\n      } else if (skuId > 0) {\n        await dispatch(AsyncActions.destroy(skuId));\n      }\n    };\n  },\n  save: (skuId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState): Promise<void> => {\n      const record = skuRecord(getState(), skuId);\n      try {\n        dispatch(Actions.fetchSku(skuId));\n        const response = await update(record);\n        dispatch(Actions.receiveSku(response.sku));\n      } catch (response) {\n        dispatch(Actions.setLoaded(skuId));\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  create: (skuId: number): ThunkResult<Promise<number>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState): Promise<number> => {\n      const record = skuRecord(getState(), skuId);\n      try {\n        const response = await create(record);\n        dispatch(Actions.receiveSku(response.sku));\n        return response.sku.id;\n      } catch (response) {\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n  destroy: (skuId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      const record = skuRecord(getState(), skuId);\n      try {\n        dispatch(Actions.fetchSku(skuId));\n        await destroy(record);\n        dispatch(Actions.setLoaded(skuId));\n      } catch (response) {\n        dispatch(Actions.setLoaded(skuId));\n        handleErrors(response, dispatch);\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { createSelector } from \"reselect\";\nimport { List } from \"immutable\";\nimport { DocumentRecord, IDocumentData, isPdfFile } from \"../records/Document\";\nimport { RootState } from \"../reducers\";\nimport { resourceDocuments } from \"app2/src/selectors/job.selectors\";\nimport { ids } from \"app2/src/selectors/pagination.selectors\";\nimport { recordChanged } from \"app2/src/helpers/Record\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const documentsById = (state: RootState) => state.getIn([\"documents\", \"byId\"]);\nexport const document = (state: RootState, props: any) => state.getIn([\"documents\", \"byId\", props.documentId]);\nexport const lastSavedDocument = (state: RootState, props: any) =>\n  state.getIn([\"documents\", \"lastSavedById\", props.documentId]);\n\nexport const documentChanged = createSelector(\n  [document, lastSavedDocument],\n  (document: DocumentRecord, lastSavedDocument: DocumentRecord) => {\n    return recordChanged(document, lastSavedDocument);\n  },\n);\n\nexport const documents = createSelector(\n  [documentsById, (_: RootState, props: any) => props],\n  (documentsById, props: any): List<DocumentRecord> => {\n    const { documentIds } = props;\n    let { fullEstimate } = props;\n    if (_.isUndefined(fullEstimate)) {\n      fullEstimate = false;\n    }\n    return documentIds\n      .map((docId: number) => {\n        return documentsById.get(docId);\n      })\n      .filter((doc: DocumentRecord) => {\n        return fullEstimate || !doc._destroy;\n      })\n      .toList();\n  },\n);\n\nexport const jobResourceDocument = createSelector(\n  [document, resourceDocuments],\n  (document, resourceDocuments): DocumentRecord => {\n    if (isNullOrUndefined(document)) {\n      return null;\n    }\n\n    const jobResourceDocument = resourceDocuments.find((rd) => rd.get(\"id\") === document.id);\n\n    if (!jobResourceDocument) {\n      return document;\n    }\n\n    return document\n      .set(\"displayInAgreement\", jobResourceDocument.get(\"displayInAgreement\"))\n      .set(\"displayInProposal\", jobResourceDocument.get(\"displayInProposal\"));\n  },\n);\n\nexport const documentsSelected = createSelector(\n  [\n    documentsById,\n    (state: RootState, props: any) => ({\n      state,\n      props,\n    }),\n  ],\n  (documentsById, stateProps: any): boolean => {\n    const { state } = stateProps;\n    const documentIds = ids(state, { modelName: \"document\" });\n    if (!documentIds || documentIds.size === 0) {\n      return false;\n    }\n\n    const documents = documentIds.map((docId: number) => documentsById.get(docId));\n\n    return !!documents.find((document: DocumentRecord) => {\n      return document.selected === true;\n    });\n  },\n);\n\nexport const documentsSelectedIds = createSelector(\n  [\n    documentsById,\n    (state: RootState, props: any) => ({\n      state,\n      props,\n    }),\n  ],\n  (documentsById, stateProps: any): List<number> => {\n    const { state } = stateProps;\n    const documentIds = ids(state, { modelName: \"document\" });\n    if (!documentIds || documentIds.size === 0) {\n      return List();\n    }\n\n    const documents = documentIds.map((docId: number) => documentsById.get(docId));\n\n    return documents\n      .filter((document: DocumentRecord) => {\n        return document.selected === true;\n      })\n      .map((document: DocumentRecord) => document.id);\n  },\n);\n\nexport const booleanChecked = createSelector(\n  [documentsById, (_: RootState, props: any) => props],\n  (documentsById, props: any): boolean => {\n    const { documentIds, booleanName, filtered } = props;\n    if (!documentIds) {\n      return false;\n    }\n\n    const documents = documentIds\n      .map((docId: number) => documentsById.get(docId))\n      .filter((document: DocumentRecord) => !filtered || isPdfFile(document));\n\n    if (documents.size === 0) {\n      return false;\n    }\n\n    return !documents.find((document: DocumentRecord) => {\n      return document[booleanName] === false;\n    });\n  },\n);\n\nexport const toDocumentsJson = createSelector([documents], (documents: List<DocumentRecord>): IDocumentData[] => {\n  return documents\n    .map((doc: DocumentRecord) => {\n      const docData = doc.toJS() as any;\n\n      if (!docData._destroy) {\n        delete docData._destroy;\n      }\n\n      return docData as IDocumentData;\n    })\n    .toArray();\n});\n","import { createSelector } from \"reselect\";\nimport { EstimateLineItemRecord, IEstimateLineItemData } from \"../records/EstimateLineItem\";\nimport { List } from \"immutable\";\nimport { RootState } from \"../reducers\";\nimport { images, toImagesJson } from \"./image.selectors\";\nimport { toOpeningEstimationsJson } from \"./openingEstimation.selectors\";\nimport { toDocumentsJson } from \"./document.selectors\";\nimport { toEstimateLineItemOptionsJson } from \"./estimateLineItemOption.selectors\";\nimport { ImageRecord } from \"app2/src/records/Image\";\nimport { cachedProduct } from \"app2/src/selectors/product.selectors\";\n\nexport const estimateLineItem = (state: RootState, props: any) =>\n  state.getIn([\"estimateLineItems\", \"byId\", props.estimateLineItemId]);\nexport const estimateLineItemsById = (state: RootState) => state.getIn([\"estimateLineItems\", \"byId\"]);\nexport const lastSavedEstimateLineItemsById = (state: RootState) => state.getIn([\"estimateLineItems\", \"lastSavedById\"]);\nexport const openingEstimationsById = (state: RootState) => state.getIn([\"openingEstimations\", \"byId\"]);\n\nexport const estimateLineItems = createSelector(\n  [estimateLineItemsById, (_, props: any) => props],\n  (estimateLineItemsById: Map<number, EstimateLineItemRecord>, props: any): List<EstimateLineItemRecord> => {\n    return estimateLineItemProcess(estimateLineItemsById, props);\n  },\n);\n\nexport const lastSavedEstimateLineItems = createSelector(\n  [lastSavedEstimateLineItemsById, (_, props: any) => props],\n  (estimateLineItemsById: Map<number, EstimateLineItemRecord>, props: any): List<EstimateLineItemRecord> => {\n    return estimateLineItemProcess(estimateLineItemsById, props);\n  },\n);\n\nconst estimateLineItemProcess = (estimateLineItemsById: Map<number, EstimateLineItemRecord>, props: any) => {\n  const { estimateLineItemIds } = props;\n  let { fullEstimate } = props;\n  if (_.isUndefined(fullEstimate)) {\n    fullEstimate = false;\n  }\n  return estimateLineItemIds\n    .map((lineItemId: number) => {\n      return estimateLineItemsById.get(lineItemId);\n    })\n    .filter((lineItem: EstimateLineItemRecord) => {\n      return fullEstimate || !lineItem._destroy;\n    })\n    .toList();\n};\n\nexport const estimateLineItemImage = createSelector(\n  [estimateLineItem, (state: RootState, props: any) => ({ state, props })],\n  (estimateLineItem: EstimateLineItemRecord, stateProps: any): ImageRecord => {\n    const { state, props } = stateProps;\n    if (estimateLineItem.image_ids.size > 0) {\n      const imgs = images(state, { imageIds: estimateLineItem.image_ids }).filter((img) => !img._destroy);\n      if (imgs.size > 0) {\n        return imgs.first();\n      }\n    }\n\n    if (estimateLineItem.product_id) {\n      const prod = cachedProduct(state, {\n        activatedPriceListId: props.activatedPriceListId,\n        productId: estimateLineItem.product_id,\n      });\n      if (prod && prod.images.size > 0) {\n        return prod.images.first();\n      }\n    }\n\n    return null;\n  },\n);\n\nexport const toEstimateLineItemsJson = createSelector(\n  [estimateLineItems, (state, props) => ({ state, props })],\n  (estimateLineItems: List<EstimateLineItemRecord>, stateProps: any): IEstimateLineItemData[] => {\n    const { state, props } = stateProps;\n    return estimateLineItems\n      .map((lineItem: EstimateLineItemRecord) => {\n        const lineItemData = lineItem.toJSON() as any;\n\n        lineItemData.images = toImagesJson(state, { ...props, imageIds: lineItem.image_ids });\n\n        lineItemData.documents = toDocumentsJson(state, { ...props, documentIds: lineItem.document_ids });\n\n        lineItemData.opening_estimations = toOpeningEstimationsJson(state, {\n          ...props,\n          openingEstimationIds: lineItem.opening_estimation_ids,\n        });\n\n        lineItemData.options = toEstimateLineItemOptionsJson(state, {\n          ...props,\n          estimateLineItemOptionIds: lineItem.option_ids,\n        });\n\n        delete lineItemData.option_ids;\n        delete lineItemData.opening_estimation_ids;\n        delete lineItemData.image_ids;\n        delete lineItemData.document_ids;\n        delete lineItemData.editing;\n        delete lineItemData.newly_added;\n        if (!lineItemData._destroy) {\n          delete lineItemData._destroy;\n        }\n\n        return lineItemData;\n      })\n      .toArray();\n  },\n);\n","import { Record, Map } from \"immutable\";\nimport { ProductOptionGroupRecord, IProductOptionGroupData, fromJSON as pogFromJSON } from \"./ProductOptionGroup\";\nimport { ProductRecord, IProductData } from \"./Product\";\n\nexport const fromJSON = (json: Partial<IProductToOptionGroupLinkData>) => {\n  const recordData: IProductToOptionGroupLinkRecord = { ...(json as any) };\n\n  return new ProductToOptionGroupLinkRecord(recordData);\n};\n\nexport interface IProductToOptionGroupLinkData {\n  id: number;\n  option_group_id: number;\n  group: IProductOptionGroupData;\n  product_id: number;\n  product: IProductData;\n  options: any;\n  required_option_group: boolean;\n}\n\nexport interface IProductToOptionGroupLinkRecord {\n  id: number;\n  option_group_id: number;\n  group: ProductOptionGroupRecord;\n  product_id: number;\n  product: ProductRecord;\n  options: any;\n  required_option_group: boolean;\n}\n\nconst defaultProductToOptionGroupLinkProps: IProductToOptionGroupLinkRecord = {\n  id: 0,\n  option_group_id: 0,\n  group: null,\n  product_id: 0,\n  product: null,\n  options: Map,\n  required_option_group: false,\n};\n\nexport class ProductToOptionGroupLinkRecord\n  extends Record(defaultProductToOptionGroupLinkProps)\n  implements IProductToOptionGroupLinkRecord\n{\n  public id!: number;\n  public option_group_id!: number;\n  public group!: ProductOptionGroupRecord;\n  public product_id!: number;\n  public product!: ProductRecord;\n  public options!: any;\n  public required_option_group!: boolean;\n\n  public constructor(values?: Partial<IProductToOptionGroupLinkRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { Record, List } from \"immutable\";\nimport { Nullable } from \".\";\nimport { AbleProp } from \"app/src/Models/Product\";\nimport { IMeasurementLink } from \"app/src/Models/MeasurementLink\";\nimport { IProductOptionData, ProductOptionRecord } from \"./ProductOption\";\nimport {\n  ProductToOptionGroupLinkRecord,\n  IProductToOptionGroupLinkData,\n  fromJSON as ptogLinkFromJSON,\n} from \"./ProductToOptionGroupLink\";\nimport { ImageRecord, fromJSON as imageFromJSON, IImageData } from \"./Image\";\nimport { DocumentRecord, fromJSON as documentFromJSON, IDocumentData } from \"./Document\";\nimport { IOpening } from \"app/src/Models/Opening\";\n\nexport const fromJSON = (json: Partial<IProductData>): ProductRecord => {\n  const recordData: IProductRecord = { ...(json as any) };\n\n  if (Array.isArray(json.option_groups)) {\n    recordData.option_group_ids = List(json.option_groups);\n  }\n\n  let record = new ProductRecord(recordData);\n\n  if (json.ptog_links) {\n    record = record.set(\n      \"ptog_links\",\n      List(\n        json.ptog_links.map((ptogl) => {\n          return ptogLinkFromJSON(ptogl);\n        }),\n      ),\n    );\n  }\n\n  if (Array.isArray(json.children)) {\n    record = record.set(\"children_ids\", List(json.children.map((c) => c.id)));\n  }\n  if (Array.isArray(json.images)) {\n    record = record.set(\"images\", List(json.images.map((i) => imageFromJSON(i))));\n  }\n  if (Array.isArray(json.documents)) {\n    record = record.set(\"documents\", List(json.documents.map((d) => documentFromJSON(d))));\n  }\n\n  return record;\n};\n\nexport const findProductBracket = (\n  parentProduct: ProductRecord,\n  productChildren: List<ProductRecord>,\n  opening: IOpening,\n): ProductRecord => {\n  if (parentProduct.kind !== \"window\" && parentProduct.kind !== \"door\") {\n    return;\n  }\n\n  let product = null;\n  switch (parentProduct.bracket_type) {\n    case \"width_height_bt\":\n    case \"ui_bt\":\n    case \"sqft\":\n      product = bracket(productChildren, opening, parentProduct.bracket_type);\n      break;\n    case \"per_ui\":\n    case \"per_sqft\":\n      product = perUI(productChildren, opening);\n      break;\n    default:\n      product = bracket(productChildren, opening, \"ui_bt\");\n  }\n\n  if (product) {\n    return product;\n  }\n\n  return null;\n};\n\nconst bracket = (productChildren: List<ProductRecord>, opening: IOpening, bracket_type: string): ProductRecord => {\n  return productChildren.find((product: ProductRecord) => {\n    return bracketMatch(opening, product, bracket_type);\n  });\n};\n\nconst bracketMatch = (opening: IOpening, product: ProductRecord, bracket_type): boolean => {\n  if (bracket_type === \"width_height_bt\") {\n    return widthHeightBracketMatch(opening, product);\n  }\n\n  let measurement = \"ui\";\n  if (bracket_type === \"sqft\") {\n    measurement = \"area\";\n  }\n\n  const match = opening[measurement] >= product.min_ui && opening[measurement] < product.max_ui;\n\n  if (!match) {\n    return match;\n  }\n\n  return widthHeightMatch(opening, product);\n};\n\nconst perUI = (productChildren: List<ProductRecord>, opening: IOpening): ProductRecord => {\n  return productChildren.find((product: ProductRecord) => {\n    let match = false;\n    switch (product.bracket_type) {\n      case \"width_height_bt\":\n      case \"ui_bt\":\n      case \"sqft\":\n        match = bracketMatch(opening, product, product.bracket_type);\n        break;\n      case \"per_ui\":\n      case \"per_sqft\":\n        match = widthHeightMatch(opening, product);\n        break;\n      default:\n        match = bracketMatch(opening, product, \"ui_bt\");\n    }\n    return match;\n  });\n};\n\nexport const widthHeightMatch = (opening: IOpening, product: ProductRecord): boolean => {\n  let match = true;\n  if (product.min_width > 0) {\n    match = match && opening.width >= product.min_width;\n  }\n\n  if (product.min_height > 0) {\n    match = match && opening.height >= product.min_height;\n  }\n\n  if (product.max_width > 0) {\n    match = match && opening.width <= product.max_width;\n  }\n\n  if (product.max_height > 0) {\n    match = match && opening.height <= product.max_height;\n  }\n\n  return match;\n};\n\nconst widthHeightBracketMatch = (opening: IOpening, product: ProductRecord) => {\n  return (\n    opening.width >= product.min_width &&\n    opening.height >= product.min_height &&\n    opening.width < product.max_width &&\n    opening.height < product.max_height\n  );\n};\n\nexport interface IProductData {\n  classy: string;\n  id: number;\n  parent_id: number;\n  price_list_id: number;\n  parent: IProductData;\n  children: IProductData[];\n  images: IImageData[];\n  documents: IDocumentData[];\n  name: string;\n  include_parent_names: boolean;\n  option_groups: number[];\n  description: string;\n  cost: number;\n  msrp: number;\n  price: number;\n  product_price: number;\n  labor_price: number;\n  visibility: string;\n  uom: string;\n  sort_order: number;\n  created_at: Date;\n  updated_at: Date;\n  uuid: string;\n  bracket_type: string;\n  min_ui: number;\n  max_ui: number;\n  min_width: number;\n  max_width: number;\n  min_height: number;\n  max_height: number;\n  base_product_price: number;\n  base_labor_price: number;\n  base_measure: number;\n  kind: string;\n  standard_measurement: number;\n  standard_uom: string;\n  measurement_link: IMeasurementLink;\n  size_html: string;\n  doc_html: string;\n  ptog_links: IProductToOptionGroupLinkData[];\n  options?: IProductOptionData[];\n  discountable?: AbleProp;\n  parent_discountable?: AbleProp;\n  markupable?: AbleProp;\n  parent_markupable?: AbleProp;\n  leaf: boolean;\n}\n\nexport interface IProductRecord {\n  classy: string;\n  id: number;\n  parent_id: Nullable<number>;\n  price_list_id: Nullable<number>;\n  children_ids: List<number>;\n  images: List<ImageRecord>;\n  documents: List<DocumentRecord>;\n  name: string;\n  include_parent_names: boolean;\n  ancestral_name: string;\n  ancestral_name_lowercase: string;\n  option_group_ids: List<number>;\n  description: string;\n  cost: number;\n  msrp: number;\n  price: number;\n  product_price: number;\n  labor_price: number;\n  visibility: string;\n  uom: string;\n  sort_order: number;\n  created_at: Date;\n  updated_at: Date;\n  uuid: string;\n  bracket_type: string;\n  min_ui: number;\n  max_ui: number;\n  min_width: number;\n  max_width: number;\n  min_height: number;\n  max_height: number;\n  base_product_price: number;\n  base_labor_price: number;\n  base_measure: number;\n  kind: string;\n\n  standard_measurement: number;\n  standard_uom: string;\n  measurement_link: IMeasurementLink;\n  size_html: string;\n  doc_html: string;\n  ptog_links: List<ProductToOptionGroupLinkRecord>;\n  options?: List<ProductOptionRecord>;\n  discountable?: AbleProp;\n  parent_discountable?: AbleProp;\n  markupable?: AbleProp;\n  parent_markupable?: AbleProp;\n  leaf: boolean;\n}\n\nconst defaultProductProps: IProductRecord = {\n  classy: \"\",\n  id: 0,\n  parent_id: null,\n  price_list_id: null,\n  children_ids: List<number>(),\n  images: List<ImageRecord>(),\n  documents: List<any>(),\n  name: \"\",\n  include_parent_names: true,\n  ancestral_name: \"\",\n  ancestral_name_lowercase: \"\",\n  option_group_ids: List<number>(),\n  description: \"\",\n  cost: 0,\n  msrp: 0,\n  price: 0,\n  product_price: 0,\n  labor_price: 0,\n  visibility: \"\",\n  uom: \"\",\n  sort_order: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n  uuid: \"\",\n  bracket_type: \"\",\n  min_ui: 0,\n  max_ui: 0,\n  min_width: 0,\n  max_width: 0,\n  min_height: 0,\n  max_height: 0,\n  base_product_price: 0,\n  base_labor_price: 0,\n  base_measure: 0,\n  kind: \"\",\n\n  standard_measurement: 0,\n  standard_uom: \"\",\n  measurement_link: null,\n  size_html: \"\",\n  doc_html: \"\",\n  ptog_links: List<ProductToOptionGroupLinkRecord>(),\n  options: List<ProductOptionRecord>(),\n  discountable: \"default\",\n  parent_discountable: \"default\",\n  markupable: \"default\",\n  parent_markupable: \"default\",\n  leaf: false,\n};\n\nexport class ProductRecord extends Record(defaultProductProps) implements IProductRecord {\n  public readonly classy!: string;\n  public readonly id!: number;\n  public readonly parent_id!: number;\n  public readonly price_list_id!: number;\n  public readonly children_ids!: List<number>;\n  public readonly images!: List<ImageRecord>;\n  public readonly documents!: List<any>;\n  public readonly name!: string;\n  public readonly include_parent_names!: boolean;\n  public readonly ancestral_name!: string;\n  public readonly ancestral_name_lowercase!: string;\n  public readonly option_group_ids!: List<number>;\n  public readonly description!: string;\n  public readonly cost!: number;\n  public readonly msrp!: number;\n  public readonly price!: number;\n  public readonly product_price!: number;\n  public readonly labor_price!: number;\n  public readonly visibility!: string;\n  public readonly uom!: string;\n  public readonly sort_order!: number;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n  public readonly uuid!: string;\n  public readonly bracket_type!: string;\n  public readonly min_ui!: number;\n  public readonly max_ui!: number;\n  public readonly min_width!: number;\n  public readonly max_width!: number;\n  public readonly min_height!: number;\n  public readonly max_height!: number;\n  public readonly base_product_price!: number;\n  public readonly base_labor_price!: number;\n  public readonly base_measure!: number;\n  public readonly kind!: string;\n\n  public readonly standard_measurement!: number;\n  public readonly standard_uom!: string;\n  public readonly measurement_link!: IMeasurementLink;\n  public readonly size_html!: string;\n  public readonly doc_html!: string;\n  public readonly ptog_links!: List<ProductToOptionGroupLinkRecord>;\n  public readonly options!: List<ProductOptionRecord>;\n  public readonly discountable!: AbleProp;\n  public readonly parent_discountable!: AbleProp;\n  public readonly markupable!: AbleProp;\n  public readonly parent_markupable!: AbleProp;\n  public readonly leaf!: boolean;\n\n  public constructor(values?: Partial<IProductRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { baseCleanProps, listParams } from \"app2/src/api/Api\";\nimport { FolderRecord, IFolderData } from \"app2/src/records/Folder\";\nimport { QueryParamsRecord } from \"app2/src/records/Page\";\nimport { fetcher } from \"../helpers/Fetcher\";\n\nexport const url = \"api/v1/folders\";\n\nexport interface IFolderIndexResponse {\n  folders: IFolderData[];\n  parents: IFolderData[];\n}\n\nexport interface IFolderOptions {\n  folderable_id: number;\n  folderable_type: string;\n  name: string;\n}\n\nexport interface IFolderResponse {\n  folder: IFolderData;\n}\n\nexport const list = (folderParentId: number, queryParams: QueryParamsRecord): Promise<IFolderIndexResponse> => {\n  const params = listParams(queryParams);\n  params.id = folderParentId;\n\n  return fetcher.get<IFolderIndexResponse>(url, params);\n};\n\nexport const byName = (options: IFolderOptions, queryParams: QueryParamsRecord): Promise<IFolderIndexResponse> => {\n  const params = { ...listParams(queryParams), ...options };\n\n  const actionUrl = fetcher.joinUrls(url, \"by_name\");\n  return fetcher.get<IFolderIndexResponse>(actionUrl, params);\n};\n\nexport const updateOrCreate = (folder: FolderRecord): Promise<IFolderResponse> => {\n  if (folder.id > 0) {\n    return update(folder);\n  } else {\n    return create(folder);\n  }\n};\n\nexport const create = (folder: FolderRecord): Promise<IFolderResponse> => {\n  return fetcher.post<IFolderResponse>(url, { folder: cleanProps(folder), ...folder.createParams.toJS() });\n};\n\nexport const archive = (id: number): Promise<IFolderResponse> => {\n  const actionUrl = fetcher.joinUrls(url, id.toString());\n  return fetcher.delete(actionUrl);\n};\n\nexport const update = (folder: FolderRecord): Promise<IFolderResponse> => {\n  const actionUrl = fetcher.joinUrls(url, folder.id.toString());\n  return fetcher.patch(actionUrl, cleanProps(folder));\n};\n\nexport const cleanProps = (folder: FolderRecord): IFolderData => {\n  const folderParams = baseCleanProps(folder.toJS());\n\n  if (folderParams.parent_id <= 0) {\n    delete folderParams.parent_id;\n  }\n\n  delete folderParams.createParams;\n\n  return folderParams;\n};\n","import { ThunkAction } from \"redux-thunk\";\nimport { IFolderCreateRecord, IFolderData } from \"app2/src/records/Folder\";\nimport { archive, list, byName, updateOrCreate, IFolderOptions } from \"app2/src/api/folder.service\";\nimport { Actions as PagingActions } from \"app2/src/reducers/pagination.actions\";\nimport { QueryParamsRecord, IPageData } from \"app2/src/records/Page\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport * as paginationActions from \"app2/src/reducers/pagination.actions\";\nimport * as documentActions from \"app2/src/reducers/document.actions\";\nimport * as presentationActions from \"app2/src/reducers/presentation.actions\";\nimport * as estimateTemplateActions from \"app2/src/reducers/estimateTemplate.actions\";\nimport * as imageActions from \"app2/src/reducers/image.actions\";\nimport { handleErrors } from \"app2/src/reducers/Utils\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { List } from \"immutable\";\nimport { ActionsUnion, createAction } from \"app2/src/reducers/Utils\";\nimport { RootDispatchType } from \"app2/src/store\";\nimport { RootState } from \"app2/src/reducers\";\nimport { folder } from \"app2/src/selectors/folder.selectors\";\nimport { FileType } from \"app2/src/components/Folders\";\nimport { dirtyIds } from \"app2/src/selectors/pagination.selectors\";\nimport { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { currentOrgId } from \"app2/src/selectors/org.selectors\";\nimport { isNullOrUndefined } from \"app2/src/helpers/Utility\";\n\nexport const FETCH_FOLDER = \"@folders/FETCH_FOLDER\";\nexport const FETCH_FOLDERS = \"@folders/FETCH_FOLDERS\";\nexport const RECEIVE_FOLDER = \"@folders/RECEIVE_FOLDER\";\nexport const SET_FOLDER_LOADED = \"@folders/SET_FOLDER_LOADED\";\nexport const ARCHIVE_FOLDER = \"@folders/ARCHIVE_FOLDER\";\nexport const RESET_FOLDER = \"@folders/RESET_FOLDER\";\nexport const RECEIVE_FOLDERS = \"@folders/RECEIVE_FOLDERS\";\nexport const EDIT_NAME = \"@folders/EDIT_NAME\";\nexport const EDIT_SORT_ORDER = \"@folders/EDIT_SORT_ORDER\";\nexport const CREATE_FOLDER = \"@folders/CREATE_FOLDER\";\n\nexport const Actions = {\n  fetchFolder: (id: number) => createAction(FETCH_FOLDER, { id }),\n  receiveFolder: (folder: IFolderData) => createAction(RECEIVE_FOLDER, { folder }),\n  createFolder: (folderParentId: number, createParams: IFolderCreateRecord) =>\n    createAction(CREATE_FOLDER, { folderParentId, createParams }),\n  editName: (folderId: number, name: string) => createAction(EDIT_NAME, { folderId, name }),\n  editSortOrder: (folderId: number, sortOrder: number) => createAction(EDIT_SORT_ORDER, { folderId, sortOrder }),\n  setFolderLoaded: (id: number) => createAction(SET_FOLDER_LOADED, { id }),\n  archiveFolder: (id: number) => createAction(ARCHIVE_FOLDER, { id }),\n  resetFolder: (id: number) => createAction(RESET_FOLDER, { id }),\n  receiveFolders: (folders: IFolderData[]) => createAction(RECEIVE_FOLDERS, { folders }),\n};\n\ntype ThunkResult<T> = ThunkAction<T, RootState, undefined, Actions>;\n\nexport const AsyncActions = {\n  listFolders: (\n    folderParentId: number,\n    options: Partial<IFolderOptions>,\n    redirect = () => {},\n  ): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      let queryParams = new QueryParamsRecord();\n      const mergedOptions = setOptionsFolderId(options, getState());\n      if (isNullOrUndefined(folderParentId)) {\n        await dispatch(AsyncActions.listFoldersByName(mergedOptions, queryParams));\n        return;\n      }\n\n      if (folderParentId && folderParentId > 0) {\n        queryParams = queryParams.set(\"folder_id\", folderParentId);\n        dispatch(PagingActions.fetchPage(\"folder\", queryParams));\n\n        try {\n          const response = await list(folderParentId, queryParams);\n          const rootFolder = response.parents[response.parents.length - 1];\n          if (!folderableCheck(rootFolder, mergedOptions)) {\n            redirect();\n            return;\n          }\n          dispatch(Actions.receiveFolders(response.folders));\n          dispatch(Actions.receiveFolders(response.parents));\n          const pageData: Partial<IPageData> = {\n            ids: List(response.folders.map((folder: IFolderData) => folder.id)),\n          };\n          dispatch(PagingActions.receivePage(\"folder\", queryParams, pageData));\n        } catch (response) {\n          if (response.status === 404) {\n            redirect();\n            return;\n          }\n          const errors = handleErrors(response);\n          dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n          dispatch(PagingActions.receivePageError(\"folder\", queryParams, errors));\n        }\n      } else {\n        redirect();\n      }\n    };\n  },\n  listFoldersByName: (options: IFolderOptions, queryParams: QueryParamsRecord): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(PagingActions.fetchPage(\"folder\", queryParams));\n\n      try {\n        const response = await byName(options, queryParams);\n        if (response) {\n          dispatch(Actions.receiveFolders(response.folders));\n          dispatch(Actions.receiveFolders(response.parents));\n          const pageData: Partial<IPageData> = {\n            ids: List(response.folders.map((folder: IFolderData) => folder.id)),\n          };\n          dispatch(PagingActions.receivePage(\"folder\", queryParams.set(\"folder_id\", response.parents[0].id), pageData));\n        } else {\n          dispatch(PagingActions.receivePageError(\"folder\", queryParams, [\"No content\"]));\n        }\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(PagingActions.receivePageError(\"folder\", queryParams, errors));\n      }\n    };\n  },\n  archiveFolder: (folderId: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType) => {\n      dispatch(Actions.fetchFolder(folderId));\n\n      try {\n        await archive(folderId);\n        dispatch(Actions.archiveFolder(folderId));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.setFolderLoaded(folderId));\n      }\n    };\n  },\n  onSortEnd: (oldIndex: number, newIndex: number): ThunkResult<Promise<void>> => {\n    return async (dispatch: RootDispatchType, getState: () => RootState) => {\n      await dispatch(paginationActions.AsyncActions.onSortEnd(\"folder\", oldIndex, newIndex));\n\n      dispatch(AsyncActions.batchUpdateOrCreateFolder(dirtyIds(getState())));\n      dispatch(paginationActions.Actions.setDirtyIds(null));\n    };\n  },\n  batchUpdateOrCreateFolder: (folderIds: List<number>): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      const promises = [];\n\n      folderIds.forEach((folderId) => {\n        const updatedFolder = folder(getState(), { folderId });\n        promises.push(updateOrCreate(updatedFolder));\n      });\n\n      try {\n        const responses = await Promise.all(promises);\n        const folders = responses.map((response) => response.folder);\n        dispatch(Actions.receiveFolders(folders));\n        folderIds.forEach((folderId, idx) => {\n          if (folderId <= 0) {\n            dispatch(paginationActions.Actions.replaceId(folderId, folders[idx].id, \"folder\"));\n          }\n        });\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved folders successfully\"));\n      } catch (response) {\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, [\"Sorting Failed, please try again.\"]));\n      }\n    };\n  },\n  updateOrCreateFolder: (folderId: number): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType, getState) => {\n      dispatch(Actions.fetchFolder(folderId));\n      const updatedFolder = folder(getState(), { folderId });\n\n      try {\n        const response = await updateOrCreate(updatedFolder);\n        dispatch(Actions.receiveFolder(response.folder));\n        if (folderId <= 0) {\n          dispatch(paginationActions.Actions.replaceId(folderId, response.folder.id, \"folder\"));\n        }\n\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.success, \"Saved folder successfully\"));\n      } catch (response) {\n        const errors = handleErrors(response);\n        dispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n        dispatch(Actions.setFolderLoaded(folderId));\n      }\n    };\n  },\n  moveFiles: (folderId: number, fileType: FileType): ThunkResult<Promise<any>> => {\n    return async (dispatch: RootDispatchType) => {\n      switch (fileType) {\n        case \"documents\":\n          dispatch(documentActions.AsyncActions.moveDocuments(folderId));\n          break;\n        case \"presentations\":\n          dispatch(presentationActions.AsyncActions.movePresentations(folderId));\n          break;\n        case \"estimateTemplates\":\n          dispatch(estimateTemplateActions.AsyncActions.moveEstimateTemplates(folderId));\n          break;\n        case \"images\":\n          dispatch(imageActions.AsyncActions.moveImages(folderId));\n          break;\n      }\n    };\n  },\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n\nexport const setOptionsFolderId = (options: Partial<IFolderOptions>, state: RootState): IFolderOptions => {\n  if (isNullOrUndefined(options.folderable_id)) {\n    switch (options.folderable_type) {\n      case \"Job\":\n        options.folderable_id = currentJobId(state);\n        break;\n      case \"Org\":\n        options.folderable_id = currentOrgId(state);\n        break;\n    }\n  }\n\n  return options as IFolderOptions;\n};\n\nexport const folderableCheck = (rootFolder: IFolderData, options: IFolderOptions): boolean => {\n  return rootFolder.folderable_type === options.folderable_type && rootFolder.folderable_id === options.folderable_id;\n};\n","import { IOneLookLocationData } from \"app2/src/records/OneLookLocation\";\nimport { ActionsUnion, createAction } from \"app2/src/reducers/UtilsTypes\";\n\nexport const RECEIVE_ONE_LOOK_LOCATIONS = \"@oneLook/RECEIVE_ONE_LOOK_LOCATIONS\";\nexport const SET_LOADING = \"@oneLook/SET_LOADING\";\n\nexport const OneLookActions = {\n  receiveLocations: (locations: Partial<IOneLookLocationData>[]) => createAction(RECEIVE_ONE_LOOK_LOCATIONS, locations),\n  setLoading: (loading: boolean) => createAction(SET_LOADING, loading),\n};\n\nexport type OneLookActions = ActionsUnion<typeof OneLookActions>;\n","import { RootState } from \"./reducers\";\nimport { RootDispatchType, RootStoreType } from \"./store\";\n\nclass StoreRegistryClass {\n  protected _store: RootStoreType;\n  protected _kvStore: any = {};\n\n  public constructor() {}\n\n  public setStore(store) {\n    this._store = store;\n  }\n\n  public getStore() {\n    return this._store;\n  }\n\n  public set(key: string, value: any) {\n    this._kvStore[key] = value;\n  }\n\n  public get<T>(key: string): T {\n    return this._kvStore[key] as T;\n  }\n}\n\nexport const StoreRegistry = new StoreRegistryClass();\n\nexport const useState = (): RootState => {\n  return StoreRegistry.getStore().getState();\n};\n\nexport const useSelector = <T>(fun: (state: RootState) => T): T => {\n  return fun(useState());\n};\n\nexport const dispatch: RootDispatchType = (action) => {\n  return StoreRegistry.getStore().dispatch(action);\n};\n","import { Record, List, Map, fromJS } from \"immutable\";\nimport { IAddressData, fromJSON as addressFromJSON, AddressRecord, toJSON as addrToJSON } from \"./Address\";\nimport { IImageData, ImageRecord, fromJSON as imageFromJSON } from \"./Image\";\nimport { IPhoneNumberData, fromJSON as phoneFromJSON, toJSON as phoneToJSON, PhoneNumberRecord } from \"./PhoneNumber\";\nimport { fromJSON as overviewFromJSON } from \"./EstimateOverview\";\nimport { fromJSON as assignmentsFromJSON, JobAssignmentRecord, IJobAssignmentData } from \"./JobAssignment\";\nimport { Nullable, YesNoProp } from \".\";\nimport { IEstimateOverviewData, EstimateOverviewRecord } from \"./EstimateOverview\";\nimport { UserRecord } from \"./UserRecord\";\nimport { fromJSON as documentFromJSON, IDocumentData, DocumentRecord } from \"./Document\";\nimport {\n  IEstimateComparisonData,\n  EstimateComparisonRecord,\n  fromJSON as estimateComparisonFromJSON,\n} from \"./EstimateComparison\";\nimport { IMeasurementData } from \"app2/src/records/Measurement\";\n\nexport const fromJSON = (json: Partial<IJobData>): JobRecord => {\n  const record: IJobRecord = { ...(json as any) };\n\n  if (json.address) {\n    record.address = addressFromJSON(json.address);\n  } else {\n    record.address = addressFromJSON({});\n  }\n\n  if (json.customer_address) {\n    record.customer_address = addressFromJSON(json.customer_address);\n  } else {\n    record.customer_address = addressFromJSON({});\n  }\n\n  if (json.phone_numbers) {\n    record.phone_numbers = List<PhoneNumberRecord>(json.phone_numbers.map((pn) => phoneFromJSON(pn)));\n  } else {\n    record.phone_numbers = List<PhoneNumberRecord>();\n  }\n\n  if (json.assignments) {\n    record.assignments = List<JobAssignmentRecord>(json.assignments.map((asgn) => assignmentsFromJSON(asgn)));\n  } else {\n    record.assignments = List<JobAssignmentRecord>();\n  }\n\n  if (json.images) {\n    record.images = List<ImageRecord>(json.images.map((i) => imageFromJSON(i)));\n  } else {\n    record.images = List<ImageRecord>();\n  }\n\n  if (json.documents) {\n    record.documents = List<DocumentRecord>(json.documents.map((i) => documentFromJSON(i)));\n  } else {\n    record.documents = List<DocumentRecord>();\n  }\n\n  if (json.estimates) {\n    record.estimates = List<EstimateOverviewRecord>(json.estimates.map((i) => overviewFromJSON(i)));\n  } else {\n    record.estimates = List<EstimateOverviewRecord>();\n  }\n\n  if (json.inspections) {\n    record.inspections = List<EstimateOverviewRecord>(json.inspections.map((i) => overviewFromJSON(i)));\n  } else {\n    record.estimates = List<EstimateOverviewRecord>();\n  }\n\n  if (json.estimate_comparison) {\n    record.estimate_comparison = estimateComparisonFromJSON(json.estimate_comparison);\n  } else {\n    record.estimate_comparison = estimateComparisonFromJSON({});\n  }\n\n  if (json.measurement) {\n    record.measurement_id = json.measurement.id;\n  }\n\n  if (json.config) {\n    record.config = fromJS(json.config);\n  }\n\n  if (json.metadata) {\n    record.metadata = fromJS(json.metadata);\n  }\n\n  return new JobRecord(record);\n};\n\nexport const toJSON = (job: JobRecord): IJobPostData => {\n  const json: IJobPostData = job.toJSON() as any as IJobPostData;\n\n  json.address_attributes = addrToJSON(job.address);\n  //@ts-ignore\n  delete json.address;\n  json.customer_address_attributes = addrToJSON(job.customer_address);\n  //@ts-ignore\n  delete json.customer_address;\n  json.phone_numbers_attributes = job.phone_numbers.map((pn) => phoneToJSON(pn)).toArray();\n  //@ts-ignore\n  delete json.phone_numbers;\n  json.config = job.config.toJS();\n\n  //@ts-ignore\n  delete json.images;\n  //@ts-ignore\n  delete json.documents;\n  //@ts-ignore\n  delete json.estimate_count;\n  //@ts-ignore\n  delete json.loading;\n  //@ts-ignore\n  delete json.created_at;\n  //@ts-ignore\n  delete json.updated_at;\n  //@ts-ignore\n  delete json.estimates;\n  //@ts-ignore\n  delete json.estimate_comparison;\n\n  return json;\n};\n\nexport const currentlyAssignedUser = (job: JobRecord): Nullable<UserRecord> => {\n  if (job.assignments.count() <= 0) {\n    return null;\n  }\n\n  return job.assignments.first(new JobAssignmentRecord()).get(\"user\");\n};\n\nexport const fetchCustomerAddress = (job: JobRecord): AddressRecord => {\n  if (job.use_job_address === \"yes\") {\n    return job.address;\n  }\n\n  return job.customer_address;\n};\n\nexport const hasIntegration = (job: JobRecord, integrationKey: string): boolean => {\n  const metadata = job?.metadata?.toJS();\n  if (!metadata) return false;\n  return [0, 1, 2, 3, 4].some((idx) => {\n    return (\n      metadata[\"integration_key_\" + idx]?.includes(integrationKey) && metadata[\"integration_value_\" + idx] !== undefined\n    );\n  });\n};\n\ninterface IJobsPageData {\n  jobs: List<number>;\n  errors: List<string>;\n  loading: boolean;\n}\n\nexport interface IJobStateEventInfo {\n  from: string | Array<string>;\n  to: string;\n  on: string;\n}\n\nexport interface IJobStateInfo {\n  pretty_name: string;\n  color: string;\n}\n\nexport type IJobsPageRecord = Record<IJobsPageData>;\n\nexport const JobsPageRecord: Record.Factory<IJobsPageData> = Record<IJobsPageData>({\n  jobs: List<number>(),\n  errors: List<string>(),\n  loading: false,\n});\n\nexport interface IJobPostData {\n  id: number;\n  uid: string;\n  org_id: number;\n  name?: string;\n  customer_name?: string;\n  email: string;\n  state: string;\n  raw_state: string;\n  lead_source: string;\n  config: any;\n  use_job_address: YesNoProp;\n  address_attributes?: IAddressData;\n  customer_address_attributes?: IAddressData;\n  phone_numbers_attributes?: IPhoneNumberData[];\n  cover_image_uuid?: string;\n}\n\nexport interface IJobData {\n  id: number;\n  uid: string;\n  org_id: number;\n  org_uid: string;\n  name?: string;\n  customer_name?: string;\n  email?: string;\n  state?: string;\n  config: any;\n  raw_state?: string;\n  lead_source?: string;\n  loading?: boolean;\n  address?: IAddressData;\n  customer_address?: IAddressData;\n  phone_numbers?: IPhoneNumberData[];\n  cover_image_uuid?: string;\n  estimate_count?: number;\n  estimates?: IEstimateOverviewData[];\n  inspections?: IEstimateOverviewData[];\n  measurement: IMeasurementData;\n  archived: boolean;\n  viewed: boolean;\n  document_count: number;\n  image_count: number;\n  use_job_address: YesNoProp;\n\n  images?: Array<IImageData>;\n  documents?: Array<IDocumentData>;\n  assignments?: Array<IJobAssignmentData>;\n  additional_assignment?: IJobAssignmentData;\n  estimate_comparison: IEstimateComparisonData;\n  additional_info: string;\n  metadata: any;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IJobRecord {\n  id: number;\n  uid: string;\n  name: Nullable<string>;\n  org_id: number;\n  org_uid: string;\n  customer_name: Nullable<string>;\n  state: Nullable<string>;\n  config: Map<any, any>;\n  raw_state: Nullable<string>;\n  lead_source: Nullable<string>;\n  email: Nullable<string>;\n  address: AddressRecord;\n  customer_address: AddressRecord;\n  cover_image_uuid: Nullable<string>;\n  estimate_count: number;\n  measurement_id: number;\n  viewed: boolean;\n  loading: boolean;\n  archived: boolean;\n  document_count: number;\n  image_count: number;\n  use_job_address: YesNoProp;\n\n  phone_numbers: List<PhoneNumberRecord>;\n  images: List<ImageRecord>;\n  documents: List<DocumentRecord>;\n  estimates: List<EstimateOverviewRecord>;\n  inspections: List<EstimateOverviewRecord>;\n  assignments: List<JobAssignmentRecord>;\n  additional_assignment: Nullable<JobAssignmentRecord>;\n  estimate_comparison: EstimateComparisonRecord;\n  additional_info: string;\n  metadata: Map<any, any>;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultJobProps = {\n  id: 0,\n  uid: \"\",\n  org_id: 0,\n  org_uid: \"\",\n  name: \"\",\n  customer_name: \"\",\n  state: \"New\",\n  config: Map(),\n  raw_state: \"new\",\n  lead_source: \"Manual\",\n  email: \"\",\n  measurement_id: 0,\n  viewed: false,\n  loading: false,\n  use_job_address: \"yes\" as YesNoProp,\n  address: addressFromJSON({}),\n  customer_address: addressFromJSON({}),\n  cover_image_uuid: null,\n  estimate_count: 0,\n  archived: false,\n  document_count: 0,\n  image_count: 0,\n  images: List<ImageRecord>(),\n  documents: List<DocumentRecord>(),\n  phone_numbers: List<PhoneNumberRecord>(),\n  estimates: List<EstimateOverviewRecord>(),\n  inspections: List<EstimateOverviewRecord>(),\n  assignments: List<JobAssignmentRecord>(),\n  additional_assignment: null,\n  estimate_comparison: new EstimateComparisonRecord(),\n  additional_info: \"\",\n  metadata: Map(),\n\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class JobRecord extends Record<IJobRecord>(defaultJobProps) implements IJobRecord {}\n","import { SignedDocumentRecord } from \"../records/SignedDocument\";\nimport { createSelector } from \"reselect\";\nimport { RootState } from \"../reducers\";\n\nexport const currentSignedDocumentId = (state: RootState): number => state.getIn([\"signedDocuments\", \"currentId\"]);\nexport const byId = (state: RootState): Map<number, SignedDocumentRecord> => state.getIn([\"signedDocuments\", \"byId\"]);\n\n/**\n * Returns a signed document with documentId\n *\n * @param {RootState} state The RootState\n * @param {number} documentId\n * @returns {SignedDocumentRecord} SignedDocumentRecord\n */\nexport const signedDocument = createSelector(\n  [byId, (state, props) => ({ state, props })],\n  (byId: Map<number, SignedDocumentRecord>, stateProps: any): SignedDocumentRecord => byId.get(stateProps.props),\n);\n\n/**\n * Returns a signed document based on signedDocuments -> currentId\n *\n * @param {RootState} state The RootState\n * @param {number} documentId\n * @returns {SignedDocumentRecord} SignedDocumentRecord\n */\nexport const currentSignedDocument = createSelector(\n  [byId, currentSignedDocumentId],\n  (byId: Map<number, SignedDocumentRecord>, id: number): SignedDocumentRecord => byId.get(id),\n);\n\nexport const currentSignedDocumentKind = createSelector([currentSignedDocument], (sd: SignedDocumentRecord) =>\n  sd.estimate_id ? \"contract\" : \"signableDocument\",\n);\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.angular.min\",[\"kendo.core.min\"],e)}(function(){return function(e,t,n){\"use strict\";function i(e){var t=T;try{return T=function(e){return e()},e()}finally{T=t}}function o(t,i,o,c,s,k){function h(){var n,k,h,g,b,y,S;return o.kRebind&&(n=e(e(i)[0].cloneNode(!0))),V=a(t,i,o,c,M).options,i.is(\"select\")&&!function(t){if(t.length>0){var n=e(t[0]);!/\\S/.test(n.text())&&/^\\?/.test(n.val())&&n.remove()}}(i[0].options),k=M.call(i,P=V).data(c),u(k,t,o,c,s),t.$emit(\"kendoWidgetCreated\",k),h=p(t,k),o.kRebind&&m(k,t,i,n,o.kRebind,h,o),o.kNgDisabled&&(g=o.kNgDisabled,b=t.$eval(g),b&&k.enable(!b),r(k,t,i,g)),o.kNgReadonly&&(y=o.kNgReadonly,S=t.$eval(y),S&&k.readonly(S),l(k,t,i,y)),o.kNgModel&&f(k,t,o.kNgModel),$&&d(k,t,i,$,w),k&&v(k,i),k}var g,b,$,w,M,y,V,S,_,x,A,L,D,O;if(!(i instanceof jQuery))throw Error(\"The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.\");if(g=o.kNgDelay,b=t.$eval(g),k=k||[],$=k[0],w=k[1],M=e(i)[c],!M)return window.console.error(\"Could not find: \"+c),null;if(y=a(t,i,o,c,M),V=y.options,y.unresolved.length){for(S=[],_=0,x=y.unresolved.length;x>_;_++)A=y.unresolved[_],L=e.Deferred(function(e){var i=t.$watch(A.path,function(t){t!==n&&(i(),e.resolve())})}).promise(),S.push(L);return e.when.apply(null,S).then(h),n}return g&&!b?(D=t.$root||t,O=function(){var e=t.$watch(g,function(t){t!==n&&(e(),i.removeAttr(o.$attr.kNgDelay),g=null,T(h))})},/^\\$(digest|apply)$/.test(D.$$phase)?O():t.$apply(O),n):h()}function a(i,o,a,r,l){function u(e,o){var a=t.copy(i.$eval(o));a===n?v.push({option:e,path:o}):c[e]=a}var c,s,d,f,p=r.replace(/^kendo/,\"\"),v=[],m=a.kOptions||a.options,k=i.$eval(m);return m&&k===n&&v.push({option:\"options\",path:m}),c=t.extend({},a.defaultOptions,k),s=l.widget.prototype.options,d=l.widget.prototype.events,e.each(a,function(e,t){var n,i,o,a;\"source\"!==e&&\"kDataSource\"!==e&&\"kScopeField\"!==e&&\"scopeField\"!==e&&(n=\"data\"+e.charAt(0).toUpperCase()+e.slice(1),0===e.indexOf(\"on\")&&(i=e.replace(/^on./,function(e){return e.charAt(2).toLowerCase()}),d.indexOf(i)>-1&&(c[i]=t)),s.hasOwnProperty(n)?u(n,t):s.hasOwnProperty(e)&&!D[e]?u(e,t):L[e]||(o=e.match(/^k(On)?([A-Z].*)/),o&&(a=o[2].charAt(0).toLowerCase()+o[2].slice(1),o[1]&&\"kOnLabel\"!=e?c[a]=t:(\"kOnLabel\"==e&&(a=\"onLabel\"),u(a,t)))))}),f=a.kDataSource||a.source,f&&(c.dataSource=A(i,o,p,f)),c.$angular=[i],{options:c,unresolved:v}}function r(e,t,i,o){return kendo.ui.PanelBar&&e instanceof kendo.ui.PanelBar||kendo.ui.Menu&&e instanceof kendo.ui.Menu?(x.warn(\"k-ng-disabled specified on a widget that does not have the enable() method: \"+e.options.name),n):(t.$watch(o,function(t,n){t!=n&&e.enable(!t)}),n)}function l(e,t,i,o){return\"function\"!=typeof e.readonly?(x.warn(\"k-ng-readonly specified on a widget that does not have the readonly() method: \"+e.options.name),n):(t.$watch(o,function(t,n){t!=n&&e.readonly(t)}),n)}function u(e,t,n,i,o){if(n[o]){var a=S(n[o]).assign;if(!a)throw Error(o+\" attribute used but expression in it is not assignable: \"+n[i]);a(t,e)}}function c(e){return/checkbox|radio/i.test(e.attr(\"type\"))?e.prop(\"checked\"):e.val()}function s(e){return O.test(e[0].tagName)}function d(e,t,i,o,a){var r,l,u,d;e.value&&(l=!1,r=s(i)?function(){return c(i)}:function(){return e.value()},o.$render=function(){var i=o.$viewValue;i===n&&(i=o.$modelValue),i===n&&(i=null),l=!0,setTimeout(function(){if(l=!1,e){var n=t[e.element.attr(\"k-ng-model\")];n&&(i=n),e.options.autoBind!==!1||e.listView.bound()?e.value(i):i&&e.value(i)}},0)},s(i)&&i.on(\"change\",function(){l=!0}),u=function(e){return function(){var n;l||(e&&a&&(n=a.$pristine),o.$setViewValue(r()),e&&(o.$setPristine(),n&&a.$setPristine()),$(t))}},e.first(\"change\",u(!1)),e.first(\"spin\",u(!1)),kendo.ui.AutoComplete&&e instanceof kendo.ui.AutoComplete||e.first(\"dataBound\",u(!0)),d=r(),isNaN(o.$viewValue)||d==o.$viewValue||(o.$isEmpty(o.$viewValue)?null!=d&&\"\"!==d&&d!=o.$viewValue&&o.$setViewValue(d):e.value(o.$viewValue)),o.$setPristine())}function f(t,i,o){var a,r,l,u,c,s,d,f,p,v;return\"function\"!=typeof t.value?(x.warn(\"k-ng-model specified on a widget that does not have the value() method: \"+t.options.name),n):(a=e(t.element).parents(\"form\"),r=kendo.getter(a.attr(\"name\"))(i),l=S(o),u=l.assign,c=!1,s=kendo.ui.MultiSelect&&t instanceof kendo.ui.MultiSelect,d=function(e){return e&&s?e.length:0},f=d(l(i)),t.$angular_setLogicValue(l(i)),p=function(e,i){e===n&&(e=null),c||e==i&&d(e)==f||(f=d(e),t.$angular_setLogicValue(e))},s?i.$watchCollection(o,p):i.$watch(o,p),v=function(){c=!0,r&&r.$pristine&&r.$setDirty(),$(i,function(){u(i,t.$angular_getLogicValue()),f=d(l(i))}),c=!1},t.first(\"change\",v),t.first(\"spin\",v),n)}function p(e,t){var n=e.$on(\"$destroy\",function(){n(),t&&(kendo.destroy(t.element),t=null)});return n}function v(t,n){function i(){r.disconnect()}function o(){r.observe(e(n)[0],{attributes:!0})}var a,r;window.MutationObserver&&t.wrapper&&(a=[].slice.call(e(n)[0].classList),r=new MutationObserver(function(n){i(),t&&(n.forEach(function(n){var i,o=e(t.wrapper)[0];switch(n.attributeName){case\"class\":i=[].slice.call(n.target.classList),i.forEach(function(e){a.indexOf(e)<0&&(o.classList.add(e),kendo.ui.ComboBox&&t instanceof kendo.ui.ComboBox&&t.input[0].classList.add(e))}),a.forEach(function(e){i.indexOf(e)<0&&(o.classList.remove(e),kendo.ui.ComboBox&&t instanceof kendo.ui.ComboBox&&t.input[0].classList.remove(e))}),a=i;break;case\"disabled\":\"function\"!=typeof t.enable||t.element.attr(\"readonly\")||t.enable(!e(n.target).attr(\"disabled\"));break;case\"readonly\":\"function\"!=typeof t.readonly||t.element.attr(\"disabled\")||t.readonly(!!e(n.target).attr(\"readonly\"))}}),o())}),o(),t.first(\"destroy\",i))}function m(t,n,i,o,a,r,l){var u=n.$watch(a,function(a,c){var s,d,f,p,v;t._muteRebind||a===c||(u(),l._cleanUp&&l._cleanUp(),s=I[t.options.name],s&&s.forEach(function(t){var i=n.$eval(l[\"k\"+t]);i&&o.append(e(i).attr(kendo.toHyphens(\"k\"+t),\"\"))}),d=e(t.wrapper)[0],f=e(t.element)[0],p=\"Upload\"===t.options.name,p&&(i=e(f)),v=i.injector().get(\"$compile\"),t._destroy(),r&&r(),t=null,f&&(d&&d.parentNode.replaceChild(f,d),e(i).replaceWith(o)),v(o)(n))},!0);$(n)}function k(e,t){return function(n,i){return e.call(t,n,i)}}function h(e,t){this[e]=kendo.stringify(t)}function g(e,n){function i(e,t){y.directive(e,[\"directiveFactory\",function(n){return n.create(t,e)}])}var o,a,r,l,u=n?\"Mobile\":\"\";u+=e.fn.options.name,o=u,a=\"kendo\"+u.charAt(0)+u.substr(1).toLowerCase(),u=\"kendo\"+u,r=u.replace(/([A-Z])/g,\"-$1\"),-1==C.indexOf(u.replace(\"kendo\",\"\"))&&(l=u===a?[u]:[u,a],t.forEach(l,function(e){y.directive(e,function(){return{restrict:\"E\",replace:!0,template:function(e,t){var n=E[o]||\"div\",i=t.kScopeField||t.scopeField;return\"<\"+n+\" \"+r+(i?'=\"'+i+'\"':\"\")+\">\"+e.html()+\"</\"+n+\">\"}}})})),N.indexOf(u.replace(\"kendo\",\"\"))>-1||(i(u,u),a!=u&&i(a,u))}function b(t){return t=e(t),kendo.widgetInstance(t,kendo.ui)||kendo.widgetInstance(t,kendo.mobile.ui)||kendo.widgetInstance(t,kendo.dataviz.ui)}function $(e,t){var n=e.$root||e,i=/^\\$(digest|apply)$/.test(n.$$phase);t?i?t():n.$apply(t):i||n.$digest()}function w(t,n){t.$destroy(),n&&e(n).removeData(\"$scope\").removeData(\"$$kendoScope\").removeData(\"$isolateScope\").removeData(\"$isolateScopeNoTemplate\").removeClass(\"ng-scope\")}function M(n,i,o){var a,r,l;if(e.isArray(n))return t.forEach(n,function(e){M(e,i,o)});if(\"string\"==typeof n){for(a=n.split(\".\"),r=kendo;r&&a.length>0;)r=r[a.shift()];if(!r)return B.push([n,i,o]),!1;n=r.prototype}return l=n[i],n[i]=function(){var e=this,t=arguments;return o.apply({self:e,next:function(){return l.apply(e,arguments.length>0?arguments:t)}},t)},!0}var y,V,S,T,_,x,P,A,L,D,O,E,C,N,B,I;t&&t.injector&&(y=t.module(\"kendo.directives\",[]),V=t.injector([\"ng\"]),S=V.get(\"$parse\"),T=V.get(\"$timeout\"),x=V.get(\"$log\"),A=function(){var e={TreeList:\"TreeListDataSource\",TreeView:\"HierarchicalDataSource\",Scheduler:\"SchedulerDataSource\",PivotGrid:\"PivotDataSource\",PivotConfigurator:\"PivotDataSource\",PanelBar:\"$PLAIN\",Menu:\"$PLAIN\",ContextMenu:\"$PLAIN\"},t=function(e,t){return\"$PLAIN\"==t?e:kendo.data[t].create(e)};return function(n,i,o,a){var r=e[o]||\"DataSource\",l=n.$eval(a),u=t(l,r);return n.$watch(a,function(e){var n,o=b(i);o&&\"function\"==typeof o.setDataSource&&e!==l&&(n=t(e,r),o.setDataSource(n),l=e)}),u}}(),L={kDataSource:!0,kOptions:!0,kRebind:!0,kNgModel:!0,kNgDelay:!0},D={name:!0,title:!0,style:!0},O=/^(input|select|textarea)$/i,y.factory(\"directiveFactory\",[\"$compile\",function(t){var n,i,a=!1;return _=t,i=function(t,i){return{restrict:\"AC\",require:[\"?ngModel\",\"^?form\"],scope:!1,controller:[\"$scope\",\"$attrs\",\"$element\",function(e,t){this.template=k(h,t),t._cleanUp=k(function(){this.template=null,t._cleanUp=null},this)}],link:function(r,l,u,c){var s,d=e(l),f=t.replace(/([A-Z])/g,\"-$1\");d.attr(f,d.attr(\"data-\"+f)),d[0].removeAttribute(\"data-\"+f),s=o(r,l,u,t,i,c),s&&(n&&clearTimeout(n),n=setTimeout(function(){r.$emit(\"kendoRendered\"),a||(a=!0,e(\"form\").each(function(){var t=e(this).controller(\"form\");t&&t.$setPristine()}))}))}}},{create:i}}]),E={Editor:\"textarea\",NumericTextBox:\"input\",DatePicker:\"input\",DateTimePicker:\"input\",TimePicker:\"input\",AutoComplete:\"input\",ColorPicker:\"input\",MaskedTextBox:\"input\",MultiSelect:\"input\",Upload:\"input\",Validator:\"form\",Button:\"button\",MobileButton:\"a\",MobileBackButton:\"a\",MobileDetailButton:\"a\",ListView:\"ul\",MobileListView:\"ul\",TreeView:\"ul\",Menu:\"ul\",ContextMenu:\"ul\",ActionSheet:\"ul\"},C=[\"MobileView\",\"MobileDrawer\",\"MobileLayout\",\"MobileSplitView\",\"MobilePane\",\"MobileModalView\"],N=[\"MobileApplication\",\"MobileView\",\"MobileModalView\",\"MobileLayout\",\"MobileActionSheet\",\"MobileDrawer\",\"MobileSplitView\",\"MobilePane\",\"MobileScrollView\",\"MobilePopOver\"],t.forEach([\"MobileNavBar\",\"MobileButton\",\"MobileBackButton\",\"MobileDetailButton\",\"MobileTabStrip\",\"MobileScrollView\",\"MobileScroller\"],function(e){N.push(e),e=\"kendo\"+e,y.directive(e,function(){return{restrict:\"A\",link:function(t,n,i){o(t,n,i,e,e)}}})}),B=[],kendo.onWidgetRegistered(function(t){B=e.grep(B,function(e){return!M.apply(null,e)}),g(t.widget,\"Mobile\"==t.prefix)}),M([\"ui.Widget\",\"mobile.ui.Widget\"],\"angular\",function(o,a){var r,l=this.self;return\"init\"==o?(!a&&P&&(a=P),P=null,a&&a.$angular&&(l.$angular_scope=a.$angular[0],l.$angular_init(l.element,a)),n):(r=l.$angular_scope,r&&i(function(){var i,u,c=a(),s=c.elements,d=c.data;if(s.length>0)switch(o){case\"cleanup\":t.forEach(s,function(t){var n=e(t).data(\"$$kendoScope\");n&&n!==r&&n.$$kendoScope&&w(n,t)});break;case\"compile\":i=l.element.injector(),u=i?i.get(\"$compile\"):_,t.forEach(s,function(t,i){var o,a;c.scopeFrom?o=c.scopeFrom:(a=d&&d[i],a!==n?(o=e.extend(r.$new(),a),o.$$kendoScope=!0):o=r),e(t).data(\"$$kendoScope\",o),u(t)(o)}),$(r)}}),n)}),M(\"ui.Widget\",\"$angular_getLogicValue\",function(){return this.self.value()}),M(\"ui.Widget\",\"$angular_setLogicValue\",function(e){this.self.value(e)}),M(\"ui.Select\",\"$angular_getLogicValue\",function(){var e=this.self.dataItem(),t=this.self.options.dataValueField;return e?this.self.options.valuePrimitive?t?e[t]:e:e.toJSON():null}),M(\"ui.Select\",\"$angular_setLogicValue\",function(e){var t=this.self,i=t.options,o=i.dataValueField,a=i.text||\"\";e===n&&(e=\"\"),o&&!i.valuePrimitive&&e&&(a=e[i.dataTextField]||\"\",e=e[o||i.dataTextField]),t.options.autoBind!==!1||t.listView.bound()?t.value(e):!a&&e&&i.valuePrimitive?t.value(e):t._preselect(e,a)}),M(\"ui.MultiSelect\",\"$angular_getLogicValue\",function(){var t=this.self.dataItems().slice(0),n=this.self.options.dataValueField;return n&&this.self.options.valuePrimitive&&(t=e.map(t,function(e){return e[n]})),t}),M(\"ui.MultiSelect\",\"$angular_setLogicValue\",function(t){var n,i,o,a;null==t&&(t=[]),n=this.self,i=n.options,o=i.dataValueField,a=t,o&&!i.valuePrimitive&&(t=e.map(t,function(e){return e[o]})),i.autoBind!==!1||i.valuePrimitive||n.listView.bound()?n.value(t):n._preselect(a,t)}),M(\"ui.AutoComplete\",\"$angular_getLogicValue\",function(){var e,t,n,i,o,a=this.self.options,r=this.self.value().split(a.separator),l=a.valuePrimitive,u=this.self.listView.selectedDataItems(),c=[];for(e=0,t=u.length;t>e;e++)for(n=u[e],i=a.dataTextField?n[a.dataTextField]:n,o=0;r.length>o;o++)if(i===r[o]){c.push(l?i:n.toJSON());break}return c}),M(\"ui.AutoComplete\",\"$angular_setLogicValue\",function(t){null==t&&(t=[]);var i=this.self,o=i.options.dataTextField;o&&!i.options.valuePrimitive&&(t=t.length!==n?e.map(t,function(e){return e[o]}):t[o]),i.value(t)}),M(\"ui.Widget\",\"$angular_init\",function(t,n){var i,o,a,r,l=this.self;if(n&&!e.isArray(n))for(i=l.$angular_scope,o=l.events.length;--o>=0;)a=l.events[o],r=n[a],r&&\"string\"==typeof r&&(n[a]=l.$angular_makeEventHandler(a,i,r))}),M(\"ui.Widget\",\"$angular_makeEventHandler\",function(e,t,n){return n=S(n),function(e){$(t,function(){n(t,{kendoEvent:e})})}}),M([\"ui.Grid\",\"ui.ListView\",\"ui.TreeView\"],\"$angular_makeEventHandler\",function(e,n,i){return\"change\"!=e?this.next():(i=S(i),function(e){var o,a,r,l,u,c,s,d,f,p=e.sender,v=p.options,m={kendoEvent:e};for(t.isString(v.selectable)&&(o=-1!==v.selectable.indexOf(\"cell\"),a=-1!==v.selectable.indexOf(\"multiple\")),r=m.selected=this.select(),l=m.data=[],u=m.columns=[],s=0;r.length>s;s++)d=o?r[s].parentNode:r[s],f=p.dataItem(d),o?(t.element.inArray(f,l)<0&&l.push(f),c=t.element(r[s]).index(),t.element.inArray(c,u)<0&&u.push(c)):l.push(f);a||(m.dataItem=m.data=l[0],m.angularDataItem=kendo.proxyModelSetters(m.dataItem),m.selected=r[0]),$(n,function(){i(n,m)})})}),M(\"ui.Grid\",\"$angular_init\",function(i,o){if(this.next(),o.columns){var a=e.extend({},kendo.Template,o.templateSettings);t.forEach(o.columns,function(e){!e.field||e.template||e.format||e.values||e.encoded!==n&&!e.encoded||(e.template=\"<span ng-bind='\"+kendo.expr(e.field,\"dataItem\")+\"'>#: \"+kendo.expr(e.field,a.paramName)+\"#</span>\")})}}),M(\"mobile.ui.ButtonGroup\",\"value\",function(e){var t=this.self;return null!=e&&(t.select(t.element.children(\"li.km-button\").eq(e)),t.trigger(\"change\"),t.trigger(\"select\",{index:t.selectedIndex})),t.selectedIndex}),M(\"mobile.ui.ButtonGroup\",\"_select\",function(){this.next(),this.self.trigger(\"change\")}),y.directive(\"kendoMobileApplication\",function(){return{terminal:!0,link:function(e,t,n){o(e,t,n,\"kendoMobileApplication\",\"kendoMobileApplication\")}}}).directive(\"kendoMobileView\",function(){return{scope:!0,link:{pre:function(e,t,n){n.defaultOptions=e.viewOptions,n._instance=o(e,t,n,\"kendoMobileView\",\"kendoMobileView\")},post:function(e,t,n){n._instance._layout(),n._instance._scroller()}}}}).directive(\"kendoMobileDrawer\",function(){return{scope:!0,link:{pre:function(e,t,n){n.defaultOptions=e.viewOptions,n._instance=o(e,t,n,\"kendoMobileDrawer\",\"kendoMobileDrawer\")},post:function(e,t,n){n._instance._layout(),n._instance._scroller()}}}}).directive(\"kendoMobileModalView\",function(){return{scope:!0,link:{pre:function(e,t,n){n.defaultOptions=e.viewOptions,n._instance=o(e,t,n,\"kendoMobileModalView\",\"kendoMobileModalView\")},post:function(e,t,n){n._instance._layout(),n._instance._scroller()}}}}).directive(\"kendoMobileSplitView\",function(){return{terminal:!0,link:{pre:function(e,t,n){n.defaultOptions=e.viewOptions,n._instance=o(e,t,n,\"kendoMobileSplitView\",\"kendoMobileSplitView\")},post:function(e,t,n){n._instance._layout()}}}}).directive(\"kendoMobilePane\",function(){return{terminal:!0,link:{pre:function(e,t,n){n.defaultOptions=e.viewOptions,o(e,t,n,\"kendoMobilePane\",\"kendoMobilePane\")}}}}).directive(\"kendoMobileLayout\",function(){return{link:{pre:function(e,t,n){o(e,t,n,\"kendoMobileLayout\",\"kendoMobileLayout\")}}}}).directive(\"kendoMobileActionSheet\",function(){return{restrict:\"A\",link:function(t,n,i){n.find(\"a[k-action]\").each(function(){e(this).attr(\"data-\"+kendo.ns+\"action\",e(this).attr(\"k-action\"))}),o(t,n,i,\"kendoMobileActionSheet\",\"kendoMobileActionSheet\")}}}).directive(\"kendoMobilePopOver\",function(){return{terminal:!0,link:{pre:function(e,t,n){n.defaultOptions=e.viewOptions,o(e,t,n,\"kendoMobilePopOver\",\"kendoMobilePopOver\")}}}}).directive(\"kendoViewTitle\",function(){return{restrict:\"E\",replace:!0,template:function(e){return\"<span data-\"+kendo.ns+\"role='view-title'>\"+e.html()+\"</span>\"}}}).directive(\"kendoMobileHeader\",function(){return{restrict:\"E\",link:function(e,t){t.addClass(\"km-header\").attr(\"data-role\",\"header\")}}}).directive(\"kendoMobileFooter\",function(){return{restrict:\"E\",link:function(e,t){t.addClass(\"km-footer\").attr(\"data-role\",\"footer\")}}}).directive(\"kendoMobileScrollViewPage\",function(){return{restrict:\"E\",replace:!0,template:function(e){return\"<div data-\"+kendo.ns+\"role='page'>\"+e.html()+\"</div>\"}}}),t.forEach([\"align\",\"icon\",\"rel\",\"transition\",\"actionsheetContext\"],function(e){var t=\"k\"+e.slice(0,1).toUpperCase()+e.slice(1);y.directive(t,function(){return{restrict:\"A\",priority:2,link:function(n,i,o){i.attr(kendo.attr(kendo.toHyphens(e)),n.$eval(o[t]))}}})}),I={TreeMap:[\"Template\"],MobileListView:[\"HeaderTemplate\",\"Template\"],MobileScrollView:[\"EmptyTemplate\",\"Template\"],Grid:[\"AltRowTemplate\",\"DetailTemplate\",\"RowTemplate\"],ListView:[\"EditTemplate\",\"Template\",\"AltTemplate\"],Pager:[\"SelectTemplate\",\"LinkTemplate\"],PivotGrid:[\"ColumnHeaderTemplate\",\"DataCellTemplate\",\"RowHeaderTemplate\"],Scheduler:[\"AllDayEventTemplate\",\"DateHeaderTemplate\",\"EventTemplate\",\"MajorTimeHeaderTemplate\",\"MinorTimeHeaderTemplate\"],TreeView:[\"Template\"],Validator:[\"ErrorTemplate\"]},function(){var e={};t.forEach(I,function(n,i){t.forEach(n,function(t){e[t]||(e[t]=[]),e[t].push(\"?^^kendo\"+i)})}),t.forEach(e,function(e,t){var n=\"k\"+t,i=kendo.toHyphens(n);y.directive(n,function(){return{restrict:\"A\",require:e,terminal:!0,compile:function(t,o){if(\"\"===o[n]){t.removeAttr(i);var a=t[0].outerHTML;return function(t,o,r,l){for(var u;!u&&l.length;)u=l.shift();u?(u.template(n,a),o.remove()):x.warn(i+\" without a matching parent widget found. It can be one of the following: \"+e.join(\", \"))}}}}})})}())}(window.kendo.jQuery,window.angular),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.angular.min.js.map\n","import { Record, List, Map } from \"immutable\";\nimport * as uuid from \"uuid/v4\";\n\nconst dateFields = [\"created_at\", \"updated_at\"];\n\nexport const PaymentTermItemKindList: List<PaymentTermItemKinds> = List<PaymentTermItemKinds>([\"percent\", \"amount\"]);\nexport type PaymentTermItemKinds = \"percent\" | \"amount\";\n\nexport const fromJSON = (json: Partial<IPaymentTermTemplateData>): PaymentTermTemplateRecord => {\n  const record: IPaymentTermTemplateRecord = { ...(json as any) };\n\n  if (json.breakdown) {\n    record.breakdown = breakdownFromJSON(json.breakdown);\n  }\n\n  dateFields.forEach((f) => {\n    if (json[f]) {\n      record[f] = new Date(json[f]);\n    } else {\n      record[f] = new Date();\n    }\n  });\n\n  return new PaymentTermTemplateRecord(record);\n};\n\nexport const paymentTermItemFromJSON = (\n  json: Partial<IPaymentTermItemData>,\n  forceUuid = true,\n): PaymentTermItemRecord => {\n  const record: IPaymentTermItemRecord = { ...(json as any) };\n\n  if (!record.uuid && forceUuid) {\n    record.uuid = uuid();\n  }\n\n  return new PaymentTermItemRecord(record);\n};\n\nexport const breakdownFromJSON = (json: Partial<IPaymentTermBreakdown>): PaymentTermBreakdownRecord => {\n  const record: IPaymentTermBreakdownRecord = { ...(json as any) };\n\n  if (record.items) {\n    record.items = List(record.items.map((pti) => paymentTermItemFromJSON(pti, false)));\n  }\n\n  return new PaymentTermBreakdownRecord(record);\n};\n\nexport interface IPaymentTermBreakdown {\n  items: IPaymentTermItemData[];\n}\n\nexport interface IPaymentTermBreakdownRecord {\n  items: List<PaymentTermItemRecord>;\n}\n\nconst defaultPaymentTermBreakdownProps: IPaymentTermBreakdownRecord = {\n  items: List<PaymentTermItemRecord>(),\n};\n\nexport class PaymentTermBreakdownRecord\n  extends Record(defaultPaymentTermBreakdownProps)\n  implements IPaymentTermBreakdownRecord\n{\n  public readonly items!: List<PaymentTermItemRecord>;\n\n  public constructor(values?: Partial<IPaymentTermBreakdownRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n\nexport interface IPaymentTermItemData {\n  uuid: string;\n  amount: number;\n  description: string;\n  type: PaymentTermItemKinds;\n  calculated: number;\n  paymentMethod: \"cash\" | \"financed\";\n}\n\nexport interface IPaymentTermItemRecord {\n  uuid: string;\n  amount: number;\n  description: string;\n  type: PaymentTermItemKinds;\n  calculated: number;\n  paymentMethod: \"cash\" | \"financed\";\n}\n\nconst defaultPaymentTermItemProps: IPaymentTermItemRecord = {\n  uuid: \"\",\n  amount: 0,\n  description: \"\",\n  type: \"amount\",\n  calculated: 0,\n  paymentMethod: \"cash\",\n};\n\nexport class PaymentTermItemRecord extends Record(defaultPaymentTermItemProps) implements IPaymentTermItemRecord {\n  public readonly uuid!: string;\n  public readonly amount!: number;\n  public readonly description!: string;\n  public readonly type!: PaymentTermItemKinds;\n  public readonly calculated!: number;\n  public readonly paymentMethod!: \"cash\" | \"financed\";\n\n  public constructor(values?: Partial<IPaymentTermItemRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n\nexport interface IPaymentTermTemplateData {\n  id: number;\n  org_id: number;\n  name: string;\n  description: string;\n  breakdown: { items: IPaymentTermItemData[] };\n  sort_order: number;\n  created_at: Date;\n  updated_at: Date;\n  loading?: boolean;\n  errors?: string[];\n}\n\nexport interface IPaymentTermTemplateRecord {\n  id: number;\n  org_id: number;\n  name: string;\n  description: string;\n  breakdown: PaymentTermBreakdownRecord;\n  sort_order: number;\n  created_at: Date;\n  updated_at: Date;\n  loading: boolean;\n  errors: List<string>;\n}\n\nconst defaultPaymentTermTemplateProps: IPaymentTermTemplateRecord = {\n  id: 0,\n  org_id: 0,\n  name: \"\",\n  description: \"\",\n  breakdown: new PaymentTermBreakdownRecord(),\n  sort_order: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n  errors: List<string>(),\n  loading: false,\n};\n\nexport class PaymentTermTemplateRecord\n  extends Record(defaultPaymentTermTemplateProps)\n  implements IPaymentTermTemplateRecord\n{\n  public readonly id!: number;\n  public readonly org_id!: number;\n  public readonly name!: string;\n  public readonly description!: string;\n  public readonly breakdown!: PaymentTermBreakdownRecord;\n  public readonly sort_order!: number;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n  public readonly errors!: List<string>;\n  public readonly loading!: boolean;\n\n  public constructor(values?: Partial<IPaymentTermTemplateRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { Record, List } from \"immutable\";\nimport { AbleProp } from \"app/src/Models/Product\";\nimport { IEstimateLineItemOptionData } from \"./EstimateLineItemOption\";\nimport { IDocumentData } from \"./Document\";\nimport { IImageData } from \"./Image\";\nimport { IOpeningEstimationData } from \"./OpeningEstimation\";\nimport { estimateLineItem } from \"app2/src/selectors/estimateLineItem.selectors\";\n\nexport const fromJSON = (json: Partial<IEstimateLineItemData>): EstimateLineItemRecord => {\n  const record: IEstimateLineItemRecord = { ...(json as any) };\n\n  if (json.images) {\n    record.image_ids = List(json.images.map((i) => i.id));\n  }\n\n  if (json.documents) {\n    record.document_ids = List(json.documents.map((d) => d.id));\n  }\n\n  if (json.options) {\n    record.option_ids = List(json.options.map((o) => o.id));\n  }\n\n  if (json.opening_estimations) {\n    record.opening_estimation_ids = List(json.opening_estimations.map((oe) => oe.id));\n  }\n\n  return new EstimateLineItemRecord(record);\n};\n\nexport const splitName = (lineItem: EstimateLineItemRecord): string[] => {\n  if (!lineItem.name) {\n    return [\"\"];\n  }\n  const parts = lineItem.name.split(\">\");\n  _.each(parts, (part: string, index: number) => {\n    parts[index] = part.trim();\n  });\n\n  return parts;\n};\n\nexport const isDiscountable = (estimateLineItem: IEstimateLineItemDiscountable): boolean => {\n  return estimateLineItem.discountable !== \"no\";\n};\n\nexport const isMarkupable = (estimateLineItem: IEstimateLineItemMarkupable): boolean => {\n  return estimateLineItem.markupable !== \"no\";\n};\n\nexport interface IEstimateLineItemDiscountable {\n  discountable: string;\n}\n\nexport interface IEstimateLineItemMarkupable {\n  markupable: string;\n}\nexport interface IEstimateLineItemData {\n  id: number;\n  product_uuid: string;\n  product_id: number;\n  estimate_group_id: number;\n  sort_order: number;\n  name: string;\n  description: string;\n  cost: number;\n  msrp: number;\n  price: number;\n  base_product_price: number;\n  base_labor_price: number;\n  product_price: number;\n  labor_price: number;\n  visibility: string;\n  quantity: number;\n  discountable: AbleProp;\n  markupable: AbleProp;\n  uom: string;\n  ext_price: number;\n  created_at: Date;\n  updated_at: Date;\n  _destroy: boolean;\n  options: IEstimateLineItemOptionData[];\n  documents: IDocumentData[];\n  images: IImageData[];\n  opening_estimations: IOpeningEstimationData[];\n  product_image_urls: string[];\n  estimate_doc_urls: string[];\n  contract_doc_urls: string[];\n  newly_added: boolean;\n  editing: boolean;\n}\n\nexport interface IEstimateLineItemRecord {\n  id: number;\n  product_uuid: string;\n  product_id: number;\n  estimate_group_id: number;\n  sort_order: number;\n  name: string;\n  description: string;\n  cost: number;\n  msrp: number;\n  price: number;\n  base_product_price: number;\n  base_labor_price: number;\n  product_price: number;\n  labor_price: number;\n  visibility: string;\n  quantity: number;\n  discountable: AbleProp;\n  markupable: AbleProp;\n  uom: string;\n  ext_price: number;\n  created_at: Date;\n  updated_at: Date;\n  _destroy: boolean;\n  option_ids: List<number>;\n  document_ids: List<number>;\n  image_ids: List<number>;\n  opening_estimation_ids: List<number>;\n  product_image_urls: List<string>;\n  estimate_doc_urls: List<string>;\n  contract_doc_urls: List<string>;\n  newly_added: boolean;\n  editing: boolean;\n}\n\nconst defaultEstimateLineItemProps: IEstimateLineItemRecord = {\n  id: 0,\n  product_uuid: \"\",\n  product_id: 0,\n  estimate_group_id: 0,\n  sort_order: 0,\n  name: \"\",\n  description: \"\",\n  cost: 0,\n  msrp: 0,\n  price: 0,\n  base_product_price: 0,\n  base_labor_price: 0,\n  product_price: 0,\n  labor_price: 0,\n  visibility: \"\",\n  quantity: 0,\n  discountable: \"yes\",\n  markupable: \"yes\",\n  uom: \"\",\n  ext_price: 0,\n  created_at: new Date(),\n  updated_at: new Date(),\n  _destroy: null,\n  option_ids: List<number>(),\n  document_ids: List<number>(),\n  image_ids: List<number>(),\n  opening_estimation_ids: List<number>(),\n  product_image_urls: List<string>(),\n  estimate_doc_urls: List<string>(),\n  contract_doc_urls: List<string>(),\n  newly_added: false,\n  editing: false,\n};\n\nexport class EstimateLineItemRecord extends Record(defaultEstimateLineItemProps) implements IEstimateLineItemRecord {}\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.selectable.min\",[\"kendo.core.min\",\"kendo.userevents.min\"],e)}(function(){return function(e,t){function n(e,t){if(!e.is(\":visible\"))return!1;var n=s.getOffset(e),i=t.left+t.width,l=t.top+t.height;return n.right=n.left+e.outerWidth(),n.bottom=n.top+e.outerHeight(),!(n.left>i||t.left>n.right||n.top>l||t.top>n.bottom)}var i,s=window.kendo,l=s.ui.Widget,a=e.proxy,o=Math.abs,r=\"aria-selected\",c=\"k-state-selected\",u=\"k-state-selecting\",d=\"k-selectable\",f=\"change\",v=\".kendoSelectable\",m=\"k-state-unselecting\",h=\"input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-expand,span.k-icon.k-i-collapse\",p=s.support.browser.msie,_=!1;!function(e){!function(){e('<div class=\"parent\"><span /></div>').on(\"click\",\">*\",function(){_=!0}).find(\"span\").click().end().off()}()}(e),i=l.extend({init:function(t,n){var i,o=this;l.fn.init.call(o,t,n),o._marquee=e(\"<div class='k-marquee'><div class='k-marquee-color'></div></div>\"),o._lastActive=null,o.element.addClass(d),o.relatedTarget=o.options.relatedTarget,i=o.options.multiple,this.options.aria&&i&&o.element.attr(\"aria-multiselectable\",!0),o.userEvents=new s.UserEvents(o.element,{global:!0,allowSelection:!0,filter:(_?\"\":\".\"+d+\" \")+o.options.filter,tap:a(o._tap,o)}),i&&o.userEvents.bind(\"start\",a(o._start,o)).bind(\"move\",a(o._move,o)).bind(\"end\",a(o._end,o)).bind(\"select\",a(o._select,o))},events:[f],options:{name:\"Selectable\",filter:\">*\",multiple:!1,relatedTarget:e.noop},_isElement:function(e){var t,n=this.element,i=n.length,s=!1;for(e=e[0],t=0;i>t;t++)if(n[t]===e){s=!0;break}return s},_tap:function(t){var n,i=e(t.target),s=this,l=t.event.ctrlKey||t.event.metaKey,a=s.options.multiple,o=a&&t.event.shiftKey,r=t.event.which,u=t.event.button;!s._isElement(i.closest(\".\"+d))||r&&3==r||u&&2==u||this._allowSelection(t.event.target)&&(n=i.hasClass(c),a&&l||s.clear(),i=i.add(s.relatedTarget(i)),o?s.selectRange(s._firstSelectee(),i):(n&&l?(s._unselect(i),s._notify(f)):s.value(i),s._lastActive=s._downTarget=i))},_start:function(n){var i,s=this,l=e(n.target),a=l.hasClass(c),o=n.event.ctrlKey||n.event.metaKey;if(this._allowSelection(n.event.target)){if(s._downTarget=l,!s._isElement(l.closest(\".\"+d)))return s.userEvents.cancel(),t;s.options.useAllItems?s._items=s.element.find(s.options.filter):(i=l.closest(s.element),s._items=i.find(s.options.filter)),n.sender.capture(),s._marquee.appendTo(document.body).css({left:n.x.client+1,top:n.y.client+1,width:0,height:0}),o||s.clear(),l=l.add(s.relatedTarget(l)),a&&(s._selectElement(l,!0),o&&l.addClass(m))}},_move:function(e){var t=this,n={left:e.x.startLocation>e.x.location?e.x.location:e.x.startLocation,top:e.y.startLocation>e.y.location?e.y.location:e.y.startLocation,width:o(e.x.initialDelta),height:o(e.y.initialDelta)};t._marquee.css(n),t._invalidateSelectables(n,e.event.ctrlKey||e.event.metaKey),e.preventDefault()},_end:function(){var e,t=this;t._marquee.remove(),t._unselect(t.element.find(t.options.filter+\".\"+m)).removeClass(m),e=t.element.find(t.options.filter+\".\"+u),e=e.add(t.relatedTarget(e)),t.value(e),t._lastActive=t._downTarget,t._items=null},_invalidateSelectables:function(e,t){var i,s,l,a,o=this._downTarget[0],r=this._items;for(i=0,s=r.length;s>i;i++)a=r.eq(i),l=a.add(this.relatedTarget(a)),n(a,e)?a.hasClass(c)?t&&o!==a[0]&&l.removeClass(c).addClass(m):a.hasClass(u)||a.hasClass(m)||l.addClass(u):a.hasClass(u)?l.removeClass(u):t&&a.hasClass(m)&&l.removeClass(m).addClass(c)},value:function(e){var n=this,i=a(n._selectElement,n);return e?(e.each(function(){i(this)}),n._notify(f),t):n.element.find(n.options.filter+\".\"+c)},_firstSelectee:function(){var e,t=this;return null!==t._lastActive?t._lastActive:(e=t.value(),e.length>0?e[0]:t.element.find(t.options.filter)[0])},_selectElement:function(t,n){var i=e(t),s=!n&&this._notify(\"select\",{element:t});i.removeClass(u),s||(i.addClass(c),this.options.aria&&i.attr(r,!0))},_notify:function(e,t){return t=t||{},this.trigger(e,t)},_unselect:function(e){return e.removeClass(c),this.options.aria&&e.attr(r,!1),e},_select:function(t){this._allowSelection(t.event.target)&&(!p||p&&!e(s._activeElement()).is(h))&&t.preventDefault()},_allowSelection:function(t){return e(t).is(h)?(this.userEvents.cancel(),this._downTarget=null,!1):!0},resetTouchEvents:function(){this.userEvents.cancel()},clear:function(){var e=this.element.find(this.options.filter+\".\"+c);this._unselect(e)},selectRange:function(t,n){var i,s,l,a=this;for(a.clear(),a.element.length>1&&(l=a.options.continuousItems()),l&&l.length||(l=a.element.find(a.options.filter)),t=e.inArray(e(t)[0],l),n=e.inArray(e(n)[0],l),t>n&&(s=t,t=n,n=s),a.options.useAllItems||(n+=a.element.length-1),i=t;n>=i;i++)a._selectElement(l[i]);a._notify(f)},destroy:function(){var e=this;l.fn.destroy.call(e),e.element.off(v),e.userEvents.destroy(),e._marquee=e._lastActive=e.element=e.userEvents=null}}),i.parseOptions=function(e){var t=\"string\"==typeof e&&e.toLowerCase();return{multiple:t&&t.indexOf(\"multiple\")>-1,cell:t&&t.indexOf(\"cell\")>-1}},s.ui.plugin(i)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.selectable.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.editable.min\",[\"kendo.datepicker.min\",\"kendo.numerictextbox.min\",\"kendo.validator.min\",\"kendo.binder.min\"],e)}(function(){return function(e,t){function n(t){return t=null!=t?t:\"\",t.type||e.type(t)||\"string\"}function a(t){t.find(\":input:not(:button, [\"+l.attr(\"role\")+\"=upload], [\"+l.attr(\"skip\")+\"], [type=file]), select\").each(function(){var t=l.attr(\"bind\"),n=this.getAttribute(t)||\"\",a=\"checkbox\"===this.type||\"radio\"===this.type?\"checked:\":\"value:\",i=this.name;-1===n.indexOf(a)&&i&&(n+=(n.length?\",\":\"\")+a+i,e(this).attr(t,n))})}function i(e){var t,a,i=(e.model.fields||e.model)[e.field],o=n(i),r=i?i.validation:{},d=l.attr(\"type\"),s=l.attr(\"bind\"),u={name:e.field};for(t in r)a=r[t],c(t,k)>=0?u[d]=t:p(a)||(u[t]=v(a)?a.value||t:a),u[l.attr(t+\"-msg\")]=a.message;return c(o,k)>=0&&(u[d]=o),u[s]=(\"boolean\"===o?\"checked:\":\"value:\")+e.field,u}function o(e){var t,n,a,i,o,r;if(e&&e.length)for(r=[],t=0,n=e.length;n>t;t++)a=e[t],o=a.text||a.value||a,i=null==a.value?a.text||a:a.value,r[t]={text:o,value:i};return r}function r(e,t){var n,a,i=e?e.validation||{}:{};for(n in i)a=i[n],v(a)&&a.value&&(a=a.value),p(a)&&(t[n]=a)}var l=window.kendo,d=l.ui,s=d.Widget,u=e.extend,f=l.support.browser.msie&&9>l.support.browser.version,p=l.isFunction,v=e.isPlainObject,c=e.inArray,m=/(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g,g='<div class=\"k-widget k-tooltip k-tooltip-validation\" style=\"margin:0.5em\"><span class=\"k-icon k-i-warning\"> </span>#=message#<div class=\"k-callout k-callout-n\"></div></div>',b=\"change\",k=[\"url\",\"email\",\"number\",\"date\",\"boolean\"],h={number:function(t,n){var a=i(n);e('<input type=\"text\"/>').attr(a).appendTo(t).kendoNumericTextBox({format:n.format}),e(\"<span \"+l.attr(\"for\")+'=\"'+n.field+'\" class=\"k-invalid-msg\"/>').hide().appendTo(t)},date:function(t,n){var a=i(n),o=n.format;o&&(o=l._extractFormat(o)),a[l.attr(\"format\")]=o,e('<input type=\"text\"/>').attr(a).appendTo(t).kendoDatePicker({format:n.format}),e(\"<span \"+l.attr(\"for\")+'=\"'+n.field+'\" class=\"k-invalid-msg\"/>').hide().appendTo(t)},string:function(t,n){var a=i(n);e('<input type=\"text\" class=\"k-input k-textbox\"/>').attr(a).appendTo(t)},\"boolean\":function(t,n){var a=i(n);e('<input type=\"checkbox\" />').attr(a).appendTo(t)},values:function(t,n){var a=i(n),r=l.stringify(o(n.values));e(\"<select \"+l.attr(\"text-field\")+'=\"text\"'+l.attr(\"value-field\")+'=\"value\"'+l.attr(\"source\")+\"='\"+(r?r.replace(/\\'/g,\"&apos;\"):r)+\"'\"+l.attr(\"role\")+'=\"dropdownlist\"/>').attr(a).appendTo(t),e(\"<span \"+l.attr(\"for\")+'=\"'+n.field+'\" class=\"k-invalid-msg\"/>').hide().appendTo(t)}},y=s.extend({init:function(t,n){var a=this;n.target&&(n.$angular=n.target.options.$angular),s.fn.init.call(a,t,n),a._validateProxy=e.proxy(a._validate,a),a.refresh()},events:[b],options:{name:\"Editable\",editors:h,clearContainer:!0,errorTemplate:g},editor:function(e,t){var a=this,i=a.options.editors,o=v(e),r=o?e.field:e,d=a.options.model||{},s=o&&e.values,f=s?\"values\":n(t),p=o&&e.editor,c=p?e.editor:i[f],g=a.element.find(\"[\"+l.attr(\"container-for\")+\"=\"+r.replace(m,\"\\\\$1\")+\"]\");c=c?c:i.string,p&&\"string\"==typeof e.editor&&(c=function(t){t.append(e.editor)}),g=g.length?g:a.element,c(g,u(!0,{},o?e:{field:r},{model:d}))},_validate:function(t){var n,a=this,i=t.value,o=a._validationEventInProgress,r={},d=l.attr(\"bind\"),s=t.field.replace(m,\"\\\\$1\"),u=RegExp(\"(value|checked)\\\\s*:\\\\s*\"+s+\"\\\\s*(,|$)\");r[t.field]=t.value,n=e(\":input[\"+d+'*=\"'+s+'\"]',a.element).filter(\"[\"+l.attr(\"validate\")+\"!='false']\").filter(function(){return u.test(e(this).attr(d))}),n.length>1&&(n=n.filter(function(){var t=e(this);return!t.is(\":radio\")||t.val()==i}));try{a._validationEventInProgress=!0,(!a.validatable.validateInput(n)||!o&&a.trigger(b,{values:r}))&&t.preventDefault()}finally{a._validationEventInProgress=!1}},end:function(){return this.validatable.validate()},destroy:function(){var e=this;e.angular(\"cleanup\",function(){return{elements:e.element}}),s.fn.destroy.call(e),e.options.model.unbind(\"set\",e._validateProxy),l.unbind(e.element),e.validatable&&e.validatable.destroy(),l.destroy(e.element),e.element.removeData(\"kendoValidator\"),e.element.is(\"[\"+l.attr(\"role\")+\"=editable]\")&&e.element.removeAttr(l.attr(\"role\"))},refresh:function(){var n,i,o,d,s,u,p,c,m=this,g=m.options.fields||[],b=m.options.clearContainer?m.element.empty():m.element,k=m.options.model||{},h={};for(e.isArray(g)||(g=[g]),n=0,i=g.length;i>n;n++)o=g[n],d=v(o),s=d?o.field:o,u=(k.fields||k)[s],r(u,h),m.editor(o,u);if(m.options.target&&m.angular(\"compile\",function(){return{elements:b,data:b.map(function(){return{dataItem:k}})}}),!i){p=k.fields||k;for(s in p)r(p[s],h)}a(b),m.validatable&&m.validatable.destroy(),l.bind(b,m.options.model),m.options.model.unbind(\"set\",m._validateProxy),m.options.model.bind(\"set\",m._validateProxy),m.validatable=new l.ui.Validator(b,{validateOnBlur:!1,errorTemplate:m.options.errorTemplate||t,rules:h}),c=b.find(\":kendoFocusable\").eq(0).focus(),f&&c.focus()}});d.plugin(y)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.editable.min.js.map\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.dropdownlist.min\",[\"kendo.list.min\",\"kendo.mobile.scroller.min\"],e)}(function(){return function(e,t){function i(e,t,i){for(var n,s=0,a=t.length-1;a>s;++s)n=t[s],n in e||(e[n]={}),e=e[n];e[t[a]]=i}function n(e,t){return e>=t&&(e-=t),e}function s(e,t){for(var i=0;e.length>i;i++)if(e.charAt(i)!==t)return!1;return!0}var a=window.kendo,o=a.ui,l=o.List,r=o.Select,p=a.support,u=a._activeElement,c=a.data.ObservableObject,d=a.keys,_=\".kendoDropDownList\",f=\"disabled\",h=\"readonly\",m=\"change\",b=\"k-state-focused\",v=\"k-state-default\",w=\"k-state-disabled\",g=\"aria-disabled\",I=\"mouseenter\"+_+\" mouseleave\"+_,x=\"tabindex\",L=\"filter\",k=\"accept\",y=\"The `optionLabel` option is not valid due to missing fields. Define a custom optionLabel as shown here http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#configuration-optionLabel\",T=e.proxy,V=r.extend({init:function(i,n){var s,o,l,p=this,u=n&&n.index;p.ns=_,n=e.isArray(n)?{dataSource:n}:n,r.fn.init.call(p,i,n),n=p.options,i=p.element.on(\"focus\"+_,T(p._focusHandler,p)),p._focusInputHandler=e.proxy(p._focusInput,p),p.optionLabel=e(),p._optionLabel(),p._inputTemplate(),p._reset(),p._prev=\"\",p._word=\"\",p._wrapper(),p._tabindex(),p.wrapper.data(x,p.wrapper.attr(x)),p._span(),p._popup(),p._mobile(),p._dataSource(),p._ignoreCase(),p._filterHeader(),p._aria(),p._enable(),p._oldIndex=p.selectedIndex=-1,u!==t&&(n.index=u),p._initialIndex=n.index,p.requireValueMapper(p.options),p._initList(),p._cascade(),n.autoBind?p.dataSource.fetch():-1===p.selectedIndex&&(o=n.text||\"\",o||(s=n.optionLabel,s&&0===n.index?o=s:p._isSelect&&(o=i.children(\":selected\").text())),p._textAccessor(o)),l=e(p.element).parents(\"fieldset\").is(\":disabled\"),l&&p.enable(!1),p.listView.bind(\"click\",function(e){e.preventDefault()}),a.notify(p)},options:{name:\"DropDownList\",enabled:!0,autoBind:!0,index:0,text:null,value:null,delay:500,height:200,dataTextField:\"\",dataValueField:\"\",optionLabel:\"\",cascadeFrom:\"\",cascadeFromField:\"\",ignoreCase:!0,animation:{},filter:\"none\",minLength:1,enforceMinLength:!1,virtual:!1,template:null,valueTemplate:null,optionLabelTemplate:null,groupTemplate:\"#:data#\",fixedGroupTemplate:\"#:data#\"},events:[\"open\",\"close\",m,\"select\",\"filtering\",\"dataBinding\",\"dataBound\",\"cascade\",\"set\"],setOptions:function(e){r.fn.setOptions.call(this,e),this.listView.setOptions(this._listOptions(e)),this._optionLabel(),this._inputTemplate(),this._accessors(),this._filterHeader(),this._enable(),this._aria(),!this.value()&&this.hasOptionLabel()&&this.select(0)},destroy:function(){var e=this;r.fn.destroy.call(e),e.wrapper.off(_),e.element.off(_),e._inputWrapper.off(_),e._arrow.off(),e._arrow=null,e.optionLabel.off()},open:function(){var e=this;e.popup.visible()||(e.listView.bound()&&e._state!==k?e._allowOpening()&&(e.popup.one(\"activate\",e._focusInputHandler),e.popup.open(),e.filterInput&&e._resizeFilterInput(),e._focusItem()):(e._open=!0,e._state=\"rebind\",e.filterInput&&(e.filterInput.val(\"\"),e._prev=\"\"),e.filterInput&&1!==e.options.minLength?(e.refresh(),e.popup.one(\"activate\",e._focusInputHandler),e.popup.open(),e.filterInput&&e._resizeFilterInput()):e._filterSource()))},_focusInput:function(){this._focusElement(this.filterInput)},_resizeFilterInput:function(){this.filterInput.css(\"display\",\"none\"),this.filterInput.css(\"width\",this.popup.element.css(\"width\")),this.filterInput.css(\"display\",\"inline-block\")},_allowOpening:function(){return this.hasOptionLabel()||this.filterInput||r.fn._allowOpening.call(this)},toggle:function(e){this._toggle(e,!0)},current:function(e){var i;return e===t?(i=this.listView.focus(),!i&&0===this.selectedIndex&&this.hasOptionLabel()?this.optionLabel:i):(this._focus(e),t)},dataItem:function(i){var n=this,s=null;if(null===i)return i;if(i===t)s=n.listView.selectedDataItems()[0];else{if(\"number\"!=typeof i){if(n.options.virtual)return n.dataSource.getByUid(e(i).data(\"uid\"));i=i.hasClass(\"k-list-optionlabel\")?-1:e(n.items()).index(i)}else n.hasOptionLabel()&&(i-=1);s=n.dataSource.flatView()[i]}return s||(s=n._optionLabelDataItem()),s},refresh:function(){this.listView.refresh()},text:function(e){var i,n,s=this,a=s.options.ignoreCase;return e=null===e?\"\":e,e===t?s._textAccessor():(\"string\"==typeof e&&(n=a?e.toLowerCase():e,s._select(function(e){return e=s._text(e),a&&(e=(e+\"\").toLowerCase()),e===n}),i=s.dataItem(),i&&(e=i)),s._textAccessor(e),t)},_clearFilter:function(){e(this.filterInput).val(\"\"),r.fn._clearFilter.call(this)},value:function(e){var i=this,n=i.listView,s=i.dataSource;return e===t?(e=i._accessor()||i.listView.value()[0],e===t||null===e?\"\":e):(i.requireValueMapper(i.options,e),!e&&i.hasOptionLabel()||(i._initialIndex=null),this.trigger(\"set\",{value:e}),i._request&&i.options.cascadeFrom&&i.listView.bound()?(i._valueSetter&&s.unbind(m,i._valueSetter),i._valueSetter=T(function(){i.value(e)},i),s.one(m,i._valueSetter),t):(i._isFilterEnabled()&&n.bound()&&n.isFiltered()?i._clearFilter():i._fetchData(),n.value(e).done(function(){-1===i.selectedIndex&&i.text()&&(i.text(\"\"),i._accessor(\"\",-1)),i._old=i._accessor(),i._oldIndex=i.selectedIndex}),t))},hasOptionLabel:function(){return this.optionLabel&&!!this.optionLabel[0]},_optionLabel:function(){var i=this,n=i.options,s=n.optionLabel,o=n.optionLabelTemplate;return s?(o||(o=\"#:\",o+=\"string\"==typeof s?\"data\":a.expr(n.dataTextField,\"data\"),o+=\"#\"),\"function\"!=typeof o&&(o=a.template(o)),i.optionLabelTemplate=o,i.hasOptionLabel()||(i.optionLabel=e('<div class=\"k-list-optionlabel\"></div>').prependTo(i.list)),i.optionLabel.html(o(s)).off().click(T(i._click,i)).on(I,i._toggleHover),i.angular(\"compile\",function(){return{elements:i.optionLabel,data:[{dataItem:i._optionLabelDataItem()}]}}),t):(i.optionLabel.off().remove(),i.optionLabel=e(),t)},_optionLabelText:function(){var e=this.options.optionLabel;return\"string\"==typeof e?e:this._text(e)},_optionLabelDataItem:function(){var t=this,i=t.options.optionLabel;return t.hasOptionLabel()?e.isPlainObject(i)?new c(i):t._assignInstance(t._optionLabelText(),\"\"):null},_buildOptions:function(e){var i,n,s,a=this;a._isSelect&&(i=a.listView.value()[0],n=a._optionLabelDataItem(),s=n&&a._value(n),i!==t&&null!==i||(i=\"\"),n&&(s!==t&&null!==s||(s=\"\"),n='<option value=\"'+s+'\">'+a._text(n)+\"</option>\"),a._options(e,n,i),i!==l.unifyType(a._accessor(),typeof i)&&(a._customOption=null,a._custom(i)))},_listBound:function(){var e,t=this,i=t._initialIndex,n=t._state===L,s=t.dataSource.flatView();t._presetValue=!1,t._renderFooter(),t._renderNoData(),t._toggleNoData(!s.length),t._resizePopup(!0),t.popup.position(),t._buildOptions(s),t._makeUnselectable(),n||(t._open&&t.toggle(t._allowOpening()),t._open=!1,t._fetch||(s.length?(!t.listView.value().length&&i>-1&&null!==i&&t.select(i),t._initialIndex=null,e=t.listView.selectedDataItems()[0],e&&t.text()!==t._text(e)&&t._selectValue(e)):t._textAccessor()!==t._optionLabelText()&&(t.listView.value(\"\"),t._selectValue(null),t._oldIndex=t.selectedIndex))),t._hideBusy(),t.trigger(\"dataBound\")},_listChange:function(){this._selectValue(this.listView.selectedDataItems()[0]),(this._presetValue||this._old&&-1===this._oldIndex)&&(this._oldIndex=this.selectedIndex)},_filterPaste:function(){this._search()},_focusHandler:function(){this.wrapper.focus()},_focusinHandler:function(){this._inputWrapper.addClass(b),this._prevent=!1},_focusoutHandler:function(){var e=this,t=e._state===L,i=window.self!==window.top,n=e._focus(),s=e._getElementDataItem(n);e._prevent||(clearTimeout(e._typingTimeout),t||!n||e.trigger(\"select\",{dataItem:s,item:n})||e._select(n,!e.dataSource.view().length),p.mobileOS.ios&&i?e._change():e._blur(),e._inputWrapper.removeClass(b),e._prevent=!0,e._open=!1,e.element.blur())},_wrapperMousedown:function(){this._prevent=!!this.filterInput},_wrapperClick:function(e){e.preventDefault(),this.popup.unbind(\"activate\",this._focusInputHandler),this._focused=this.wrapper,this._toggle()},_editable:function(e){var t=this,i=t.element,n=e.disable,s=e.readonly,a=t.wrapper.add(t.filterInput).off(_),o=t._inputWrapper.off(I);s||n?n?(a.removeAttr(x),o.addClass(w).removeClass(v)):(o.addClass(v).removeClass(w),a.on(\"focusin\"+_,T(t._focusinHandler,t)).on(\"focusout\"+_,T(t._focusoutHandler,t))):(i.removeAttr(f).removeAttr(h),o.addClass(v).removeClass(w).on(I,t._toggleHover),a.attr(x,a.data(x)).attr(g,!1).on(\"keydown\"+_,T(t._keydown,t)).on(\"focusin\"+_,T(t._focusinHandler,t)).on(\"focusout\"+_,T(t._focusoutHandler,t)).on(\"mousedown\"+_,T(t._wrapperMousedown,t)).on(\"paste\"+_,T(t._filterPaste,t)),t.wrapper.on(\"click\"+_,T(t._wrapperClick,t)),t.filterInput||a.on(\"keypress\"+_,T(t._keypress,t))),i.attr(f,n).attr(h,s),a.attr(g,n)},_keydown:function(e){var i,n,s,a=this,o=e.keyCode,l=e.altKey,r=a.popup.visible();if(a.filterInput&&(i=a.filterInput[0]===u()),o===d.LEFT?(o=d.UP,n=!0):o===d.RIGHT&&(o=d.DOWN,n=!0),!n||!i){if(e.keyCode=o,(l&&o===d.UP||o===d.ESC)&&a._focusElement(a.wrapper),a._state===L&&o===d.ESC&&a._clearFilter(),o===d.ENTER&&a._typingTimeout&&a.filterInput&&r)return e.preventDefault(),t;if(n=a._move(e),!n){if((!r||!a.filterInput)&&(s=a._focus(),o===d.HOME?(n=!0,a._firstItem()):o===d.END&&(n=!0,a._lastItem()),n)){if(a.trigger(\"select\",{dataItem:a._getElementDataItem(a._focus()),item:a._focus()}))return a._focus(s),t;a._select(a._focus(),!0),r||a._blur()}l||n||!a.filterInput||a._search()}}},_matchText:function(e,i){var n=this.options.ignoreCase;return e===t||null===e?!1:(e+=\"\",n&&(e=e.toLowerCase()),0===e.indexOf(i))},_shuffleData:function(e,t){var i=this._optionLabelDataItem();return i&&(e=[i].concat(e)),e.slice(t).concat(e.slice(0,t))},_selectNext:function(){var e,t,i,a=this,o=a.dataSource.flatView(),l=o.length+(a.hasOptionLabel()?1:0),r=s(a._word,a._last),p=a.selectedIndex;for(-1===p?p=0:(p+=r?1:0,p=n(p,l)),o=o.toJSON?o.toJSON():o.slice(),o=a._shuffleData(o,p),i=0;l>i&&(t=a._text(o[i]),!r||!a._matchText(t,a._last))&&!a._matchText(t,a._word);i++);i!==l&&(e=a._focus(),a._select(n(p+i,l)),a.trigger(\"select\",{dataItem:a._getElementDataItem(a._focus()),item:a._focus()})&&a._select(e),a.popup.visible()||a._change())},_keypress:function(e){var t,i=this;0!==e.which&&e.keyCode!==a.keys.ENTER&&(t=String.fromCharCode(e.charCode||e.keyCode),i.options.ignoreCase&&(t=t.toLowerCase()),\" \"===t&&e.preventDefault(),i._word+=t,i._last=t,i._search())},_popupOpen:function(){var e=this.popup;e.wrapper=a.wrap(e.element),e.element.closest(\".km-root\")[0]&&(e.wrapper.addClass(\"km-popup km-widget\"),this.wrapper.addClass(\"km-widget\"))},_popup:function(){r.fn._popup.call(this),this.popup.one(\"open\",T(this._popupOpen,this))},_getElementDataItem:function(e){return e&&e[0]?e[0]===this.optionLabel[0]?this._optionLabelDataItem():this.listView.dataItemByIndex(this.listView.getElementIndex(e)):null},_click:function(i){var n=i.item||e(i.currentTarget);return i.preventDefault(),this.trigger(\"select\",{dataItem:this._getElementDataItem(n),item:n})?(this.close(),t):(this._userTriggered=!0,this._select(n),this._focusElement(this.wrapper),this._blur(),t)},_focusElement:function(e){var t=u(),i=this.wrapper,n=this.filterInput,s=e===n?i:n,a=p.mobileOS&&(p.touch||p.MSPointers||p.pointers);n&&n[0]===e[0]&&a||n&&s[0]===t&&(this._prevent=!0,this._focused=e.focus())},_searchByWord:function(e){var t,i;e&&(t=this,i=t.options.ignoreCase,i&&(e=e.toLowerCase()),t._select(function(i){return t._matchText(t._text(i),e)}))},_inputValue:function(){return this.text()},_search:function(){var e=this,i=e.dataSource;if(clearTimeout(e._typingTimeout),e._isFilterEnabled())e._typingTimeout=setTimeout(function(){var t=e.filterInput.val();e._prev!==t&&(e._prev=t,e.search(t),e._resizeFilterInput()),e._typingTimeout=null},e.options.delay);else{if(e._typingTimeout=setTimeout(function(){e._word=\"\"},e.options.delay),!e.listView.bound())return i.fetch().done(function(){e._selectNext()}),t;e._selectNext()}},_get:function(t){var i,n,s,a=\"function\"==typeof t,o=a?e():e(t);if(this.hasOptionLabel()&&(\"number\"==typeof t?t>-1&&(t-=1):o.hasClass(\"k-list-optionlabel\")&&(t=-1)),a){for(i=this.dataSource.flatView(),s=0;i.length>s;s++)if(t(i[s])){t=s,n=!0;break}n||(t=-1)}return t},_firstItem:function(){this.hasOptionLabel()?this._focus(this.optionLabel):this.listView.focusFirst()},_lastItem:function(){this._resetOptionLabel(),this.listView.focusLast()},_nextItem:function(){this.optionLabel.hasClass(\"k-state-focused\")?(this._resetOptionLabel(),this.listView.focusFirst()):this.listView.focusNext()},_prevItem:function(){this.optionLabel.hasClass(\"k-state-focused\")||(this.listView.focusPrev(),this.listView.focus()||this._focus(this.optionLabel))},_focusItem:function(){var e=this.listView,i=e.focus(),n=e.select();n=n[n.length-1],n===t&&this.options.highlightFirst&&!i&&(n=0),n!==t?e.focus(n):this.options.optionLabel?(this._focus(this.optionLabel),this._select(this.optionLabel)):e.scrollToIndex(0)},_resetOptionLabel:function(e){this.optionLabel.removeClass(\"k-state-focused\"+(e||\"\")).removeAttr(\"id\")},_focus:function(e){var i=this.listView,n=this.optionLabel;return e===t?(e=i.focus(),!e&&n.hasClass(\"k-state-focused\")&&(e=n),e):(this._resetOptionLabel(),e=this._get(e),i.focus(e),-1===e&&(n.addClass(\"k-state-focused\").attr(\"id\",i._optionID),this._focused.add(this.filterInput).removeAttr(\"aria-activedescendant\").attr(\"aria-activedescendant\",i._optionID)),t)},_select:function(e,t){var i=this;e=i._get(e),i.listView.select(e),t||i._state!==L||(i._state=k),-1===e&&i._selectValue(null)},_selectValue:function(e){var i=this,n=i.options.optionLabel,s=i.listView.select(),a=\"\",o=\"\";s=s[s.length-1],s===t&&(s=-1),this._resetOptionLabel(\" k-state-selected\"),e?(o=e,a=i._dataValue(e),n&&(s+=1)):n&&(i._focus(i.optionLabel.addClass(\"k-state-selected\")),o=i._optionLabelText(),a=\"string\"==typeof n?\"\":i._value(n),s=0),i.selectedIndex=s,null===a&&(a=\"\"),i._textAccessor(o),i._accessor(a,s),i._triggerCascade()},_mobile:function(){var e=this,t=e.popup,i=p.mobileOS,n=t.element.parents(\".km-root\").eq(0);n.length&&i&&(t.options.animation.open.effects=i.android||i.meego?\"fadeIn\":i.ios||i.wp?\"slideIn:up\":t.options.animation.open.effects)},_filterHeader:function(){var t;this.filterInput&&(this.filterInput.off(_).parent().remove(),this.filterInput=null),this._isFilterEnabled()&&(t='<span class=\"k-icon k-i-search\"></span>',this.filterInput=e('<input class=\"k-textbox\"/>').attr({placeholder:this.element.attr(\"placeholder\"),title:this.element.attr(\"title\"),role:\"listbox\",\"aria-haspopup\":!0,\"aria-expanded\":!1}),this.list.prepend(e('<span class=\"k-list-filter\" />').append(this.filterInput.add(t))))},_span:function(){var t,i=this,n=i.wrapper,s=\"span.k-input\";t=n.find(s),t[0]||(n.append('<span unselectable=\"on\" class=\"k-dropdown-wrap k-state-default\"><span unselectable=\"on\" class=\"k-input\">&nbsp;</span><span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-arrow-s\"></span></span></span>').append(i.element),t=n.find(s)),i.span=t,i._inputWrapper=e(n[0].firstChild),i._arrow=n.find(\".k-icon\")},_wrapper:function(){var e,t=this,i=t.element,n=i[0];e=i.parent(),e.is(\"span.k-widget\")||(e=i.wrap(\"<span />\").parent(),e[0].style.cssText=n.style.cssText,e[0].title=n.title),t._focused=t.wrapper=e.addClass(\"k-widget k-dropdown k-header\").addClass(n.className).css(\"display\",\"\").attr({accesskey:i.attr(\"accesskey\"),unselectable:\"on\",role:\"listbox\",\"aria-haspopup\":!0,\"aria-expanded\":!1}),i.hide().removeAttr(\"accesskey\")},_clearSelection:function(e){this.select(e.value()?0:-1)},_inputTemplate:function(){var t=this,i=t.options.valueTemplate;if(i=i?a.template(i):e.proxy(a.template(\"#:this._text(data)#\",{useWithBlock:!1}),t),t.valueTemplate=i,t.hasOptionLabel()&&!t.options.optionLabelTemplate)try{t.valueTemplate(t._optionLabelDataItem())}catch(n){throw Error(y)}},_textAccessor:function(i){var n,s=null,a=this.valueTemplate,o=this._optionLabelText(),l=this.span;if(i===t)return l.text();e.isPlainObject(i)||i instanceof c?s=i:o&&o===i&&(s=this.options.optionLabel),s||(s=this._assignInstance(i,this._accessor())),this.hasOptionLabel()&&(s!==o&&this._text(s)!==o||(a=this.optionLabelTemplate,\"string\"!=typeof this.options.optionLabel||this.options.optionLabelTemplate||(s=o))),n=function(){return{elements:l.get(),data:[{dataItem:s}]}},this.angular(\"cleanup\",n);try{l.html(a(s))}catch(r){l.html(\"\")}this.angular(\"compile\",n)},_preselect:function(e,t){e||t||(t=this._optionLabelText()),this._accessor(e),this._textAccessor(t),this._old=this._accessor(),this._oldIndex=this.selectedIndex,this.listView.setValue(e),this._initialIndex=null,this._presetValue=!0},_assignInstance:function(e,t){var n=this.options.dataTextField,s={};return n?(i(s,n.split(\".\"),e),i(s,this.options.dataValueField.split(\".\"),t),s=new c(s)):s=e,s}});o.plugin(V)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,i){(i||t)()});\n//# sourceMappingURL=kendo.dropdownlist.min.js.map\n","import { RootState } from \"../reducers\";\n\nexport const authorizationRecord = (state: RootState, orgId: number) => {\n  return state.getIn([\"integrations\", \"cardconnect\", \"byOrgId\", orgId]);\n};\n","import { Map, List, Record, fromJS } from \"immutable\";\nimport { fromJSON as orgFromJSON, OrgRecord, IOrgData } from \"./OrgRecord\";\nimport { checkDate, Nullable } from \".\";\n\nexport const fromJSON = (data: Partial<IUserData>): UserRecord => {\n  const record: IUserRecord = { ...(data as any) };\n\n  if (data.accesses) {\n    record.accesses = List(\n      new Set(\n        data.accesses.map((a) => {\n          if (typeof a === \"number\") return a;\n          return a.id;\n        }),\n      ),\n    );\n  }\n\n  if (data.permissions) {\n    record.permissions = Map<AclKeys, AclValues[]>(data.permissions as any);\n  }\n\n  if (data.org) {\n    record.org = orgFromJSON(data.org);\n  }\n\n  if (data.created_at) {\n    record.created_at = checkDate(data.created_at);\n  }\n\n  return new UserRecord(record);\n};\n\nexport const getFullName = (user: Nullable<UserRecord>): string => {\n  if (user) {\n    return `${user.first_name || \"\"} ${user.last_name || \"\"}`.trim();\n  }\n\n  return \"Unset\";\n};\n\nexport const accessFromJSON = (json: IAccessData): AccessRecord => {\n  const record: IAccessRecord = { ...(json as any) };\n\n  if (json.org) {\n    record.org = orgFromJSON(json.org);\n  }\n\n  if (json.acl) {\n    record.acl = fromJS(json.acl) as any;\n  }\n\n  return new AccessRecord(record);\n};\n\nexport const generatePassword = (): string => {\n  const length = 8;\n  const charset = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n  const charsetLength = charset.length;\n  let password = \"\";\n\n  for (let i = 0; i < length; ++i) {\n    password += charset.charAt(Math.floor(Math.random() * charsetLength));\n  }\n\n  return password;\n};\n\nexport const placeholderEmail = (orgName, index): string => {\n  const prefix = \"placeholder+\";\n  const cleanOrgName = orgName.replace(/\\W/g, \"\").toLowerCase();\n  const random = Math.floor(Math.random() * 100);\n  const postfix = index + \"@oneclickcontractor.com\";\n\n  return `${prefix}${cleanOrgName}${random}${postfix}`;\n};\n\nexport interface IAccessData {\n  id: number;\n  template: string;\n  user_id: number;\n  org_id: number;\n  org: IOrgData;\n  uid: string;\n  acl?: { [key: string]: string[] };\n  billable: string;\n  config?: {\n    commission_calculator?: {\n      overhead: number;\n      commission_rate: number;\n    };\n  };\n}\n\nexport interface IAccessRecord {\n  id: number;\n  template: string;\n  user_id: number;\n  org_id: number;\n  org: Nullable<OrgRecord>;\n  uid: string;\n  acl: Map<string, List<string>>;\n  billable: string;\n  config?: Map<\"commission_calculator\", Map<\"overhead\" | \"commission_rate\", number>>;\n}\n\nconst defaultAccessProps: IAccessRecord = {\n  id: 0,\n  template: \"\",\n  user_id: 0,\n  org_id: 0,\n  org: null,\n  uid: \"\",\n  acl: Map<string, List<string>>(),\n  billable: \"\",\n  config: Map(),\n};\n\nexport class AccessRecord extends Record(defaultAccessProps) implements IAccessRecord {}\n\nexport type AclKeys =\n  | \"org\"\n  | \"price_list\"\n  | \"product\"\n  | \"product_option_group\"\n  | \"product_option\"\n  | \"payment_term\"\n  | \"token\"\n  | \"estimate_template\"\n  | \"pattern\"\n  | \"report\"\n  | \"user\"\n  | \"crm_user\"\n  | \"presentation\"\n  | \"event\"\n  | \"events_result\"\n  | \"events_result_reason\"\n  | \"job\"\n  | \"estimate\"\n  | \"screen_share\"\n  | \"visualization\"\n  | \"storm\"\n  | \"area\"\n  | \"lead\"\n  | \"weather_property\"\n  | \"billing_account\"\n  | \"billing_customer\"\n  | \"billing_invoice\"\n  | \"billing_order\"\n  | \"billing_subscription\"\n  | \"billing_invoice_item\"\n  | \"billing_fee_subscription\"\n  | \"billing_plan\"\n  | \"billing_fee\"\n  | \"global\"\n  | \"admin_panel\"\n  | \"header_panel\"\n  | \"roof_scope\"\n  | \"discount\"\n  | \"payment\"\n  | \"discount\"\n  | \"payment\"\n  | \"payment_method\"\n  | \"custom_form\"\n  | \"flags\"\n  | \"job_metadata\";\n\nexport type AclValues =\n  | \"read\"\n  | \"create\"\n  | \"update\"\n  | \"delete\"\n  | \"read_assigned\"\n  | \"create_assigned\"\n  | \"update_assigned\"\n  | \"delete_assigned\"\n  | \"read_self\"\n  | \"create_self\"\n  | \"update_self\"\n  | \"delete_self\"\n  | \"acl_template\"\n  | \"acl_custom\"\n  | \"marketsharp\"\n  | \"status\"\n  | \"events\"\n  | \"email\"\n  | \"price_list\"\n  | \"tools\"\n  | \"billing\"\n  | \"org\"\n  | \"apl_csv\"\n  | \"job\"\n  | \"user\"\n  | \"link\"\n  | \"info\"\n  | \"preferences\"\n  | \"settings\"\n  | \"jobs\"\n  | \"child_orgs\"\n  | \"users\"\n  | \"billing\"\n  | \"documents\"\n  | \"presentations\"\n  | \"price_list_editor\"\n  | \"measurement_links\"\n  | \"payment_terms\"\n  | \"pattern_editor\"\n  | \"integrations\"\n  | \"email_history\"\n  | \"statistics\"\n  | \"leads\"\n  | \"weather_properties\"\n  | \"reports\"\n  | \"calendar\"\n  | \"signed_docs\"\n  | \"update_pricing\"\n  | \"update_markup\"\n  | \"custom\"\n  | \"order\"\n  | \"update_billing\"\n  | \"duplicate_org\"\n  | \"onscreen\"\n  | \"email_text\"\n  | \"payment_report\"\n  | \"deposit_report\"\n  | \"use_saved_method\"\n  | \"chargeback_report\"\n  | \"force_org_ui\";\n\nexport interface IUserData {\n  id: number;\n  uuid: string;\n  email: string;\n  first_name: string;\n  last_name: string;\n  phone: string;\n  accepted_tos: boolean;\n  created_at: string;\n  org_id: number;\n  preferences_id: number;\n  permissions: { [k in AclKeys]?: AclValues[] };\n  url: string;\n  accesses: any[];\n  accesses_count: number;\n  current_access_uid?: string;\n  org?: IOrgData;\n  loading: boolean;\n  time_zone: string;\n}\n\nexport interface IUserRecord {\n  id: number;\n  uuid: string;\n  email: string;\n  first_name: string;\n  last_name: string;\n  phone: string;\n  accepted_tos: boolean;\n  created_at: Date;\n  org_id: number;\n  preferences_id: number;\n  url: string;\n  accesses: List<number>;\n  accesses_count: number;\n  permissions: Map<AclKeys, AclValues[]>;\n  loading: boolean;\n  org?: OrgRecord;\n  password: string;\n  password_confirmation: string;\n  current_access_uid: string;\n  time_zone: string;\n}\n\nconst defaultUserProps: IUserRecord = {\n  id: 0,\n  uuid: \"\",\n  email: \"\",\n  first_name: \"\",\n  last_name: \"\",\n  phone: \"\",\n  accepted_tos: false,\n  created_at: new Date(),\n  org_id: 0,\n  preferences_id: 0,\n  url: \"\",\n  accesses: List([]),\n  accesses_count: 0,\n  permissions: Map<AclKeys, AclValues[]>(),\n  loading: false,\n  org: null,\n  current_access_uid: \"\",\n  time_zone: \"\",\n  password: \"\",\n  password_confirmation: \"\",\n};\n\nexport type Permissions = Map<AclKeys, AclValues[]>;\n\nexport class UserRecord extends Record(defaultUserProps) implements IUserRecord {}\n\nexport const emptyUserValue = fromJSON({} as IUserData);\n\nexport const emptyAccessValue = accessFromJSON({} as IAccessData);\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.list.min\",[\"kendo.data.min\",\"kendo.popup.min\"],e)}(function(){return function(e,t){function i(e,i){return e!==t&&\"\"!==e&&null!==e&&(\"boolean\"===i?e=!!e:\"number\"===i?e=+e:\"string\"===i&&(e=\"\"+e)),e}function n(e){var t=e.selectedIndex;return t>-1?e.options[t]:{}}function a(e,t){var i,n,a,s,r=t.length,l=e.length,o=[],u=[];if(l)for(a=0;l>a;a++){for(i=e[a],n=!1,s=0;r>s;s++)if(i===t[s]){n=!0,o.push({index:a,item:i});break}n||u.push(i)}return{changed:o,unchanged:u}}function s(t,i){var n,a=!1;return t.filters&&(n=e.grep(t.filters,function(e){return a=s(e,i),e.filters?e.filters.length:e.field!=i}),a||t.filters.length===n.length||(a=!0),t.filters=n),a}var r,l,o=window.kendo,u=o.ui,d=u.Widget,c=o.keys,h=o.support,f=o.htmlEncode,_=o._activeElement,p=o.data.ObservableArray,v=\"id\",g=\"change\",m=\"k-state-focused\",b=\"k-state-hover\",x=\"k-i-loading\",I=\"k-loading-hidden\",S=\"open\",w=\"close\",y=\"cascade\",T=\"select\",F=\"selected\",k=\"requestStart\",V=\"requestEnd\",D=\"width\",C=e.extend,H=e.proxy,B=e.isArray,E=h.browser,P=E.msie&&9>E.version,W=/\"/g,A={ComboBox:\"DropDownList\",DropDownList:\"ComboBox\"},G=o.ui.DataBoundWidget.extend({init:function(t,i){var n,a=this,s=a.ns;d.fn.init.call(a,t,i),t=a.element,i=a.options,a._isSelect=t.is(T),a._isSelect&&a.element[0].length&&(i.dataSource||(i.dataTextField=i.dataTextField||\"text\",i.dataValueField=i.dataValueField||\"value\")),a.ul=e('<ul unselectable=\"on\" class=\"k-list k-reset\"/>').attr({tabIndex:-1,\"aria-hidden\":!0}),a.list=e(\"<div class='k-list-container'/>\").append(a.ul).on(\"mousedown\"+s,H(a._listMousedown,a)),n=t.attr(v),n&&(a.list.attr(v,n+\"-list\"),a.ul.attr(v,n+\"_listbox\")),a._header(),a._noData(),a._footer(),a._accessors(),a._initValue()},options:{valuePrimitive:!1,footerTemplate:\"\",headerTemplate:\"\",noDataTemplate:\"No data found.\"},setOptions:function(e){d.fn.setOptions.call(this,e),e&&e.enable!==t&&(e.enabled=e.enable),this._header(),this._noData(),this._footer(),this._renderFooter(),this._renderNoData()},focus:function(){this._focused.focus()},readonly:function(e){this._editable({readonly:e===t?!0:e,disable:!1})},enable:function(e){this._editable({readonly:!1,disable:!(e=e===t?!0:e)})},_listOptions:function(t){var i=this,n=i.options,a=n.virtual,s=H(i._listBound,i);return a=\"object\"==typeof a?a:{},t=e.extend({autoBind:!1,selectable:!0,dataSource:i.dataSource,click:H(i._click,i),change:H(i._listChange,i),activate:H(i._activateItem,i),deactivate:H(i._deactivateItem,i),dataBinding:function(){i.trigger(\"dataBinding\")},dataBound:s,height:n.height,dataValueField:n.dataValueField,dataTextField:n.dataTextField,groupTemplate:n.groupTemplate,fixedGroupTemplate:n.fixedGroupTemplate,template:n.template},t,a),t.template||(t.template=\"#:\"+o.expr(t.dataTextField,\"data\")+\"#\"),n.$angular&&(t.$angular=n.$angular),t},_initList:function(){var e=this,t=e._listOptions({selectedItemChange:H(e._listChange,e)});e.listView=e.options.virtual?new o.ui.VirtualList(e.ul,t):new o.ui.StaticList(e.ul,t),e.listView.bind(\"listBound\",H(e._listBound,e)),e._setListValue()},_setListValue:function(e){e=e||this.options.value,e!==t&&this.listView.value(e).done(H(this._updateSelectionState,this))},_updateSelectionState:e.noop,_listMousedown:function(e){this.filterInput&&this.filterInput[0]===e.target||e.preventDefault()},_isFilterEnabled:function(){var e=this.options.filter;return e&&\"none\"!==e},_hideClear:function(){var e=this;e._clear&&this._clear.addClass(I)},_showClear:function(){var e=this;e._clear&&this._clear.removeClass(I)},_clearValue:function(){this.listView.value([]),this._clearText(),this._accessor(\"\"),this._isFilterEnabled()&&this._filter({word:\"\",open:!1}),this._change()},_clearText:function(){this.text(\"\")},_clearFilter:function(){this.options.virtual||this.listView.bound(!1),this._filterSource()},_filterSource:function(e,t){var i=this,n=i.options,a=i.dataSource,r=C({},a.filter()||{}),l=s(r,n.dataTextField);(e||l)&&i.trigger(\"filtering\",{filter:e})||(r={filters:r.filters||[],logic:\"and\"},e&&r.filters.push(e),i._cascading&&this.listView.setDSFilter(r),t?a.read(a._mergeState({filter:r})):a.filter(r))},_angularElement:function(e,t){e&&this.angular(t,function(){return{elements:e}})},_noData:function(){var i=e(this.noData),n=this.options.noDataTemplate;return this.angular(\"cleanup\",function(){return{elements:i}}),o.destroy(i),i.remove(),n?(this.noData=e('<div class=\"k-nodata\" style=\"display:none\"><div></div></div>').appendTo(this.list),this.noDataTemplate=\"function\"!=typeof n?o.template(n):n,t):(this.noData=null,t)},_renderNoData:function(){var e=this.noData;e&&(this._angularElement(e,\"cleanup\"),e.children(\":first\").html(this.noDataTemplate({instance:this})),this._angularElement(e,\"compile\"))},_toggleNoData:function(t){e(this.noData).toggle(t)},_footer:function(){var i=e(this.footer),n=this.options.footerTemplate;return this._angularElement(i,\"cleanup\"),o.destroy(i),i.remove(),n?(this.footer=e('<div class=\"k-footer\"></div>').appendTo(this.list),this.footerTemplate=\"function\"!=typeof n?o.template(n):n,t):(this.footer=null,t)},_renderFooter:function(){var e=this.footer;e&&(this._angularElement(e,\"cleanup\"),e.html(this.footerTemplate({instance:this})),this._angularElement(e,\"compile\"))},_header:function(){var i,n=e(this.header),a=this.options.headerTemplate;return this._angularElement(n,\"cleanup\"),o.destroy(n),n.remove(),a?(i=\"function\"!=typeof a?o.template(a):a,n=e(i({})),this.header=n[0]?n:null,this.list.prepend(n),this._angularElement(this.header,\"compile\"),t):(this.header=null,t)},_allowOpening:function(){return this.options.noDataTemplate||this.dataSource.flatView().length},_initValue:function(){var e=this,t=e.options.value;null!==t?e.element.val(t):(t=e._accessor(),e.options.value=t),e._old=t},_ignoreCase:function(){var e,t=this,i=t.dataSource.reader.model;i&&i.fields&&(e=i.fields[t.options.dataTextField],e&&e.type&&\"string\"!==e.type&&(t.options.ignoreCase=!1))},_focus:function(e){return this.listView.focus(e)},_filter:function(e){var t=this,i=t.options,n=i.ignoreCase,a=i.dataTextField,s={value:n?e.word.toLowerCase():e.word,field:a,operator:i.filter,ignoreCase:n};t._open=e.open,t._filterSource(s)},search:function(e){var t=this.options;e=\"string\"==typeof e?e:this._inputValue(),clearTimeout(this._typingTimeout),(!t.enforceMinLength&&!e.length||e.length>=t.minLength)&&(this._state=\"filter\",this._isFilterEnabled()?this._filter({word:e,open:!0}):this._searchByWord(e))},current:function(e){return this._focus(e)},items:function(){return this.ul[0].children},destroy:function(){var e=this,t=e.ns;d.fn.destroy.call(e),e._unbindDataSource(),e.listView.destroy(),e.list.off(t),e.popup.destroy(),e._form&&e._form.off(\"reset\",e._resetHandler)},dataItem:function(i){var n=this;if(i===t)return n.listView.selectedDataItems()[0];if(\"number\"!=typeof i){if(n.options.virtual)return n.dataSource.getByUid(e(i).data(\"uid\"));i=e(n.items()).index(i)}return n.dataSource.flatView()[i]},_activateItem:function(){var e=this.listView.focus();e&&this._focused.add(this.filterInput).attr(\"aria-activedescendant\",e.attr(\"id\"))},_deactivateItem:function(){this._focused.add(this.filterInput).removeAttr(\"aria-activedescendant\")},_accessors:function(){var e=this,t=e.element,i=e.options,n=o.getter,a=t.attr(o.attr(\"text-field\")),s=t.attr(o.attr(\"value-field\"));!i.dataTextField&&a&&(i.dataTextField=a),!i.dataValueField&&s&&(i.dataValueField=s),e._text=n(i.dataTextField),e._value=n(i.dataValueField)},_aria:function(e){var i=this,n=i.options,a=i._focused.add(i.filterInput);n.suggest!==t&&a.attr(\"aria-autocomplete\",n.suggest?\"both\":\"list\"),e=e?e+\" \"+i.ul[0].id:i.ul[0].id,a.attr(\"aria-owns\",e),i.ul.attr(\"aria-live\",i._isFilterEnabled()?\"polite\":\"off\")},_blur:function(){var e=this;e._change(),e.close()},_change:function(){var e,n=this,a=n.selectedIndex,s=n.options.value,r=n.value();n._isSelect&&!n.listView.bound()&&s&&(r=s),r!==i(n._old,typeof r)?e=!0:a!==t&&a!==n._oldIndex&&(e=!0),e&&(n._old=r,n._oldIndex=a,n._typing||n.element.trigger(g),n.trigger(g)),n.typing=!1},_data:function(){return this.dataSource.view()},_enable:function(){var e=this,i=e.options,n=e.element.is(\"[disabled]\");i.enable!==t&&(i.enabled=i.enable),!i.enabled||n?e.enable(!1):e.readonly(e.element.is(\"[readonly]\"))},_dataValue:function(e){var i=this._value(e);return i===t&&(i=this._text(e)),i},_offsetHeight:function(){var t=0,i=this.listView.content.prevAll(\":visible\");return i.each(function(){var i=e(this);t+=i.hasClass(\"k-list-filter\")?i.children().outerHeight():i.outerHeight()}),t},_height:function(i){var n,a,s,r=this,l=r.list,o=r.options.height,u=r.popup.visible();if(i||r.options.noDataTemplate){if(a=l.add(l.parent(\".k-animation-container\")).show(),!l.is(\":visible\"))return a.hide(),t;o=r.listView.content[0].scrollHeight>o?o:\"auto\",a.height(o),\"auto\"!==o&&(n=r._offsetHeight(),s=e(r.footer).outerHeight()||0,o=o-n-s),r.listView.content.height(o),u||a.hide()}return o},_adjustListWidth:function(){var e,t,i=this.list,n=i[0].style.width,a=this.wrapper;if(i.data(D)||!n)return e=window.getComputedStyle?window.getComputedStyle(a[0],null):0,t=parseFloat(e&&e.width)||a.outerWidth(),e&&E.msie&&(t+=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight)+parseFloat(e.borderLeftWidth)+parseFloat(e.borderRightWidth)),n=\"border-box\"!==i.css(\"box-sizing\")?t-(i.outerWidth()-i.width()):t,i.css({fontFamily:a.css(\"font-family\"),width:this.options.autoWidth?\"auto\":n,minWidth:n}).data(D,n),!0},_openHandler:function(e){this._adjustListWidth(),this.trigger(S)?e.preventDefault():(this._focused.attr(\"aria-expanded\",!0),this.ul.attr(\"aria-hidden\",!1))},_closeHandler:function(e){this.trigger(w)?e.preventDefault():(this._focused.attr(\"aria-expanded\",!1),this.ul.attr(\"aria-hidden\",!0))},_focusItem:function(){var e=this.listView,i=e.focus(),n=e.select();n=n[n.length-1],n===t&&this.options.highlightFirst&&!i&&(n=0),n!==t?e.focus(n):e.scrollToIndex(0)},_calculateGroupPadding:function(e){var t=this.ul.children(\".k-first:first\"),i=this.listView.content.prev(\".k-group-header\"),n=0;i[0]&&\"none\"!==i[0].style.display&&(\"auto\"!==e&&(n=o.support.scrollbar()),n+=parseFloat(t.css(\"border-right-width\"),10)+parseFloat(t.children(\".k-group\").css(\"padding-right\"),10),i.css(\"padding-right\",n))},_calculatePopupHeight:function(e){var t=this._height(this.dataSource.flatView().length||e);this._calculateGroupPadding(t)},_resizePopup:function(e){this.options.virtual||(this.popup.element.is(\":visible\")?this._calculatePopupHeight(e):this.popup.one(\"open\",function(e){return H(function(){this._calculatePopupHeight(e)},this)}.call(this,e)))},_popup:function(){var e=this;e.popup=new u.Popup(e.list,C({},e.options.popup,{anchor:e.wrapper,open:H(e._openHandler,e),close:H(e._closeHandler,e),animation:e.options.animation,isRtl:h.isRtl(e.wrapper)}))},_makeUnselectable:function(){P&&this.list.find(\"*\").not(\".k-textbox\").attr(\"unselectable\",\"on\")},_toggleHover:function(t){e(t.currentTarget).toggleClass(b,\"mouseenter\"===t.type)},_toggle:function(e,i){var n=this,a=h.mobileOS&&(h.touch||h.MSPointers||h.pointers);e=e!==t?e:!n.popup.visible(),i||a||n._focused[0]===_()||(n._prevent=!0,n._focused.focus(),n._prevent=!1),n[e?S:w]()},_triggerCascade:function(){var e=this;e._cascadeTriggered&&e._old===e.value()&&e._oldIndex===e.selectedIndex||(e._cascadeTriggered=!0,e.trigger(y,{userTriggered:e._userTriggered}))},_triggerChange:function(){this._valueBeforeCascade!==this.value()&&this.trigger(g)},_unbindDataSource:function(){var e=this;e.dataSource.unbind(k,e._requestStartHandler).unbind(V,e._requestEndHandler).unbind(\"error\",e._errorHandler)},requireValueMapper:function(e,t){var i=(e.value instanceof Array?e.value.length:e.value)||(t instanceof Array?t.length:t);if(i&&e.virtual&&\"function\"!=typeof e.virtual.valueMapper)throw Error(\"ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function\")}});C(G,{inArray:function(e,t){var i,n,a=t.children;if(!e||e.parentNode!==t)return-1;for(i=0,n=a.length;n>i;i++)if(e===a[i])return i;return-1},unifyType:i}),o.ui.List=G,u.Select=G.extend({init:function(e,t){G.fn.init.call(this,e,t),this._initial=this.element.val()},setDataSource:function(e){var t,i=this;i.options.dataSource=e,i._dataSource(),i.listView.bound()&&(i._initialIndex=null),i.listView.setDataSource(i.dataSource),i.options.autoBind&&i.dataSource.fetch(),t=i._parentWidget(),t&&i._cascadeSelect(t)},close:function(){this.popup.close()},select:function(e){var i=this;return e===t?i.selectedIndex:(i._select(e),i._old=i._accessor(),i._oldIndex=i.selectedIndex,t)},_accessor:function(e,t){return this[this._isSelect?\"_accessorSelect\":\"_accessorInput\"](e,t)},_accessorInput:function(e){var i=this.element[0];return e===t?i.value:(null===e&&(e=\"\"),i.value=e,t)},_accessorSelect:function(e,i){var a,s=this.element[0];return e===t?n(s).value||\"\":(n(s).selected=!1,i===t&&(i=-1),a=null!==e&&\"\"!==e,a&&-1==i?this._custom(e):e?s.value=e:s.selectedIndex=i,t)},_custom:function(t){var i=this,n=i.element,a=i._customOption;a||(a=e(\"<option/>\"),i._customOption=a,n.append(a)),a.text(t),a[0].selected=!0},_hideBusy:function(){var e=this;clearTimeout(e._busy),e._arrow.removeClass(x),e._focused.attr(\"aria-busy\",!1),e._busy=null,e._showClear()},_showBusy:function(){var e=this;e._request=!0,e._busy||(e._busy=setTimeout(function(){e._arrow&&(e._focused.attr(\"aria-busy\",!0),e._arrow.addClass(x),e._hideClear())},100))},_requestEnd:function(){this._request=!1,this._hideBusy()},_dataSource:function(){var t,i=this,n=i.element,a=i.options,s=a.dataSource||{};s=e.isArray(s)?{data:s}:s,i._isSelect&&(t=n[0].selectedIndex,t>-1&&(a.index=t),s.select=n,s.fields=[{field:a.dataTextField},{field:a.dataValueField}]),i.dataSource?i._unbindDataSource():(i._requestStartHandler=H(i._showBusy,i),i._requestEndHandler=H(i._requestEnd,i),i._errorHandler=H(i._hideBusy,i)),i.dataSource=o.data.DataSource.create(s).bind(k,i._requestStartHandler).bind(V,i._requestEndHandler).bind(\"error\",i._errorHandler)},_firstItem:function(){this.listView.focusFirst()},_lastItem:function(){this.listView.focusLast()},_nextItem:function(){this.listView.focusNext()},_prevItem:function(){this.listView.focusPrev()},_move:function(e){var i,n,a,s,r,l=this,o=l.listView,u=e.keyCode,d=u===c.DOWN;if(u===c.UP||d){if(e.altKey)l.toggle(d);else{if(!o.bound())return l._fetch||(l.dataSource.one(g,function(){l._fetch=!1,l._move(e)}),l._fetch=!0,l._filterSource()),e.preventDefault(),!0;if(a=l._focus(),l._fetch||a&&!a.hasClass(\"k-state-selected\")||(d?(l._nextItem(),l._focus()||l._lastItem()):(l._prevItem(),l._focus()||l._firstItem())),i=o.dataItemByIndex(o.getElementIndex(l._focus())),l.trigger(T,{dataItem:i,item:l._focus()}))return l._focus(a),t;l._select(l._focus(),!0),l.popup.visible()||l._blur()}e.preventDefault(),n=!0}else if(u===c.ENTER||u===c.TAB){if(l.popup.visible()&&e.preventDefault(),a=l._focus(),i=l.dataItem(),l.popup.visible()||i&&l.text()===l._text(i)||(a=null),s=l.filterInput&&l.filterInput[0]===_(),a){if(i=o.dataItemByIndex(o.getElementIndex(a)),l.trigger(T,{dataItem:i,item:a}))return;l._select(a)}else l.input&&(l._accessor(l.input.val()),l.listView.value(l.input.val()));l._focusElement&&l._focusElement(l.wrapper),s&&u===c.TAB?l.wrapper.focusout():l._blur(),l.close(),n=!0}else u===c.ESC?(l.popup.visible()&&e.preventDefault(),l.close(),n=!0):!l.popup.visible()||u!==c.PAGEDOWN&&u!==c.PAGEUP||(e.preventDefault(),r=u===c.PAGEDOWN?1:-1,o.scrollWith(r*o.screenHeight()),n=!0);return n},_fetchData:function(){var e=this,t=!!e.dataSource.view().length;e._request||e.options.cascadeFrom||e.listView.bound()||e._fetch||t||(e._fetch=!0,e.dataSource.fetch().done(function(){e._fetch=!1}))},_options:function(e,i,a){var s,r,l,o,u=this,d=u.element,c=d[0],h=e.length,_=\"\",p=0;for(i&&(_=i);h>p;p++)s=\"<option\",r=e[p],l=u._text(r),o=u._value(r),o!==t&&(o+=\"\",-1!==o.indexOf('\"')&&(o=o.replace(W,\"&quot;\")),s+=' value=\"'+o+'\"'),s+=\">\",l!==t&&(s+=f(l)),s+=\"</option>\",_+=s;d.html(_),a!==t&&(c.value=a,c.value&&!a&&(c.selectedIndex=-1)),-1!==c.selectedIndex&&(s=n(c),s&&s.setAttribute(F,F))},_reset:function(){var t=this,i=t.element,n=i.attr(\"form\"),a=n?e(\"#\"+n):i.closest(\"form\");a[0]&&(t._resetHandler=function(){setTimeout(function(){t.value(t._initial)})},t._form=a.on(\"reset\",t._resetHandler))},_parentWidget:function(){var t,i,n=this.options.name;if(this.options.cascadeFrom)return t=e(\"#\"+this.options.cascadeFrom),i=t.data(\"kendo\"+n),i||(i=t.data(\"kendo\"+A[n])),i},_cascade:function(){var e,t=this,i=t.options,n=i.cascadeFrom;if(n){if(e=t._parentWidget(),t._cascadeHandlerProxy=H(t._cascadeHandler,t),!e)return;i.autoBind=!1,e.bind(\"set\",function(){t.one(\"set\",function(e){t._selectedValue=e.value})}),e.first(y,t._cascadeHandlerProxy),e.listView.bound()?(t._toggleCascadeOnFocus(),t._cascadeSelect(e)):(e.one(\"dataBound\",function(){t._toggleCascadeOnFocus()}),e.value()||t.enable(!1))}},_toggleCascadeOnFocus:function(){var e=this,t=e._parentWidget();t._focused.add(t.filterInput).bind(\"focus\",function(){t.unbind(y,e._cascadeHandlerProxy),t.first(g,e._cascadeHandlerProxy)}),t._focused.add(t.filterInput).bind(\"focusout\",function(){t.unbind(g,e._cascadeHandlerProxy),t.first(y,e._cascadeHandlerProxy)})},_cascadeHandler:function(e){var t=this._parentWidget(),i=this.value();this._userTriggered=e.userTriggered,this.listView.bound()&&this._clearSelection(t,!0),this._cascadeSelect(t,i)},_cascadeChange:function(e){var t=this,i=t._accessor()||t._selectedValue;t._selectedValue=null,t._userTriggered?t._clearSelection(e,!0):i?(i!==t.listView.value()[0]&&t.value(i),t.dataSource.view()[0]&&-1!==t.selectedIndex||t._clearSelection(e,!0)):t.dataSource.flatView().length&&t.select(t.options.index),t.enable(),t._triggerCascade(),t._triggerChange(),t._userTriggered=!1},_cascadeSelect:function(e,i){var n,a,r=this,l=e.dataItem(),o=l?e._value(l):null,u=r.options.cascadeFromField||e.options.dataValueField;r._valueBeforeCascade=i!==t?i:r.value(),o||0===o?(n=r.dataSource.filter()||{},s(n,u),a=function(){r.unbind(\"dataBound\",a),r._cascadeChange(e)},r.first(\"dataBound\",a),r._cascading=!0,r._filterSource({field:u,operator:\"eq\",value:o}),r._cascading=!1):(r.enable(!1),r._clearSelection(e),r._triggerCascade(),r._triggerChange(),r._userTriggered=!1)}}),r=\".StaticList\",l=o.ui.DataBoundWidget.extend({init:function(t,i){d.fn.init.call(this,t,i),this.element.attr(\"role\",\"listbox\").on(\"click\"+r,\"li\",H(this._click,this)).on(\"mouseenter\"+r,\"li\",function(){e(this).addClass(b)}).on(\"mouseleave\"+r,\"li\",function(){e(this).removeClass(b)}),this.content=this.element.wrap(\"<div class='k-list-scroller' unselectable='on'></div>\").parent(),this.header=this.content.before('<div class=\"k-group-header\" style=\"display:none\"></div>').prev(),this.bound(!1),this._optionID=o.guid(),this._selectedIndices=[],this._view=[],this._dataItems=[],this._values=[];var n=this.options.value;n&&(this._values=e.isArray(n)?n.slice(0):[n]),this._getter(),this._templates(),this.setDataSource(this.options.dataSource),this._onScroll=H(function(){var e=this;clearTimeout(e._scrollId),e._scrollId=setTimeout(function(){e._renderHeader()},50)},this)},options:{name:\"StaticList\",dataValueField:null,valuePrimitive:!1,selectable:!0,template:null,groupTemplate:null,fixedGroupTemplate:null},events:[\"click\",g,\"activate\",\"deactivate\",\"dataBinding\",\"dataBound\",\"selectedItemChange\"],setDataSource:function(t){var i,n=this,a=t||{};a=e.isArray(a)?{data:a}:a,a=o.data.DataSource.create(a),n.dataSource?(n.dataSource.unbind(g,n._refreshHandler),i=n.value(),n.value([]),n.bound(!1),n.value(i)):n._refreshHandler=H(n.refresh,n),n.setDSFilter(a.filter()),n.dataSource=a.bind(g,n._refreshHandler),n._fixedHeader()},skip:function(){return this.dataSource.skip()},setOptions:function(e){d.fn.setOptions.call(this,e),this._getter(),this._templates(),this._render()},destroy:function(){this.element.off(r),this._refreshHandler&&this.dataSource.unbind(g,this._refreshHandler),clearTimeout(this._scrollId),d.fn.destroy.call(this)},dataItemByIndex:function(e){return this.dataSource.flatView()[e]},screenHeight:function(){return this.content[0].clientHeight},scrollToIndex:function(e){var t=this.element[0].children[e];t&&this.scroll(t)},scrollWith:function(e){this.content.scrollTop(this.content.scrollTop()+e)},scroll:function(e){if(e){e[0]&&(e=e[0]);var t=this.content[0],i=e.offsetTop,n=e.offsetHeight,a=t.scrollTop,s=t.clientHeight,r=i+n;a>i?a=i:r>a+s&&(a=r-s),t.scrollTop=a}},selectedDataItems:function(e){return e===t?this._dataItems.slice():(this._dataItems=e,this._values=this._getValues(e),t)},_getValues:function(t){var i=this._valueGetter;return e.map(t,function(e){return i(e)})},focusNext:function(){var e=this.focus();e=e?e.next():0,this.focus(e)},focusPrev:function(){var e=this.focus();e=e?e.prev():this.element[0].children.length-1,this.focus(e)},focusFirst:function(){this.focus(this.element[0].children[0])},focusLast:function(){this.focus(this.element[0].children[this.element[0].children.length-1])},focus:function(i){var n,a=this,s=a._optionID;return i===t?a._current:(i=a._get(i),i=i[i.length-1],i=e(this.element[0].children[i]),a._current&&(a._current.removeClass(m).removeAttr(\"aria-selected\").removeAttr(v),a.trigger(\"deactivate\")),n=!!i[0],n&&(i.addClass(m),a.scroll(i),i.attr(\"id\",s)),a._current=n?i:null,a.trigger(\"activate\"),t)},focusIndex:function(){return this.focus()?this.focus().index():t},skipUpdate:function(e){this._skipUpdate=e},select:function(i){var n,a,s=this,r=s.options.selectable,l=\"multiple\"!==r&&r!==!1,o=s._selectedIndices,u=[],d=[];if(i===t)return o.slice();if(i=s._get(i),1===i.length&&-1===i[0]&&(i=[]),a=s.isFiltered(),!a||l||!s._deselectFiltered(i)){if(l&&!a&&-1!==e.inArray(i[i.length-1],o))return s._dataItems.length&&s._view.length&&(s._dataItems=[s._view[o[0]].item]),t;n=s._deselect(i),d=n.removed,i=n.indices,i.length&&(l&&(i=[i[i.length-1]]),u=s._select(i)),(u.length||d.length)&&(s._valueComparer=null,s.trigger(g,{added:u,removed:d}))}},removeAt:function(e){return this._selectedIndices.splice(e,1),this._values.splice(e,1),this._valueComparer=null,{position:e,dataItem:this._dataItems.splice(e,1)[0]}},setValue:function(t){t=e.isArray(t)||t instanceof p?t.slice(0):[t],this._values=t,this._valueComparer=null},value:function(i){var n,a=this,s=a._valueDeferred;return i===t?a._values.slice():(a.setValue(i),s&&\"resolved\"!==s.state()||(a._valueDeferred=s=e.Deferred()),a.bound()&&(n=a._valueIndices(a._values),\"multiple\"===a.options.selectable&&a.select(-1),a.select(n),s.resolve()),a._skipUpdate=!1,s)},items:function(){return this.element.children(\".k-item\")},_click:function(t){t.isDefaultPrevented()||this.trigger(\"click\",{item:e(t.currentTarget)})||this.select(t.currentTarget)},_valueExpr:function(e,t){var n,a,s=this,r=0,l=[];if(!s._valueComparer||s._valueType!==e){for(s._valueType=e;t.length>r;r++)l.push(i(t[r],e));n=\"for (var idx = 0; idx < \"+l.length+\"; idx++) { if (current === values[idx]) {   return idx; }} return -1;\",a=Function(\"current\",\"values\",n),s._valueComparer=function(e){return a(e,l)}}return s._valueComparer},_dataItemPosition:function(e,t){var i=this._valueGetter(e),n=this._valueExpr(typeof i,t);return n(i)},_getter:function(){this._valueGetter=o.getter(this.options.dataValueField)},_deselect:function(t){var i,n,a,s=this,r=s.element[0].children,l=s.options.selectable,o=s._selectedIndices,u=s._dataItems,d=s._values,c=[],h=0,f=0;if(t=t.slice(),l!==!0&&t.length){if(\"multiple\"===l)for(;t.length>h;h++)if(n=t[h],e(r[n]).hasClass(\"k-state-selected\"))for(i=0;o.length>i;i++)if(a=o[i],a===n){e(r[a]).removeClass(\"k-state-selected\"),c.push({position:i+f,dataItem:u.splice(i,1)[0]}),o.splice(i,1),t.splice(h,1),d.splice(i,1),f+=1,h-=1,i-=1;break}}else{for(;o.length>h;h++)e(r[o[h]]).removeClass(\"k-state-selected\"),c.push({position:h,dataItem:u[h]});s._values=[],s._dataItems=[],s._selectedIndices=[]}return{indices:t,removed:c}},_deselectFiltered:function(t){for(var i,n,a,s=this.element[0].children,r=[],l=0;t.length>l;l++)n=t[l],i=this._view[n].item,a=this._dataItemPosition(i,this._values),a>-1&&(r.push(this.removeAt(a)),e(s[n]).removeClass(\"k-state-selected\"));return r.length?(this.trigger(g,{added:[],removed:r}),!0):!1},_select:function(t){var i,n,a=this,s=a.element[0].children,r=a._view,l=[],o=0;for(-1!==t[t.length-1]&&a.focus(t);t.length>o;o++)n=t[o],i=r[n],-1!==n&&i&&(i=i.item,a._selectedIndices.push(n),a._dataItems.push(i),a._values.push(a._valueGetter(i)),e(s[n]).addClass(\"k-state-selected\").attr(\"aria-selected\",!0),l.push({dataItem:i}));return l},getElementIndex:function(t){return e(t).data(\"offset-index\")},_get:function(e){return\"number\"==typeof e?e=[e]:B(e)||(e=this.getElementIndex(e),e=[e!==t?e:-1]),e},_template:function(){var e=this,t=e.options,i=t.template;return i?(i=o.template(i),i=function(e){return'<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">'+i(e)+\"</li>\"}):i=o.template('<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">${'+o.expr(t.dataTextField,\"data\")+\"}</li>\",{useWithBlock:!1}),i},_templates:function(){var e,t,i=this.options,n={template:i.template,groupTemplate:i.groupTemplate,fixedGroupTemplate:i.fixedGroupTemplate};for(t in n)e=n[t],e&&\"function\"!=typeof e&&(n[t]=o.template(e));this.templates=n},_normalizeIndices:function(e){for(var i=[],n=0;e.length>n;n++)e[n]!==t&&i.push(e[n]);return i},_valueIndices:function(e,t){var i,n=this._view,a=0;if(t=t?t.slice():[],!e.length)return[];for(;n.length>a;a++)i=this._dataItemPosition(n[a].item,e),-1!==i&&(t[i]=a);return this._normalizeIndices(t)},_firstVisibleItem:function(){for(var t=this.element[0],i=this.content[0],n=i.scrollTop,a=e(t.children[0]).height(),s=Math.floor(n/a)||0,r=t.children[s]||t.lastChild,l=n>r.offsetTop;r;)if(l){if(r.offsetTop+a>n||!r.nextSibling)break;r=r.nextSibling}else{if(n>=r.offsetTop||!r.previousSibling)break;r=r.previousSibling}return this._view[e(r).data(\"offset-index\")]},_fixedHeader:function(){this.isGrouped()&&this.templates.fixedGroupTemplate?(this.header.show(),this.content.scroll(this._onScroll)):(this.header.hide(),this.content.off(\"scroll\",this._onScroll))},_renderHeader:function(){var e,t=this.templates.fixedGroupTemplate;t&&(e=this._firstVisibleItem(),e&&this.header.html(t(e.group)))},_renderItem:function(e){var t='<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item',i=e.item,n=0!==e.index,a=e.selected;return n&&e.newGroup&&(t+=\" k-first\"),a&&(t+=\" k-state-selected\"),t+='\"'+(a?' aria-selected=\"true\"':\"\")+' data-offset-index=\"'+e.index+'\">',t+=this.templates.template(i),n&&e.newGroup&&(t+='<div class=\"k-group\">'+this.templates.groupTemplate(e.group)+\"</div>\"),t+\"</li>\"},_render:function(){var e,t,i,n,a=\"\",s=0,r=0,l=[],o=this.dataSource.view(),u=this.value(),d=this.isGrouped();if(d)for(s=0;o.length>s;s++)for(t=o[s],i=!0,n=0;t.items.length>n;n++)e={selected:this._selected(t.items[n],u),item:t.items[n],group:t.value,newGroup:i,index:r},l[r]=e,r+=1,a+=this._renderItem(e),i=!1;else for(s=0;o.length>s;s++)e={selected:this._selected(o[s],u),item:o[s],index:s},l[s]=e,a+=this._renderItem(e);this._view=l,this.element[0].innerHTML=a,d&&l.length&&this._renderHeader()},_selected:function(e,t){var i=!this.isFiltered()||\"multiple\"===this.options.selectable;return i&&-1!==this._dataItemPosition(e,t)},setDSFilter:function(e){this._lastDSFilter=C({},e)},isFiltered:function(){return this._lastDSFilter||this.setDSFilter(this.dataSource.filter()),!o.data.Query.compareFilters(this.dataSource.filter(),this._lastDSFilter)},refresh:function(e){var t,i=this,n=e&&e.action,s=i.options.skipUpdateOnBind,r=\"itemchange\"===n;i.trigger(\"dataBinding\"),i._angularItems(\"cleanup\"),i._fixedHeader(),i._render(),i.bound(!0),r||\"remove\"===n?(t=a(i._dataItems,e.items),t.changed.length&&(r?i.trigger(\"selectedItemChange\",{items:t.changed}):i.value(i._getValues(t.unchanged)))):i.isFiltered()||i._skipUpdate?(i.focus(0),i._skipUpdate&&(i._skipUpdate=!1,i._selectedIndices=i._valueIndices(i._values,i._selectedIndices))):s||n&&\"add\"!==n||i.value(i._values),i._valueDeferred&&i._valueDeferred.resolve(),i._angularItems(\"compile\"),i.trigger(\"dataBound\")},bound:function(e){return e===t?this._bound:(this._bound=e,t)},isGrouped:function(){return(this.dataSource.group()||[]).length}}),u.plugin(l)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,i){(i||t)()});\n//# sourceMappingURL=kendo.list.min.js.map\n","import { currentJobId } from \"app2/src/selectors/job.selectors\";\nimport { List, Map } from \"immutable\";\nimport { createSelector } from \"reselect\";\nimport { EventRecord } from \"../records/Event\";\nimport { RootState } from \"../reducers\";\n\nexport const byId = (state: RootState): List<EventRecord> => state.getIn([\"events\", \"byId\"]).toList();\n\nexport const event = (state: RootState, props: { eventId: number }): EventRecord =>\n  state.getIn([\"events\", \"byId\", props.eventId]);\n\n/**\n * Iterates over the given events list and checks for possible integration ids\n * @param {List<EventRecord>} events\n * @returns Object with boolean expressions for each integration\n */\nexport const hasIntegrations = (events: List<EventRecord>) => {\n  let hasMarketSharp = false;\n  let hasI360 = false;\n  let hasSR = false;\n  let hasSalesForce = false;\n  let hasLeadPerfection = false;\n\n  events?.forEach((e) => {\n    if (e.metadata?.get(\"marketsharp_id\")) hasMarketSharp = true;\n    if (e.metadata?.get(\"improveit360_appointment_id\")) hasI360 = true;\n    if (e.metadata?.get(\"sales_rabbit_id\")) hasSR = true;\n    if (e.metadata?.get(\"salesforce_event_id\")) hasSalesForce = true;\n    if (e.metadata?.get(\"lead_perfection_id\")) hasLeadPerfection = true;\n  });\n  return {\n    hasMarketSharp,\n    hasI360,\n    hasSR,\n    hasSalesForce,\n    hasLeadPerfection,\n  };\n};\n\n/**\n * Returns true if event has any CRM appointment id\n * @param {RootState} state The RootState\n * @param {{ eventId: number }} options\n */\nexport const eventHasCRM = createSelector(event, (event: EventRecord) => {\n  const metadata = event?.metadata;\n  if (!metadata) return false;\n\n  return Boolean(\n    metadata.get(\"marketsharp_id\") ||\n      metadata.get(\"improveit360_appointment_id\") ||\n      metadata.get(\"sales_rabbit_id\") ||\n      metadata.get(\"salesforce_event_id\") ||\n      metadata.get(\"lead_perfection_id\"),\n  );\n});\n\nexport const colorsByUserId = (state: RootState): Map<number, string> | undefined =>\n  state.getIn([\"events\", \"colors\", \"byUserId\"]);\n\n/**\n * Returns the event color that matches the user_id or job assigned user_id\n * @param {RootState} state The RootState\n * @param {{ event: EventRecord }} options\n */\nexport const eventColor = createSelector(\n  [colorsByUserId, (state, props) => ({ state, props })],\n  (colorsByUserId, { props }) => {\n    return (\n      colorsByUserId?.get(props.event.user_id || props.event.getIn([\"job\", \"assignments\", 0, \"user_id\"])) ||\n      \"hsl(210, 67%, 53%)\"\n    );\n  },\n);\n\n/**\n * Returns the red for the current job id, otherwise blue for Job Appointments tab\n * @param {RootState} state The RootState\n * @param {{ event: EventRecord }} options\n * @returns string color hex\n */\nexport const jobTabColor = createSelector(\n  [currentJobId, (state, props) => ({ state, props })],\n  (currentJobId, stateProps) => {\n    const { props } = stateProps;\n    return props.event.job_id === currentJobId ? \"#ed2e24\" : \"#3174ad\";\n  },\n);\n","import { RecipientRecord, IRecipientData, fromJSON as recipientFromJSON } from \"app2/src/records/Recipient\";\nimport { Record, List, Map, fromJS } from \"immutable\";\nimport { checkDate, Nullable } from \".\";\nimport { IDocumentData } from \"app2/src/records/Document\";\n\nexport const fromJSON = (json: Partial<ISignedDocumentData>): SignedDocumentRecord => {\n  const record: ISignedDocumentRecord = { ...(json as any) };\n\n  if (json.recipients) {\n    record.recipients = List(\n      json.recipients.map((r) => {\n        return recipientFromJSON(r);\n      }),\n    );\n  }\n\n  if (json.metadata) {\n    record.metadata = fromJS(json.metadata);\n  }\n\n  if (json.completed_at) {\n    record.completed_at = checkDate(json.completed_at);\n  }\n\n  return new SignedDocumentRecord(record);\n};\n\nexport const allSigned = (sd: SignedDocumentRecord) => {\n  const unsigned = sd.recipients.find((r) => {\n    return r.status !== \"recipient_signed\";\n  });\n\n  return unsigned === undefined;\n};\n\nexport interface ISignedDocumentData {\n  id: number;\n  estimate_id: number;\n  recipients: Array<Partial<IRecipientData>>;\n  status: string;\n  url: string;\n  platform: string;\n  metadata: any;\n  document: IDocumentData;\n  document_id: Nullable<number>;\n  signed_document_id: Nullable<number>;\n  validation_status: Nullable<number>;\n  message: string;\n  loading: boolean;\n  completed_at: Nullable<string>;\n}\n\nexport interface ISignedDocumentRecord {\n  id: Nullable<number>;\n  estimate_id: Nullable<number>;\n  status: Nullable<string>;\n  url: Nullable<string>;\n  document_id: Nullable<number>;\n  signed_document_id: Nullable<number>;\n  recipients: List<RecipientRecord>;\n  platform: Nullable<string>;\n  metadata: Map<string, any>;\n  loading: boolean;\n  validation: Nullable<Map<string, any>>;\n  validation_status: Nullable<number>;\n  message: Nullable<string>;\n  completed_at: Nullable<Date>;\n}\n\nexport const defaultSignedDocumentProps = {\n  id: 0,\n  estimate_id: null,\n  status: null,\n  url: null,\n  recipients: List<RecipientRecord>(),\n  loading: false,\n  platform: \"scribble\",\n  metadata: Map(),\n  document_id: null,\n  signed_document_id: null,\n  validation: null,\n  validation_status: null,\n  message: null,\n  completed_at: null,\n};\n\nexport class SignedDocumentRecord\n  extends Record<ISignedDocumentRecord>(defaultSignedDocumentProps)\n  implements ISignedDocumentRecord {}\n","// Product.ts\nexport const valid_uom = [\n  \"ea\",\n  \"sqft\",\n  \"lft\",\n  \"ui\",\n  \"in\",\n  \"sq\",\n  \"gal\",\n  \"pair\",\n  \"sash\",\n  \"mile\",\n  \"layer\",\n  \"hr\",\n  \"day\",\n  \"percent\",\n  \"all\",\n  \"cm\",\n  \"m\",\n  \"km\",\n  \"sqm\",\n  \"l\",\n  \"w\",\n  \"kW\",\n];\n\n// Discount.ts\nexport const valid_kind = [\"percent\", \"percent_limit\", \"flat\"];\n\n// Product Codes for QuickMeasure API\nexport const quickMeasureProductCodes = [\n  { label: \"Single Family\", value: \"SF-QM-USA\", description: \"Roof Measurement\" },\n  { label: \"Multi Family\", value: \"MF-QM-USA\", description: \"Roof Measurement\" },\n  { label: \"Commercial\", value: \"CM-QM-USA\", description: \"Roof Measurement\" },\n];\n\n// Imperial Units of Measure\nexport const imperial_uom = {\n  roof_total_area: \"sqft\",\n  roof_5pw_total_area: \"sqft\",\n  roof_10pw_total_area: \"sqft\",\n  roof_12pw_total_area: \"sqft\",\n  roof_15pw_total_area: \"sqft\",\n  roof_20pw_total_area: \"sqft\",\n  roof_flat_area: \"sqft\",\n  roof_flat_shallow_area: \"sqft\",\n  roof_low_slope_area: \"sqft\",\n  roof_average_slope_area: \"sqft\",\n  roof_steep_slope_area: \"sqft\",\n  roof_ultra_steep_slope_area: \"sqft\",\n  roof_high_roof_area: \"sqft\",\n  roof_sloped_area: \"sqft\",\n  roof_10pw_sloped_area: \"sqft\",\n  roof_79_area: \"sqft\",\n  roof_1012_area: \"sqft\",\n  roof_13p_area: \"sqft\",\n  roof_0_area: \"sqft\",\n  roof_1_area: \"sqft\",\n  roof_2_area: \"sqft\",\n  roof_3_area: \"sqft\",\n  roof_4_area: \"sqft\",\n  roof_5_area: \"sqft\",\n  roof_6_area: \"sqft\",\n  roof_7_area: \"sqft\",\n  roof_8_area: \"sqft\",\n  roof_9_area: \"sqft\",\n  roof_10_area: \"sqft\",\n  roof_11_area: \"sqft\",\n  roof_12_area: \"sqft\",\n  roof_13_area: \"sqft\",\n  roof_14_area: \"sqft\",\n  roof_15_area: \"sqft\",\n  roof_16_area: \"sqft\",\n  roof_17_area: \"sqft\",\n  roof_18_area: \"sqft\",\n  roof_19_area: \"sqft\",\n  roof_20_area: \"sqft\",\n  roof_21_area: \"sqft\",\n  roof_22_area: \"sqft\",\n  roof_23_area: \"sqft\",\n  roof_24_area: \"sqft\",\n  roof_25_area: \"sqft\",\n  roof_26p_area: \"sqft\",\n  roof_eave: \"lft\",\n  roof_rake: \"lft\",\n  roof_perimeter: \"lft\",\n  roof_ridge: \"lft\",\n  roof_hip: \"lft\",\n  roof_ridge_hip: \"lft\",\n  roof_valley: \"lft\",\n  roof_valley_eave: \"lft\",\n  roof_valley_eave_rake: \"lft\",\n  roof_step_flashing: \"lft\",\n  roof_headwall_flashing: \"lft\",\n  roof_total_flashing: \"lft\",\n  roof_gutter_miters: \"ea\",\n  roof_downspouts: \"lft\",\n  roof_downspout_elbows: \"ea\",\n  siding_total_area: \"sqft\",\n  siding_5pw_total_area: \"sqft\",\n  siding_10pw_total_area: \"sqft\",\n  siding_15pw_total_area: \"sqft\",\n  siding_18pw_total_area: \"sqft\",\n  siding_inside_corner_qty: \"ea\",\n  siding_inside_corner_length: \"lft\",\n  siding_outside_corner_qty: \"ea\",\n  siding_outside_corner_length: \"lft\",\n  siding_level_starter: \"lft\",\n  siding_sloped_trim: \"lft\",\n  siding_vertical_trim: \"lft\",\n  siding_level_frieze_board: \"lft\",\n  siding_sloped_frieze_board: \"lft\",\n  siding_frieze_board: \"lft\",\n  siding_opening_qty: \"ea\",\n  siding_windows_qty: \"ea\",\n  siding_doors_qty: \"ea\",\n  siding_garage_doors_qty: \"ea\",\n  siding_opening_tops_length: \"lft\",\n  siding_opening_sills_length: \"lft\",\n  siding_opening_sides_length: \"lft\",\n  siding_shutter_qty: \"ea\",\n  siding_shutter_area: \"sqft\",\n  siding_vents_qty: \"ea\",\n  siding_vents_area: \"sqft\",\n  siding_soffit_eaves: \"sqft\",\n  siding_soffit_level_frieze: \"sqft\",\n  siding_soffit_rakes: \"sqft\",\n  siding_soffit_sloped_frieze: \"sqft\",\n  siding_soffit_total: \"sqft\",\n  roof_faces: \"ea\",\n  wall_facades: \"ea\",\n  windows: \"ea\",\n  doors: \"ea\",\n  sunroom_a_wall_length: \"lft\",\n  sunroom_a_wall_height: \"lft\",\n  sunroom_a_wall_area: \"sqft\",\n  sunroom_b_wall_length: \"lft\",\n  sunroom_b_wall_height: \"lft\",\n  sunroom_b_wall_area: \"sqft\",\n  sunroom_c_wall_length: \"lft\",\n  sunroom_c_wall_height: \"lft\",\n  sunroom_c_wall_area: \"sqft\",\n  sunroom_wall_perimeter: \"lft\",\n  sunroom_wall_total_area: \"sqft\",\n  sunroom_deck_total_area: \"sqft\",\n  sunroom_ceiling_area: \"sqft\",\n  sunroom_studio_roof_area: \"sqft\",\n  sunroom_cathedral_roof_area: \"sqft\",\n  sunroom_kw_a_length: \"lft\",\n  sunroom_kw_a_height: \"in\",\n  sunroom_kw_a_area: \"sqft\",\n  sunroom_kw_b_length: \"lft\",\n  sunroom_kw_b_height: \"in\",\n  sunroom_kw_b_area: \"sqft\",\n  sunroom_kw_c_length: \"lft\",\n  sunroom_kw_c_height: \"in\",\n  sunroom_kw_c_area: \"sqft\",\n  sunroom_kw_total_length: \"lft\",\n  sunroom_kw_total_area: \"sqft\",\n  roof_face_area: \"sqft\",\n  wall_facade_area: \"sqft\",\n  window_width: \"in\",\n  window_height: \"in\",\n  window_ui: \"in\",\n  window_area: \"sqft\",\n  door_width: \"in\",\n  door_height: \"in\",\n  door_ui: \"in\",\n  rooms: \"ea\",\n  room_area: \"sqft\",\n  room_perimeter: \"lft\",\n  room_inside_corner: \"ea\",\n  room_outside_corner: \"ea\",\n  room_threshold: \"lft\",\n  decks: \"ea\",\n  deck_area: \"sqft\",\n  deck_perimeter: \"lft\",\n  deck_wall_length: \"lft\",\n  deck_railing_length: \"lft\",\n  deck_railing_area: \"sqft\",\n  pools: \"ea\",\n  pool_area: \"sqft\",\n  pool_perimeter: \"lft\",\n  pool_average_depth: \"lft\",\n  pool_volume: \"gal\",\n  interior_door_area: \"sqft\",\n  interior_area: \"sqft\",\n  interior_perimeter: \"lft\",\n  interior_inside_corner: \"ea\",\n  interior_outside_corner: \"ea\",\n  interior_threshold: \"lft\",\n  interior_ceiling_area: \"sqft\",\n  interior_ceiling_area_less_structures: \"sqft\",\n  interior_ceiling_perimeter: \"lft\",\n  interior_ceiling_perimeter_less_structures: \"lft\",\n  interior_door_count: \"ea\",\n  interior_door_total_width: \"lft\",\n  interior_exposed_structure_perimeter: \"lft\",\n  interior_floor_area_less_structures: \"sqft\",\n  interior_floor_opening_total_width: \"lft\",\n  interior_floor_plan_area: \"sqft\",\n  interior_floor_plan_perimeter: \"lft\",\n  interior_floor_plan_perimeter_less_structures: \"lft\",\n  interior_floor_plan_perimeter_without_openings: \"lft\",\n  interior_object_count: \"ea\",\n  interior_opening_count: \"ea\",\n  interior_opening_total_area: \"sqft\",\n  interior_opening_total_width: \"lft\",\n  interior_structure_total_ceiling_area: \"sqft\",\n  interior_structure_total_ceiling_width: \"lft\",\n  interior_structure_total_floor_area: \"sqft\",\n  interior_structure_total_floor_width: \"lft\",\n  interior_structure_total_wall_area: \"sqft\",\n  interior_volume: \"cuft\",\n  interior_wall_count: \"ea\",\n  interior_wall_total_area: \"sqft\",\n  interior_wall_total_area_without_openings: \"sqft\",\n  interior_window_count: \"ea\",\n  interior_window_total_area: \"sqft\",\n};\n\n// Metric Units of Measure\nexport const metric_uom = {\n  roof_total_area: \"sqm\",\n  roof_5pw_total_area: \"sqm\",\n  roof_10pw_total_area: \"sqm\",\n  roof_12pw_total_area: \"sqm\",\n  roof_15pw_total_area: \"sqm\",\n  roof_20pw_total_area: \"sqm\",\n  roof_flat_area: \"sqm\",\n  roof_flat_shallow_area: \"sqm\",\n  roof_low_slope_area: \"sqm\",\n  roof_average_slope_area: \"sqm\",\n  roof_steep_slope_area: \"sqm\",\n  roof_ultra_steep_slope_area: \"sqm\",\n  roof_high_roof_area: \"sqm\",\n  roof_sloped_area: \"sqm\",\n  roof_10pw_sloped_area: \"sqm\",\n  roof_79_area: \"sqm\",\n  roof_1012_area: \"sqm\",\n  roof_13p_area: \"sqm\",\n  roof_0_area: \"sqm\",\n  roof_1_area: \"sqm\",\n  roof_2_area: \"sqm\",\n  roof_3_area: \"sqm\",\n  roof_4_area: \"sqm\",\n  roof_5_area: \"sqm\",\n  roof_6_area: \"sqm\",\n  roof_7_area: \"sqm\",\n  roof_8_area: \"sqm\",\n  roof_9_area: \"sqm\",\n  roof_10_area: \"sqm\",\n  roof_11_area: \"sqm\",\n  roof_12_area: \"sqm\",\n  roof_13_area: \"sqm\",\n  roof_14_area: \"sqm\",\n  roof_15_area: \"sqm\",\n  roof_16_area: \"sqm\",\n  roof_17_area: \"sqm\",\n  roof_18_area: \"sqm\",\n  roof_19_area: \"sqm\",\n  roof_20_area: \"sqm\",\n  roof_21_area: \"sqm\",\n  roof_22_area: \"sqm\",\n  roof_23_area: \"sqm\",\n  roof_24_area: \"sqm\",\n  roof_25_area: \"sqm\",\n  roof_26p_area: \"sqm\",\n  roof_eave: \"m\",\n  roof_rake: \"m\",\n  roof_perimeter: \"m\",\n  roof_ridge: \"m\",\n  roof_hip: \"m\",\n  roof_ridge_hip: \"m\",\n  roof_valley: \"m\",\n  roof_valley_eave: \"m\",\n  roof_valley_eave_rake: \"m\",\n  roof_step_flashing: \"m\",\n  roof_headwall_flashing: \"m\",\n  roof_total_flashing: \"m\",\n  roof_gutter_miters: \"ea\",\n  roof_downspouts: \"m\",\n  roof_downspout_elbows: \"ea\",\n  siding_total_area: \"sqm\",\n  siding_5pw_total_area: \"sqm\",\n  siding_10pw_total_area: \"sqm\",\n  siding_15pw_total_area: \"sqm\",\n  siding_18pw_total_area: \"sqm\",\n  siding_inside_corner_qty: \"ea\",\n  siding_inside_corner_length: \"m\",\n  siding_outside_corner_qty: \"ea\",\n  siding_outside_corner_length: \"m\",\n  siding_level_starter: \"m\",\n  siding_sloped_trim: \"m\",\n  siding_vertical_trim: \"m\",\n  siding_level_frieze_board: \"m\",\n  siding_sloped_frieze_board: \"m\",\n  siding_frieze_board: \"m\",\n  siding_opening_qty: \"ea\",\n  siding_windows_qty: \"ea\",\n  siding_doors_qty: \"ea\",\n  siding_garage_doors_qty: \"ea\",\n  siding_opening_tops_length: \"m\",\n  siding_opening_sills_length: \"m\",\n  siding_opening_sides_length: \"m\",\n  siding_shutter_qty: \"ea\",\n  siding_shutter_area: \"sqm\",\n  siding_vents_qty: \"ea\",\n  siding_vents_area: \"sqm\",\n  siding_soffit_eaves: \"sqm\",\n  siding_soffit_level_frieze: \"sqm\",\n  siding_soffit_rakes: \"sqm\",\n  siding_soffit_sloped_frieze: \"sqm\",\n  siding_soffit_total: \"sqm\",\n  roof_faces: \"ea\",\n  wall_facades: \"ea\",\n  windows: \"ea\",\n  doors: \"ea\",\n  sunroom_a_wall_length: \"m\",\n  sunroom_a_wall_height: \"m\",\n  sunroom_a_wall_area: \"sqm\",\n  sunroom_b_wall_length: \"m\",\n  sunroom_b_wall_height: \"m\",\n  sunroom_b_wall_area: \"sqm\",\n  sunroom_c_wall_length: \"m\",\n  sunroom_c_wall_height: \"m\",\n  sunroom_c_wall_area: \"sqm\",\n  sunroom_wall_perimeter: \"m\",\n  sunroom_wall_total_area: \"sqm\",\n  sunroom_deck_total_area: \"sqm\",\n  sunroom_ceiling_area: \"sqm\",\n  sunroom_studio_roof_area: \"sqm\",\n  sunroom_cathedral_roof_area: \"sqm\",\n  sunroom_kw_a_length: \"m\",\n  sunroom_kw_a_height: \"cm\",\n  sunroom_kw_a_area: \"sqm\",\n  sunroom_kw_b_length: \"m\",\n  sunroom_kw_b_height: \"cm\",\n  sunroom_kw_b_area: \"sqm\",\n  sunroom_kw_c_length: \"m\",\n  sunroom_kw_c_height: \"cm\",\n  sunroom_kw_c_area: \"sqm\",\n  sunroom_kw_total_length: \"m\",\n  sunroom_kw_total_area: \"sqm\",\n  roof_face_area: \"sqm\",\n  wall_facade_area: \"sqm\",\n  window_width: \"in\",\n  window_height: \"in\",\n  window_ui: \"in\",\n  window_area: \"sqft\",\n  door_width: \"in\",\n  door_height: \"in\",\n  door_ui: \"in\",\n  rooms: \"ea\",\n  room_area: \"sqft\",\n  room_perimeter: \"lft\",\n  room_inside_corner: \"ea\",\n  room_outside_corner: \"ea\",\n  room_threshold: \"lft\",\n  decks: \"ea\",\n  deck_area: \"sqft\",\n  deck_perimeter: \"lft\",\n  deck_wall_length: \"lft\",\n  deck_railing_length: \"lft\",\n  deck_railing_area: \"sqft\",\n  pools: \"ea\",\n  pool_area: \"sqft\",\n  pool_perimeter: \"lft\",\n  pool_average_depth: \"lft\",\n  pool_volume: \"gal\",\n  interior_door_area: \"sqft\",\n  interior_area: \"sqm\",\n  interior_perimeter: \"m\",\n  interior_inside_corner: \"ea\",\n  interior_outside_corner: \"ea\",\n  interior_threshold: \"m\",\n  interior_ceiling_area: \"sqm\",\n  interior_ceiling_area_less_structures: \"sqm\",\n  interior_ceiling_perimeter: \"m\",\n  interior_ceiling_perimeter_less_structures: \"m\",\n  interior_door_count: \"ea\",\n  interior_door_total_width: \"m\",\n  interior_exposed_structure_perimeter: \"m\",\n  interior_floor_area_less_structures: \"sqm\",\n  interior_floor_opening_total_width: \"m\",\n  interior_floor_plan_area: \"sqm\",\n  interior_floor_plan_perimeter: \"m\",\n  interior_floor_plan_perimeter_less_structures: \"m\",\n  interior_floor_plan_perimeter_without_openings: \"m\",\n  interior_object_count: \"ea\",\n  interior_opening_count: \"ea\",\n  interior_opening_total_area: \"sqm\",\n  interior_opening_total_width: \"m\",\n  interior_structure_total_ceiling_area: \"sqm\",\n  interior_structure_total_ceiling_width: \"m\",\n  interior_structure_total_floor_area: \"sqm\",\n  interior_structure_total_floor_width: \"m\",\n  interior_structure_total_wall_area: \"sqm\",\n  interior_volume: \"m3\",\n  interior_wall_count: \"ea\",\n  interior_wall_total_area: \"sqm\",\n  interior_wall_total_area_without_openings: \"sqm\",\n  interior_window_count: \"ea\",\n  interior_window_total_area: \"sqm\",\n};\n\nconst jobBuilderTypes = {\n  occ: \"OCC\",\n  csv: \"CSV Import\",\n  salesforce: \"Salesforce\",\n  companycam: \"CompanyCam\",\n  improveit360: \"Improveit360\",\n  job_nimbus: \"JobNimbus\",\n  jobprogress: \"JobProgress\",\n  lead_perfection: \"LeadPerfection\",\n  marketsharp: \"MarketSharp\",\n  sales_rabbit: \"SalesRabbit\",\n  creator: \"Creator\",\n  rsf_leads_api_lead: \"Lead Conversion Callback\",\n};\n\nexport const validJobBuilderTypes = Object.keys(jobBuilderTypes).map((value) => ({\n  value,\n  label: jobBuilderTypes[value],\n}));\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.multiselect.min\",[\"kendo.list.min\",\"kendo.mobile.scroller.min\"],e)}(function(){return function(e,t){function a(e,t){var a;if(null===e&&null!==t||null!==e&&null===t)return!1;if(a=e.length,a!==t.length)return!1;for(;a--;)if(e[a]!==t[a])return!1;return!0}var i=window.kendo,n=i.ui,s=n.List,l=i.keys,o=i._activeElement,r=i.data.ObservableArray,u=e.proxy,c=\"id\",d=\"li\",p=\"accept\",_=\"filter\",h=\"rebind\",f=\"open\",m=\"close\",g=\"change\",v=\"progress\",T=\"select\",w=\"deselect\",b=\"aria-disabled\",k=\"k-state-focused\",y=\"k-loading-hidden\",x=\"k-state-hover\",C=\"k-state-disabled\",I=\"disabled\",V=\"readonly\",S=\".kendoMultiSelect\",D=\"click\"+S,O=\"keydown\"+S,L=\"mouseenter\"+S,F=\"mouseleave\"+S,B=L+\" \"+F,E=/\"/g,A=e.isArray,M=[\"font-family\",\"font-size\",\"font-stretch\",\"font-style\",\"font-weight\",\"letter-spacing\",\"text-transform\",\"line-height\"],H=s.extend({init:function(t,a){var n,l,o=this;o.ns=S,s.fn.init.call(o,t,a),o._optionsMap={},o._customOptions={},o._wrapper(),o._tagList(),o._input(),o._textContainer(),o._loader(),o._clearButton(),o._tabindex(o.input),t=o.element.attr(\"multiple\",\"multiple\").hide(),a=o.options,a.placeholder||(a.placeholder=t.data(\"placeholder\")),n=t.attr(c),n&&(o._tagID=n+\"_tag_active\",n+=\"_taglist\",o.tagList.attr(c,n)),o._aria(n),o._dataSource(),o._ignoreCase(),o._popup(),o._tagTemplate(),o.requireValueMapper(o.options),o._initList(),o._reset(),o._enable(),o._placeholder(),a.autoBind?o.dataSource.fetch():a.value&&o._preselect(a.value),l=e(o.element).parents(\"fieldset\").is(\":disabled\"),l&&o.enable(!1),i.notify(o)},options:{name:\"MultiSelect\",tagMode:\"multiple\",enabled:!0,autoBind:!0,autoClose:!0,highlightFirst:!0,dataTextField:\"\",dataValueField:\"\",filter:\"startswith\",ignoreCase:!0,minLength:1,enforceMinLength:!1,delay:100,value:null,maxSelectedItems:null,placeholder:\"\",height:200,animation:{},virtual:!1,itemTemplate:\"\",tagTemplate:\"\",groupTemplate:\"#:data#\",fixedGroupTemplate:\"#:data#\",clearButton:!0},events:[f,m,g,T,w,\"filtering\",\"dataBinding\",\"dataBound\"],setDataSource:function(e){this.options.dataSource=e,this._state=\"\",this._dataSource(),this.listView.setDataSource(this.dataSource),this.options.autoBind&&this.dataSource.fetch()},setOptions:function(e){var t=this._listOptions(e);s.fn.setOptions.call(this,e),this.listView.setOptions(t),this._accessors(),this._aria(this.tagList.attr(c)),this._tagTemplate()},currentTag:function(e){var a=this;return e===t?a._currentTag:(a._currentTag&&(a._currentTag.removeClass(k).removeAttr(c),a.input.removeAttr(\"aria-activedescendant\")),e&&(e.addClass(k).attr(c,a._tagID),a.input.attr(\"aria-activedescendant\",a._tagID)),a._currentTag=e,t)},dataItems:function(){return this.listView.selectedDataItems()},destroy:function(){var e=this,t=e.ns;clearTimeout(e._busy),clearTimeout(e._typingTimeout),e.wrapper.off(t),e.tagList.off(t),e.input.off(t),e._clear.off(t),s.fn.destroy.call(e)},_activateItem:function(){s.fn._activateItem.call(this),this.currentTag(null)},_listOptions:function(t){var a=this,n=s.fn._listOptions.call(a,e.extend(t,{selectedItemChange:u(a._selectedItemChange,a),selectable:\"multiple\"})),l=this.options.itemTemplate||this.options.template,o=n.itemTemplate||l||n.template;return o||(o=\"#:\"+i.expr(n.dataTextField,\"data\")+\"#\"),n.template=o,n},_setListValue:function(){s.fn._setListValue.call(this,this._initialValues.slice(0))},_listChange:function(e){var a,i=this.dataSource.flatView(),n=this._optionsMap,s=this._value;for(this._state===h&&(this._state=\"\"),a=0;e.added.length>a;a++)if(n[s(e.added[a].dataItem)]===t){this._render(i);break}this._selectValue(e.added,e.removed)},_selectedItemChange:function(e){var t,a,i=e.items;for(a=0;i.length>a;a++)t=i[a],this.tagList.children().eq(t.index).children(\"span:first\").html(this.tagTextTemplate(t.item))},_wrapperMousedown:function(t){var a=this,n=\"input\"!==t.target.nodeName.toLowerCase(),s=e(t.target),l=s.hasClass(\"k-select\")||s.hasClass(\"k-icon\");l&&(l=!s.closest(\".k-select\").children(\".k-i-arrow-s\").length),!n||l&&i.support.mobileOS||t.preventDefault(),l||(a.input[0]!==o()&&n&&a.input.focus(),1===a.options.minLength&&a.open())},_inputFocus:function(){this._placeholder(!1),this.wrapper.addClass(k)},_inputFocusout:function(){var e=this;clearTimeout(e._typingTimeout),e.wrapper.removeClass(k),e._placeholder(!e.listView.selectedDataItems()[0],!0),e.close(),e._state===_&&(e._state=p,e.listView.skipUpdate(!0)),e.element.blur()},_removeTag:function(e){var a,i=this,n=i._state,s=e.index(),l=i.listView,o=l.value()[s],r=i.listView.selectedDataItems()[s],u=i._customOptions[o];return i.trigger(w,{dataItem:r,item:e})?(i._close(),t):(u!==t||n!==p&&n!==_||(u=i._optionsMap[o]),u!==t?(a=i.element[0].children[u],a.selected=!1,l.removeAt(s),e.remove()):l.select(l.select()[s]),i.currentTag(null),i._change(),i._close(),t)},_tagListClick:function(t){var a=e(t.currentTarget);a.children(\".k-i-arrow-s\").length||this._removeTag(a.closest(d))},_clearClick:function(){this.value(null),this.trigger(\"change\")},_editable:function(t){var a=this,i=t.disable,n=t.readonly,s=a.wrapper.off(S),l=a.tagList.off(S),o=a.element.add(a.input.off(S));n||i?(i?s.addClass(C):s.removeClass(C),o.attr(I,i).attr(V,n).attr(b,i)):(s.removeClass(C).on(B,a._toggleHover).on(\"mousedown\"+S+\" touchend\"+S,u(a._wrapperMousedown,a)),a.input.on(O,u(a._keydown,a)).on(\"paste\"+S,u(a._search,a)).on(\"focus\"+S,u(a._inputFocus,a)).on(\"focusout\"+S,u(a._inputFocusout,a)),a._clear.on(\"click\"+S,u(a._clearClick,a)),o.removeAttr(I).removeAttr(V).attr(b,!1),l.on(L,d,function(){e(this).addClass(x)}).on(F,d,function(){e(this).removeClass(x)}).on(D,\"li.k-button .k-select\",u(a._tagListClick,a)))},_close:function(){var e=this;e.options.autoClose?e.close():e.popup.position()},_filterSource:function(e,t){t||(t=this._retrieveData),this._retrieveData=!1,s.fn._filterSource.call(this,e,t)},close:function(){this.popup.close()},open:function(){var e=this;e._request&&(e._retrieveData=!1),e._retrieveData||!e.listView.bound()||e._state===p?(e._open=!0,e._state=h,e.listView.skipUpdate(!0),e._filterSource()):e._allowOpening()&&(e.popup.open(),e._focusItem())},toggle:function(e){e=e!==t?e:!this.popup.visible(),this[e?f:m]()},refresh:function(){this.listView.refresh()},_listBound:function(){var e=this,a=e.dataSource.flatView(),i=e.listView.skip();e._render(a),e._renderFooter(),e._renderNoData(),e._toggleNoData(!a.length),e._resizePopup(),e._open&&(e._open=!1,e.toggle(e._allowOpening())),e.popup.position(),!e.options.highlightFirst||i!==t&&0!==i||e.listView.focusFirst(),e._touchScroller&&e._touchScroller.reset(),e._hideBusy(),e._makeUnselectable(),e.trigger(\"dataBound\")},_inputValue:function(){var e=this,t=e.input.val();return e.options.placeholder===t&&(t=\"\"),t},value:function(e){var a=this,i=a.listView,n=i.value().slice(),s=a.options.maxSelectedItems,l=i.bound()&&i.isFiltered();return e===t?n:(a.requireValueMapper(a.options,e),e=a._normalizeValues(e),null!==s&&e.length>s&&(e=e.slice(0,s)),l&&a._clearFilter(),i.value(e),a._old=i.value(),l||a._fetchData(),t)},_preselect:function(t,a){var n=this;A(t)||t instanceof i.data.ObservableArray||(t=[t]),(e.isPlainObject(t[0])||t[0]instanceof i.data.ObservableObject||!n.options.dataValueField)&&(n.dataSource.data(t),n.value(a||n._initialValues),n._retrieveData=!0)},_setOption:function(e,t){var a=this.element[0].children[this._optionsMap[e]];a&&(a.selected=t)},_fetchData:function(){var e=this,t=!!e.dataSource.view().length,a=0===e.listView.value().length;a||e._request||(e._retrieveData||!e._fetch&&!t)&&(e._fetch=!0,e._retrieveData=!1,e.dataSource.read().done(function(){e._fetch=!1}))},_isBound:function(){return this.listView.bound()&&!this._retrieveData},_dataSource:function(){var e=this,t=e.element,a=e.options,n=a.dataSource||{};n=A(n)?{data:n}:n,n.select=t,n.fields=[{field:a.dataTextField},{field:a.dataValueField}],e.dataSource&&e._refreshHandler?e._unbindDataSource():(e._progressHandler=u(e._showBusy,e),e._errorHandler=u(e._hideBusy,e)),e.dataSource=i.data.DataSource.create(n).bind(v,e._progressHandler).bind(\"error\",e._errorHandler)},_reset:function(){var t=this,a=t.element,i=a.attr(\"form\"),n=i?e(\"#\"+i):a.closest(\"form\");n[0]&&(t._resetHandler=function(){setTimeout(function(){t.value(t._initialValues),t._placeholder()})},t._form=n.on(\"reset\",t._resetHandler))},_initValue:function(){var e=this.options.value||this.element.val();this._old=this._initialValues=this._normalizeValues(e)},_normalizeValues:function(t){var a=this;return null===t?t=[]:t&&e.isPlainObject(t)?t=[a._value(t)]:t&&e.isPlainObject(t[0])?t=e.map(t,function(e){return a._value(e)}):A(t)||t instanceof r?A(t)&&(t=t.slice()):t=[t],t},_change:function(){var e=this,t=e.value();a(t,e._old)||(e._old=t.slice(),e.trigger(g),e.element.trigger(g))},_click:function(e){var t=e.item;e.preventDefault(),this._select(t),this._change(),this._close()},_keydown:function(a){var n,s=this,o=a.keyCode,r=s._currentTag,u=s.listView,c=u.focus(),d=s.input.val(),p=i.support.isRtl(s.wrapper),_=s.popup.visible();if(o===l.DOWN){if(a.preventDefault(),!_)return s.open(),c||u.focusFirst(),t;c?(u.focusNext(),u.focus()||u.focusLast()):u.focusFirst()}else if(o===l.UP)_&&(c&&u.focusPrev(),u.focus()||s.close()),a.preventDefault();else if(o===l.LEFT&&!p||o===l.RIGHT&&p)d||(r=r?r.prev():e(s.tagList[0].lastChild),r[0]&&s.currentTag(r));else if(o===l.RIGHT&&!p||o===l.LEFT&&p)!d&&r&&(r=r.next(),s.currentTag(r[0]?r:null));else if(o===l.ENTER&&_)s._select(c),s._change(),s._close(),a.preventDefault();else if(o===l.ESC)_?a.preventDefault():s.currentTag(null),s.close();else if(o===l.HOME)_?u.focusFirst():d||(r=s.tagList[0].firstChild,r&&s.currentTag(e(r)));else if(o===l.END)_?u.focusLast():d||(r=s.tagList[0].lastChild,r&&s.currentTag(e(r)));else if(o!==l.DELETE&&o!==l.BACKSPACE||d)!s.popup.visible()||o!==l.PAGEDOWN&&o!==l.PAGEUP?(clearTimeout(s._typingTimeout),setTimeout(function(){s._scale()}),s._search()):(a.preventDefault(),n=o===l.PAGEDOWN?1:-1,u.scrollWith(n*u.screenHeight()));else{if(\"single\"===s.options.tagMode)return u.value([]),s._change(),s._close(),t;o!==l.BACKSPACE||r||(r=e(s.tagList[0].lastChild)),r&&r[0]&&s._removeTag(r)}},_hideBusy:function(){var e=this;clearTimeout(e._busy),e.input.attr(\"aria-busy\",!1),e._loading.addClass(y),e._request=!1,e._busy=null,e._showClear()},_showBusyHandler:function(){this.input.attr(\"aria-busy\",!0),this._loading.removeClass(y),this._hideClear()},_showBusy:function(){var e=this;e._request=!0,e._busy||(e._busy=setTimeout(u(e._showBusyHandler,e),100))},_placeholder:function(e,a){var n=this,s=n.input,l=o(),r=n.options.placeholder,u=s.val(),c=s[0]===l,d=u.length;c&&!n.options.autoClose&&u!==r||(d=0,u=\"\"),e===t&&(e=!1,s[0]!==l&&(e=!n.listView.selectedDataItems()[0])),n._prev=u,s.toggleClass(\"k-readonly\",e).val(e?r:u),c&&!a&&i.caret(s[0],d,d),n._scale()},_scale:function(){var e,t=this,a=t.wrapper,i=a.width(),n=t._span.text(t.input.val());a.is(\":visible\")?e=n.width()+25:(n.appendTo(document.documentElement),i=e=n.width()+25,n.appendTo(a)),t.input.width(e>i?i:e)},_option:function(e,a,n){var s=\"<option\";return e!==t&&(e+=\"\",-1!==e.indexOf('\"')&&(e=e.replace(E,\"&quot;\")),s+=' value=\"'+e+'\"'),n&&(s+=\" selected\"),s+=\">\",a!==t&&(s+=i.htmlEncode(a)),s+=\"</option>\"},_render:function(e){var t,a,i,n,s,l,o=this.listView.selectedDataItems(),r=this.listView.value(),u=e.length,c=\"\";for(r.length!==o.length&&(o=this._buildSelectedItems(r)),s={},l={},n=0;u>n;n++)a=e[n],i=this._value(a),t=this._selectedItemIndex(i,o),-1!==t&&o.splice(t,1),l[i]=n,c+=this._option(i,this._text(a),-1!==t);if(o.length)for(n=0;o.length>n;n++)a=o[n],i=this._value(a),s[i]=u,l[i]=u,u+=1,c+=this._option(i,this._text(a),!0);this._customOptions=s,this._optionsMap=l,this.element.html(c)},_buildSelectedItems:function(e){var t,a,i=this.options.dataValueField,n=this.options.dataTextField,s=[];for(a=0;e.length>a;a++)t={},t[i]=e[a],t[n]=e[a],s.push(t);return s},_selectedItemIndex:function(e,t){for(var a=this._value,i=0;t.length>i;i++)if(e===a(t[i]))return i;return-1},_search:function(){var e=this;e._typingTimeout=setTimeout(function(){var t=e.input.val();e._prev!==t&&(e._prev=t,e.search(t))},e.options.delay)},_allowOpening:function(){return this._allowSelection()&&s.fn._allowOpening.call(this)},_allowSelection:function(){var e=this.options.maxSelectedItems;return null===e||e>this.listView.value().length},_angularTagItems:function(t){var a=this;a.angular(t,function(){return{elements:a.tagList[0].children,data:e.map(a.dataItems(),function(e){return{dataItem:e}})}})},_selectValue:function(e,t){var a,i,n,s=this,l=s.value(),o=s.dataSource.total(),r=s.tagList,u=s._value;if(s._angularTagItems(\"cleanup\"),\"multiple\"===s.options.tagMode){for(n=t.length-1;n>-1;n--)a=t[n],r[0].removeChild(r[0].children[a.position]),s._setOption(u(a.dataItem),!1);for(n=0;e.length>n;n++)i=e[n],r.append(s.tagTemplate(i.dataItem)),s._setOption(u(i.dataItem),!0)}else{for((!s._maxTotal||o>s._maxTotal)&&(s._maxTotal=o),r.html(\"\"),l.length&&r.append(s.tagTemplate({values:l,dataItems:s.dataItems(),maxTotal:s._maxTotal,currentTotal:o})),n=t.length-1;n>-1;n--)s._setOption(u(t[n].dataItem),!1);for(n=0;e.length>n;n++)s._setOption(u(e[n].dataItem),!0)}s._angularTagItems(\"compile\"),s._placeholder()},_select:function(e){var a,i,n,s;if(e&&(a=this,i=a.listView,n=i.dataItemByIndex(i.getElementIndex(e)),s=e.hasClass(\"k-state-selected\"),a._state===h&&(a._state=\"\"),a._allowSelection())){if(a.trigger(s?w:T,{dataItem:n,item:e}))return a._close(),t;i.select(e),a._placeholder(),a._state===_&&(a._state=p,i.skipUpdate(!0))}},_input:function(){var t=this,a=t.element,i=a[0].accessKey,n=t._innerWrapper.children(\"input.k-input\");n[0]||(n=e('<input class=\"k-input\" style=\"width: 25px\" />').appendTo(t._innerWrapper)),a.removeAttr(\"accesskey\"),t._focused=t.input=n.attr({accesskey:i,autocomplete:\"off\",role:\"listbox\",title:a[0].title,\"aria-expanded\":!1})},_tagList:function(){var t=this,a=t._innerWrapper.children(\"ul\");a[0]||(a=e('<ul role=\"listbox\" deselectable=\"on\" class=\"k-reset\"/>').appendTo(t._innerWrapper)),t.tagList=a},_tagTemplate:function(){var e,t=this,a=t.options,n=a.tagTemplate,s=a.dataSource,l=\"multiple\"===a.tagMode;t.element[0].length&&!s&&(a.dataTextField=a.dataTextField||\"text\",a.dataValueField=a.dataValueField||\"value\"),e=l?i.template(\"#:\"+i.expr(a.dataTextField,\"data\")+\"#\",{useWithBlock:!1}):i.template(\"#:values.length# item(s) selected\"),t.tagTextTemplate=n=n?i.template(n):e,t.tagTemplate=function(e){return'<li class=\"k-button\" deselectable=\"on\"><span deselectable=\"on\">'+n(e)+'</span><span unselectable=\"on\" aria-label=\"'+(l?\"delete\":\"open\")+'\" class=\"k-select\"><span class=\"k-icon '+(l?\"k-i-close\":\"k-i-arrow-s\")+'\"></span></span></li>'}},_loader:function(){this._loading=e('<span class=\"k-icon k-i-loading '+y+'\"></span>').insertAfter(this.input)},_clearButton:function(){this._clear=e('<span deselectable=\"on\" class=\"k-icon k-i-close\" title=\"clear\"></span>').attr({role:\"button\",tabIndex:-1}),this.options.clearButton&&this._clear.insertAfter(this.input)},_textContainer:function(){var t=i.getComputedStyles(this.input[0],M);t.position=\"absolute\",t.visibility=\"hidden\",t.top=-3333,t.left=-3333,this._span=e(\"<span/>\").css(t).appendTo(this.wrapper)},_wrapper:function(){var t=this,a=t.element,i=a.parent(\"span.k-multiselect\");i[0]||(i=a.wrap('<div class=\"k-widget k-multiselect k-header\" deselectable=\"on\" />').parent(),i[0].style.cssText=a[0].style.cssText,i[0].title=a[0].title,e('<div class=\"k-multiselect-wrap k-floatwrap\" deselectable=\"on\" />').insertBefore(a)),t.wrapper=i.addClass(a[0].className).css(\"display\",\"\"),t._innerWrapper=e(i[0].firstChild)}});n.plugin(H)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,a){(a||t)()});\n//# sourceMappingURL=kendo.multiselect.min.js.map\n","import { Record } from \"immutable\";\nimport { fromJSON as fileFromJSON, FileRecord, IFileData } from \"./File\";\nimport { Nullable } from \".\";\n\nexport const fromJSON = (json: Partial<IImageData>): ImageRecord => {\n  const record: IImageRecord = { ...(json as any) };\n\n  if (json.file) {\n    record.file = fileFromJSON(json.file);\n  }\n\n  record.displayInProposal = record.display === \"both\" || record.display === \"estimate\";\n  record.displayInAgreement = record.display === \"both\" || record.display === \"contract\";\n\n  return new ImageRecord(record);\n};\n\nexport const toJSON = (image: ImageRecord): IImageData => {\n  const img = image.toJSON() as IImageData;\n\n  if (img.id <= 0) {\n    delete img.id;\n  }\n\n  return img;\n};\n\nexport const toFormData = (record: ImageRecord): any => {\n  const data = new FormData();\n  if (record.id > 0) {\n    data.set(\"image[id]\", record.id as any);\n  }\n  data.set(\"image[name]\", record.name);\n  if (record.file_queue && record.file_queue instanceof File) {\n    data.set(\"image[file]\", record.file_queue as any);\n  }\n  data.set(\"image[display]\", record.display);\n  data.set(\"image[imageable_id]\", record.imageable_id.toString());\n  data.set(\"image[imageable_type]\", record.imageable_type);\n  if (record.folder_id > 0) {\n    data.set(\"image[folder_id]\", record.folder_id.toString());\n  }\n  return data;\n};\n\nexport const getUrl = (image: ImageRecord, size: string): string => {\n  if (!image || (!image.file && !image.file_queue)) {\n    return \"\";\n  }\n\n  if (image.id <= 0 && image.file_queue) {\n    return image.file_queue.preview.url;\n  }\n\n  return image.file[size]?.url || \"\";\n};\n\nexport const setDisplay = (record: ImageRecord): ImageDisplayType => {\n  let display = ImageDisplay.do_not_display;\n  if (record.displayInProposal === true && record.displayInAgreement === true) {\n    display = ImageDisplay.both;\n  } else if (record.displayInProposal === false && record.displayInAgreement === true) {\n    display = ImageDisplay.contract;\n  } else if (record.displayInProposal === true && record.displayInAgreement === false) {\n    display = ImageDisplay.estimate;\n  }\n  return display;\n};\n\nexport enum ImageDisplay {\n  do_not_display = \"do_not_display\",\n  contract = \"contract\",\n  estimate = \"estimate\",\n  both = \"both\",\n  logo = \"logo\",\n}\n\nexport type ImageDisplayType = \"do_not_display\" | \"contract\" | \"estimate\" | \"both\" | \"logo\";\n\nexport interface IImageData {\n  id: number;\n  uuid: string;\n  folder_id: number;\n  title?: string;\n  description?: string;\n  display?: ImageDisplayType;\n  file?: IFileData;\n  file_size?: number;\n  imageable_id?: number;\n  imageable_type?: string;\n  md5_sum?: string;\n  name?: string;\n  sort_order?: number;\n  selected?: boolean;\n  loading?: boolean;\n  file_queue?: any;\n\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IImageRecord {\n  id: number;\n  uuid: Nullable<string>;\n  folder_id: Nullable<number>;\n  title: Nullable<string>;\n  name: Nullable<string>;\n  description: Nullable<string>;\n  display: Nullable<ImageDisplayType>;\n  file: Nullable<FileRecord>;\n  file_queue: Nullable<any>;\n  file_size: Nullable<any>;\n  imageable_id: Nullable<number>;\n  imageable_type: Nullable<string>;\n  md5_sum: Nullable<string>;\n  sort_order: Nullable<number>;\n  _destroy: Nullable<boolean>;\n  loading: boolean;\n  selected: boolean;\n  displayInProposal: Nullable<boolean>;\n  displayInAgreement: Nullable<boolean>;\n\n  created_at: Nullable<Date>;\n  updated_at: Nullable<Date>;\n}\n\nexport const defaultImageProps = {\n  id: 0,\n  uuid: null,\n  folder_id: null,\n  title: null,\n  name: null,\n  description: null,\n  display: null,\n  file: null,\n  file_queue: null,\n  file_size: null,\n  imageable_id: null,\n  imageable_type: null,\n  md5_sum: null,\n  sort_order: null,\n  _destroy: null,\n  loading: false,\n  selected: false,\n  displayInProposal: null,\n  displayInAgreement: null,\n  created_at: null,\n  updated_at: null,\n};\n\nexport class ImageRecord extends Record<IImageRecord>(defaultImageProps) implements IImageRecord {}\n","import { RootDispatchType } from \"app2/src/store\";\nimport * as commonActions from \"app2/src/reducers/components/common.actions\";\nimport { FlashLevels } from \"app/src/Common/FlashLevels\";\nimport { createAction } from \"./UtilsTypes\";\nimport type { Action, AnyFunction, StringMap, ActionsUnion } from \"./UtilsTypes\";\nexport { Action, AnyFunction, StringMap, ActionsUnion, createAction };\n\nexport const handleErrors = (response: any, flashDispatch?: RootDispatchType): string[] => {\n  let errors = [];\n\n  console.error(response);\n\n  if (!response) {\n    errors = [\"Invalid Response - Please try again. If the problem persists, please contact support.\"];\n  } else if (Array.isArray(response)) {\n    errors = response;\n  } else if (response.status === 500) {\n    errors = [\"Internal Server Error - Please try again. If the problem persists, please contact support.\"];\n  } else if (Array.isArray(response.data?.errors) || typeof response.data?.errors === \"string\") {\n    errors = errors.concat(response.data.errors);\n  } else {\n    errors = [\n      \"Unknown Error - Please check your internet connection. If the problem persists, please contact support.\",\n    ];\n  }\n\n  if (flashDispatch) {\n    flashDispatch(commonActions.Actions.flashAddAlert(FlashLevels.danger, errors));\n  }\n\n  return errors;\n};\n\nexport const handleErrorsWithRejection = (response: any): Promise<string[]> => Promise.reject(handleErrors(response));\n","/** \n * Kendo UI v2016.3.914 (http://www.telerik.com/kendo-ui)                                                                                                                                               \n * Copyright 2016 Telerik AD. All rights reserved.                                                                                                                                                      \n *                                                                                                                                                                                                      \n * Kendo UI commercial licenses may be obtained at                                                                                                                                                      \n * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete                                                                                                                                  \n * If you do not own a commercial license, this file shall be governed by the trial license terms.                                                                                                      \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n                                                                                                                                                                                                       \n\n*/\n!function(e,define){define(\"kendo.menu.min\",[\"kendo.popup.min\"],e)}(function(){return function(e,t){function n(e,t){return e=e.split(\" \")[!t+0]||e,e.replace(\"top\",\"up\").replace(\"bottom\",\"down\")}function i(e,t,n){e=e.split(\" \")[!t+0]||e;var i={origin:[\"bottom\",n?\"right\":\"left\"],position:[\"top\",n?\"right\":\"left\"]},o=/left|right/.test(e);return o?(i.origin=[\"top\",e],i.position[1]=p.directions[e].reverse):(i.origin[0]=e,i.position[0]=p.directions[e].reverse),i.origin=i.origin.join(\" \"),i.position=i.position.join(\" \"),i}function o(t,n){try{return e.contains(t,n)}catch(i){return!1}}function r(t){t=e(t),t.addClass(\"k-item\").children(b).addClass(H),t.children(\"a\").addClass(T).children(b).addClass(H),t.filter(\":not([disabled])\").addClass(V),t.filter(\".k-separator\").empty().append(\"&nbsp;\"),t.filter(\"li[disabled]\").addClass(q).removeAttr(\"disabled\").attr(\"aria-disabled\",!0),t.filter(\"[role]\").length||t.attr(\"role\",\"menuitem\"),t.children(\".\"+T).length||t.contents().filter(function(){return!(this.nodeName.match(w)||3==this.nodeType&&!e.trim(this.nodeValue))}).wrapAll(\"<span class='\"+T+\"'/>\"),s(t),a(t)}function s(t){t=e(t),t.find(\"> .k-link > [class*=k-i-arrow]:not(.k-sprite)\").remove(),t.filter(\":has(.k-menu-group)\").children(\".k-link:not(:has([class*=k-i-arrow]:not(.k-sprite)))\").each(function(){var t=e(this),n=t.parent().parent();t.append(\"<span class='k-icon \"+(n.hasClass(P+\"-horizontal\")?\"k-i-arrow-s\":\"k-i-arrow-e\")+\"'/>\")})}function a(t){t=e(t),t.filter(\".k-first:not(:first-child)\").removeClass(E),t.filter(\".k-last:not(:last-child)\").removeClass(O),t.filter(\":first-child\").addClass(E),t.filter(\":last-child\").addClass(O)}var l,p=window.kendo,c=p.ui,u=p._activeElement,d=p.support.touch&&p.support.mobileOS,m=\"mousedown\",h=\"click\",f=e.extend,g=e.proxy,v=e.each,k=p.template,_=p.keys,C=c.Widget,w=/^(ul|a|div)$/i,y=\".kendoMenu\",b=\"img\",x=\"open\",P=\"k-menu\",T=\"k-link\",O=\"k-last\",I=\"close\",A=\"timer\",E=\"k-first\",H=\"k-image\",D=\"select\",R=\"zIndex\",S=\"activate\",U=\"deactivate\",z=\"touchstart\"+y+\" MSPointerDown\"+y+\" pointerdown\"+y,L=p.support.pointers,B=p.support.msPointers,M=B||L,G=L?\"pointerover\":B?\"MSPointerOver\":\"mouseenter\",N=L?\"pointerout\":B?\"MSPointerOut\":\"mouseleave\",W=d||M,j=e(document.documentElement),F=\"kendoPopup\",V=\"k-state-default\",X=\"k-state-hover\",Y=\"k-state-focused\",q=\"k-state-disabled\",K=\"k-state-selected\",Z=\".k-menu\",$=\".k-menu-group\",Q=$+\",.k-animation-container\",J=\":not(.k-list) > .k-item\",ee=\".k-item.k-state-disabled\",te=\".k-item:not(.k-state-disabled)\",ne=\".k-item:not(.k-state-disabled) > .k-link\",ie=\":not(.k-item.k-separator)\",oe=ie+\":eq(0)\",re=ie+\":last\",se=\"> div:not(.k-animation-container,.k-list-container)\",ae={2:1,touch:1},le={content:k(\"<div #= contentCssAttributes(item) # tabindex='-1'>#= content(item) #</div>\"),group:k(\"<ul class='#= groupCssClass(group) #'#= groupAttributes(group) # role='menu' aria-hidden='true'>#= renderItems(data) #</ul>\"),itemWrapper:k(\"<#= tag(item) # class='#= textClass(item) #'#= textAttributes(item) #>#= image(data) ##= sprite(item) ##= text(item) ##= arrow(data) #</#= tag(item) #>\"),item:k(\"<li class='#= wrapperCssClass(group, item) #' #= itemCssAttributes(item) # role='menuitem'  #=item.items ? \\\"aria-haspopup='true'\\\": \\\"\\\"##=item.enabled === false ? \\\"aria-disabled='true'\\\" : ''#>#= itemWrapper(data) ## if (item.items) { ##= subGroup({ items: item.items, menu: menu, group: { expanded: item.expanded } }) ## } else if (item.content || item.contentUrl) { ##= renderContent(data) ## } #</li>\"),image:k(\"<img #= imageCssAttributes(item) # alt='' src='#= item.imageUrl #' />\"),arrow:k(\"<span class='#= arrowClass(item, group) #'></span>\"),sprite:k(\"<span class='k-sprite #= spriteCssClass #'></span>\"),empty:k(\"\")},pe={wrapperCssClass:function(e,t){var n=\"k-item\",i=t.index;return n+=t.enabled===!1?\" k-state-disabled\":\" k-state-default\",e.firstLevel&&0===i&&(n+=\" k-first\"),i==e.length-1&&(n+=\" k-last\"),t.cssClass&&(n+=\" \"+t.cssClass),t.attr&&t.attr.hasOwnProperty(\"class\")&&(n+=\" \"+t.attr[\"class\"]),t.selected&&(n+=\" \"+K),n},itemCssAttributes:function(e){var t,n=\"\",i=e.attr||{};for(t in i)i.hasOwnProperty(t)&&\"class\"!==t&&(n+=t+'=\"'+i[t]+'\" ');return n},imageCssAttributes:function(e){var t,n=\"\",i=e.imageAttr||{};i[\"class\"]?i[\"class\"]+=\" \"+H:i[\"class\"]=H;for(t in i)i.hasOwnProperty(t)&&(n+=t+'=\"'+i[t]+'\" ');return n},contentCssAttributes:function(e){var t,n=\"\",i=e.contentAttr||{},o=\"k-content k-group k-menu-group\";i[\"class\"]?i[\"class\"]+=\" \"+o:i[\"class\"]=o;for(t in i)i.hasOwnProperty(t)&&(n+=t+'=\"'+i[t]+'\" ');return n},textClass:function(){return T},textAttributes:function(e){return e.url?\" href='\"+e.url+\"'\":\"\"},arrowClass:function(e,t){var n=\"k-icon\";return n+=t.horizontal?\" k-i-arrow-s\":\" k-i-arrow-e\"},text:function(e){return e.encoded===!1?e.text:p.htmlEncode(e.text)},tag:function(e){return e.url?\"a\":\"span\"},groupAttributes:function(e){return e.expanded!==!0?\" style='display:none'\":\"\"},groupCssClass:function(){return\"k-group k-menu-group\"},content:function(e){return e.content?e.content:\"&nbsp;\"}},ce=C.extend({init:function(t,n){var i=this;C.fn.init.call(i,t,n),t=i.wrapper=i.element,n=i.options,i._initData(n),i._updateClasses(),i._animations(n),i.nextItemZIndex=100,i._tabindex(),i._focusProxy=g(i._focusHandler,i),t.on(z,te,i._focusProxy).on(h+y,ee,!1).on(h+y,te,g(i._click,i)).on(\"keydown\"+y,g(i._keydown,i)).on(\"focus\"+y,g(i._focus,i)).on(\"focus\"+y,\".k-content\",g(i._focus,i)).on(z+\" \"+m+y,\".k-content\",g(i._preventClose,i)).on(\"blur\"+y,g(i._removeHoverItem,i)).on(\"blur\"+y,\"[tabindex]\",g(i._checkActiveElement,i)).on(G+y,te,g(i._mouseenter,i)).on(N+y,te,g(i._mouseleave,i)).on(G+y+\" \"+N+y+\" \"+m+y+\" \"+h+y,ne,g(i._toggleHover,i)),n.openOnClick&&(i.clicked=!1,i._documentClickHandler=g(i._documentClick,i),e(document).click(i._documentClickHandler)),t.attr(\"role\",\"menubar\"),t[0].id&&(i._ariaId=p.format(\"{0}_mn_active\",t[0].id)),p.notify(i)},events:[x,I,S,U,D],options:{name:\"Menu\",animation:{open:{duration:200},close:{duration:100}},orientation:\"horizontal\",direction:\"default\",openOnClick:!1,closeOnClick:!0,hoverDelay:100,popupCollision:t},_initData:function(e){var t=this;e.dataSource&&(t.angular(\"cleanup\",function(){return{elements:t.element.children()}}),t.element.empty(),t.append(e.dataSource,t.element),t.angular(\"compile\",function(){return{elements:t.element.children()}}))},setOptions:function(e){var t=this.options.animation;this._animations(e),e.animation=f(!0,t,e.animation),\"dataSource\"in e&&this._initData(e),this._updateClasses(),C.fn.setOptions.call(this,e)},destroy:function(){var t=this;C.fn.destroy.call(t),t.element.off(y),t._documentClickHandler&&e(document).unbind(\"click\",t._documentClickHandler),p.destroy(t.element)},enable:function(e,t){return this._toggleDisabled(e,t!==!1),this},disable:function(e){return this._toggleDisabled(e,!1),this},append:function(e,t){t=this.element.find(t);var n=this._insert(e,t,t.length?t.find(\"> .k-menu-group, > .k-animation-container > .k-menu-group\"):null);return v(n.items,function(){n.group.append(this),s(this)}),s(t),a(n.group.find(\".k-first, .k-last\").add(n.items)),this},insertBefore:function(e,t){t=this.element.find(t);var n=this._insert(e,t,t.parent());return v(n.items,function(){t.before(this),s(this),a(this)}),a(t),this},insertAfter:function(e,t){t=this.element.find(t);var n=this._insert(e,t,t.parent());return v(n.items,function(){t.after(this),s(this),a(this)}),a(t),this},_insert:function(t,n,i){var o,s,a,l,p=this;return n&&n.length||(i=p.element),a=e.isPlainObject(t),l={firstLevel:i.hasClass(P),horizontal:i.hasClass(P+\"-horizontal\"),expanded:!0,length:i.children().length},n&&!i.length&&(i=e(ce.renderGroup({group:l})).appendTo(n)),a||e.isArray(t)?o=e(e.map(a?[t]:t,function(t,n){return\"string\"==typeof t?e(t).get():e(ce.renderItem({group:l,item:f(t,{index:n})})).get()})):(o=\"string\"==typeof t&&\"<\"!=t.charAt(0)?p.element.find(t):e(t),s=o.find(\"> ul\").addClass(\"k-menu-group\").attr(\"role\",\"menu\"),o=o.filter(\"li\"),o.add(s.find(\"> li\")).each(function(){r(this)})),{items:o,group:i}},remove:function(e){var t,n,i,o;return e=this.element.find(e),t=this,n=e.parentsUntil(t.element,J),i=e.parent(\"ul:not(.k-menu)\"),e.remove(),i&&!i.children(J).length&&(o=i.parent(\".k-animation-container\"),o.length?o.remove():i.remove()),n.length&&(n=n.eq(0),s(n),a(n)),t},open:function(o){var r=this,s=r.options,a=\"horizontal\"==s.orientation,l=s.direction,c=p.support.isRtl(r.wrapper);return o=r.element.find(o),/^(top|bottom|default)$/.test(l)&&(l=c?a?(l+\" left\").replace(\"default\",\"bottom\"):\"left\":a?(l+\" right\").replace(\"default\",\"bottom\"):\"right\"),o.siblings().find(\">.k-popup:visible,>.k-animation-container>.k-popup:visible\").each(function(){var t=e(this).data(\"kendoPopup\");t&&t.close()}),o.each(function(){var o=e(this);clearTimeout(o.data(A)),o.data(A,setTimeout(function(){var u,m,h,g,v,k,_,C,w=o.find(\".k-menu-group:first:hidden\");w[0]&&r._triggerEvent({item:o[0],type:x})===!1&&(!w.find(\".k-menu-group\")[0]&&w.children(\".k-item\").length>1?(m=e(window).height(),h=function(){w.css({maxHeight:m-(w.outerHeight()-w.height())-p.getShadows(w).bottom,overflow:\"auto\"})},p.support.browser.msie&&7>=p.support.browser.version?setTimeout(h,0):h()):w.css({maxHeight:\"\",overflow:\"\"}),o.data(R,o.css(R)),o.css(R,r.nextItemZIndex++),u=w.data(F),g=o.parent().hasClass(P),v=g&&a,k=i(l,g,c),_=s.animation.open.effects,C=_!==t?_:\"slideIn:\"+n(l,g),u?(u=w.data(F),u.options.origin=k.origin,u.options.position=k.position,u.options.animation.open.effects=C):u=w.kendoPopup({activate:function(){r._triggerEvent({item:this.wrapper.parent(),type:S})},deactivate:function(e){e.sender.element.removeData(\"targetTransform\").css({opacity:\"\"}),r._triggerEvent({item:this.wrapper.parent(),type:U})},origin:k.origin,position:k.position,collision:s.popupCollision!==t?s.popupCollision:v?\"fit\":\"fit flip\",anchor:o,appendTo:o,animation:{open:f(!0,{effects:C},s.animation.open),close:s.animation.close},close:function(e){var t=e.sender.wrapper.parent();r._triggerEvent({item:t[0],type:I})?e.preventDefault():(t.css(R,t.data(R)),t.removeData(R),d&&(t.removeClass(X),r._removeHoverItem()))}}).data(F),w.removeAttr(\"aria-hidden\"),u.open())},r.options.hoverDelay))}),r},close:function(t,n){var i=this,o=i.element;return t=o.find(t),t.length||(t=o.find(\">.k-item\")),t.each(function(){var t=e(this);!n&&i._isRootItem(t)&&(i.clicked=!1),clearTimeout(t.data(A)),t.data(A,setTimeout(function(){var e=t.find(\".k-menu-group:not(.k-list-container):not(.k-calendar-container):first:visible\").data(F);e&&(e.close(),e.element.attr(\"aria-hidden\",!0))},i.options.hoverDelay))}),i},_toggleDisabled:function(t,n){this.element.find(t).each(function(){e(this).toggleClass(V,n).toggleClass(q,!n).attr(\"aria-disabled\",!n)})},_toggleHover:function(t){var n=e(p.eventTarget(t)||t.target).closest(J),i=t.type==G||-1!==m.indexOf(t.type);n.parents(\"li.\"+q).length||n.toggleClass(X,i||\"mousedown\"==t.type||\"click\"==t.type),this._removeHoverItem()},_preventClose:function(){this.options.closeOnClick||(this._closurePrevented=!0)},_checkActiveElement:function(t){var n=this,i=e(t?t.currentTarget:this._hoverItem()),r=n._findRootParent(i)[0];this._closurePrevented||setTimeout(function(){document.hasFocus()&&(o(r,p._activeElement())||!t||o(r,t.currentTarget))||n.close(r)},0),this._closurePrevented=!1},_removeHoverItem:function(){var e=this._hoverItem();e&&e.hasClass(Y)&&(e.removeClass(Y),this._oldHoverItem=null)},_updateClasses:function(){var e,t=this.element,n=\".k-menu-init div ul\";t.removeClass(\"k-menu-horizontal k-menu-vertical\"),t.addClass(\"k-widget k-reset k-header k-menu-init \"+P).addClass(P+\"-\"+this.options.orientation),t.find(\"li > ul\").filter(function(){return!p.support.matchesSelector.call(this,n)}).addClass(\"k-group k-menu-group\").attr(\"role\",\"menu\").attr(\"aria-hidden\",t.is(\":visible\")).end().find(\"li > div\").addClass(\"k-content\").attr(\"tabindex\",\"-1\"),e=t.find(\"> li,.k-menu-group > li\"),t.removeClass(\"k-menu-init\"),e.each(function(){r(this)})},_mouseenter:function(t){var n=this,i=e(t.currentTarget),r=i.children(\".k-animation-container\").length||i.children($).length;t.delegateTarget==i.parents(Z)[0]&&(n.options.openOnClick&&!n.clicked||d||(L||B)&&t.originalEvent.pointerType in ae&&n._isRootItem(i.closest(J))||!o(t.currentTarget,t.relatedTarget)&&r&&n.open(i),(n.options.openOnClick&&n.clicked||W)&&i.siblings().each(g(function(e,t){n.close(t,!0)},n)))},_mouseleave:function(n){var i=this,r=e(n.currentTarget),s=r.children(\".k-animation-container\").length||r.children($).length;return r.parentsUntil(\".k-animation-container\",\".k-list-container,.k-calendar-container\")[0]?(n.stopImmediatePropagation(),t):(i.options.openOnClick||d||(L||B)&&n.originalEvent.pointerType in ae||o(n.currentTarget,n.relatedTarget||n.target)||!s||o(n.currentTarget,p._activeElement())||i.close(r),t)},_click:function(n){var i,o,r,s=this,a=s.options,l=e(p.eventTarget(n)),c=l[0]?l[0].nodeName.toUpperCase():\"\",u=\"INPUT\"==c||\"SELECT\"==c||\"BUTTON\"==c||\"LABEL\"==c,d=l.closest(\".\"+T),m=l.closest(J),h=d.attr(\"href\"),f=l.attr(\"href\"),g=e(\"<a href='#' />\").attr(\"href\"),v=!!h&&h!==g,k=v&&!!h.match(/^#/),_=!!f&&f!==g,C=a.openOnClick&&r&&s._isRootItem(m);if(!l.closest(se,m[0]).length){if(m.hasClass(q))return n.preventDefault(),t;if(n.handled||!s._triggerEvent({item:m[0],type:D})||u||n.preventDefault(),n.handled=!0,o=m.children(Q),r=o.is(\":visible\"),a.closeOnClick&&(!v||k)&&(!o.length||C))return m.removeClass(X).css(\"height\"),s._oldHoverItem=s._findRootParent(m),s.close(d.parentsUntil(s.element,J)),s.clicked=!1,-1!=\"MSPointerUp\".indexOf(n.type)&&n.preventDefault(),t;v&&n.enterKey&&d[0].click(),(s._isRootItem(m)&&a.openOnClick||p.support.touch||(L||B)&&s._isRootItem(m.closest(J)))&&(v||u||_||n.preventDefault(),s.clicked=!0,i=o.is(\":visible\")?I:x,(a.closeOnClick||i!=I)&&s[i](m))}},_documentClick:function(e){o(this.element[0],e.target)||(this.clicked=!1)},_focus:function(n){var i=this,o=n.target,r=i._hoverItem(),s=u();return o==i.wrapper[0]||e(o).is(\":kendoFocusable\")?(s===n.currentTarget&&(r.length?i._moveHover([],r):i._oldHoverItem||i._moveHover([],i.wrapper.children().first())),t):(n.stopPropagation(),e(o).closest(\".k-content\").closest(\".k-menu-group\").closest(\".k-item\").addClass(Y),i.wrapper.focus(),t)},_keydown:function(e){var n,i,o,r=this,s=e.keyCode,a=r._oldHoverItem,l=p.support.isRtl(r.wrapper);if(e.target==e.currentTarget||s==_.ESC){if(a||(a=r._oldHoverItem=r._hoverItem()),i=r._itemBelongsToVertival(a),o=r._itemHasChildren(a),s==_.RIGHT)n=r[l?\"_itemLeft\":\"_itemRight\"](a,i,o);else if(s==_.LEFT)n=r[l?\"_itemRight\":\"_itemLeft\"](a,i,o);else if(s==_.DOWN)n=r._itemDown(a,i,o);else if(s==_.UP)n=r._itemUp(a,i,o);else if(s==_.ESC)n=r._itemEsc(a,i);else if(s==_.ENTER||s==_.SPACEBAR)n=a.children(\".k-link\"),n.length>0&&(r._click({target:n[0],preventDefault:function(){},enterKey:!0}),r._moveHover(a,r._findRootParent(a)));else if(s==_.TAB)return n=r._findRootParent(a),r._moveHover(a,n),r._checkActiveElement(),t;n&&n[0]&&(e.preventDefault(),e.stopPropagation())}},_hoverItem:function(){return this.wrapper.find(\".k-item.k-state-hover,.k-item.k-state-focused\").filter(\":visible\")},_itemBelongsToVertival:function(e){var t=this.wrapper.hasClass(\"k-menu-vertical\");return e.length?e.parent().hasClass(\"k-menu-group\")||t:t},_itemHasChildren:function(e){return e.length?e.children(\"ul.k-menu-group, div.k-animation-container\").length>0:!1},_moveHover:function(t,n){var i=this,o=i._ariaId;t.length&&n.length&&t.removeClass(Y),n.length&&(n[0].id&&(o=n[0].id),n.addClass(Y),i._oldHoverItem=n,o&&(i.element.removeAttr(\"aria-activedescendant\"),e(\"#\"+o).removeAttr(\"id\"),n.attr(\"id\",o),i.element.attr(\"aria-activedescendant\",o)))},_findRootParent:function(e){return this._isRootItem(e)?e:e.parentsUntil(Z,\"li.k-item\").last()},_isRootItem:function(e){return e.parent().hasClass(P)},_itemRight:function(e,t,n){var i,o,r=this;if(!e.hasClass(q))return t?n?(r.open(e),i=e.find(\".k-menu-group\").children().first()):\"horizontal\"==r.options.orientation&&(o=r._findRootParent(e),r.close(o),i=o.nextAll(oe)):(i=e.nextAll(oe),i.length||(i=e.prevAll(re))),i&&!i.length?i=r.wrapper.children(\".k-item\").first():i||(i=[]),r._moveHover(e,i),i},_itemLeft:function(e,t){var n,i=this;return t?(n=e.parent().closest(\".k-item\"),i.close(n),i._isRootItem(n)&&\"horizontal\"==i.options.orientation&&(n=n.prevAll(oe))):(n=e.prevAll(oe),n.length||(n=e.nextAll(re))),n.length||(n=i.wrapper.children(\".k-item\").last()),i._moveHover(e,n),n},_itemDown:function(e,t,n){var i,o=this;if(t)i=e.nextAll(oe);else{if(!n||e.hasClass(q))return;o.open(e),i=e.find(\".k-menu-group\").children().first()}return!i.length&&e.length?i=e.parent().children().first():e.length||(i=o.wrapper.children(\".k-item\").first()),o._moveHover(e,i),i},_itemUp:function(e,t){var n,i=this;if(t)return n=e.prevAll(oe),!n.length&&e.length?n=e.parent().children().last():e.length||(n=i.wrapper.children(\".k-item\").last()),i._moveHover(e,n),n},_itemEsc:function(e,t){var n,i=this;return t?(n=e.parent().closest(\".k-item\"),i.close(n),i._moveHover(e,n),n):e},_triggerEvent:function(e){var t=this;return t.trigger(e.type,{type:e.type,item:e.item})},_focusHandler:function(t){var n=this,i=e(p.eventTarget(t)).closest(J);setTimeout(function(){n._moveHover([],i),i.children(\".k-content\")[0]&&i.parent().closest(\".k-item\").removeClass(Y)},200)},_animations:function(e){e&&\"animation\"in e&&!e.animation&&(e.animation={open:{effects:{}},close:{hide:!0,effects:{}}})}});f(ce,{renderItem:function(e){e=f({menu:{},group:{}},e);var t=le.empty,n=e.item;return le.item(f(e,{image:n.imageUrl?le.image:t,sprite:n.spriteCssClass?le.sprite:t,itemWrapper:le.itemWrapper,renderContent:ce.renderContent,arrow:n.items||n.content?le.arrow:t,subGroup:ce.renderGroup},pe))},renderGroup:function(e){return le.group(f({renderItems:function(e){for(var t=\"\",n=0,i=e.items,o=i?i.length:0,r=f({length:o},e.group);o>n;n++)t+=ce.renderItem(f(e,{group:r,item:f({index:n},i[n])}));return t}},e,pe))},renderContent:function(e){return le.content(f(e,pe))}}),l=ce.extend({init:function(t,n){var i=this;ce.fn.init.call(i,t,n),i._marker=p.guid().substring(0,8),i.target=e(i.options.target),i._popup(),i._wire()},options:{name:\"ContextMenu\",filter:null,showOn:\"contextmenu\",orientation:\"vertical\",alignToAnchor:!1,target:\"body\"},events:[x,I,S,U,D],setOptions:function(t){var n=this;ce.fn.setOptions.call(n,t),n.target.off(n.showOn+y+n._marker,n._showProxy),n.userEvents&&n.userEvents.destroy(),n.target=e(n.options.target),t.orientation&&n.popup.wrapper[0]&&n.popup.element.unwrap(),n._wire(),ce.fn.setOptions.call(this,t)},destroy:function(){var e=this;e.target.off(e.options.showOn+y+e._marker),j.off(p.support.mousedown+y+e._marker,e._closeProxy),e.userEvents&&e.userEvents.destroy(),ce.fn.destroy.call(e)},open:function(n,i){var r=this;return n=e(n)[0],o(r.element[0],e(n)[0])?ce.fn.open.call(r,n):r._triggerEvent({item:r.element,type:x})===!1&&(r.popup.visible()&&r.options.filter&&(r.popup.close(!0),r.popup.element.kendoStop(!0)),i!==t?(r.popup.wrapper.hide(),r.popup.open(n,i)):(r.popup.options.anchor=(n?n:r.popup.anchor)||r.target,r.popup.element.kendoStop(!0),r.popup.open()),j.off(r.popup.downEvent,r.popup._mousedownProxy),j.on(p.support.mousedown+y+r._marker,r._closeProxy)),r},close:function(){var t=this;o(t.element[0],e(arguments[0])[0])?ce.fn.close.call(t,arguments[0]):t.popup.visible()&&t._triggerEvent({item:t.element,type:I})===!1&&(t.popup.close(),j.off(p.support.mousedown+y,t._closeProxy),t.unbind(D,t._closeTimeoutProxy))},_showHandler:function(e){var t,n=e,i=this,r=i.options;e.event&&(n=e.event,n.pageX=e.x.location,n.pageY=e.y.location),o(i.element[0],e.relatedTarget||e.target)||(i._eventOrigin=n,n.preventDefault(),n.stopImmediatePropagation(),i.element.find(\".\"+Y).removeClass(Y),(r.filter&&p.support.matchesSelector.call(n.currentTarget,r.filter)||!r.filter)&&(r.alignToAnchor?(i.popup.options.anchor=n.currentTarget,i.open(n.currentTarget)):(i.popup.options.anchor=n.currentTarget,i._targetChild?(t=i.target.offset(),i.open(n.pageX-t.left,n.pageY-t.top)):i.open(n.pageX,n.pageY))))},_closeHandler:function(t){var n,i=this,r=e(t.relatedTarget||t.target),s=r.closest(i.target.selector)[0]==i.target[0],a=r.closest(te).children(Q),l=o(i.element[0],r[0]);i._eventOrigin=t,n=3!==t.which,i.popup.visible()&&(n&&s||!s)&&(i.options.closeOnClick&&!a[0]&&l||!l)&&(l?(this.unbind(D,this._closeTimeoutProxy),i.bind(D,i._closeTimeoutProxy)):i.close())},_wire:function(){var e=this,t=e.options,n=e.target;e._showProxy=g(e._showHandler,e),e._closeProxy=g(e._closeHandler,e),e._closeTimeoutProxy=g(e.close,e),n[0]&&(p.support.mobileOS&&\"contextmenu\"==t.showOn?(e.userEvents=new p.UserEvents(n,{filter:t.filter,allowSelection:!1}),n.on(t.showOn+y+e._marker,!1),e.userEvents.bind(\"hold\",e._showProxy)):t.filter?n.on(t.showOn+y+e._marker,t.filter,e._showProxy):n.on(t.showOn+y+e._marker,e._showProxy))},_triggerEvent:function(n){var i=this,o=e(i.popup.options.anchor)[0],r=i._eventOrigin;return i._eventOrigin=t,i.trigger(n.type,f({type:n.type,item:n.item||this.element[0],target:o},r?{event:r}:{}))},_popup:function(){var e=this;e._triggerProxy=g(e._triggerEvent,e),e.popup=e.element.addClass(\"k-context-menu\").kendoPopup({anchor:e.target||\"body\",copyAnchorStyles:e.options.copyAnchorStyles,collision:e.options.popupCollision||\"fit\",animation:e.options.animation,activate:e._triggerProxy,deactivate:e._triggerProxy}).data(\"kendoPopup\"),e._targetChild=o(e.target[0],e.popup.element[0])}}),c.plugin(ce),c.plugin(l)}(window.kendo.jQuery),window.kendo},\"function\"==typeof define&&define.amd?define:function(e,t,n){(n||t)()});\n//# sourceMappingURL=kendo.menu.min.js.map\n","import * as userActions from \"./user.actions\";\nimport { Record, List, Map, fromJS, getIn, OrderedMap } from \"immutable\";\nimport { fromJSON, IUserRecord, UserRecord } from \"../records/UserRecord\";\nimport { reducer as orgReducer } from \"app2/src/reducers/org.reducer\";\nimport { Actions as orgActions } from \"app2/src/reducers/org.actions\";\nimport { RootState, RootActions } from \"app2/src/reducers\";\nimport { reducer as accessReducer } from \"app2/src/reducers/access.reducer\";\nimport { Actions as accessActions } from \"app2/src/reducers/access.actions\";\nimport { mergeDeepOverwriteArrays } from \"app2/src/helpers/ImmutableData\";\nimport { Nullable } from \"app2/src/records\";\nimport { CrmUserType } from \"app2/src/records/integrations/CrmUser\";\n\nexport class AclByUserAccess extends Record({\n  loading: Map<string, boolean>(),\n  acl: Map<string, Map<string, Map<string, List<string>>>>(),\n  templates: Map<string, Map<string, List<any>>>(),\n}) {\n  public readonly loading!: Map<string, boolean>;\n  public readonly acl!: Map<string, Map<string, Map<string, List<string>>>>;\n  public readonly templates!: Map<string, Map<string, List<any>>>;\n}\n\nexport const UserStateRecord = Record({\n  currentUser: null as Nullable<UserRecord>,\n  usersById: Map<number, IUserRecord>(),\n  lastSavedById: Map<number, IUserRecord>(),\n  crmUserCheckByOrgId: Map<number, Map<CrmUserType, boolean>>(),\n  allowedAclByUserAccess: new AclByUserAccess(),\n});\n\nexport const initialState = UserStateRecord();\n\nexport type UserState = typeof initialState;\n\nexport const model = \"users\";\nexport const reducer = (state: RootState, action: RootActions): RootState => {\n  if (state && !state.get(model)) {\n    state = state.set(model, initialState);\n  }\n\n  switch (action.type) {\n    case userActions.SET_USER:\n      const immutableUser = fromJSON(action.payload);\n      // if this user already exists, we should merge the data in so as to\n      // not overwrite any data\n      if (state.getIn([model, \"usersById\", action.payload.id])) {\n        const currentUser = state.getIn([model, \"usersById\", action.payload.id]);\n        const accesses = currentUser.accesses;\n        let mergedUser = mergeDeepOverwriteArrays(currentUser, immutableUser);\n\n        mergedUser = mergedUser.set(\n          \"accesses\",\n          List(new Set(accesses.toArray().concat(mergedUser.accesses.toArray()))),\n        );\n\n        state = state\n          .setIn([model, \"usersById\", action.payload.id], mergedUser)\n          .setIn([model, \"lastSavedById\", action.payload.id], mergedUser);\n      } else {\n        state = state\n          .setIn([model, \"usersById\", action.payload.id], immutableUser)\n          .setIn([model, \"lastSavedById\", action.payload.id], immutableUser);\n      }\n\n      if (action.payload.accesses?.length > 0) {\n        action.payload.accesses.forEach((access) => {\n          state = accessReducer(state, accessActions.setAccess(access.id, access));\n        });\n      }\n      return state;\n\n    case userActions.SET_USER_LOADED:\n      if (getIn(state, [model, \"usersById\", action.payload.userId, \"loading\"], false)) {\n        return state.setIn([model, \"usersById\", action.payload.userId, \"loading\"], false);\n      }\n\n      return state;\n\n    case userActions.RESET_USER: {\n      const currentUser = state.getIn([model, \"usersById\", action.payload.userId]);\n      currentUser.accesses.forEach((a) => {\n        state = accessReducer(state, accessActions.resetAccess(a.id));\n      });\n      return state.setIn(\n        [model, \"usersById\", action.payload.userId],\n        state.getIn([model, \"lastSavedById\", action.payload.userId]),\n      );\n    }\n\n    case userActions.SET_CURRENT_USER:\n      if (action.payload) {\n        const user = { ...action.payload };\n        if (user.accesses) {\n          user.accesses.forEach((access) => {\n            if (access.org) state = orgReducer(state, orgActions.setOrg(access.org));\n            delete access.org;\n            state = accessReducer(state, accessActions.setAccess(access.id, access));\n          });\n          user.accesses = user.accesses.map((a) => a.id);\n        }\n        if (user.org) {\n          state = orgReducer(state, orgActions.setOrg(user.org));\n          delete user.org;\n        }\n        // @ts-ignore\n        const userRecord = fromJSON(user);\n        return state.setIn([model, \"currentUser\"], userRecord).setIn([model, \"usersById\", user.id], userRecord);\n      } else {\n        const id = state.getIn([\"user\", \"currentUser\", \"id\"]);\n        return state.setIn([model, \"currentUser\"], null).deleteIn([model, \"usersById\", id]);\n      }\n\n    case userActions.FETCH_USER:\n      if (state.getIn([model, \"usersById\", action.payload])) {\n        return state.setIn([model, \"usersById\", action.payload, \"loading\"], true);\n      }\n      return state.setIn([model, \"usersById\", action.payload], new UserRecord({ id: action.payload, loading: true }));\n\n    case userActions.RECEIVE_USERS:\n      action.payload.users.forEach((u) => {\n        state = reducer(state, userActions.Actions.setUser(u));\n      });\n      return state;\n\n    case userActions.SET_CRM_USER_CHECK:\n      return state.setIn(\n        [model, \"crmUserCheckByOrgId\", action.payload.orgId, action.payload.crmUserType],\n        action.payload.result,\n      );\n\n    case userActions.UPDATE_FORM:\n      const { rootPath, name, value } = action.payload.event;\n      return state.setIn(rootPath.concat(name.split(\".\")), value);\n\n    case userActions.FETCH_ALLOWED_ACL:\n      return state.setIn(\n        [model, \"allowedAclByUserAccess\", \"loading\", `${action.payload.userId}:${action.payload.accessUid}`],\n        true,\n      );\n\n    case userActions.RECEIVE_ALLOWED_ACL:\n      const userIdAccessUid = `${action.payload.userId}:${action.payload.accessUid}`;\n      return state\n        .setIn([model, \"allowedAclByUserAccess\", \"loading\", userIdAccessUid], false)\n        .setIn(\n          [model, \"allowedAclByUserAccess\", \"acl\", userIdAccessUid, action.payload.template || \"none\"],\n          fromJS(action.payload.acl.acl),\n        )\n        .setIn(\n          [model, \"allowedAclByUserAccess\", \"templates\", userIdAccessUid, action.payload.template || \"none\"],\n          fromJS(action.payload.acl.templates),\n        );\n\n    case userActions.ADD_ACCESSES: {\n      const { userId, accessIds } = action.payload;\n      if (!state.getIn([model, \"usersById\", userId])) {\n        const userRecord = fromJSON({ id: userId }).set(\"accesses\", List(accessIds));\n        return state\n          .setIn([model, \"usersById\", userId], userRecord)\n          .setIn([model, \"lastSavedById\", userId], userRecord);\n      }\n      return state\n        .updateIn([model, \"usersById\", userId, \"accesses\"], List(), (accesses: List<number>) => {\n          return List(new Set(accesses.toArray().concat(accessIds)));\n        })\n        .updateIn([model, \"lastSavedById\", userId, \"accesses\"], List(), (accesses: List<number>) => {\n          return List(new Set(accesses.toArray().concat(accessIds)));\n        });\n    }\n    default:\n      return state;\n  }\n};\n","import { Record, List } from \"immutable\";\nimport {\n  fromJSON as eclFromJSON,\n  IEstimateComparisonLinkData,\n  EstimateComparisonLinkRecord,\n} from \"./EstimateComparisonLink\";\n\nexport const fromJSON = (json: Partial<IEstimateComparisonData>): EstimateComparisonRecord => {\n  const record: IEstimateComparisonRecord = { ...(json as any) };\n  if (json.estimate_comparison_links) {\n    record.estimate_comparison_links = List(json.estimate_comparison_links.map((ecl) => eclFromJSON(ecl)));\n  }\n\n  return new EstimateComparisonRecord(record);\n};\n\nexport const toJSON = (ec: EstimateComparisonRecord): IEstimateComparisonData => {\n  return ec.toJS();\n};\n\nexport interface IEstimateComparisonData {\n  id: number;\n  job_id: number;\n  estimate_comparison_links: IEstimateComparisonLinkData[];\n  show: boolean;\n  loading: boolean;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IEstimateComparisonRecord {\n  id: number;\n  job_id: number;\n  estimate_comparison_links: List<EstimateComparisonLinkRecord>;\n  show: boolean;\n  loading: boolean;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport const defaultEstimateComparisonProps: IEstimateComparisonRecord = {\n  id: 0,\n  job_id: -1,\n  estimate_comparison_links: List<EstimateComparisonLinkRecord>(),\n  show: false,\n  loading: false,\n  created_at: null,\n  updated_at: null,\n};\n\nexport class EstimateComparisonRecord\n  extends Record(defaultEstimateComparisonProps)\n  implements IEstimateComparisonRecord\n{\n  public id!: number;\n  public readonly job_id!: number;\n  public readonly estimate_comparison_links!: List<EstimateComparisonLinkRecord>;\n  public readonly show!: boolean;\n  public readonly loading!: boolean;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public constructor(values?: Partial<IEstimateComparisonRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { Record, List } from \"immutable\";\nimport { checkDate, Nullable } from \".\";\nimport { ITaskData } from \"app2/src/records/Task\";\n\nexport const fromJSON = (json: Partial<IReportData>): ReportRecord => {\n  const data: Partial<IReportData> = { ...(json as any) };\n  if (data.task) {\n    data.task_id = data.task.id;\n  }\n\n  if (data.created_at) {\n    data.created_at = checkDate(json.created_at);\n  }\n\n  if (data.updated_at) {\n    data.updated_at = checkDate(json.updated_at);\n  }\n  return new ReportRecord(data);\n};\n\nexport const toJSON = (record: ReportRecord): IReportData => {\n  return record.toJS();\n};\n\nexport type ReportKind = \"roofing\" | \"walls\" | \"hail\" | \"wind\" | \"lightning\" | \"permit\" | \"ortho_image\" | \"interior\";\nexport type ReportProvider = \"wvs\" | \"eagleview\" | \"quick_measure\" | \"roof_scope\" | \"plnar\";\nexport type ReportStatus =\n  | \"created\"\n  | \"ordered\"\n  | \"exception\"\n  | \"canceled\"\n  | \"complete\"\n  | \"paid\"\n  | \"refunded\"\n  | \"partially_refunded\";\n\nexport interface IReportData {\n  id: number;\n  kind: ReportKind;\n  provider: ReportProvider;\n  status: ReportStatus;\n  metadata: any;\n  order_data: any;\n  order_result: any;\n  user_id: Nullable<number>;\n  org_id: Nullable<number>;\n  job_id: Nullable<number>;\n  task?: ITaskData;\n  task_id?: string;\n  loading?: boolean;\n\n  delivered_at: Date;\n  created_at: Date;\n  updated_at: Date;\n}\n\nexport interface IReportRecord {\n  id: number;\n  kind: ReportKind;\n  provider: ReportProvider;\n  status: ReportStatus;\n  metadata: any;\n  order_data: any;\n  order_result: any;\n  user_id: Nullable<number>;\n  org_id: Nullable<number>;\n  job_id: Nullable<number>;\n  task_id: Nullable<string>;\n  loading: boolean;\n  errors: List<string>;\n\n  delivered_at: Date;\n  created_at: Date;\n  updated_at: Date;\n}\n\nconst defaultReportProps: IReportRecord = {\n  id: 0,\n  kind: null,\n  provider: null,\n  status: null,\n  metadata: {},\n  order_data: {},\n  order_result: {},\n  user_id: null,\n  org_id: null,\n  job_id: null,\n  task_id: null,\n  loading: false,\n  errors: List<string>(),\n  delivered_at: new Date(),\n  created_at: new Date(),\n  updated_at: new Date(),\n};\n\nexport class ReportRecord extends Record(defaultReportProps) implements IReportRecord {\n  public readonly id!: number;\n  public readonly kind!: ReportKind;\n  public readonly provider!: ReportProvider;\n  public readonly status!: ReportStatus;\n  public readonly metadata!: any;\n  public readonly order_data!: any;\n  public readonly order_result!: any;\n  public readonly user_id!: Nullable<number>;\n  public readonly org_id!: Nullable<number>;\n  public readonly job_id!: Nullable<number>;\n  public readonly task_id!: Nullable<string>;\n  public readonly loading!: boolean;\n  public readonly errors!: List<string>;\n\n  public readonly delivered_at!: Date;\n  public readonly created_at!: Date;\n  public readonly updated_at!: Date;\n\n  public constructor(values?: Partial<IReportRecord>) {\n    if (values) {\n      super(values);\n    } else {\n      super();\n    }\n  }\n}\n","import { ActionsUnion, createAction } from \"./Utils\";\nimport { IWindowData } from \"../records/Window\";\nimport { List } from \"immutable\";\n\nexport const RECEIVE_WINDOW = \"@windows/RECEIVE_WINDOW\";\nexport const EDIT_WINDOW = \"@windows/EDIT_WINDOW\";\nexport const RESET_WINDOWS = \"@windows/RESET_WINDOWS\";\nexport const UPDATE_FORM = \"@windows/UPDATE_FORM\";\n\nexport const Actions = {\n  receiveWindow: (window: Partial<IWindowData>) => createAction(RECEIVE_WINDOW, { window }),\n  editWindow: (window: Partial<IWindowData>) => createAction(EDIT_WINDOW, { window }),\n  resetWindows: (windowIds: List<number>) => createAction(RESET_WINDOWS, { windowIds }),\n  updateForm: (event: { rootPath: any; name: string; value: any }) => createAction(UPDATE_FORM, { event }),\n};\n\nexport type Actions = ActionsUnion<typeof Actions>;\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { emptyOrgValue, OrgRecord } from \"../records/OrgRecord\";\nimport { getIn, get, Map } from \"immutable\";\nimport { navDisplay } from \"app2/src/selectors/components/common.selectors\";\nimport { recordChanged } from \"app2/src/helpers/Record\";\nimport { customForm } from \"app2/src/selectors/customForm.selectors\";\n\nexport const byId = (state: RootState) => state.getIn([\"orgs\", \"orgsById\"]);\nexport const lastSavedOrg = (state: RootState, _props?: any) =>\n  state.getIn([\"orgs\", \"lastSavedOrgsById\", currentOrgId(state)]);\n\n/**\n * Returns the currentOrgId\n * Org ID of the current view, Job page = job.org_id, Admin page = org in current view, otherwise null\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {number} org id\n */\nexport const currentOrgId = (state: RootState): number => state.getIn([\"orgs\", \"currentOrgId\"]);\n\n/**\n * Loads the current org using currentOrgId\n *\n * @param {RootState} state The RootState\n * @param {{}} options\n * @returns {OrgRecord} OrgRecord\n */\nexport const currentOrg = createSelector([currentOrgId, byId], (orgId, byId): OrgRecord => {\n  return get(byId, orgId);\n});\n\n/**\n * Loads the settings config with a path (if provided)\n *\n * @param {RootState} state The RootState\n * @param {{orgId: number, path: string[], notSet?: any}} options\n * @returns {string | number} settings config\n */\nexport const settingsConfig = (state: RootState, props: any) => {\n  if (props?.path) {\n    return getIn(\n      state,\n      [\"orgs\", \"orgsById\", props.orgId, \"settings\", \"config\"].concat(props.path),\n      props?.notSet || \"\",\n    );\n  }\n  return state.getIn([\"orgs\", \"orgsById\", props.orgId, \"settings\", \"config\"]);\n};\n\n/**\n * Loads the preferences config with a path (if provided)\n *\n * @param {RootState} state The RootState\n * @param {{orgId: number, path: string[], notSet?: any}} options\n * @returns {string | number} preferences config\n */\nexport const preferencesConfig = (state: RootState, props: any) => {\n  if (props?.path) {\n    return getIn(\n      state,\n      [\"orgs\", \"orgsById\", props.orgId, \"preferences\", \"config\"].concat(props.path),\n      props?.notSet || \"\",\n    );\n  }\n\n  return state.getIn([\"orgs\", \"orgsById\", props.orgId, \"preferences\", \"config\"]);\n};\n\n/**\n * Loads the preferences config with a path (if provided) using currentOrgId\n *\n * @param {RootState} state The RootState\n * @param {{orgId: number, path: string[], notSet?: any}} options\n * @returns {string | number} preferences config\n */\nexport const currentOrgPrefConfig = createSelector(\n  [currentOrg, (state, props) => ({ state, props })],\n  (org, stateProps) => {\n    const { props } = stateProps;\n    return getIn(org, [\"preferences\", \"config\"].concat(props.path || []), undefined);\n  },\n);\n\nexport const jobResultingOrgPrefConfig = (state: RootState) => {\n  return currentOrgPrefConfig(state, { path: [\"job_resulting\"] });\n};\n\nexport const jobResultingOption = createSelector(\n  [jobResultingOrgPrefConfig, customForm],\n  (config: any, customForm: any) => {\n    return config\n      ?.get(\"options\")\n      ?.find((option: any) => option?.get(\"name\") === customForm?.getIn([\"form_data\", \"result\"]));\n  },\n);\n\nexport const jobResultingOptionWithProcessedSchema = createSelector([jobResultingOption], (option: any) => {\n  if (!option) return option;\n\n  const baseSchema = option.get(\"schema\")?.toJS();\n  const baseUiSchema = option.get(\"uiSchema\")?.toJS();\n\n  if (!baseSchema) return option;\n\n  // Process schema to move required fields and add hidden result field\n  const processedSchema = {\n    ...baseSchema,\n    properties: {\n      ...baseSchema.properties,\n      result: { type: \"string\" },\n    },\n  };\n\n  // Extract required fields from individual field properties\n  const requiredFields: string[] = [];\n  if (processedSchema.properties) {\n    Object.keys(processedSchema.properties).forEach((fieldName) => {\n      const field = processedSchema.properties[fieldName];\n      if (field && field.required === true) {\n        requiredFields.push(field.fieldName || fieldName);\n        // Remove the non-standard required property\n        delete field.required;\n      }\n    });\n  }\n\n  // Set the required array at schema root level (RSJF standard)\n  if (requiredFields.length > 0) {\n    processedSchema.required = requiredFields;\n  }\n\n  // Process uiSchema to add hidden result field\n  const processedUiSchema = baseUiSchema\n    ? {\n        ...baseUiSchema,\n        result: { \"ui:widget\": \"hidden\" },\n        // Add result to ui:order if it exists\n        ...(baseUiSchema[\"ui:order\"]\n          ? {\n              \"ui:order\": [...(baseUiSchema[\"ui:order\"] || []), \"result\"],\n            }\n          : {}),\n      }\n    : baseUiSchema;\n\n  return option.set(\"schema\", Map(processedSchema)).set(\"uiSchema\", Map(processedUiSchema));\n});\n\n/**\n * Loads the preferences acl with a path (if provided)\n *\n * @param {RootState} state The RootState\n * @param {{orgId: number, path: string[], notSet?: any}} options\n * @returns {string | number} preferences acl\n */\nexport const preferencesAcl = (state: RootState, props: any) => {\n  if (props?.path) {\n    return getIn(\n      state,\n      [\"orgs\", \"orgsById\", props.orgId, \"preferences\", \"acl\"].concat(props.path),\n      props?.notSet || \"\",\n    );\n  }\n\n  return state.getIn([\"orgs\", \"orgsById\", props.orgId, \"preferences\", \"acl\"]);\n};\n\n/**\n * Loads the preferences acl with a path (if provided) using currentOrgId\n *\n * @param {RootState} state The RootState\n * @param {{orgId: number, path: string[], notSet?: any}} options\n * @returns {string | number} preferences acl\n */\nexport const currentOrgPrefAcl = createSelector(\n  [currentOrg, (state, props) => ({ state, props })],\n  (org, stateProps) => {\n    const { props } = stateProps;\n    return getIn(org, [\"preferences\", \"acl\"].concat(props.path || []), undefined);\n  },\n);\n\n/**\n * Loads the settings acl with a path (if provided) using currentOrgId\n *\n * @param {RootState} state The RootState\n * @param {{orgId: number, path: string[], notSet?: any}} options\n * @returns {string | number} preferences config\n */\nexport const currentOrgSettingsAcl = createSelector(\n  [currentOrg, (state, props) => ({ state, props })],\n  (org, stateProps) => {\n    const { props } = stateProps;\n    return getIn(org, [\"settings\", \"acl\"].concat(props.path || []), undefined);\n  },\n);\n\nexport const currentOrgSettingsConfig = createSelector(\n  [currentOrg, (state, props) => ({ state, props })],\n  (org, stateProps) => {\n    const { props } = stateProps;\n    return getIn(org, [\"settings\", \"config\"].concat(props.path || []), props.default || undefined);\n  },\n);\n\nexport const orgLoading = (state: RootState, _props?: any) =>\n  state.getIn([\"orgs\", \"orgsById\", currentOrgId(state), \"loading\"]);\n\nexport const org = createSelector([byId, (state, props) => ({ state, props })], (byId, stateAndParams: any) => {\n  const { props } = stateAndParams;\n  if (!props.orgId) {\n    return emptyOrgValue;\n  }\n\n  if (!byId.get(props.orgId)) {\n    return emptyOrgValue;\n  }\n\n  return byId.get(props.orgId);\n});\n\n/**\n * Did the org change? Did not use createSelector since ID is not passed in as a prop\n *\n * @param {RootState} state The RootState\n * @returns {boolean}\n */\nexport const orgChanged = (state: RootState, _props?: any) => recordChanged(currentOrg(state), lastSavedOrg(state));\n\nexport const getTitle = createSelector(\n  [currentOrgId, (state, props) => ({ state, props })],\n  (orgId, stateProps: any) => {\n    const { state, props } = stateProps;\n    const { documentType } = props;\n\n    const title = preferencesConfig(state, { orgId, path: [\"titles\", documentType] });\n\n    let val = \"\";\n\n    switch (documentType) {\n      case \"contract\":\n        val = title ? title : \"Agreement\";\n        break;\n      case \"estimate\":\n        val = title ? title : \"Proposal\";\n        break;\n      case \"opening_name\":\n        val = title ? title : \"Name\";\n        break;\n      case \"estimator\":\n        val = title ? title : \"Estimate\";\n        break;\n      case \"inspection\":\n        val = title ? title : \"Inspection\";\n        break;\n    }\n\n    return val;\n  },\n);\n\nexport const estimateTitle = (state: RootState): string => {\n  return getTitle(state, { documentType: \"estimate\" });\n};\n\nexport const contractTitle = (state: RootState): string => {\n  return getTitle(state, { documentType: \"contract\" });\n};\n\nexport const inspectionTitle = (state: RootState): string => {\n  return getTitle(state, { documentType: \"inspection\" });\n};\n\n/**\n * Returns true/false depending on presentation mode and preferences config\n * supported preferences config: never/always/customer_only/company_only\n *\n * @param {RootState} state The RootState\n * @param {{path: string[], notSet: boolean}} options\n * @returns {boolean} boolean\n */\nexport const presentModePreferencesConfig = createSelector(\n  [(state, props) => currentOrgPrefConfig(state, props), navDisplay, (state, props) => ({ state, props })],\n  (config, editMode, stateProps) => {\n    const { props } = stateProps;\n    if (config == null) {\n      if (props.notSet === undefined) return false;\n\n      return props.notSet;\n    }\n\n    if (editMode) {\n      return [\"always\", \"company_only\"].includes(config);\n    } else {\n      return [\"always\", \"customer_only\"].includes(config);\n    }\n  },\n);\n","import { RootState } from \"app2/src/reducers\";\nimport { createSelector } from \"reselect\";\nimport { currentOrgPrefConfig } from \"./org.selectors\";\n\n/**\n * Gets the showExactValues flag from price presentation state\n *\n * @param {RootState} state The RootState\n * @returns {boolean} True if exact values should be shown, false otherwise\n */\nexport const exactValues = (state: RootState) => state.get(\"pricePresentation\").get(\"showExactValues\");\n\n/**\n * Gets the precision to use for displaying values based on exactValues setting\n *\n * @param {RootState} state The RootState\n * @returns {number} 2 if exactValues is true, 0 otherwise\n */\nexport const precisionExactValues = (state: RootState) => (exactValues(state) ? 2 : 0);\n\n/**\n * Gets the financing record from price presentation state\n *\n * @param {RootState} state The RootState\n * @returns {FinancingRecord} The financing record containing downPayment, minPayment, and maxPayment\n */\nexport const financing = (state: RootState) => state.get(\"pricePresentation\").get(\"financing\");\n\n/**\n * Gets the down payment value from the financing record\n *\n * @param {RootState} state The RootState\n * @returns {number} The down payment amount\n */\nexport const downPayment = (state: RootState) => financing(state).get(\"downPayment\");\n\n/**\n * Gets the current slide index from price presentation state\n *\n * @param {RootState} state The RootState\n * @returns {number} The current slide index\n */\nexport const currentSlideIndex = (state: RootState) => state.get(\"pricePresentation\").get(\"currentSlideIndex\");\n\n/**\n * Gets the list of estimate IDs for each slide from price presentation state\n *\n * @param {RootState} state The RootState\n * @returns {List<number>} List of estimate IDs corresponding to each slide\n */\nexport const slideEstimateIds = (state: RootState) => state.get(\"pricePresentation\").get(\"slideEstimateIds\");\n\n/**\n * Gets the estimate ID for the current slide\n *\n * @param {RootState} state The RootState\n * @returns {number | undefined} The estimate ID for the current slide, or undefined if not found\n */\nexport const currentSlideEstimateId = createSelector([currentSlideIndex, slideEstimateIds], (index, ids) => {\n  return ids.get(index);\n});\n\n/**\n * Gets the enhanced price presentation configuration from org preferences\n *\n * @param {RootState} state The RootState\n * @returns {Map<string, any> | undefined} The enhanced price presentation configuration object\n */\nexport const enhancedPricePresentationConfig = (state: RootState) => {\n  return currentOrgPrefConfig(state, { path: [\"enhanced_price_presentation\"] });\n};\n\n/**\n * Gets the slide configurations from the enhanced price presentation config\n *\n * @param {RootState} state The RootState\n * @returns {List<any> | undefined} List of slide configuration objects, or undefined if not set\n */\nexport const slideConfigs = createSelector([enhancedPricePresentationConfig], (config) => {\n  return config?.get(\"slides\");\n});\n\n/**\n * Gets the discount groups from price presentation state\n *\n * @param {RootState} state The RootState\n * @returns {List<List<string>>} List of discount groups, where each group is a list of discount UUIDs\n */\nexport const discountGroups = (state: RootState) => {\n  return state.get(\"pricePresentation\").get(\"estimateDiscountGroups\");\n};\n\n/**\n * Gets the discount group containing a specific discount UUID\n *\n * @param {RootState} state The RootState\n * @param {{ discountUuid: string }} props Object containing the discount UUID to search for\n * @returns {List<string> | undefined} The discount group containing the UUID, or undefined if not found\n */\nexport const discountGroupContaining = createSelector(\n  [discountGroups, (_, { discountUuid }) => discountUuid],\n  (groups, discountUuid) => {\n    return groups.find((group) => group.includes(discountUuid));\n  },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"rsf-app:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkrsf_app\"] = self[\"webpackChunkrsf_app\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [121], () => (__webpack_require__(78205)))\nvar __webpack_exports__ = __webpack_require__.O(undefined, [121], () => (__webpack_require__(4577)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["activatedPriceList","state","props","getIn","activatedPriceListId","Map","rootKey","room","roomId","toString","rooms","stateProps","roomIds","map","id","lastSavedRooms","lastSavedRoom","roomsChanged","measurement","lastSavedMeasurement","get","List","currentMeasurementRooms","room_ids","define","e","n","t","x","location","i","y","o","r","s","a","center","distance","Math","sqrt","originalEvent","currentTarget","c","api","push","event","target","type","match","changedTouches","length","identifier","pointers","msPointers","pointerId","eventMap","up","split","window","kendo","support","Class","Observable","u","now","h","extend","l","mobileOS","p","android","d","f","browser","msie","v","g","m","_","T","M","w","k","D","C","b","touch","mouse","pointer","A","mouseAndTouchPresent","I","init","this","axis","_updateLocationData","startLocation","velocity","delta","timeStamp","move","initialDelta","client","screen","S","useClickAsTap","threshold","userEvents","initialTouch","pressEvent","_moved","_finished","press","_holdTimeout","setTimeout","proxy","minHold","_trigger","_hold","_withinIgnoreThreshold","P","current","dispose","_start","end","endTime","clearTimeout","touches","splice","inArray","skip","cancel","isMoved","startTime","notify","preventDefault","guid","filter","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","delayedClick","eventNS","handler","fn","call","element","surface","global","ownerDocument","documentElement","stopPropagation","pressed","on","applyEventMap","version","css","touchAction","preventDragEvent","root","eventCapture","preventIfMoving","addEventListener","bind","_isMoved","destroy","_destroyed","removeEventListener","kendoDestroy","removeData","_disposeAll","unbind","capture","trigger","_isMultiTouch","_apiCall","_maxTouchesReached","pop","grep","_select","which","_move","_eachTouch","_end","_click","pageX","clientX","pageY","clientY","noop","defaultThreshold","getTouches","touchDelta","UserEvents","jQuery","estimateTemplate","estimateTemplateId","estimateTemplatesSelectedIds","estimateTemplatesById","estimateTemplateIds","modelName","size","selected","estimateTemplateChanged","lastSavedEstimateTemplate","estimateTemplatesSelected","initialState","Record","byId","lastSavedById","unsavedId","currentImageId","showInfo","ImageStateRecord","reducer","action","model","image","set","setIn","payload","removeId","name","value","record","ids","forEach","fetchImage","images","receiveImage","setImageLoaded","imageIds","editBoolean","folderId","lineItem","lineItemId","imgIds","imageId","RECEIVE_DECK","EDIT_DECK","Actions","receiveDeck","deck","editDeck","mobile","ui","Shim","Popup","Widget","template","options","tablet","cancelTemplate","addClass","append","wrap","view","wrapper","parent","shim","modal","ios","majorVersion","className","popup","_closeProxy","_shimHideProxy","onResize","events","height","open","context","show","close","hide","openFor","data","unbindResize","isDefaultPrevented","$angular","injector","getter","_close","_shimHide","plugin","join","replace","charAt","substring","W","ye","transitions","De","Te","max","left","right","bottom","arguments","ObservableArray","LazyObservableArray","DataSource","HierarchicalDataSource","_e","constructor","Array","Date","getTime","clone","Fe","hasOwnProperty","test","toUpperCase","document","defaultView","getComputedStyle","each","getPropertyValue","currentStyle","He","Pe","effects","duration","reverse","complete","ve","Se","teardown","completeCallback","queue","B","promise","indexOf","toLowerCase","oe","getAttribute","ns","Ce","parseFloat","ne","re","Function","te","html","O","contains","z","attr","is","nodeName","disabled","href","expr","filters","visible","parents","addBack","E","H","N","F","R","U","$","L","j","Y","J","q","V","G","K","Q","Z","X","ee","ie","ae","se","le","ce","de","fe","me","pe","he","ge","cultures","be","we","isArray","Me","xe","JSON","ke","Oe","ze","Ee","Ae","Ne","Re","Ue","Ie","slice","apply","prototype","Object","_initOptions","isFunction","_defaultPrevented","_events","original","one","first","unshift","sender","paramName","useWithBlock","render","compile","_slotCount","floor","Error","format","lastIndex","charCodeAt","toJSON","isFinite","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","String","Number","Boolean","stringify","numberFormat","pattern","decimals","groupSize","percent","symbol","currency","abbr","calendars","standard","days","names","namesAbbr","namesShort","months","AM","PM","patterns","firstDay","twoDigitYearMax","culture","calendar","findCulture","getCulture","shift","round","toFixed","min","getDate","getDay","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","getTimezoneOffset","abs","toLocaleString","exec","toExponential","lastIndexOf","parseInt","_extractFormat","_activeElement","activeElement","_round","RegExp","substr","_lowerDays","_lowerMonths","isNaN","UTC","setHours","setFullYear","parseDate","timezone","convert","concat","_scrollbar","scrollbar","createElement","style","cssText","innerHTML","body","appendChild","offsetWidth","scrollWidth","removeChild","isRtl","closest","tbodyInnerHtml","MSPointerEvent","PointerEvent","transforms","HTMLElement","hasHW3D","WebKitCSSMatrix","prefix","devicePixelRatio","screenWidth","outerWidth","availWidth","innerWidth","screenHeight","outerHeight","availHeight","innerHeight","detectOS","wp","fire","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","flat","omini","omobile","firefox","mobilesafari","chrome","webkit","navigator","device","minorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","protocol","userAgent","wpDevicePixelRatio","width","kineticScrollNeeded","hasNativeScrolling","detectBrowser","edge","safari","opera","mozilla","documentMode","detectClipboardAccess","copy","queryCommandSupported","cut","paste","clipboard","zoomLevel","scrollHeight","clientHeight","clientWidth","top","cssBorderSpacing","borderSpacing","placeholder","propertyChangeEvent","input","setAttribute","cssFloat","stableSort","index","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","matches","querySelectorAll","parentNode","pushState","history","hashChange","customElements","down","out","enabled","Element","display","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","stop","kendoAnimate","kendoAddClass","toggleClass","kendoRemoveClass","kendoToggleClass","elementFromPoint","mousedown","mouseup","mousemove","mousecancel","click","resize","widgets","_widgetRegisteredCallbacks","fx","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","animate","getShadows","hasClass","boxSizing","mozBoxSizing","webkitBoxSizing","marginLeft","paddingLeft","paddingRight","paddingBottom","zoom","children","deepExtend","getComputedStyles","webComponents","isScrollable","overflow","scrollLeft","toCamelCase","toHyphens","getOffset","scrollY","scrollX","pageYOffset","scrollTop","pageXOffset","parseEffects","directions","Template","eventTarget","htmlEncode","isLocalUrl","setter","accessor","random","roleSelector","directiveSelector","triggeredByInput","tagName","onWidgetRegistered","logToConsole","console","suppressLog","log","angular","dataSource","_hasBindingTarget","kendoBindingTarget","_tabindex","removeAttr","setOptions","_setEvents","getSize","_size","_resize","dimensions","setSize","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","elements","items","dataItem","offsetHeight","initWidget","roles","nodeType","isEmptyObject","rolesFromNamespaces","find","makeArray","widgetInstance","parseOptions","DataBoundWidget","progress","loading","prependTo","remove","widget","nullObject","autoApplyNS","viewHasNativeScrolling","useNativeScrolling","container","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","muteMouse","mouseTrapTimeoutID","unMuteMouse","MSPointerEnter","MSPointerLeave","special","delegateType","bindType","handle","relatedTarget","handleObj","origType","search","touchstart","touchend","getUTCDay","setUTCDate","zone","rule","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","zones","rules","offset","toLocalDate","date","setDate","setTime","adjustDST","dayOfWeek","setDayOfWeek","isInDateRange","isInTimeRange","isToday","nextDay","previousDay","toUtcTime","MS_PER_DAY","MS_PER_HOUR","MS_PER_MINUTE","addDays","today","toInvariantTime","firstDayOfMonth","lastDayOfMonth","stripWhitespace","createNodeIterator","NodeFilter","SHOW_TEXT","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","animationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","decodeURIComponent","elementUnderCursor","wheelDeltaY","wheelDelta","detail","VERTICAL_AXIS","throttle","caret","selectionStart","focus","setSelectionRange","selectionEnd","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","invoke","$$phase","$digest","antiForgeryTokens","cycleForm","last","keyCode","shiftKey","method","fileName","contentType","base64","appendTo","submit","atob","Uint8Array","Blob","buffer","msSaveBlob","URL","createObjectURL","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","saveAs","forceProxy","dataURI","proxyURL","proxyTarget","proxyModelSetters","defineProperty","dirty","isSlideEnabled","slide","isMap","obj","prop","downloadFile","url","filename","response","fetch","blob","error","getFileType","file","dataURLToFile","dataurl","arr","mime","bstr","u8arr","File","parseXml","xml","arrayTags","dom","DOMParser","parseFromString","ActiveXObject","async","loadXML","parseError","reason","srcText","result","parseNode","xmlNode","jsonNode","existing","attributes","attribute","config","$analyticsProvider","$windowProvider","parser","settings","userId","orgId","appVersion","$window","$get","pagePathCache","registerSetUsername","registerSetUserProperties","registerPageTrack","path","properties","embedded","parse","hitType","page","getResult","registerEventTrack","category","parsed","getPage_","registerExceptionTrack","hash","pathname","token","refreshToken","authenticating","refreshTokenExpired","accessUid","AuthStateRecord","uid","importing","importLog","authorizing","authorized","pages","currentJob","errors","HoverStateRecord","QuickMeasureStateRecord","total_count","total_pages","EagleviewStateRecord","fetchingToken","authorization","token_error","PaySimpleStateRecord","fromJSON","json","recordData","CardConnectAuthorizationRecord","defaultCardConnectAuthorizationRecord","username","merchant_id","hpp_url","lastSavedByOrgId","byOrgId","CardConnectStateRecord","RoofScopeStateRecord","IntegrationsInitialState","hover","eagleview","paysimple","cardconnect","quickMeasure","roofScope","fromJS","api_key","newState","rootPath","EventPagination","UserPagination","EventPageRecord","pagination","eventsById","eventPagination","userPagination","AnalyticStateRecord","LeadRecord","first_name","last_name","email_address","lead_source","form_data","job_id","created_at","updated_at","LeadPageRecord","leads","LeadsInitialState","leadsById","params","query","LeadStateRecord","lead","pluck","meta","baseColors","defaultJobBasicProps","customer_name","email","address","phone_numbers","assignments","JobBasicRecord","currentAccessUid","currentToken","currentRefreshToken","addAuthUser","route","currentParams","includes","routeParams","URLSearchParams","CustomLink","activeClassName","to","tag","Tag","rest","useSelector","callback","useCallback","$apply","attrs","onClick","defaultSalesOpportunityProps","result_id","result_reason_id","SalesOpportunityRecord","defaultEventMetadataProps","sales_opportunities","marketsharp_id","improveit360_appointment_id","sales_rabbit_id","salesforce_event_id","lead_perfection_id","EventMetadataRecord","job","pn","start_time","end_time","metadata","EventRecord","defaultEventProps","summary","description","events_result_id","events_result_reason_id","notes","user_id","org_id","editable","busyInfo","colors","EventStateRecord","eventId","receiveEvent","updateIn","merge","nameSplit","lastName","rootName","eventResultReasonName","toArray","resultReasonName","newEventData","deleteIn","userIds","userToAssignId","colorsByUserId","color","toList","lastAssignedIndex","DiscountKinds","defaultBreakdownProps","kind","amount","limit","DiscountBreakdown","values","defaultDiscountProps","breakdown","sort_order","archived","DiscountRecord","OrgDiscountsRecord","discounts","discountsById","discountsByOrgId","DiscountStateRecord","discount","toSet","discountId","receiveDiscount","removeIn","OrgPaymentTermTemplatesRecord","paymentTermTemplates","paymentTermTemplatesById","paymentTermTemplatesByOrgId","PaymentTermTemplateStateRecord","paymentTermTemplate","paymentTermTemplateId","PaymentTermTemplate","receivePaymentTermTemplate","OrgToolsRecord","tools","design_tools","ToolStateRecord","tool","toolId","Tool","receiveTool","payments","PaymentPageRecord","paymentsById","authByOrgId","makingPayment","lastPayment","providerLoading","providerValid","providerSubmitting","sendingReceipt","PaymentStateRecord","payment","PaymentAuthorizationRecord","auth","valid","submitting","sending","TaskRecord","defaultTaskProps","lock_version","logs","results","status","TaskStateRecord","task","oldTask","toJS","localStorage","setItem","defaultLevelProps","defaultOrgLevelLinkProps","org_uuid","level_id","LevelRecord","OrgLevelLinkRecord","defaultLocationProps","defaultOrgLocationLinkProps","location_id","LocationRecord","OrgLocationLinkRecord","defaultJobObjectProps","defaultOrgJobObjectLinkProps","object_id","JobObjectRecord","OrgJobObjectLinkRecord","fromJsonByType","job_type","org_job_object_link","level","org_level_link","org_location_link","getActiveJobAttributesList","jobAttrType","links","count","link","activeByTypeAndOrgId","availableByTypeAndOrgId","byTypeAndId","lastSavedByTypeAndId","loadingByTypeAndOrgId","JobAttributeStateRecord","jobAttributeId","jobAttributes","ja","receiveJobAttribute","jobAttribute","receiveActiveOrgJobAttribute","receiveAvailableOrgJobAttribute","jobAttributeRecord","linkRecord","linkData","linkIdProperty","existingIdx","findIndex","sortBy","idx","resetId","resetJobAttrType","IndexPresentationsRecord","presentations","presentationsByOrgId","presentationsByJobId","currentPresentationId","slidesById","PresentationStateRecord","presentation","basePath","baseProp","slides","receiveSlide","receivePresentation","presentationIds","presentationId","fetchPresentation","delete","jobId","list","coverImage","sortOrder","editSelected","plnarPricing","plnarPricingLoading","pricingReports","ReportStateRecord","reportId","report","reports","receiveReport","provider","defaultFlashAlertProps","message","FlashLevels","success","autoDismiss","actionButton","onDismiss","externalId","FlashAlertRecord","defaultSendInviteProps","sent","SendInviteRecord","flashAlerts","Job","displayWebCam","sendInvite","notifierMessages","showImportModal","savedLocationState","navDisplay","pageTitle","CommonStateRecord","showQuickMeasureModal","showRoofScopeModal","showPlnarModal","IntegrationsViewStateRecord","showingPaymentOptionEditor","showingPricingDrawer","EstimatorStateRecord","ComponentsInitialState","common","estimator","integrations","flashAddAlerts","alert","flashRemoveAlerts","flashRemoveByIdAlerts","indexToRemove","sendInviteSent","notifierRemoveMessages","OrgPresentationTemplatesRecord","presentationTemplates","presentationTemplatesById","presentationTemplatesByOrgId","PresentationTemplateStateRecord","receivePresentationTemplate","presentationTemplate","pts","presentationTemplateId","ScreenShareRecord","defaultScreenShareProps","uuid","shared","started","ended","event_id","estimate_id","redirect_on_end_url","JobScreenShareRecord","screenShare","screenShareStatus","screenShareKind","screenShareToken","activeScreenShareJobId","byJobId","roomExists","ScreenShareStateRecord","lastSavedByJobId","expandDrawer","EstimateComparisonStateRecord","estimateComparisonRecord","estimateComparison","builtEstimateComparison","estimateComparisonJson","estimate_comparison_links","estimateIds","addEstimateComparisonLink","newECL","estimateId","newECLs","newLinks","ecl","feneTechManufacturerFromJSON","FeneTechManufacturerRecord","defaultManufacturerProps","fromJSWithDefaults","TokenRecord","create_jobs_from_cc_projects","jn_type","create_prospect_sale","appointment_resulted","signed_document_signed","create_marketing_opportunity","presentation_url","packages","markup_factor","markdown_factor","default","finance_options","rate","term","financeOption","manufacturers","manufacturer","availableManufacturers","defaultTokenProps","defaultTokenKindAuthorizedRecord","byKind","TokenKindAuthorizedRecord","defaultAuthorizedTokenRecord","AuthorizedTokenRecord","defaultTokenStateRecord","statuses","TokenStateRecord","tokenKind","key","isInsert","isDelete","without","insert","nameSplitted","defaultValidationProps","item_uuid","definition","ValidationRecord","OrgValidationsRecord","validations","Set","byItemUuid","ValidationStateRecord","validation","add","receiveValidation","defaultPriceListProps","hidden_products","product_ids","product_option_group_ids","PriceListRecord","ProductStateRecord","product","productData","discountable","productId","ancestral_name","ancestral_name_lowercase","child","receiveProduct","optionSelected","option_uuids","chain","existingOptions","any","elio","product_option_uuid","defaultProductOptionGroupProps","matched","match_id","selection_mode","pog_type","option_count","product_count","option_group_count","option_group_ids","price_list_id","option_ids","ProductOptionGroupRecord","calculatePrice","productOption","estimate","estimateLineItem","productPrice","product_price","laborPrice","labor_price","product_markup","labor_markup","defaultProductOptionProps","option_group_id","uom","cost","msrp","price","charge_type","ProductOptionRecord","ProductOptionStateRecord","ProductOptionGroupStateRecord","productOptionGroup","opt","option","receiveProductOption","PriceListStateRecord","priceList","product_option_groups","pog","products","receiveProductOptionGroup","ActivatedPriceListRecord","defaultActivatedPriceListProps","priceLists","productOptionGroups","productOptions","csv_url","csv_generated_on","activated_price_list_id","estimate_count","ActivatedPriceListStateRecord","defaultRoofFaceProps","designator","orientation","pitch","area","RoofFaceRecord","RoofFaceStateRecord","roofFace","WallFacadeRecord","defaultWallFacadeProps","ref_id","WallFacadeStateRecord","wallFacade","calculateOpeningArea","calculateOpeningUI","defaultOpeningProps","opening_estimations","annotation_id","annotation","WindowRecord","WindowStateRecord","windowIds","windowId","nameArray","rootPathName","DoorRecord","DoorStateRecord","door","doorIds","doorId","room_estimations","estimation","RoomRecord","defaultRoomProps","perimeter","inside_corner","outside_corner","ceiling_area","ceiling_area_less_structures","ceiling_perimeter","ceiling_perimeter_less_structures","door_area","door_count","door_total_width","exposed_structure_perimeter","floor_area_less_structures","floor_opening_total_width","floor_plan_area","floor_plan_perimeter","floor_plan_perimeter_less_structures","floor_plan_perimeter_without_openings","object_count","opening_count","opening_total_area","opening_total_width","structure_total_ceiling_area","structure_total_ceiling_width","structure_total_floor_area","structure_total_floor_width","structure_total_wall_area","volume","wall_count","wall_total_area","wall_total_area_without_openings","window_count","window_total_area","measurement_id","viewer_url","super","RoomStateRecord","defaultElevationProps","src_image_id","src_image","rendered_image_id","rendered_image","annotations","removedAnnotations","removedWallFacades","$hasChanged","renderedDataUrl","ElevationRecord","defaultElevationMeasurementRecord","ElevationMeasurementRecord","byMeasurementId","byDoorId","byWindowId","ElevationStateRecord","elevation","capitalize","opening_type","opening_id","measurementId","elevations","receiveElevation","DeckRecord","defaultDeckProps","wall_length","railing_length","railing_area","DeckStateRecord","PoolRecord","defaultPoolProps","average_depth","PoolStateRecord","pool","defaultAddMeasurementForm","quantity","editing","addMeasurementForm","MeasurementStateRecord","payloadMeasurement","roof_faces","receiveRoofFace","wall_facades","receiveWallFacade","receiveWindow","doors","receiveDoor","receiveRoom","decks","pools","receivePool","updateRoofWaste","updateSidingWaste","updateSlopedRoofWaste","updateLineMeasurements","updateSunroom","updateSunroomKneeWall","maxWidth","updateSunroomWall","rapidArea","measurements","pitched_area","leaflet","leafletZoom","poolIds","editPool","deckIds","editWindow","editDoor","elevationIds","newElevation","wallFacades","measuring","drawingMetadata","unWindAngular","wallFacadeIds","wall","editWallFacade","editRoom","rootPathAdd","nameAdd","valueAdd","measurementForm","form","forms","updateWindows","updateDoors","updateRooms","locationData","RouterStateRecord","createParams","FolderCreateRecord","FolderRecord","defaultFolderCreateRecord","folderable_id","folderable_type","parent_name","defaultFolderProps","parent_id","FolderStateRecord","folder","receiveFolder","folderParentId","pushId","folders","SegmentStateRecord","segment","segmentId","gateCount","newLength","gateLength","netLength","linePosts4","ceil","linePosts6","linePosts8","fenceId","segments","FenceStateRecord","fenceRecord","fenceLinePost4","fenceLinePost6","fenceLinePost8","fenceGateCount","fenceGateLength","fenceTotalLength","fenceNetLength","fence","totalLength","fenceData","reduce","fence_id","receiveSegment","fencingId","fenceIds","segmentIds","union","resetSegment","setSegment","cascade","prevState","deleteSegment","errorsByMeasurementId","FencingStateRecord","defaultLineItemOrderProps","order","LineItemOrderRecord","defaultTemplateProps","included","documentIds","visibility","CustomProductRecord","defaultEstimateTemplateGroupProps","itemUuids","lineItemOrder","customProducts","EstimateTemplateGroupRecord","templateFromJSON","documents","doc","createdAt","updatedAt","EstimateTemplateRecord","groups","group","line_item_order","item_uuids","custom_products","image_ids","document_ids","TemplateRecord","defaultEstimateTemplateProps","EstimateTemplateStateRecord","fetchEstimateTemplate","estimateTemplates","receiveEstimateTemplate","setEstimateTemplateLoaded","noteData","NoteRecord","defaultNoteProps","note","user","noteable_id","noteable_type","noteId","lastSavedNote","equals","NoteStateRecord","receiveNote","newNote","CrmUserRecord","defaultCrmUserProps","crm_id","active","CrmUserStateRecord","crmUser","crmUsers","receiveCrmUser","defaultEventResultProps","ms_id","position","sold","EventResultRecord","EventResultStateRecord","eventResultData","receiveEventResult","defaultEventResultReasonProps","EventResultReasonRecord","eventResultReasonStateRecord","reasonsByOrgId","reasons","receiveEventResultReason","valid_until","FinanceApplicationRecord","defaultFinanceApplicationProps","loan_id","redirect_url","loan_status","offer_status","offer_code","verify_check","details_url","max_approved_amount","moment","toDate","apply_url","byEstimateId","FinanceApplicationStateRecord","financeApplication","financeApplications","receiveFinanceApplication","applyUrl","SkuRecord","defaultSkuProps","SkuStateRecord","PaymentRequestRecord","defaultPaymentRequestProps","sms","emails","paymentAuth","paymentAuthRequestKind","found","some","getPagedPayments","PaymentRequestStateRecord","paymentRequest","currentEstimate","total","firstPaymentTerm","payment_terms","payment_term_items","calculated","paymentRequestData","receivePaymentRequest","paymentRequests","currentId","SignedDocumentStateRecord","recipient","signer","assignee","recipientPath","initRecipientInfo","scribbleSigners","orgSigners","initSigners","scribbleSigner","role_id","orgSigner","os","required","signature_validations","signedDocumentId","document_id","validation_status","validation_uuid","initRecipients","receiveDocument","defaultWebhookProps","auth_config","auth_type","endpoint","WebhookRecord","defaultWebhookEventProps","webhook_id","tries","WebhookEventRecord","WebhookStateRecord","webhookRecord","webhookEventRecord","webhookId","webhooks","webhook","receiveWebhook","webhook_events","receiveWebhookEvent","byForm","RsfFormRecord","rsfForms","formName","applicantCountByJobId","CustomFormStateRecord","FETCH_CUSTOM_FORM","RECEIVE_CUSTOM_FORM","RECEIVE_CUSTOM_FORMS","customForm","receiveCustomForm","SET_MODEL_LOADED","SET_APPLICANT_COUNT","customForms","single","double","application_status","UPDATE_DABELLA_FORM","update","UPDATE_CUSTOM_FORM_RJSF","customFormId","formData","RESET_CUSTOM_FORM","FinancingRecord","downPayment","minPayment","maxPayment","PricePresentationInitialState","slideEstimateIds","showExactValues","financing","currentSlideIndex","estimateDiscountGroups","PricePresentationRecord","pricePresentation","oneLookLocationFromJSON","create","entries","OneLookLocationRecord","defaultOneLookLocationProps","code","locations","OneLookStateRecord","AppMessageMetadataRecord","unread_total","AppMessageUiState","showModal","viewMessageId","initialized","uiState","AppMessageStateRecord","receiveAppMessage","messageId","ConnectedRouterInitialState","InitRootState","users","jobs","analytics","estimates","estimateGroups","estimateLineItems","estimateLineItemOptions","orgs","tasks","screenShares","components","estimateComparisons","tokens","openingEstimations","estimateFinanceOptions","activatedPriceLists","roofFaces","accesses","routerPush","measurementsFencings","measurementsFences","measurementsSegments","eventResults","eventResultReasons","skus","signedDocuments","router","oneLook","appMessages","basename","composeEnhancers","trace","traceLimit","store","localRootReducer","reducers","reducerKeys","defaultState","inputState","withMutations","temporaryState","reducerName","nextDomainState","nextState","validateNextState","combineReducers","createCombineRootReducer","activatedPriceListRecord","receivePriceList","cachedPriceList","fencingRecord","fencing","newId","newFencing","fences","fencing_id","receiveFence","setFence","resetFence","deleteFence","sku","newValue","SET_SLIDE_ESTIMATE_IDS","UPDATE_PRICE_PRESENTATION","RESET_PRICE_PRESENTATION","UPDATE_FINANCING","newTotal","minPaymentRange","maxPaymentRange","SET_CURRENT_SLIDE_INDEX","ADD_DISCOUNT_GROUP","CLEAR_DISCOUNT_GROUPS","pricePresentationReducer","RECEIVE_ONE_LOOK_LOCATIONS","SET_LOADING","createRootReducer","setStore","dispatch","setTokens","getToken","getRefreshToken","subscriber","subscribers","_store","getState","_prevState","cb","getStore","subscribe","reset","Acl","_savedPrefAcl","_savedSetAcl","_subscribers","acl","currentUser","org","_unsubscribeAcl","_unsubscribeUser","can","exactMatch","preferencesSetup","settingsSetup","resource","mappedAction","mapAction","defined","orgCan","permission","preferences","fetchAcl","pluckAcl","pref","intersection","keySeq","include","HeaderCtrl","Session","Flash","JobFetcher","$state","$scope","$rootScope","$location","$timeout","$analytics","$transitions","BaseConfig","JobShowTourService","JobInfoTourService","Repository","constructorInit","hidden","_cleanupListeners","$on","args","clearSearchText","showSearchBar","onStart","searchString","func","refreshQuery","getCurrentStateName","isCurrentPage","isCurrentState","help","eventTrack","$broadcast","then","searchChanged","showFinanceTab","hasPermissions","tokenAuthorized","integration","navigateToOccApp","APP_V2_URL","authService","$http","OrgFetcher","VERSION","$q","defer","hasToken","loggedOut","$promise","logout","setUsername","permissions","resolve","hasRefreshToken","User","setHTTPHeaderDefaults","loadPreference","setupNewUser","object","asPromised","isString","matched_permission","deferred","orgPolicy","userPolicy","setAnalyticsTracking","getAuthorizedTokens","stripAuthUser","initialize","saved","getCurrentUser","loadAuth","_unsubscribeToken","_currentToken","_unsubscribeAccessUid","changeOrgs","_unsubscribeRefreshToken","APP_URL","_unsubscribeLogin","setupReduxUser","_userDeferred","lastUser","lastOrg","currentOrgId","currentOrg","LiveChatWidget","orgName","setupUser","_currentAccessUid","fetchUserPref","isUndefined","setTourPref","canReport","reportSettingsName","reportsEnabled","promises","all","getTree","resp","preferences_id","UserPreference","savePreference","$save","urlParams","changeAccessUid","cleanUrl","searchParams","replaceState","defaults","headers","Authorization","hasAccessUid","getAccessUid","gtag","GA_KEY","userRecord","setAccessUid","getCurrentUserByEmail","getAuthorized","current_access_uid","setAuthorized","Promise","reject","RsfPermissions","onObject","scope","permissionsOns","that","inverse","startWatch","$watch","userWatch","oldValue","$$state","factory","directive","$inject","RsfConfirmationDialog","$uibModal","ConfirmDialog","rsfConfirmationMessage","rsfConfirmationDialog","app","confirm","DecimalPlaces","ele","decimalPlaces","expression","newVal","val","charCode","fromCharCode","JobAnalytics","$element","$attrs","trackingData","$eval","$attr","_isProperty","_propertyName","$observe","$event","eventName","analyticsEvent","_inferEventName","eventType","analyticsIf","analyticsProperties","_isCommand","innerText","us_states","JobShowCtrl","JobMenuOrderService","$stateParams","Org","EventingFactory","headerHidden","_loadJob","tourInit","getOrg","sidebar","buildTabs","setSelectedEstimateId","setCurrentJobId","setCurrentOrgId","setNavDisplay","jobShowCtrl","backToAllCustomers","analyticsInit","toggleNav","setPresentationState","viewed","setOrg","listDiscounts","listPaymentTermTemplates","listFinanceOptions","listValidations","startTour","UserPrefConfigType","UserPreferencePrototype","resources","$resource","transformSingle","user_preference","BASE_URL","transformResponse","save","transformRequest","toJson","sms_number","sms_number_attributes","preference","notifications","via_email","via_sms","PhoneNumber","inject","injected","FlashService","_flashSubscribe","alerts","addMessage","flashAddAlert","closeAlert","flashRemoveAlert","lighten","hex","change","hexSegment","strSegment","JobListCtrl","EstimatorService","by","expandMode","throttledScroll","scroll","trailing","stateFilters","userOrg","setJobQuery","job_list_card_view","card_view","jobListCardView","states","jobResponse","stateInfo","state_info","setJobStates","$emit","jobListPartialUrl","settings_acl","view_type","jobTypes","job_types","jt","cardViewChanged","morePages","toggleStateFilter","stateSelected","column","jobTypeNames","jobTypeTooltip","nameFromRawState","pretty_name","colorFromRawState","last_page","sync","$processSf","process","defaultParams","jobQueryParams","updated_since","filter_by_updated_since","filter_by_updated_before","sort_by","stats","statistics","receiveStats","loadStatistics","embeddedService","_listeners","postToParent","RSF","postMessage","listenerCount","addListener","removeListener","sendEvent","msg","escape","_webViewProp","endsWith","unescape","JobFetcherService","Event","Visualization","decycleToJSON","line_items_count","toISOString","fetchJob","mergedIncludes","catch","receiveJob","decycle","job_data","setJob","refresh","_presentationState","_presentationStateObservers","observePresentationState","currentPresentationState","removePresentationStateObserver","has","isObservingPresentationState","BaseTabCtrl","scrollTo","_stateObserverKey","spinnerPromise","loadTools","listTools","trackEvent","ToolTabCtrl","Pretty","ToolInfo","toolsLoaded","goToAddress","go","EstimateTabCtrl","Estimate","createEstimate","reloadEstimate","listener","BaseEstimateTabCtrl","selectedEstimateId","setupParams","addingEstimate","isNumber","clearEstimate","selectEstimate","sendPdf","docType","modalOpen","animation","ariaLabelledBy","ariaDescribedBy","templateUrl","controller","backdrop","controllerAs","job_email","returnObject","emailPdf","finally","EstimatesTabCtrl","showPricePresentation","addEstimate","disablePresent","est","compare","toggleCompare","estimateids","warning","orgid","pdf","doc_type","savePdf","pdfType","csv","csv_type","saveCsv","MeasurementTabCtrl","Upload","gafEnvironment","ENVIRONMENT","listeners","openQuickMeasureModal","showImportScreen","showAnnotator","openPoolTool","openRapidArea","openSatelliteMeasure","openDeckWizard","windowClass","returned","loadMeasurement","openRoofScopeModal","openPlnarModal","AsyncActions","addressRecord","component","saveRendered","updateForm","siding_total_area","updateWallFacades","updateMeasurement","measurementRecord","ePromises","openingIds","windowRecords","doorRecords","$saveOrCreate","updateElevations","updateRapidAreaTool","rapid_area","updateDecks","updatePools","updateSatelliteMeasurementTool","HistoryTabCtrl","Email","perPage","currentPage","totalCount","loadOrg","queryEmails","post","RSF_ANALYTICS_URL","RSF_ANALYTICS_KEY","assignedUser","appointments","toggleEventDisplay","_display","fetchUser","catchAuth","assignment","assignmentUser","_inactiveUser","formatData","handlePresentation","handleSignatures","durations","previous","inserted_at","diff","padWithZeros","asHours","minutes","seconds","humanDuration","humanize","apptSummary","appt","reportName","testName","estimateTitle","contractTitle","sanitizeMessage","regex","matchCase","queryParams","per_page","emailable_type_url","emailable_id","emailResponse","global_permission","newStr","oldStr","handleTools","handleEstimate","recipient_name","handleLineItemEditor","measurement_name","handleProposals","paddingSize","emailRegex","emailListRegex","validatePhoneNumber","phone","validateEmail","authToken","currentUserId","InfoTabCtrl","ngMap","US_STATES","DirtyWatcher","COUNTRIES","GeoCoder","ctrl","number","debounce","geocode","fullAddress","geoLocation","geometry","lat","lon","lng","area_2","address_components","ac","area_3","administrative_area_level_2","administrative_area_level_3","_isSaveable","unsubscribe","initPhoneNumber","initUseJobAddress","receiveJobAttributes","orgChanged","setup","Address","line_1","line_2","city","postal_code","zip","country","customer_address","use_job_address","useJobAddress","helperListener","updateJobTypes","updateMetadata","jobInfoCtrl","addPhoneNumber","newPhoneNumber","tap","removePhoneNumber","phoneNumber","unarchiveJob","reload","danger","enableLeadSourceAdd","addLeadSource","addNewLeadSource","leadSources","uniq","_defaultLeadSources","lead_sources","leadSource","jobJobTypes","_currentJobtypes","addressChanged","debouncedAddressChanged","locationUpdated","pow","deleteJob","$delete","assigned_to","assignedTo","$assign","stateAction","jobState","performSelectedAction","userResult","orgUsers","setAssignedUser","saveable","customerNameChanged","_jobNameChanged","jobNameChanged","job_states","loadOrgUsers","_originalState","cloneMin","_originalUser","$rollbackViewValue","check","raw_state","toggleUseJobAddress","additional_assignment","additionalAssignedUser","$change_state","InspectionTabCtrl","FileQueueFactory","fileQueue","getInstance","downloadPdf","include_all_items","inspection_include_all_items","signers","role","signature_platform","buildRecipients","signerConfig","title","pricing","recipients","SignatureSettings","contract","inspection","DocumentOrder","SupportedTimeZones","emptyValue","OrgAclType","OrgPrefType","OrgPrototype","$update","measurementTypes","types","job_tab","showAddMeasurement","where","line_item_editor","showMeasurementSection","what","showTotals","presentationMode","showIncludedTotal","showOptionTotal","showIncludedText","presentation_mode","show_included_text","show_option_total","show_included_total","showEstimateListPricing","show_estimate_list_pricing","showDiscountDetail","subtotal","show_discount_detail","showDetailedUnitPrice","mode","hidden_line_items","activated_price_list","show_detailed_unit_price","showDetailedPricing","show_detailed_pricing","showDetailedMeasurements","show_detailed_measurements","showSalesTax","tax_total","sales_tax","use_sales_tax","set_enable","price_presentation","pp_pref","showImageUploader","photos","show_image_uploader","estimatorTitle","plural","getTitle","openingNameTitle","document_type","fetchPref","contract_short","estimate_short","opening_name","inspection_short","showEstimatedDates","show_estimated_dates","canSign","isEmpty","fetchPreferencesAcl","fetchSettingsAcl","hasMs","marketSharpToken","partialUrl","resourceDocuments","displayInResource","merged","setSettingsAcl","setPreferencesAcl","defaultUserAcl","user_acl","getMeasurementSystem","system","transformSingleResponse","address_attributes","settings_attributes","preferences_attributes","activated_inspection_list","activated_survey_list","contract_languages","contract_languages_attributes","tree","csvStats","accept","responseType","globalStats","globalCsvStats","invitePayMe","byUuid","processMs","processSf","processI360","processJn","processLp","Image","Presentation","Doc","signature_settings","market_sharp","default_duration","link_expiration","document_order","signed_documents","expiration_in_days","default_rate","proposal","agreement","signed_agreement","pt","PaymentTerm","ChameleonService","handleEvents","vis","origin","baseChameleon","_createVisualization","projectname","visualizations","ChameleonV2Service","DesignToolTabCtrl","$sce","helper","start","item","orderVisualizations","_chameleonService","_eventListener","selectedVisualization","showVisualization","_chameleonV2Service","jobLoaded","showIFrame","showRenoworksIFrame","toolIFrameUrl","trustAsResourceUrl","showToolIFrame","showVisualizationIFrame","showingIFrame","fullScreen","fullscreen","startNewVisualization","visualizationUrl","buildNewProjectUrl","visualization","chameleon","deleteVisualization","addVisualization","newVis","visualizationModal","$create","editVisualization","editVis","edited_vis","emailVisualization","$email","AreaCalculatorCtrl","$uibModalInstance","degrees","PI","newMeasurement","calculate","factor","flat_area","roof_area","setPitch","isSavable","unrounded","tan","deg2rad","Opening","addOpenings","opening","_addOpenings","copyValues","getId","addRooms","_addRooms","Room","MeasurementEditorCtrl","dismiss","MeasurementEditorComponentCtrl","Measurement","$onChanges","defaultLocations","levels","defaultLevels","enableLocationAdd","addLocation","addNewLocation","enableLevelAdd","addLevel","addNewLevel","cleanUi","cleanSqft","MeasurementEditorComponent","UploaderCtrl","invalid","upload","files","invalidFiles","imageTotal","imageSuccess","folder_id","ImportMeasurementsCtrl","MeasurementImporterFactory","Report","canOrderEagleview","canImportHover","canOrderQuickMeasure","canOrderRoofScope","canOrderPlnar","setCurrentJob","canOrderMultiple","groupBy","importHover","order_modal","APP_NAME","orderQuickMeasure","orderEv","billing_ok","orderRoofScope","orderPlnar","VisualizationModalCtrl","Category","checkKind","EmailModal","pdf_options","send","PinDropCtrl","$onInit","mapPromise","getMap","getCenter","updated","addressClone","_debouncedChange","tilt","setTilt","google","maps","$doCheck","_last","isValidLatLon","setCenter","PinDropComponent","ScreenShareService","ScreenShare","_currentJob","setupDirtyWatcher","_unloadBinding","currentScreenShare","cleanup","addScreenShare","screenleap","stopSharing","activeScreenShare","isNull","startSharing","connectScreenShare","callbacks","appConnectionFailed","setScreenShareStatus","screenShareStartError","presenterAppType","setRemoteScreenShareStatus","notifierAddMessage","onScreenShareStart","onScreenShareEnd","saveScreenShareStop","onViewerConnect","participantId","onViewerDisconnect","EstimateLineItemOption","estimate_line_item_id","estimate_line_item","product_option_group_id","product_option_group_name","product_option_group","product_option_id","product_option_image_ids","product_option","base_product_price","base_labor_price","labor_factor","product_factor","ext_price","product_option_match_id","calculateQuantity","calculateLaborPrice","calculateProductPrice","AddEstimateLineItemOptionCmd","execute","img","lineItemOption","getOptionId","productOptionGroupId","productOptionGroupIds","productOptionGroupByMatchId","productOptionGroupMatchId","cachedProductOptionGroups","cachedProduct","removeTypeFilter","cachedProductOptionGroup","productOptionId","cachedProductOption","cachedProductOptions","productOptionIds","cachedProductOptionByMatchId","productOptionMatchId","prod","cachedProductOptionByMatchIdWithIds","cachedProductOptionsByUuid","optionUuids","flatten","ProductOptionSelector","productOptionGroupsByType","product_id","selectedOptionGroup","canAdd","alreadyAdded","po","addOptionGroup","optionGroup","addingOption","changeOptionGroup","changingElio","cancelAddingOptionGroup","addProductOption","newOptionQuantity","removeOption","ProductOptionSelectorComponent","ImageUploadController","analyticsCategory","classes","flashLevel","ImageUploadComponent","RapidAreaCtrl","geojson","new_geojson","$value","cancelBtn","measureFinished","points","RapidAreaComponent","SatelliteMeasureCtrl","exportData","isValidAddress","SatelliteMeasureComponent","addDecks","_addDecks","Deck","DeckWizardCtrl","measurementAdded","newPoints","every","railingChanged","wallChanged","_addDeck","DeckWizardComponent","addPools","_addPools","Pool","PoolToolCtrl","averageDepthChanges","_addPool","PoolToolComponent","UnhandledException","errorInfo","Row","Col","Card","Header","Body","xs","Accordion","borderBottom","Toggle","as","eventKey","Collapse","componentStack","stack","ErrorBoundary","hasError","componentDidCatch","setState","connectFC","Component","ReactReduxContext","Provider","connect","mapStateToProps","mapDispatchToProps","mergeProps","WrappedComponent","ConnectedComponent","ConnectWrapper","contextType","Spinner","stateProperty","localProperty","inline","localInline","onConfirm","componentDidUpdate","prevProps","openDialog","tracking","Modal","onHide","backdropClassName","closeButton","Footer","Button","variant","hideCancel","EstimateDisplay","md","formattedValue","formatBreakdown","DecimalInputComponent","handleOnChange","onNumberChange","initial","parts","isDecimal","roundedValue","FormControl","onChange","EstimateEditor","debouncedUpdate","handleDiscountInput","canSave","prev","isEqual","parsedValue","prevDiscount","formatKind","PresentAltDisplay","presentExistingDiscount","sm","presentDiscountTotal","span","totalAfter","connector","ownProps","Chooser","manual","manualOnly","dropdown","showHeaderText","discountSelected","addSelected","toggleDiscount","componentDidMount","onSelect","newDisc","discountRev","estimateView","presentView","renderSelector","renderManualPicker","renderFullPicker","renderList","labels","hideCustom","_props","_state","removeDiscount","addDiscount","updateDiscount","DiscountChooserWrapper","EstimatePresentationView","show_finance","toggleFinalFinance","selectFinanceOption","financeOptionsById","renderFinanceRange","src","estimateTotalView","renderFinalFinance","SpinnerComponent","showTotal","financeOptions","fo","finance_type","ToolInfoService","HandlebarsHelperService","renoworks_masking","base_url","renoworksToken","renoworks_url","paid","isValid","eagleview_order","eagleview_order_decra","google_maps","bing_ortho","bing_birdseye","zoom_earth","terra_server","pictometry_online","pictometry_connect","chi_overhead_door","map_developers_area","ca_3d_demo","daltile_demo","alside_renoworks","abbeycarpet_demo","renuit_cabinet_demo","zillow","zillowAddress","trulia","houzz_link","houzz","home_advisor_link","home_advisor","angies_list_link","angies_list","gaf_quick_measure_link","gaf_smart_money_link","gaf_vhr_link","gaf_vent_calc_link","greensky_link","wellsfargo_link","wells_fargo","homeguard","plygem_visualizer","oc_design_eyeq","gaf_vhr","colorview","provia","proviaToken","provia_non_portal","renoworks","getRenoworksUrl","getHoverUrl","quick_measure","plnar","getUrl","chameleon_v2","sketchup","global_transport_link","sigler_online_link","service_finance_link","ami_design_showcase_siding","ami_design_showcase_alside_window","ami_design_showcase_pres_window","foundation_finance_dealer_link","foundation_finance_link","advisar_link","square_d_link","lp_smartside_visualizer","lp_smartside_link","square_d_ezsel","hearth_financing_link","york_hvac_link","sighten_solar","enerbank_link","pella_portal","sunrise_configurator","royal_homeplay","sherwin_williams_colorsnap","iko_roof_viewer","paragon_visualizer","timbertech_worry_less","timbertech_deck_designer","lowes_deck_designer","thermatru_design_your_door","pella_lowes_product_designer","brand_image","cacheKey","generated_link","linkCache","toolConfigs","joinChar","financeList","financeOptionsId","estimatesByIdProp","loadEstimate","estId","getEstimate","updateEstimate","updateOrCreateEstimate","PresentationContainer","toolInfoService","setupIds","showFinancing","estimatesById","estimate_ids","saveEstimates","setupEstimates","_prevProps","bad","PdfDisplay","pdfUrl","additionalItems","disabledFeatures","disabledElements","viewerBuiltCallback","instance","defaultDisabledFeatures","defaultDisabledElements","viewer","useRef","initializeAnnotationTools","documentViewer","Annotations","Tools","Core","defaultsSet","getItem","ToolNames","FREEHAND","FREEHAND_HIGHLIGHT","toolText","getTool","createDelay","pdfTronBlue","Color","pdfTronRed","pdfTronAnnotationTools","AnnotationCreateRectangle","AnnotationCreateRectangle2","AnnotationCreateEllipse","AnnotationCreateEllipse2","AnnotationCreateLine","AnnotationCreateLine2","AnnotationCreateArrow","AnnotationCreateArrow2","AnnotationCreatePolyline","AnnotationCreatePolyline2","AnnotationCreatePolygon","AnnotationCreatePolygon2","AnnotationCreateTextUnderline","AnnotationCreateTextUnderline2","AnnotationCreateTextSquiggly","AnnotationCreateTextSquiggly2","AnnotationCreateTextStrikeout","AnnotationCreateTextStrikeout2","AnnotationCreateFreeHand","AnnotationCreateFreeHand3","AnnotationCreateFreeHandHighlight","setStyles","StrokeColor","pdfTronTextTools","AnnotationCreateFreeText","AnnotationCreateFreeText3","TextColor","useEffect","credentials","UI","loadDocument","customHeaders","updateUrl","extension","licenseKey","useDownloader","annotationManager","setPrintQuality","disableFeatures","disableElements","setHeaderItems","header","getItems","toolGroup","toolName","dataElement","onClickHandler","setFitMode","FitMode","FitWidth","err","ref","documentId","loadPdf","getEstimatePdf","PdfPageContainer","marginTop","Can","_subscription","forceUpdate","componentWillUnmount","inittedExactMatch","decision","RsfQueryableDropdown","label","formGroupProps","formLabelProps","modelPath","queryOnLoad","closeMenuOnSelect","customStyles","selectProps","allOption","nameFn","onQuery","lastInputValue","setLastInputValue","handleInputChange","optns","parameters","onInputChange","onMenuOpen","filterOption","styles","onSelectResetsInput","isLoading","toggleJobQueryForm","onSubmit","columnSize","closeOnSubmit","useDispatch","currentUserOrg","jobStates","jobStatesReactSelectRecord","jobQuery","hasJobQueryChanged","pretty","lastChangesJobQuery","isUpdateFilterCustom","borderLeft","multiValue","allUsersOption","setLastSavedJobQuery","changes","touched","resetLastChangesJobQuery","updateFormReducer","validate","subYears","listOrgs","listUsers","isMulti","formControlProps","getJobAttributes","jobType","year","lastUpdatedOptions","opacity","FormGroup","FormLabel","htmlFor","formatISO","representation","resetJobQuery","showForm","setShowForm","useState","Track","setLoading","revertJobQuery","register","Statistics","datasets","backgroundColor","plugins","tooltip","dataIndex","legend","maintainAspectRatio","background","DateTime","marginBottom","Appointments","start_time_after","jobs_only","clickCallback","dataset","loadEvents","appointment","SystemNotes","DownloadDocumentButton","signed","downloading","setDownloading","downloadDocument","usePreviousPath","useLocation","goBack","pathToRemove","newPath","useFullScreenToggle","isFullScreen","setIsFullScreen","fullscreenElement","onFullScreenChange","toggleFullScreen","exitFullscreen","requestFullscreen","formatEstimateGroup","line_items","includeAll","ingageToken","tokenData","urlSelector","btoaPayload","btoa","encodeURIComponent","PricePresentationModal","Title","OneLookFinanceApplicationButton","isEstimateDirty","metadataName","PricePresentationButton","enhancedPricePresentationEnabled","isTokenValid","Switch","Route","PaginationControl","pageChanged","handlePageChange","Pagination","Ellipsis","current_page","preEllipsis","preArrow","postEllipsis","postArrow","pre","preNumber","Item","Prev","available","postNumber","Next","First","Last","load","listReports","reportable_id","reportable_type","Table","striped","order_result","error_message","estimateGroup","classy","newly_added","optionsType","backwards","existingImages","existingSingleSelectOption","optionGroupId","existingEliForProductOption","productOptionUuid","calc_method","isVisible","isCustom","optionsTotal","memo","retrocycle","blah","openable_id","fromJson","from","setProduct","setDescription","product_uuid","markupable","product_image_urls","estimate_doc_urls","contract_doc_urls","windowPriceAdjustment","bracket_type","opening_ui","openable","total_ui","base_measure","perName","calculateWindowPrice","opening_area","total_area","setCustomProduct","checkDescription","splitName","part","leafName","currentMin","openingEstimationMeasurement","forceToZero","compareOptions","newOptionGroups","matchedOptions","rejectedOptions","quantities","elioProductOptionGroup","elioProductOption","new_pog","nog","new_po","orig_estimate_group_id","validated","validation_results","estimate_group_id","options_attributes","images_attributes","documents_attributes","opening_estimations_attributes","IsOptionSelected","perform","toJsonObj","Discount","EstimateGroup","tax_rate","taxable_amount","default_taxable_amount","estimated_start","estimated_end","cloneSalesTax","updateSalesTax","salesTax","updateTotal","updateTaxTotal","totals","compact","sum","labor","product_total","labor_total","discountable_total","existingLineItems","groupResource","line_items_attributes","room_estimations_attributes","timezoneDate","doOrder","li","validationFromItemUuid","itemUuid","validationsById","validationId","validationMessage","resultMessage","optional","requiredSelection","resultOptionsMessage","photo_upload_required","resultPhotoUploadMessage","defaultMessage","categories","qty_met","qty_required","custom_message","validateLineItem","productResult","validateLineItemProduct","validation_result","optionGroupsResult","validateLineItemOptionGroups","findValidation","required_categories","findLineItemProduct","product_uuids","required_categories_message","difference","min_required_qty","categories_message","photo_upload_message","requiredSelectionCount","required_selection_count","selectedOptions","required_selection_count_message","uuids","lineItems","checkLineItemProduct","memoize","EstimatePrototype","existingGroups","createGroup","room_id","estimate_group","orderGroups","pairs","toEstimateDataJSON","updateEstimateFinanceOptionPayments","financeOptionIds","financedAmount","financed_amount","calculateCalculatedFinancing","estimateFinanceOptionId","getSortOrder","currentMax","getLineItemId","requestTransform","groups_attributes","estimate_finance_options_attributes","originalGroup","ga","groupDeleteIndex","liData","$resolved","requestData","responseSingleTransform","paramSerializer","ms_upload","createNew","newE","AddLineItemOption","eli","RemoveLineItemOption","option_uuid","toRemove","RadioCircle","checked","inputClassName","CheckCircle","RadioVertical","Group","Label","AddEstimateLineItemCmd","addMeasurementLink","max_line_item","setupEstimate","productIds","children_ids","cmd","addDefaultOptions","checkValidations","resetEstimateState","setGroupVisibility","edited_group","setVisibility","checkGroupVisibility","it","setInclusion","setGroupIncluded","ImagePickerModal","setShow","selectedImages","setSelectedImage","clearSelectedImages","selectMultiple","setSelectedImages","curImages","useSelectedImages","handleClose","closeHandler","borderClass","selectionHandler","selectedEventKey","triggerExpand","isIncluded","ConfirmDialogService","initialLineItem","showImagePickerModal","setShowImagePickerModal","optionGroups","conditionGroup","og","conditionGroupOptions","goodConditionPo","issuesGroup","issuesGroupOptions","inclusionChanged","onFilesUpload","getObject","setQueue","imgBlob","lg","onError","accepts","multiple","maxFileSize","minFileSize","clickable","rows","deletePhoto","setSelectedEventKey","activeKey","InspectionSelectorModal","inspections","onArchive","localInspections","setLocalInspections","archiving","setArchiving","dispatchOnMount","handleSelect","ListGroup","cursor","dateString","toLocaleDateString","toLocaleTimeString","formatDate","ButtonGroup","pointerEvents","spin","inspectionId","DirtyMergeImpl","checkFn","resetFn","trackEventFn","Inspection","setEstimate","hasPriceList","setHasPriceList","setDirty","showInspectionSelector","setShowInspectionSelector","multipleInspections","setMultipleInspections","listImages","imageableId","imageableType","updatedEstimate","newCheck","checkEstimateState","dirtyMerge","loadInspection","fetchedJob","updatedInspections","newEstimate","priceListPromise","handleArchiveInspection","openManageInspections","cleanFileQueue","saveEstimate","directUploadFileQueue","includeGroup","renderCheckBox","uniqueId","Tabs","Tab","tabClassName","Dropdown","bsPrefix","Menu","track","InspectionContainer","SlideComponent","renderSlide","cover_image","small","showToggle","toggle","activeDynamicLinks","dynamic_links","dl","slideSelected","dynamicPresentation","slideId","presentable_id","orgPresentations","newPresentationIds","newSlideIds","presentation_id","flatMap","removeSlide","dls","addSlide","presIds","updatedSlides","grouped","inspectionLinkIdx","inspectionLink","firstOfSecondIdx","presentable_type","finalDynamicLinks","dsSlideIdx","moveSlide","allSlides","fromIndex","toIndex","setupDynamicLinkSlides","existingSlides","getOrgPresentationTemplates","ListPicker","renderTemplates","templates","onClose","ManagementItem","editName","updateName","updateTemplate","startEditName","Control","confirmUpdate","confirmDelete","createTemplate","addPresentationTemplate","updateTemplateName","updatePresentationTemplate","removeTemplate","deletePresentation","Management","newName","setNewName","deleteTemplate","saveNew","closeWindow","controlId","clearName","ptr","updatedPtr","InspectionSlide","InspectionSlides","updatePresentation","DynamicPresentationComponent","sliderRef","showTemplates","showTemplateEditor","dynamicSlides","currentlyReordering","applyTemplate","selectTemplate","closeTemplatePicker","editTemplate","closeTemplateEditor","onDragEnd","reorderPresentation","destination","source","pres","_s","goTo","noSlidesView","direction","droppableId","provided","snapshot","innerRef","droppableProps","draggableId","isDragDisabled","draggableProps","dragHandleProps","PresentationComponent","_tooltip","Tooltip","addSlides","removeSlides","addSlidesBuilderPresentation","removeSlidesBuilderPresentation","PresentationOverview","presentationsById","jobPresentationIds","getOrgPresentations","getFirstJobPresentation","dirtyWatcherTitle","ReactRouterDirtyWatcher","validPathTest","useHistory","setOpenDialog","currentPath","setCurrentPath","currentSearch","setCurrentSearch","unblockRef","block","prompt","prevOpenDialog","handleOK","onRefresh","navigate","_locationChangeBinding","transition","_deferred","returnValue","reactRouter","jobPresentation","jobPresentations","loadJobPresentation","listJobPresentations","loadOrgPresentations","listOrgPresentations","saveDynamicPresentation","addJobPresentation","removePresentation","removeJobPresentation","loadTemplates","listPresentationTemplates","PresentationBuilderContainer","savedState","isNew","goToPresentation","savePresentation","resetState","checkInspectionSlide","dplIndex","dpl","dpls","op","slideIds","tplSlides","slideIdx","newSlide","ps","occPayAuthorized","authId","canPaymentReport","canDepositReport","canChargebackReport","defaultActiveTab","activeTab","setActiveTab","forceActiveTab","iframeUrl","capitalizeString","titleCaseString","RenderedFieldsContext","createContext","renderedFields","addRenderedField","RenderedFieldsProvider","setRenderedFields","prevFields","UniqueFormInput","useContext","shouldShow","setShouldShow","integrationKey","FormInput","hideOnNull","rootMetadata","canUpdate","Lead","onUpdate","Opportunity","Custom","editableSalesforceValues","editableRootSalesforceValues","Salesforce","salesforceAuthorized","Classic","Lightning","Improveit360","improveit360Authorized","TokenCheck","Marketsharp","LeadPerfection","authorizedTokens","isOpen","setIsOpen","listCustomForms","margin","ReadOnlyForm","schema","uiSchema","norender","validator","readonly","Content","ProductColorDropdown","$watchGroup","current_product","includeParent","colorChanged","cp","selectCurrentProduct","productSetup","BrowserDetection","isBrowserMs11","isBrowserMs","isBrowserMobile","MSStream","isBrowserSafari","isMobileIOS","CalendarCtrl","EventService","startOf","subtract","endOf","autoBind","allDaySlot","getDataSource","getSchedulerResourceDatasource","edit","isEditable","dateCompare","greaterDate","startDate","endDate","theReturn","trackEvents","dateSource","getPeriod","_dateSource","read","scrollToCurrent","schedulerOptions","changed","resizeEnd","userResponse","scheduler","getSchedulerDatasource","preCreate","postRead","getResources","editableEvent","cronofy_id","selectedUsers","time","setMinutes","setSeconds","setMilliseconds","contentDiv","slot","slotByElement","slotTime","_scrollTo","AppointmentCreatorCtrl","buildDataSource","additional_info","jobName","cronofy","invite_attendees","inviteAttendee","dataBound","modalInstance","closed","at","editEvent","getSchedulerOptions","AppointmentCreator","SchedulerDataSource","transport","jobParams","crudServiceBaseUrl","userParams","orgParams","responses","resourceId","lastData","patch","fields","defaultValue","nullable","cronofy_invite_attendees","dataColorField","subUnitOfTime","unitOfTime","Task","watch","timeout","joined","InviteModal","invite","ResultModalCtrl","Result","ResultReason","eventSrc","resultWindow","sendResults","windowClosed","reason_id","ResultModal","CalendarProviderUnit","factoryFunction","defaultContextProps","dateRange","setDateRange","setUserIds","setEventColor","ContextRecord","Context","composeValidators","validators","dataStr","checkRequired","commaSeparatedEmail","ButtonFooter","saveButtonProps","deleteButtonProps","cancelButtonProps","itemName","saveText","EditAppointmentModal","useRouteMatch","showError","setShowError","prevPath","resetEvent","createOrUpdate","autoFocus","EventsCalendar","onDateChange","disabledViews","eventAddDisabled","calendarEvents","startEditable","durationEditable","availableViews","interaction","bootstrap","themeSystem","headerToolbar","businessHours","buttonText","month","week","day","initialView","eventsSet","lookup","duplicatedEvents","evt","arg","newEvent","initDescription","initializeEvent","eventChange","updateTime","eventClick","datesSet","nowIndicator","selectable","selectMirror","UserFilter","onUsersChange","selectOptions","selectValues","generateColors","zIndex","valueContainer","minWidth","maxHeight","overflowY","newList","JobsToAssignDropdown","selectedUserId","selectedUser","selectValue","singleValue","alignItems","content","marginRight","selectedOption","jobAssignedEvents","localLoading","setLocalLoading","setUserToAssignId","clearPage","loadToAssignEvents","job_assigned_user_id","loadUserEvents","newUserToAssignId","newUsersList","Conversion","receiveReduxJob","estimateRecord","previous_id","reduxEstimate","getReduxEstimate","assign","getReduxJob","getReduxOrg","loadActivatedPriceList","getCached","initializeTaxes","_a","_b","_c","_d","initializeMarkup","markup","product_default","labor_default","initializePaymentTerms","paymentTerms","ptid","estimateKind","setupEstimatorService","setupMeasurementLinks","estimateResource","fetchEstimate","receiveAndSetReduxEstimate","generatePdf","generateCsv","showMessage","find_link","measure_value","measurement_uom","measurement_to_uom","formula","formula_uom","measurementLabel","room_estimation","isRecord","roomColumnKeys","setVariable","setupFormulaParser","calculateRoomFormula","linksById","parent_product","EstimateTemplate","setupNewTemplate","eg","custom_product","setupCustomProduct","setupTemplate","est_template","etg","customProduct","setupTemplateProductsOptions","productUuid","optionsByProductId","setMeasurement","receiveReduxMeasurement","ptog_links","opt_uuid","cmd_po","addEstimateDefaultOptions","opt_match_id","pog_match_id","option_group_uuid","lineItemEditorOpen","prettyOpenings","input_array","openings","mapObject","oes","_location","prettyOpeningsSize","opening_text","receiveReduxEstimate","receiveEstimate","receiveReduxOrg","receiveMeasurement","fullEstimate","getReduxMeasurement","checkReduxFencing","fetchByMeasurementId","_errorsShown","_errors","setupEstimateLineItems","setupMeasurement","line_item","openable_type","MeasurementLink","measurement_links","EditLineItemCmd","dest","switched","fromGroup","AddProviaOrderCmd","line","hasLineItemPricing","sellprice","extcost","new_product","qty","combineOptions","tagno","comments","extsellprice","useprice","imageurl","getRemoteFile","sellpricelabor","labor_product","labor_cmd","total_price","sum_product","sum_cmd","AddFeneTechOrderCmd","subLineItemOptions","subLineItems","newLine","subLineItem","subLi","formattedPart","displayWidth","displayHeight","newProduct","imageBlob","setLineItem","optionValue","unitPrice","AddProductFromXmlCmd","xml_data","FileQueue","xml_type","getObjectBlob","parseWTSParadigm","parseSealRite","parseMarvin","parseAndersenIQ","parseSaberisDaVinci","raw_object","SaberisImportDocument","Order","saberisItem","Model","ProductDescription","Quantity","UnitSelling","hardware","Hardware","int_color","IntColour","ext_color","ExtColour","frame_wh","FrameWH","rso","RSO","theQuantity","theProductPrice","imageAndersenIq","m2oFile","m2oOrder","Unit","unitAndersenIq","Composite","compositeAndersenIq","PRODLINE","findWhere","Attribute","Name","PROD","PRODTYPE","QUOTE_QUANTITY","Total_Price_in_USD","DescCode","totalPrice","Accessory","acc","quote","lineitemmasters","lineitemmaster","nameWTSParadigm","descriptionWTSParadigm","Value","priceWTSParadigm","lineitems","lineitem","imageWTSParadigm","category1","category2","category3","category4","category5","extradata","extrafields","clsNameValues","clsnamevalue","clsN","bmp","customerprice","Project","Description","Qty","Price","Lines","LineItem","nameMarvin","descriptionMarvin","AssemblyInfo","MarvinAssembly","Brand","Series","AddEstimateFromOccImportCmd","valid_kind","valid_uom","typeIndex","isHeaderInvalid","overall_defer","parseProducts","addProductsToEstimate","addDiscountsToEstimate","discount_setup","isKindInvalid","new_discount","group_index","image_url","document_url","isUomInvalid","isIncludedInvalid","parseVisibility","parseBool","valid_headers","feedback","valid_h","valid_unit","valid_k","parsed_v","EditSalesTaxCmd","_oldSalesTax","AddProductFromXlsxCmd","xlsx_data","xlsx_type","isMarvin","columns","marvinValues","row","EstimateEditorCtrl","EstimatorTourService","$document","estimated_start_opened","estimated_end_opened","formatYear","minDate","startingDay","navListener","setTotalSection","setDiscountAndPaymentEstimator","helpListener","_calculatedFinancingSub","lineItemEmitSave","continueOn","editLineItem","mergeQueue","newEstimateLineItem","temp_queue","selectedLineItem","oldEstimateLineItem","lineItemEdited","collapsedView","_handle_opening","modalSetup","_handle_fenetech","setCalculatedFinancingsLoading","tourEditNameAction","capitalizeTemplate","addPaymentTermTemplate","addPaymentTermItem","removePaymentTermItem","updatePaymentTermItem","markupUpdated","saveAsCallback","selectTemplateCallback","editNameStatus","updateMinDate","addGroupTabs","priceListCurrent","addProductCalled","show_product_selector","addLineItem","showTotalSection","showDiscountAndPaymentEstimator","calculatedFinancingsLoading","salesTaxUpdated","salesTaxable","openDate","popups","endDateOptions","removable","windowModal","modalActive","scrollIntoView","getElementById","scrollElementIntoView","behavior","finalOffset","getBoundingClientRect","showEditName","deleteEstimate","closeEstimate","productModal","selectedItem","checkGroup","_handle_custom","lineItemEditing","togglePaymentOptionEditor","setPaymentOptionEditorVisible","_handle_product","estimate_group_name","_handle_template","estimateImportOptions","_handle_provia","_handle_xml","_handle_xlsx","product_string","_handle_occ_import","add_products","replaceEstimate","mergeEstimate","removeGroup","clearQueue","addGroup","activeGroupTab","$$hashKey","add_template","estimate_template","addTemplate","add_interior_template","selectedRoomIds","roomQty","groupRooms","addInteriorTemplate","add_occ_import","saveAsTemplate","confirmSaveAsTemplate","selectorMode","addFilesToTemplate","et","uploadFileQueue","uploadFromLineItemFiles","parentProduct","parentChildren","eventingFactory","estimateTemplateModal","showEstimateComparisons","openDrawer","payment_term_template","payment_term","ptis","pti","discountAdded","discountUpdated","discountRemoved","hidePriceListCaution","nav_display","collapseChanged","estimateCtrl","checkTemplate","estimate_templates","margins","duplicateEstimate","newEstimateId","openEmailOrderCsv","openManualTrigger","ProviaApi","fetchOrders","portal","password","transformMultipleOrders","orders","fetchOrderId","order_number","transformSingleOrder","orderfile","listprice","ProductSelectorCtrl","showSearch","makeTemplateSelection","makeProviaSelection","showProviaLogin","showProvia","showProductFileUpload","showBack","proviaLogin","showProviaOrders","selectOrder","order_resp","back","chooseTemplates","fileType","batchCreateDocument","documentableType","documentableId","disableFlash","newFile","FileReader","readXlsxFile","readXmlFile","onload","fileString","readAsDataURL","wb","Sheets","sheet_to_json","readAsBinaryString","getProviaData","LoanCalcCtrl","finance","Finance","LoanCalc","DiscountEditorCtrl","showing","editorParams","setupDiscounts","dis","disRec","added","removed","_findId","DiscountEditor","GroupDiscountEditorCtrl","GroupDiscountEditor","SortableOptions","originals","sortableFirst","wscrolltop","TemplateEditorCtrl","templateName","sortableOptions","EstimateLineItemComponentCtrl","columnWidths","descriptionStyle","detailsStyle","quantityStyle","pricingStyle","fullTitles","showPricingInLineItemEditor","lineItemImage","lineItemOptionImage","moveLineItemGroup","saveLineItem","saveConfirmed","clearTempQueue","cancelEdit","removeLineItem","addOpening","importSelected","feneTechOrderSelected","onFileDestroy","onFileChange","EstimateLineItemComponent","groupType","hiddenLineItems","ReorderLineItems","originalOrder","updatedOrder","RemoveEstimateLineItemCmd","removedLineItem","EditLineItemGroupCmd","destGroup","EstimateGroupComponentCtrl","receive","sortable","_reorderCommand","connectWith","prevTourEditNameAction","startGroupEdit","saveGroupEdit","descriptionColumns","detailsColumns","getGroupType","onRemove","groupTotal","next","group_id","group_name","group_included","focusHere","hideTitles","toggleIncluded","EstimateGroupComponent","addProduct","$index","OpeningsWizard","$anchorScroll","bracket","openingFilter","measurementIncludes","_setupOpenings","groupOpenings","markupableBool","showMarkupable","addingGroup","selectAnnotations","quantity_compare","manualEstimation","gotoStep","showQuantity","activeOptionGroupTab","activeStep","switch_products","manualEstimationOpening","selected_quantity","selectedOpenings","selectAll","opening_filter","filterOpenings","unselectAll","allSelected","collection","unselect","selectOption","unselectOption","addedOption","initOptionQuantity","optionQuantityChanged","pricingChanged","addProducts","updateLineItemOptions","changeEliProduct","new_product_id","changeEliProductAndOptions","updatingProduct","new_options","rejected_options","confirmedChangeProduct","new_opt","blurTypeAhead","show_switch","finishAddProduct","groupedOpenings","siblings","cancelEditAndGoBack","_cancel","selectedAnnotations","cancelEditAndClose","addOpeningQuantity","cancelAddProductAndClose","calculateProductOptionPrice","highlightGroup","startAddingOpening","cancelEditingOpening","addingOpenings","selectedOpening","saveState","startEditingOpening","cancelAddingOpening","editingOpenings","saveOpening","checkState","resetMeasurements","saveMeasurements","goManual","editEstimateLineItemOpenings","editingEstimateLineItemOpenings","updateOpeningsSelection","cancelOpeningsSelection","goBackToMeasurements","goToAddOpenings","goToBrackets","filterChanged","toggleShowSwitch","switch_search","selectTypeAhead","childProducts","min_ui","max_ui","setDefaultOptions","useDefaultOptions","updateMarkupable","unzip","SalesTaxEditorCtrl","showingTax","estimateOrGroup","updateTax","SalesTaxEditor","AbstractWizardController","isStepValid","step","nextStep","wall_facade","WallFacade","WindowAnnotatingComponentCtrl","_sendInviteSubscribe","startRefreshing","refreshImages","_currentId","_event","allAnnotations","ann","propChanged","shape","class","_updateWallFacade","noAnnotationImages","addElevation","Elevation","abbrSet","editElevation","measureElevation","saveMeasurement","measurementClone","removeAnnotation","nameChanged","abbrChanged","property_changed","annotation_count","annotation_ids","toggleOpeningType","annotationsUpdated","existingGuids","needToAdd","toMatch","anySelected","selectNone","saveAnnotations","showMeasurer","measurementsUpdated","cancelAnnotations","cancelAddingElevation","allWallFacades","elevation_count","renderedElevations","saving","dataUrl","wf","deleteWallFacade","openSendInviteModal","imageable_type_url","imageable_id","lastCall","preImageCount","hydratedMeasurement","siding_5pw_total_area","siding_10pw_total_area","siding_15pw_total_area","siding_18pw_total_area","facade","measuredArea","WindowAnnotatingComponent","SearchBox","searching","containerProps","inputProps","localQuery","setLocalQuery","debouncedSearch","newQuery","usePrevious","fenetechFetcher","flashDispatch","ok","responseBody","errorHelper","FeneTechModal","openFeneTech","makeSelection","initialManufacturer","previousTriggerOpen","setOpen","loginUrl","setLoginUrl","setPassword","showQuotesList","setShowQuotesList","quotesList","setQuotesList","setIsLoading","getImage","oKey","imageAccessKey","baseUrl","odKey","isOrder","getLineItemImage","bordered","selectQuote","getQuoteFull","thumbnailImageExists","orderNumber","customerRef","poNumber","webCenterCustomerName","authType","updatedUrl","login","quotesListResponse","quotesUrl","_ownProps","feneTechToken","getProviaToken","getFeneTechToken","ProductSelector","eventListener","handleClick","lineItemProductId","rootProducts","productLeaves","currentSelection","rootTree","est_tour","estimator_tour","tour","listOpen","mount","lineItemProduct","parentParent","productChildren","noMatch","searchText","selectedProduct","searchSelection","chosenManufacturer","makeFenetechSelection","toggleList","unmount","setCurrentSelection","handleProductSelected","handleOpeningSelected","makeImportSelection","handleImportSelected","backSelection","newParent","newParentParent","lowercaseQuery","leaf","node","boxName","fileImport","importIcon","proviaObj","feneTechEnabled","non_portal","show_product_file_upload","importEnabled","feneTechManufacturers","Fragment","markupEnabled","LineItemInput","toggleEditing","priceEdit","handleMarkupChange","full","productName","handleNumberInputChange","descriptionRow","descriptionCol","Check","BaseMeasurementCard","UsageButtons","FencingMeasurementCard","panels4","panels6","panels8","segmentCount","panelsCount","terminalPosts","cornerPosts","sidx","roofFaceIds","roof_face_ids","wall_facade_ids","window_ids","door_ids","deck_ids","pool_ids","section","MeasurementsTab","roofingKeys","sidingKeys","sunroomKeys","handleUseMeasurement","measurementCard","measurementRow","faceRow","face","include_pitch","openingRow","include_ui","deckRow","poolRow","showMeasurement","panels","win","rf","FilesTab","handleFile","onFilesError","resourceList","fileRow","handleFileChange","handleFileDestroy","ev","noFiles","ProductOptionsTab","optionsById","checkOptionQuantity","handleQtyChange","eventValue","editedOptionsById","optionRow","OverlayTrigger","placement","overlay","medium","optionRows","hasMeasurements","LineItemEditorTabs","handleTabSelect","tab","active_tabs","getActiveTabs","activeTabs","forceRender","pogs","_get_options","options_tab","_get_measurements","_get_files","pog_id","cd","LineItemEditor","handleSave","handleCancel","handleDelete","editedLineItem","convertedValue","footerButtons","productSelector","ItemEditor","changeAmount","changeDesc","changeKind","changePaymentMethod","deleteItem","setAmount","setDesc","setKind","paymentMethod","setPaymentMethod","showPaymentTermEditorPricing","showPaymentTermDisplay","previousView","paymentTerm","updateItem","renderDisplay","renderEdit","renderEasyEdit","changeView","templateChanged","changeDescription","changeNumber","addItem","amountDescriptionCol","col1","doneButton","doneElement","paymentTermElement","newView","updateState","desc","removeItem","templateId","editEstimateName","InlineEditor","getHeaderElement","InputGroup","Append","Text","estimateName","estimateLineItemId","ApplicationButtons","showPrequalificationButton","applyNow","addToolTip","delay","applyNowValidator","applyNowBtn","_financeOption","calculateFinanceOptions","reduxCalculateCalculatedFinancing","FinanceOptionDisplay","calculatedFinancing","monthly_payment","promo_payment","promo_term","promo_rate","finance_option_ids","sortedFinanceOptions","filterValidation","estimateFinanceOptionIds","calculatedFinancings","addFinanceOption","financeOptionId","removeFinanceOption","PaymentOptionsList","addOrRemoveFinanceOption","financeOptionHasRequiredData","efo","checkValue","estimateFinanceOption","finance_option_id","prevFinancedAmount","estimateFOIds","PaymentOptions","editSort","newSort","PaymentChooserWrapper","rangeString","range","Range","asterisk","removeEstimateComparisonLink","EstimateView","toggleAllLineItems","toggleOtherActiveKey","navigateToEstimate","showAllItems","otherActiveKey","getFinancedTotalDisplay","getLineItemsDisplay","lineItemDisplay","goToEstimate","accordionToggle","defaultActiveKey","defaultRecordsForEstimateProps","estimateLineItemOpeningEstimations","estimateLineItemImages","estimateLineItemDocuments","RecordsForEstimateRecord","estimateGroupIds","group_ids","lastSavedEstimateGroups","lastSavedEstimateFinanceOptions","estimateLineItemIds","lastSavedEstimateLineItems","estimateLineItemOptionIds","lastSavedEstimateLineItemOptions","estimateLineItemImageIds","lastSavedEstimateLineItemImages","estimateLineItemDocumentIds","lastSavedEstimateLineItemDocuments","openingEstimationIds","lastSavedEstimateLineItemOpeningEstimations","line_item_ids","opening_estimation_ids","recordsForEstimate","lastSavedRecordsForEstimate","estimateRecords","lastSavedEstimateRecords","estimateComparisonLinks","jobEstimateComparisonLinks","estimateComparisonChange","lastSavedEstimateComparison","lastSavedEstimate","unsavedEstimateId","jobOverviewEstimates","Comparator","newKey","comparison","calculatedFinancingsEstimatesLoading","DrawerContainer","loadEstimates","drawerToggle","saveComparison","viewEstimateComparison","showDrawer","hideDrawer","buildEstimateComparison","receiveEstimateComparison","estimate_comparison","saveEstimateComparison","getJob","getJobEstimates","PriceDrawer","closeDrawer","saveAndHideDrawer","product_min","product_max","labor_min","labor_max","MarkupEditor","handleNumberChange","toggleShow","markups","displayEditor","RsfFinalForm","lastUpdatedValues","initialValues","formUpdate","mutators","keepDirtyOnReinitialize","initialValuesEqual","formProps","handleSubmit","subscription","BootstrapInputAdapter","storevalue","customOnChange","inputCopy","flexBasis","submitError","lastSavedFolder","folderChanged","updateOrCreateFolder","archiveFolder","removeFolder","resetFolder","Folder","componentRef","handleNameChange","handleClickOutside","setDragLock","cancelable","bubbles","closeEditing","dragHandle","readOnly","dragLock","DropdownButton","drop","MiniFolder","DefaultContainer","Sortable","Container","renderItem","disableDrag","sortableItems","activeId","setActiveId","sensors","coordinateGetter","ItemContainer","collisionDetection","onDragStart","onDragCancel","over","oldIndex","newIndex","modifiers","strategy","SortableItem","createPortal","setNodeRef","transform","isDragging","Transform","outline","GridContainer","columnWidth","gridTemplateColumns","BreadCrumbs","showRoot","BreadCrumbWrapper","folderIds","createFolder","FileTypeFolderName","onSortEnd","Folders","handleCreate","miniView","StandardPagination","IncludeCheckBox","destroyEstimateTemplate","updateEstimateTemplate","batchUpdateEstimateTemplate","resetEstimateTemplate","checkBoxOnChange","handleKeyPress","Popover","alt","onKeyPress","checkboxType","templateQueryParams","selectedCheck","listEstimateTemplates","batchEditSelected","EstimateTemplates","queryEstimateTemplates","setReadOnly","moveFiles","DropdownItem","icon","folderName","MoveFilesDropdown","onToggle","_isOpen","SelectRooms","toggleRoom","toggleGroupRooms","toggleAllRooms","roomValuesById","listFolders","EstimateTemplateModal","interior","selectedInteriorTemplate","handleShow","handleInteriorChange","handleSaveAs","cancelRooms","handleInteriorAdd","newQueryParams","editableFolder","interiorEnabled","flexShrink","currentJobId","fnMktAuthorized","fmUserCheck","crmUserType","crmUserCheck","FinanceOptionsButton","Formula","estimateTotal","assignedUserId","overhead","notSet","commissionRate","formulaResult","setFormulaResult","getAccess","parseFormula","parserResult","MarginWithOverhead","fluid","DownloadCommissionButton","getCommissionPdf","Calculations","estimateCommission","generated_by_user_name","output","verbose_output_objects","CopyToClipboardButton","contentDescription","writeText","CommissionCalculatorModal","isEstimateLoading","calculatorMethod","estimateCommissionSummary","commissionMethod","custom","greenline","calculateEstimateCommission","popover","isActivatedPriceList","apl_current","showOverlay","marginWithOverhead","setShowModal","RoomMeasurementTable","VisualizeRoom","RoomMeasurementInfo","ceiling1","ceiling2","flooring1","flooring2","walls1","walls2","general","accordionControl","setAccordionControl","ceiling","flooring","walls","initRsfForm","setInitRsfForm","rootPathname","destroyRoom","toggleAccordion","accordionName","roomEstimationTitle","IndividualRoom","roomValues","roomKeys","setActiveKey","GroupedRooms","roomRecords","ScreenShareShowCtrl","loadScreenShare","CUSTOMER_URL","refreshScreenShare","retries","screenshare","landing","viewerUrl","showScreenShare","timeoutInterval","ScreenShareJoinCtrl","openViewer","ScreenShareIndexCtrl","screenShareResponse","ScreenShareHostCtrl","selectedParticipantContext","useSelectedParticipant","selectedParticipant","setSelectedParticipant","SelectedParticipantProvider","_setSelectedParticipant","onDisconnect","participant","prevParticipant","newParticipant","identity","useVideoContext","VideoContext","useLocalVideoToggle","localParticipant","localTracks","getLocalVideoTrack","videoTrack","toggleVideoEnabled","localTrackPublication","unpublishTrack","emit","publishTrack","priority","AttachVisibilityHandler","isVideoEnabled","shouldRepublishVideoOnForeground","handleVisibilityChange","visibilityState","BlurTypes","LocalStorageKeys","FlashAlertContext","useFlashAlert","flashAlert","FlashAlertProvider","notifier","ensureMediaPermissions","mediaDevices","enumerateDevices","devices","deviceId","shouldAskForMediaPermissions","videoConstraints","getUserMedia","audio","video","mediaStream","getTracks","TwilioVideo","useLocalStorage","initialValue","storedValue","setStoredValue","valueToStore","VideoProvider","roomParams","joinRoom","onErrorCallback","getLocalAudioTrack","isVideoTrackLoading","audioTrack","setTrack","AudioInputId","exact","newTrack","handleStopped","useLocalAudioTrack","VideoInputId","graphicsSettings","GraphicsSetting","reduceResolution","ReduceResolution","defaultPipeline","WebGL2","Canvas2D","pipeline","resolution","frameRate","backgroundSetting","SelectedBackground","baseOptions","assetsPath","maskBlurRadius","backgroundProcessor","Full","Slight","blurFilterRadius","CustomBackgrounds","decode","backgroundImage","loadModel","addProcessor","inputFrameBufferType","outputFrameBufferContextType","useLocalVideoTrack","useLocalTracks","isConnecting","setRoom","EventEmitter","setIsConnecting","localTracksRef","tracks","newRoom","disconnect","once","twilioRoom","useRoom","activeSinkId","setActiveSinkId","AudioOutputId","useActiveSink","onDisconnected","useHandleRoomDisconnectionErrors","useHandleTrackPublicationFailed","useHandleOnDisconnect","useRoomState","setRoomState","VideoTrack","isLocal","el","muted","setPriority","attach","detach","isFrontFacing","mediaStreamTrack","getSettings","facingMode","ToggleVideoButton","useIsTrackEnabled","isEnabled","setIsEnabled","setEnabled","setDisabled","ToggleAudioButton","isAudioEnabled","toggleAudioEnabled","audio_preference","useLocalAudioToggle","openWebCamModal","closeWebCamModal","startScreenShare","stopScreenShare","startFallbackScreenShare","Toolbar","openInviteModal","showSendInvite","screen_share_icon","screenShareIcon","web_cam_icon","webCamIcon","sendInviteIcon","screenShareKindIcon","ToggleFullscreenButton","showInvite","useDevices","setDevices","getDevices","clipId","AudioContext","webkitAudioContext","audioContext","initializeAnalyser","stream","MediaStream","audioSource","createMediaStreamSource","analyser","createAnalyser","smoothingTimeConstant","fftSize","SIZE","isTrackEnabled","SVGClipElement","reinitializeAnalyser","sampleArray","frequencyBinCount","timer","interval","getByteFrequencyData","log10","clipPathId","focusable","viewBox","fill","clipPath","LocalAudioLevelIndicator","AudioInputList","audioInputDevices","selectedDevice","setSelectedDevice","localAudioTrack","replaceTrack","newDeviceId","audioInputName","audioInputId","VideoInputList","videoInputDevices","fileInputRef","setBackground","customBackgrounds","setCustomBackgrounds","selectedVideoDeviceId","setSelectedVideoDeviceId","localVideoTrack","localVideoInputDeviceId","newBackground","videoInputName","videoInputId","activeStyle","backgroundOption","handleBackgroundSelect","handleVideoInputChange","flex","backgroundSize","deleteBackground","AudioOutputList","audioOutputDevices","activeOutputLabel","defaultGraphicsSetting","Pipeline","graphicsSetting","setGraphicsSetting","setReduceResolution","handleGraphicSettingChange","setting","graphics","labelStyles","Input","DeviceSelector","useHeight","setHeight","isReconnecting","joinButtonMessage","titleMessage","roomName","host","videoHeight","roomUid","usePublications","publications","setPublications","publicationAdded","publication","prevPublications","publicationRemoved","useTrack","removeTrack","useIsTrackSwitchedOff","isSwitchedOff","setIsSwitchedOff","handleSwitchedOff","handleSwitchedOn","BandwidthWarning","NetworkQualityLevel","qualityLevel","ParticipantConnectionIndicator","setIsReconnecting","handleReconnecting","handleReconnected","useParticipantIsReconnecting","ParticipantInfo","isSelected","remoteParticipant","audioPublication","videoPublication","trackName","networkQualityLevel","setNetworkQualityLevel","handleNewtorkQualityLevelChange","newNetworkQualityLevel","useParticipantNetworkQualityLevel","isScreenShareEnabled","isVideoSwitchedOff","hostPower","removeParticipant","sid","remoteClass","AudioTrack","audioEl","setSinkId","Publication","disableAudio","videoPriority","ParticipantTracks","isScreenShared","enableScreenShare","localPublications","filteredPublications","screenSharePublication","Participant","useParticipants","enableMessages","participants","setParticipants","useNotifier","participantConnected","prevParticipants","participantDisconnected","ParticipantStrip","useScreenShareParticipant","screenShareParticipant","setScreenShareParticipant","updateScreenShareParticipant","ToggleScreenShareButton","toggleScreenShare","disableScreenShareButton","isScreenShareSupported","getDisplayMedia","isDisabled","tooltipMessage","EndCallButton","FlipCameraButton","supportsFacingMode","setSupportsFacingMode","toggleFacingMode","newFacingMode","newVideoTrack","cameraDirection","Controls","roomState","isUserActive","setIsUserActive","timeoutIDRef","handleUserActivity","timeoutID","useIsUserActive","showControls","MainParticipantInfo","MainParticipant","mainParticipant","dominantSpeaker","setDominantSpeaker","handleDominantSpeakerChanged","newDominantSpeaker","handleParticipantDisconnected","prevDominantSpeaker","useDominantSpeaker","useMainSpeaker","isSharing","setIsSharing","stopScreenShareRef","shareScreen","trackPublication","onended","useScreenShareToggle","Main","preMeeting","BrowserSupportModal","connectionOptions","bandwidthProfile","dominantSpeakerPriority","renderDimensions","high","low","networkQuality","local","remote","maxAudioBitrate","preferredVideoCodecs","codec","simulcast","TwilioApp","leaveRoom","addFlashMessage","audioPreference","notifierAddRemoteMessage","maxSubscriptionBitrate","joinOrAddScreenShareRoom","getRoomStatus","screenShareId","Host","stateReady","Attendee","room_name","jobUid","attendee_audio","ProfileCtrl","OrgResource","CalendarResource","StripeCheckout","calendarResponse","readOnlyOrg","cronofyUrl","resetFormState","updateUserNotifications","setNotificationError","tabSelected","showUserTab","notificationError","userTabSelected","deleteImage","logoId","saveUserForm","$valid","syncEvents","$syncEvents","saveCalendarForm","$pristine","cal","$setPristine","saveOrgForm","_orgIncludes","combinedToJson","resetDefer","AcceptTosCtrl","accepted_tos","DEFAULT_ROUTE","AlertCtrl","ErrorCtrl","hasMultipleAccesses","accesses_count","currentSavedLocationState","clearSavedLocationState","setSavedLocationState","PermissionsErrorPage","savedLocation","withMultipleAccesses","withSingleAccess","setSaveLocation","homeClicked","Jumbotron","onClickCapture","tasksById","ListComponent","renderHeader","renderBody","renderTask","progress_string","class_name","Notifications","validPhone","validEmail","notificationOnChange","renderCheckboxes","userPreferences","smsNumber","phoneOptions","ClearWorkersButton","clearWorkers","serviceWorker","getRegistrations","registration","unregister","caches","cacheName","AuthHttpInterceptor","$injector","rejection","intercepted","abstract","session","inRecovery","recoveryPromise","getLoginRoute","setRefreshTokenExpired","FakeFormAction","SignatureRedirectCtrl","SignedDocumentRecipient","sign","rs_url","SignatureSignCtrl","gotoSignature","SignatureSignedCtrl","SignatureSetupCtrl","SignedDocument","loadingPromise","submitted","validateUniqueNames","signForm","triggerSigning","$onDestroy","modalWindow","onCancel","signatureSettings","platform","arrayKey","signed_document","recipients_attributes","info","sd","onFinish","signedDocument","nested","$setValidity","SignatureSetupComponent","emailPdfModal","SignatureNotificationCtrl","signOnscreen","windowRef","redirectToSign","emailAll","SignatureNotificationComponent","SpinnerCtrl","_savedPromise","EmbedSrc","replaceWith","defaultOptions","UserPrototype","accessAtOrg","accesses_attributes","access","acl_edited","generatePassword","charset","placeholderEmail","org_name","emailPlaceholder","AddressPrototype","stateRequired","cityStateZip","addr","copyGooglePlace","place","latlon","cmpts","addr1","long_name","street_number","locality","administrative_area_level_1","latLngLiteral","addressable_id","addressable_type","Door","Window","roof_face","RoofFace","MeasurementPrototype","hasMeasurementProperties","regexPattern","hasValue","hasSpecificMeasurements","deleteWindow","deleteDoor","deleteRoom","deleteDeck","deletePool","existingDoors","existingWindows","existingWallFacades","singleResponseTransform","doors_attributes","windows_attributes","wall_facades_attributes","roof_faces_attributes","rooms_attributes","decks_attributes","pools_attributes","associateOpenings","toLeafletMeasure","geoJSON_data","leaflet_data","coordinates","point","JobPrototype","nextAppointment","lastPrice","clone_job","assigned_user","additional_assigned_user","transformSingleWithEvent","customer_address_attributes","phone_numbers_attributes","job_type_ids","assignments_attributes","cache","jsonJob","queryByOrg","change_state","monitor","phone_number","visData","PriceListPrototype","isCsvCurrent","nested_url","Product","ProductOptionGroup","PriceList","price_list","price_lists","activate","export","ActivatedPriceListPrototype","selfAndDescendants","ancestral_names","ActivatedPriceList","activated_price_lists","fetchCached","edited_data","ProductPrototype","childrenLeaves","showItem","searchChildren","getChildren","searchChildrenUuid","priceListEditorParentDocs","docs","doc_md5","pullDocs","doc_ids","md5_sum","hasSizes","showSizes","min_width","max_width","min_height","max_height","size_html","hasDocs","doc_html","use_parent_names","ipn","include_parent_names","clone_product","option_groups","standard_measurement","standard_uom","optionGroupsById","og_id","sku_id","product_to_option_group_links_attributes","receiveSku","byOrg","queryFromJSON","PaymentTermItem","jsonData","PaymentTermPrototype","EstimateTemplateGroup","EstimateTemplatePrototype","item_count","overall","fileDefer","addCustomLineItemFiles","findGroupByRooms","roomEstimation","groupName","request","XMLHttpRequest","setRequestHeader","original_filename","uploadPromises","uploadFile","respObj","MeasureValue","MeasurementLinkPrototype","measurement_link","ml","DocPrototype","clone_doc","displayInProposal","displayInAgreement","displayInProposalWatermark","displayInAgreementWatermark","documentable_type_url","documentable_id","import","documentable_type","ImagePrototype","_blob","imageable_type","imageable","Note","noteable","EventPrototype","isMs","isI360","isSr","isSalesforce","isLeadPerfection","ResultPrototype","ResultReasonPrototype","result_reason","result_reasons","ScreenSharePrototype","screen_share","screen_shares","SignedDocumentRecipientPrototype","signed_document_recipient","ProductOptionGroupPrototype","bulk_request","transformMultipleResponse","byMatchId","query_match","bulk","edit_product_option_groups","pog_ids","found_pog","rpog","ProductOption","groupOptionGroupsByMatchId","array","array_of_objects","options_count","groupOptionGroupsByUuid","ProductOptionPrototype","edit_product_options","product_options","found_option","rpo","byGroupMatchId","groupOptionsByMatchId","groupOptionsByUuid","chameleonCode","VisualizationPrototype","chameleon_url","userInfo","ccode","specifier","sel","jsonVisualization","postalCode","chameleonUrl","CalendarPrototype","Calendar","ReportPrototype","prettyId","US_STATES_ABBREV","COUNTRIES_ABBREV","org_nested_url","rp","createAtOrg","s_data","Sku","imagery_available","reportsAvailable","PatternPrototype","patternable_id","$create_global","$save_global","transformMultiple","Pattern","create_global","save_global","delete_global","query_global","PhoneNumberPrototype","TokenPrototype","Token","SfUserPrototype","SfUser","crm_user","crm_users","sf","I360UserPrototype","I360User","MsUserPrototype","MsUser","ms","JnUserPrototype","JnUser","jn","SrUserPrototype","SrUser","LpUserPrototype","LpUser","emailEvent","EmailEvent","emailable","emailable_type","Annotation","ElevationPrototype","removeWallFacade","oldOpening","jsonElevation","checkDrawingMetadata","scale","imageScale","gridPosition","LogoutCtrl","oidcErrorMessage","OidcView","errorMsg","OidcLogin","invalidRoutes","setIdp","goToRoute","goToParams","routeTo","loginWithRedirect","userManager","getUser","OidcCallback","handleRedirectCallback","appState","sessionStorage","oidcLogin","getTokenSilently","setupOidcUser","setupOccManualTokenRefresh","OktaView","OktaLogin","oktaLogin","OktaLogoutLandingPage","OktaCallback","idToken","handleOktaRedirect","fromData","TermsAndConditionsCtrl","LeadsRedirectComponent","OrgAccessListItem","setCurrentAccess","selectedAccessUid","accessOrg","queryParamsRecord","currentUserAccesses","accessCount","paginationRecord","getCurrentOrg","orgIncludes","setCurrentAccessUid","queryAccesses","loadAccesses","OrgAccessList","showCsvModal","getAccesses","OrgAccessChooser","VisualizationCardCtrl","visualizationName","onDelete","onEdit","onEmail","VisualizationCardComponent","InvalidConversionError","fromUom","toUom","setPrototypeOf","unitFrom","unitTo","standard_measurement_uom","convertWithStandardOfMeasure","UnitConversionService","units_of_measure","product_standard","product_standard_uom","PrettyNameService","always","never","company_only","customer_only","customer_main_only","customer_option_only","company_main_only","company_option_only","company_customer_main","company_customer_option","proposal_only","agreement_only","fill_estimate","fill_contract","fill_inspection","quarter","product_labor","cover_page","estimate_pdf","product_images","job_photos","job_documents","org_documents","product_brochures","resource_documents","inspection_pdf","presentation_template","commission","slide_template","labor_summary","footer","do_not_display","both","unset","customer_document_signed","signable_document_signed","show_renoworks","quick_measure_roofing","roof_scope_roofing","plnar_interior","fullScope","IN_BROWSER","NATIVE","BROWSER","USER_SELECT","by_choice","by_default","chameleon_gaf","org_admin","admin","salesrep","billable","free","mute","basic","premium","imperial","metric","none","roof_total_area","roof_5pw_total_area","roof_10pw_total_area","roof_12pw_total_area","roof_15pw_total_area","roof_20pw_total_area","roof_0_area","roof_1_area","roof_2_area","roof_3_area","roof_4_area","roof_5_area","roof_6_area","roof_7_area","roof_8_area","roof_9_area","roof_10_area","roof_11_area","roof_12_area","roof_13_area","roof_14_area","roof_15_area","roof_16_area","roof_17_area","roof_18_area","roof_19_area","roof_20_area","roof_21_area","roof_22_area","roof_23_area","roof_24_area","roof_25_area","roof_26p_area","roof_flat_shallow_area","roof_flat_area","roof_low_slope_area","roof_average_slope_area","roof_steep_slope_area","roof_ultra_steep_slope_area","roof_high_roof_area","roof_sloped_area","roof_10pw_sloped_area","roof_79_area","roof_1012_area","roof_13p_area","roof_eave","roof_rake","roof_perimeter","roof_ridge","roof_hip","roof_ridge_hip","roof_valley","roof_valley_eave","roof_valley_eave_rake","roof_step_flashing","roof_headwall_flashing","roof_total_flashing","roof_gutter_miters","roof_downspouts","roof_downspout_elbows","siding_inside_corner_qty","siding_inside_corner_length","siding_outside_corner_qty","siding_outside_corner_length","siding_level_starter","siding_sloped_trim","siding_vertical_trim","siding_level_frieze_board","siding_sloped_frieze_board","siding_frieze_board","siding_opening_qty","siding_windows_qty","siding_doors_qty","siding_garage_doors_qty","siding_opening_tops_length","siding_opening_sills_length","siding_opening_sides_length","siding_shutter_qty","siding_shutter_area","siding_vents_qty","siding_vents_area","siding_soffit_eaves","siding_soffit_level_frieze","siding_soffit_rakes","siding_soffit_sloped_frieze","siding_soffit_total","roofing","siding","sunroom","sunroom_a_wall_length","sunroom_a_wall_height","sunroom_a_wall_area","sunroom_b_wall_length","sunroom_b_wall_height","sunroom_b_wall_area","sunroom_c_wall_length","sunroom_c_wall_height","sunroom_c_wall_area","sunroom_wall_perimeter","sunroom_wall_total_area","sunroom_deck_total_area","sunroom_ceiling_area","sunroom_studio_roof_area","sunroom_cathedral_roof_area","sunroom_kw_a_length","sunroom_kw_a_height","sunroom_kw_a_area","sunroom_kw_b_length","sunroom_kw_b_height","sunroom_kw_b_area","sunroom_kw_c_length","sunroom_kw_c_height","sunroom_kw_c_area","sunroom_kw_total_length","sunroom_kw_total_area","ea","sqft","lft","in","sq","pair","sash","mile","gal","layer","hr","cm","sqm","km","kW","scribble","hover_excel","roofscope_csv","roofsnap_csv","eagleview_xml","window_nation_json","hover_xml","picto_connect_csv","skymeasure_csv","skymeasure_xml","aerialreports_xml","eagleview_qs_json","xactimate_xml","gaf_quick_measure_xml","gaf_quickmeasure_xml","ez3d_csv","ask","created","recipient_signed","multi","true","false","per_quantity","per","per_ui","per_sqft","sky_measure","sky_measure_roofing","wvs_hail","wvs_wind","wvs_lightning","hail","wind","lightning","wvs","eagleview_roofing","permit","information","proposals","contracts","signatures","property","ordered","exception","canceled","refunded","partially_refunded","appointment_invite","document_signed_notification","image_uploader","signature_link","payment_info_setup","payment_info_reminder","postmark","twilio","Delivery","Bounce","SpamComplaint","Open","unset_bt","ui_bt","width_height_bt","contact","annotator","elevation_scaling","satellite_measure","sidinginator","deck_wizard","pool_tool","fencing_tool","onboard","freemium","suspend","recreate","onboarding","activated","suspended","estimate_module","leads_module","job_nimbus","jobprogress","roof_scope","companycam","improveit360","i360_classic","i360_lightning","$filter","operator","precision","new_value","precisionValue","v1","v2","varName","varValue","variable","search_string","value1","value2","searchVar","startsWith","searchArray","searchProperty","separator","query_property","ifCond","formatCurrency","ifTrue","moneyOperation","mathOperation","setVar","stringIncludes","ifEmpty","ifNotEmpty","ifStartsWith","ifEndsWith","ifStringIncludes","ifPropInObjArray","ifInArray","ifPropInEstimateGroups","findArrayItemByProperty","locals","uiTourService","getTourByName","do_not_show","_getSteps","createTour","getStatus","Status","OFF","multiple_groups","createStep","selector","scrollOffset","orphan","trustedContent","trustAsHtml","ONBOARDING_NAME","ONBOARDING_EMAIL","ONBOARDING_PHONE_DIAL","ONBOARDING_PHONE","popupClass","onShown","reposition","_getCurrentStep","removeStep","addLineItemStep","onEnd","step_title","onNext","_prevStep","tether","onPrev","job_info_tour","info_tour","job_show_tour","show_tour","menuItems","tourData","sections","mi","tour_feedback","watched","_unblock","usedProps","FileQueueInit","setupTempQueueObject","fileValues","getFileId","queue_name","clean_parent","li_sort_order","g_sort_order","promises2","new_parent","parent_class","imagesToUpload","batchDirectUploadImages","urls","imagesSuccess","imageToUpload","imageObject","preview","request_url","addTempQueue","autoImport","finishedCallback","docSuccess","promised","newDoc","_watchDoc","importMeasurementFile","measure_type","$import","import_type","_watchMeasurementDoc","processing","validImportTypes","SetFocus","$parse","setFocus","RsfTab","$log","globalElement","ngModel","sortableTab","uiSortableConfig","savedNodes","combineCallbacks","second","secondIsFunc","getSortableWidgetInstance","widgetFullName","patchSortableOption","afterStop","wrappers","patchUISortableOptions","oldVal","sortableWidgetInstance","opts","optsDiff","directiveOpts","floating","getSortingHelper","helperOption","isCustomHelperUsed","hasSortingHelper","getItemIndex","beforeStop","deactivate","jquery","wireUp","$watchCollection","$modelValue","sourceList","sourceModel","_isCanceled","isCanceled","_isCustomHelperUsed","_connectedSortables","_getElementContext","isSourceContext","savedNodesOrigin","elementContext","contents","getPlaceholderElement","excludes","notCssSelector","getPlaceholderExcludesludes","not","received","dropindex","droptarget","droptargetList","droptargetContext","droptargetModel","sortingHelper","moved","wasMoved","attrHandler","attrHandlerFn","inner","oldItemSortable","_restore","innerResult","initIfEnabled","_f","cancelWatcher","ScrollIf","scrollIf","scrollParent","hideButton","setHideButton","occPayToken","userCanEmailText","userCanOnscreen","userCanSaveMethod","occPayTokenOptions","canEmailTextOCCPay","canOnscreenOCCPay","canSaveMethodOCCPay","getAuthorization","PaySimpleListView","CardConnectListView","loadPage","getPage","PaymentList","_initialized","tryInitialize","queryFinanceApplications","loadFinanceApplications","queryPaymentRequests","loadPaymentRequests","pr","resend","sendMessage","FormRow","SubmitFinanceApplicationButton","applicantLimitModal","setApplicantLimitModal","applicantCount","FormsList","customFormIds","CustomForms","createPermission","readPermission","paymentAuthorized","showApplications","modules","module","react2angular","configure","$stateProvider","resolveAuth","BillingRoutes","JobMenuValues","JobMenuManagerCtrl","triggerUpdate","jobMenu","cloneMenu","templateSettings","estimates_title","estimate_title","contracts_title","contract_title","estimator_title","estimators_title","compileSectionLabel","availableMenuItems","cmi","removeSection","renderedLabel","addSection","moveSectionUp","moveMenuItem","moveSectionDown","removeMenuItem","menuItem","sectionLabelChanged","old_idx","new_idx","menu","JobMenuManagerComponent","job_menu","newJobVisible","countDocsNotSigned","countPresentations","presentation_count","countDesignTools","gotoEstimateTab","buildEstimateContractTitle","pageUrl","iconImg","badge","hideInPresentMode","EagleviewOrderingModalCtrl","add_on_products","insured_name","measurement_request_type","productChanged","delivery_product","delivery_products","isStep0Valid","isStep1Valid","isStep2Valid","isStep3Valid","toggleSelection","importExisting","submitOrder","orderData","report_addresses","addressToEv","primary_product_id","delivery_product_id","add_on_product_ids","measurement_instruction_type","claim_number","claim_info","po_number","cat_id","changes_in_last_4_years","order_data","latitude","longitude","address_type","EagleviewOrderingModalComponent","EagleviewLoginModalCtrl","EagleviewLoginModalComponent","ReportListCtrl","REPORT_PROVIDERS","REPORT_KINDS","updateFromQuerystring","reportResponse","validSortOrders","sortingBy","clearSearch","openSMOrder","UserRecord","OrgRecord","cachedUser","cachedOrg","EventStat","expanded","renderEvent","renderPageView","ModelCache","orgCol","userCol","UserStat","eventCount","lastSeen","firstSeen","eventPage","userPage","eventsData","usersData","queryEventData","queryUserData","getUsersPage","DashboardComponent","renderUsers","renderEvents","colSpan","leadsData","queryLeadData","createJob","lead_id","LeadsComponent","queryPage","editParams","editedParams","handleAccept","handleJob","handleFilter","handleReassign","isEven","buttonActions","renderLeadList","renderAdminLeadList","hour","minute","JobListContainer","actionFired","renderEmptyList","queryReportPage","importReport","EagleviewReportImportComponent","street_1","first_page","next_page","prev_page","importLogs","errorLogs","ImportJobComponent","startImport","cancelImport","hoverJob","poller","location_line_1","location_city","location_region","location_postal_code","modalBody","minHeight","lineHeight","AddressShow","Geocoder","GeocoderStatus","OK","handleInput","maxLength","GoogleMap","defaultGoogleMapOptions","mapTypeControl","mapTypeId","MapTypeId","SATELLITE","streetViewControl","defaultMapOptions","googleMapOptions","mapChange","defaultZoom","openModal","submitReport","addJobReport","closeModal","closeQuickMeasureModal","QuickMeasureOrder","product_code","question","instructions","handleProductCode","handleStructures","handleInstructions","app_address","address_loading","closeRoofScopeModal","RoofScopeReportModal","scopeTypeId","propertyType","numberOfStructures","disableSubmit","updateAddress","stateAddress","localAddress","localDisableSubmit","selectedJobType","setSelectedJobType","projectName","setProjectName","firstName","setFirstName","setLastName","setEmail","mobileNumber","setMobileNumber","referenceNumber","setReferenceNumber","formAddress","setFormAddress","formRef","showConfirm","setShowConfirm","getPlnarPricing","closePlnarModal","address1","address2","stateProvince","reporter","communication","personalization","orgBranding","reportValidity","DrawingComponentCtrl","canvasId","_render","measurer","_abbr","visualizer","Visualizer","_setupAnnotator","_setupMeasurer","_element","isCurrentTool","currentTool","_checkGuids","_checkAbbr","highlightAnnotations","zoomIn","_zoom","zoomOut","zoomLock","lockZoom","imageZoom","zoomChanged","measureLines","_setTool","WindowScalerTool","measureWindows","toggleGrid","scaling","measureDaylight","daylight","measurePolygon","polygon","renderAll","batchDraw","stage","toDataURL","mimeType","quality","_fireUpdate","_saveGuids","_annotationsGuids","currentGuids","_updateText","updateAnnotation","Annotator","getScaledLocation","setText","setTool","addBackgroundImage","loadAnnotations","WindowScaler","addImage","onWindowIntersection","onMeasurementChange","setZoom","setImageZoom","showingGrid","grid","ToolDisplayCtrl","toolConfig","RefreshButtonController","_toggleState","$postLink","refreshing","countdown","defaultTimer","currentTimer","counter","stopRefreshing","defaultTimerPeriod","isAfter","TosHttpInterceptor","GmapsAutocompleteCtrl","autocomplete","places","Autocomplete","setComponentRestrictions","AUTOCOMPLETE_COUNTRIES","getPlace","placeChanged","LeafletMapCtrl","initMap","mapData","myMap","measureControl","attributionControl","setView","nearmap_attribution","attribution","addAttribution","addControl","maxZoom","rc","nml","httpauth","apikey","NEARMAP_API_KEY","addTo","googleMutant","featureType","stylers","elementType","Icon","iconSize","iconAnchor","popupAnchor","tooltipAnchor","shadowSize","iconUrl","shadowUrl","setMarker","moveMap","removeLayer","marker","draggable","getLatLng","mapDataChanged","RsfMapCtrl","imagery","layers","one_layer","map_options","nmMap","googleSatellite","googleRoadonly","initMarker","setupMeasure","setupOptions","measureData","isBoolean","postion","primaryLengthUnit","secondaryLengthUnit","primaryAreaUnit","completedColor","measure","export_data","remove_layers","eachLayer","toGeoJSON","poly","OrgActivationHttpInterceptor","SignedDocListCtrl","signedDocResponse","ForbiddenHttpInterceptor","LocationState","buildFileName","documentName","SavePdfModal","saveToDocs","saveToDocsAndAgreement","agreementText","SaveToDocumentsModal","contractChecked","estimateChecked","contractName","createDocument","updateOrCreateDocument","SaveablePdfDisplay","dirtyWatcherReset","initialAnnotationState","pageLayoutChanges","contentChanged","annotationsChanged","showingModal","docViewer","requiredPdfFieldsFilled","getFieldManager","areRequiredFieldsFilled","requiredFieldsMissing","getDocument","exportAnnotations","xfdfString","getFileData","fillForm","viewerBuilt","initializeState","triggerModifed","getFile","debouncedModified","getAnnotationsList","buildAnnotation","buildPageLayoutChanges","getAnnotationsLoadedPromise","fieldManager","fillableFieldsObject","CustomerName","JobName","CustomerPhone","CustomerPhone2","CustomerPhone3","CustomerFullAddress","CustomerAddressLine1","CustomerAddressLine2","CustomerAddressCity","CustomerAddressState","CustomerAddressStateCode","CustomerAddressZip","CustomerAddressCityStateZip","JobFullAddress","JobAddressLine1","JobAddressLine2","JobAddressCity","JobAddressState","JobAddressStateCode","JobAddressZip","JobAddressCityStateZip","JobCustomerFullAddress","JobCustomerAddressLine1","JobCustomerAddressLine2","JobCustomerAddressCity","JobCustomerAddressState","JobCustomerAddressStateCode","JobCustomerAddressZip","JobCustomerAddressCityStateZip","CustomerEmail","CurrentDate","SalesrepFirstName","SalesrepLastName","SalesrepName","SalesrepEmail","SalesrepPhone","AdditionalSalesrepFirstName","AdditionalSalesrepLastName","AdditionalSalesrepName","AdditionalSalesrepEmail","AdditionalSalesrepPhone","OrgName","OrgFullAddress","OrgAddressLine1","OrgAddressLine2","OrgAddressCity","OrgAddressState","OrgAddressStateCode","OrgAddressZip","OrgAddressCityStateZip","OrgPhone","OrgWebsite","website","OrgEmail","OrgLegalName","legal_name","OrgPhone2","phone_number_2","OrgPhone3","phone_number_3","OrgLicenseNumber","license_number","staticFields","fieldsData","jobMetadata","integrationKeyIndex","dynamicFields","fillableFields","fieldKey","formField","getField","setValue","modifyDoc","deselectAllAnnotations","docData","_err","downloadFileName","msSaveOrOpenBlob","tmpHref","csvUrl","initialAnnotations","Id","updatedLayoutChanges","initialPageLayoutChanges","reduction","dispatchFlashAction","actionMeta","closeFlashMessage","FlashAlert","the_alert","Alert","dismissible","RsfFormGroup","testId","inputType","nameTestId","nameId","TroubleshootingModal","openScreenShareHelp","closeScreenShareHelp","sendInviteModal","sendInviteType","closeSendInviteModal","submitEmail","submitText","invite_type","invite_method","closeWebCam","WebCamModal","cameraPhoto","videoRef","toggleSize","setupCamera","stopCamera","startCamera","modalClass","enforceFocus","autoPlay","setRemoteScreenShareKind","basicScreenShareWatch","premiumScreenShareWatch","closeNotifierMessage","notifierRemoveMessage","Notifer","Toast","ReactSelectWrapper","getOptionLabel","getOptionValue","getTask","taskId","importJobs","csvText","closeImportModal","ImportCsv","importCsv","onFilesChanged","updateJobList","cleanState","updatedJobList","showInvalidCSVError","invalidCSVReason","trackSupportUrl","trackSampleFileUrl","logItems","currentUserOrgId","openImportModal","UserHeaderInfo","jobInfo","detailed","Divider","isExpanded","onToggleExpand","handleViewClick","markAsRead","archiveMessage","isUnread","Badge","app_message","fontSize","subject","dangerouslySetInnerHTML","__html","body_html","expandedId","messageQueryParams","messagePagination","messageIds","loadMessagesPage","handleToggleExpand","nextId","showMessageModal","loadMessages","Bell","hideLeftSeparator","unreadCount","remoteStorage","initializeAppMessages","hideMessageModal","displayCount","borderColor","justifyContent","padding","MessageBell","Router","coverImageCheck","imageUuid","elevationExists","destroyImage","updateImage","batchUpdateImage","editCoverImage","setCurrentImageId","setCoverImage","removeCoverImage","viewImageLink","saveForm","ImageEditorModal","booleanName","proposalCheck","agreementCheck","batchEditBoolean","ImageList","queryImages","Carousel","omit","Caption","ImageThumb","imageQueryParams","ImageCarousel","activeIndex","Images","RefreshButton","callRefresh","setInterval","clearInterval","queryFolderParentId","queryKey","currentQueryParams","elevationsLoading","createImages","batchCreateImage","setShowInfo","refreshLoad","listElevations","listElevationsByMeasurement","ImageTab","onFilesChange","toggleShowInfo","refreshListImages","documentRecord","task_id","destroyDocument","editJobResourceDisplay","updateDocument","batchUpdateDocument","importMeasurementDocument","importMeasurement","allowDestroy","deletedDocument","isTaskLoading","showCheckBox","filtered","TableHeader","docQueryParams","listDocuments","Documents","queryDocuments","resourceIds","loadDocumentsById","DocumentsTable","jobLoading","ResourceDocuments","redirect","documentAcl","checkAndLoadDocument","ViewPdfDoc","checkAndLoad","documentsSelected","createDocuments","DocumentTab","navigateButton","folder_parent_id","setCurrentPresentationId","present","callbackUrl","coverImageUrl","presenationQueryParams","listPresentations","Presentations","queryPresentations","ShowPresentation","openFullScreen","closeFullScreen","focusIframe","slideEventListener","getElementsByName","namespace","indexh","indexv","onLoad","JobTabTitle","rowProps","titleColProps","childColProps","PresentationTab","childRender","renderPresentations","Redirect","PresentationRouting","Customer","noteEditing","noteChanged","noteEditingPermission","updateOrCreateNote","destroyNote","editNote","validateNote","noteQueryParams","noteIds","jobCreateOrAssignedAclPermission","loadNotes","clearNotes","resetNote","setUpNewNote","NoteTab","queryNotes","self","submitSucceeded","emptyFilter","offers","providers","createFinanceApplication","Create","openRedirectUrl","financeApplicationLoading","estimateLoading","MessageView","imgSrc","analyticsAction","detailsUrl","EmbeddedView","offersRedirect","initialUrl","iframeProps","eventMsg","setEventMsg","handleUrl","globalWindow","Apply","contextDispatch","closeCallback","offersCallback","LoanApply","Offers","loadFinanceApplication","Homevest","merchant","reloadFinanceAppRef","filterReducer","withRouter","PaymentRequest","paymentRequestRecord","paymentRequestId","authorizedPaymentRequestKind","mounted","setMounted","initializePaymentRequest","createPaymentRequest","Root","navigateToView","paymentOptions","canOnscreen","canEmailText","canSaveMethod","availableOptions","showButton","PaySimple","checkoutToken","initPromise","waitForElement","askForPaymentOptions","paysimpleJs","setMode","sendCustomer","customer","retrieveAccount","loadJs","existingScript","script","loadPaySimple","querySelector","JwtToken","bypassPostalCodeValidation","preventAutocomplete","formCallback","errorHandler","accountInfo","customerCallback","waitForEl","checkoutTokenError","loadCheckoutToken","getCheckoutToken","setPaySimpleError","receiveGeneralError","makePayment","setPaymentError","paymentError","setProviderValid","setProviderLoading","setProviderSubmitting","forwardRef","PaySimpleForm","_isMounted","handlePaymentTypeChange","paySimple","paySimpleLoaded","paySimpleInitialized","paySimpleFormValid","paymentType","handleAccountRecieved","handleError","paySimpleFormValidationChanged","psAccountInfo","eventData","validity","sendReceipt","CardConnectForm","_mounted","chargeType","_listener","validationError","urlOptions","cssOptions","encodeURI","scrolling","postal","payment_id","AccountInfoRecord","defaultAccountInfoProps","PaySimplePaymentView","PaySimplePaymentFailureView","failure","CardConnectPaymentView","CardConnectPaymentFailureView","OccPayPaymentView","iframeURL","handleEvent","PaymentView","payment_provider","clearLastPayment","clearPaymentError","MakePayment","submitAttempted","renderForm","submitForm","formValid","caseValue","renderError","renderPayment","ccForm","OccPaySaveMethodView","PaymentsModal","renderView","SendInviteModal","jobEmail","setSummary","setError","onEmailChange","Feedback","getOrgEventResults","eventResultsById","orgEventResultIds","getOrgEventResultReasons","eventResultReasonsById","orgEventResultReasonIds","eventsResultId","ResultAppointmentModal","resultEvent","EventCalendarModal","newDateRange","EventRow","jobHasCRM","eventResult","reasonId","eventResultReason","hasCRM","isI360Lightning","currentOrgToken","openResultModal","deleteEvent","I360SalesOpportunity","opportunity","I360ResultAppointmentModal","jobEvents","hasMarketSharp","hasI360","hasSR","hasSalesForce","hasLeadPerfection","getEventResults","getEventResultReasons","ShowPdf","navigateBack","requestName","firstSelectedDocumentName","firstSelectedDocumentId","removeDocument","SelectedDocuments","RequestName","DocumentsChooser","requestDocId","setRequestDocId","reduxDocumentIds","requestDoc","content_type","allDocumentsSelected","docId","selectedDocId","DocumentsTableHeader","modalType","SignatureRequestModal","ReviewSignatureRequest","enforceRequiredSignableDoc","requiredInitialized","setRequiredInitialized","requiredFieldsFilled","setRequiredFieldsFilled","currentSignedDocument","isModified","getModifiedFile","SignedDocumentForm","includedError","setIncludedError","includedRecipients","duplicateNames","indexes","SignatureConfiguration","SignatureRequest","setDocumentIds","setRequestName","modified","setModified","viewState","setViewState","downloadRef","documentNameChanged","setDocumentNameChanged","sdDocument","resetSignedDocument","setCurrentSignedDocumentId","deleteDocument","addId","docIds","documentCount","combineDocument","modifiedDoc","validateSignedDocument","nativeEvent","submitter","recipientsCount","SignatureRequestButton","VoidDocumentButton","resetForm","voidDocument","SigningHistoryButton","downloadReport","showPDF","emailOrSign","onDocumentClick","signaturePlatform","completed_at","SignaturesDocumentsTable","documentKind","EstimateDocumentsRow","signedDocumentIds","documentType","listEstimateSignedDocuments","signableDocuments","signed_kind","SigningRecipientsModal","loadSignedDocument","recipientId","isDocumentCompleted","whiteSpace","DocumentTabs","SignaturesTab","drawnItems","doUpdate","polygonIdx","markerIdx","numberToLetters","centerViewOnFeatures","allPoints","fitBounds","pad","bindMarkers","markers","mLength","feature","bindTooltip","permanent","geoJson","onEachFeature","addLayer","containerId","onChangeStart","onChangeEnd","draw","toolbar","buttons","polyline","handlers","cont","editDisabled","removeDisabled","zoomSnap","geoJSON","drawOptions","rectangle","circle","circlemarker","Draw","featureGroup","CREATED","EDITSTART","unbindTooltip","removeFrom","DELETESTART","DELETESTOP","DELETED","EDITED","setupDrawing","allowIntersection","showLength","setGateCount","setGateLength","SegmentMeasurements","inputChanged","segmentIdStr","SegmentPosts","FenceSummary","fenceNumber","defaultKey","FencingDisplay","fId","fIdx","fullFencing","isDirty","setFencing","resetFencing","FencingContainer","setAvailable","currentIdx","exporting","saveFencing","shouldOpen","mergeFeatures","takeScreenShot","xl","validFeatureTypes","features","fenceMeasurement","featureLength","featureLinePosts4","featureLinePosts6","featureLinePosts8","featureCornerPosts","featureTerminalPosts","featureGateCount","featureGateLength","lines","pointsToLines","lineIdx","dist","units","netDist","sectionId","seg","geoJSONToFenceMeasurement","createPane","baselayer","subdomains","pane","screenshotter","SimpleMapScreenshoter","hideElementsWithSelectors","waitInterval","takeScreen","exportMapAsImage","setupAndExport","toDateString","openIdx","loadFencing","addMeasurementObjects","addMeasurementFilter","AddMeasurementModal","addType","enabledMeasurements","initState","measurementType","setMeasurementType","changeType","initAddMeasurement","updateAddMeasurement","saveAddMeasurement","tabIndex","numberInputProps","ButtonBar","GAF_ENV","openFencing","setOpenFencing","showQMButton","setShowQMButton","jobTabPermissions","measurementTools","enabledMeasureemntTools","disableEditing","setEditing","InteriorExteriorButton","validExteriorTabs","MeasurementTable","RoofFaces","roofFaceRecords","roofingTotal1","roofingTotal2","roofAreas1","roofAreas2","Roofing","roofingTotal","roofAreasByPitch","sidingTotal1","sidingTotal2","Siding","sunroomGeneral1","sunroomGeneral2","deckAndRoof","kneeWall1","kneeWall2","Sunroom","sunroomGeneral","deckRoofAreas","kneeWall","Walls","wallFacadeRecords","OpeningRow","destroyCallback","associatedAnnotation","openingId","openingType","annotationTitle","oeTitle","Openings","openingRecords","Windows","openAddMeasurement","Doors","Decks","deckRecords","Pools","poolRecords","FencingSummary","Exteriors","tabComponent","InteriorTabs","nonOverflowRoomsCount","setNonOverflowRoomsCount","prevRooms","firstRun","isOversized","setIsOversized","windowWidth","setWindowWidth","prevWindowWidth","resizedUp","useIsOversized","roomsOverflow","overflowActiveRoom","tabNavigate","debouncedResetCount","currentRooms","Interiors","firstRoom","MeasurementTab","windowChanged","doorChanged","roomChanged","redirectTab","resetMeasurement","resetRooms","resetDoors","resetWindows","EstimateOverviewTable","SelectProposal","IntegrationButton","estimatePref","tokenPref","tokenLoading","isList","IntegrationButtonGroup","jobRecord","showMarketsharp","showSalesforce","showJobNimbus","showJobProgress","showLeadPerfection","attachIntegration","EmailMessageModal","initEmail","emailMessage","setMessage","EmailDocumentModal","emailEstimate","ViewProposal","joinUrls","ProposalsTab","SelectEstimate","SignatureSetupModal","newSignedDocumentId","contractFlowCreate","CreateContract","documentValueRef","removeEstimatePdf","noRedirect","SelectContract","locationState","createContract","ViewContract","EstimateContracts","ContractsTab","routeMatch","getOrgTools","toolIds","isAddressValid","getIntegrationLink","toolKey","getRenoworksLink","portal_id","ToolCard","toolRecord","getToolConfig","customTools","aclTools","isAddressInvalid","isAddressNotGeocoded","EmailOrderCsvModal","initEmails","ManualTriggerModal","ModalFooter","manuallyTrigger","VGSTextInput","isInvalid","errorMessages","AddressForm","LicenseImage","imageDataRootPath","setFileName","imageData","customFormRecord","imageRequired","compressAndConvertToBase64","maxSizeMB","useWebWorker","compressedFile","reader","onerror","fontFamily","textTransform","ApplicantForm","vgsForm","applicationStatus","setFields","ssnVisible","setSSNVisible","applicantValidate","applicantEmailValidate","applicantDateValidate","ssnName","dobName","licenseNumberName","maxDate","vgsValidations","function","setupFields","hideValue","coApplicantRequiredFields","coApplicantDateRequiredFields","addressRequiredFields","CustomForm","setForm","setErrors","submitButtonClicked","setSubmitButtonClicked","customFormImageData","currentAccess","pageLoading","rep1User","rep2User","rep1Name","rep2Name","todays_date","market","dealer_name","rep_1","rep_2","initializeVGSForm","vaultId","environment","collect","loadingError","applicant","license_image_front","co_applicant","license_image_back","bearerToken","formValues","custom_form","ssn","applicant_ssn","dob","applicant_dob","applicant_license_number","co_applicant_ssn","co_applicant_dob","co_applicant_license_number","updateDabellaForm","subField","CustomFormSignatureRequest","useParams","createCustomFormDocument","custom_form_id","PricePresentationActions","updatePricePresentation","borderRadius","alignSelf","rowGap","textDecoration","DiscountRow","onAddDiscount","discountsEnabled","discountGroup","discountUuid","discountName","canDeleteOrCustom","handleDeleteDiscount","border","EditDiscount","onSave","useExisting","inputRef","tempValue","setTempValue","tempName","setTempName","selectedDiscount","setSelectedDiscount","slideIndex","newUuid","specificDiscount","addDiscountGroup","flatDiscountData","Discounts","setUseExisting","DownPaymentInput","titles","financingRecord","isEditing","setIsEditing","SplatIcon","xmlns","titleMap","cash","same_as_cash","payment_range","PaymentTermCard","hideDownPayment","showSameAsCash","SlideContainer","paymentTermItems","sameAsCash","PricePresentationAsyncActions","gap","SlideNavigation","SlideSetup","downPaymentValue","setupPricePresentation","resetPricePresentation","updateFinancing","EnhancedPricePresentationModal","oneLookAuthorized","hasShownMetadataWarning","hasMetadata","setCurrentSlideIndex","clearDiscountGroups","getIdp","OneLookAsyncActions","getLocations","dialogClassName","FinanceApplicationModal","hasShownSsoWarning","hasCleared","prevLocationCode","currentLocationCode","currentMethod","currentProduct","selectedLocation","initializeForm","loc","newWindow","submitApplication","ResultForm","omitExtraData","liveOmit","showErrorList","updateCustomFormRJSF","updateOrCreateCustomForm","ButtonTemplates","SubmitButton","CustomSubmitButton","ResultToggle","resetCustomForm","JobResultModal","estimatorName","setPageTitle","JobTabs","pageName","Connector","checkForUpdate","reg","globalNavigator","globalLocalStorage","expiration","expirationDate","debouncedUpdateTitle","urlMap","OrgFetcherService","reduxOrg","getStoredOrg","orgPromise","reloadOrg","reduxSave","getParent","childID","treeDeferred","notInTree","set_current_org","setupOrg","orgData","updateOrg","service","raw","Permissions","constant","run","$provide","$locationProvider","$urlRouterProvider","$httpProvider","StripeCheckoutProvider","$qProvider","$uiRouterProvider","rsf_analytics_key","rsf_analytics_url","trackExceptions","errorOnUnhandledRejections","stateService","defaultErrorHandler","html5Mode","requireBase","hashPrefix","ready","setupServiceWorker","otherwise","redirectUrl","urlPath","redirectTemplate","occAppRedirect","authUser","occAppUrl","when","interceptors","ENFORCE_TOS","routes","STRIPE_KEY","$uibModalStack","fromUrl","onSuccess","waiting","trans","$to","savedParams","confirmation","defaultPrevented","onunload","underscore","Humanize","setAppName","setCompanyName","COMPANY_NAME","setAppLogoUrl","APP_LOGO_URL","setAppIconUrl","APP_ICON_URL","setFaviconUrl","FAVICON_FILE","dismissAll","restrict","newHref","$set","imageUrl","Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Guam","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","Ohio","Oklahoma","Oregon","Palau","Pennsylvania","Tennessee","Texas","Utah","Vermont","Virginia","Washington","Wisconsin","Wyoming","Aguascalientes","Coahuila","Chihuahua","Colima","Campeche","Chiapas","Durango","Guerrero","Guanajuato","Hidalgo","Jalisco","Michoacan","Morelos","Mexico","Nayarit","Oaxaca","Puebla","Queretaro","Sinaloa","Sonora","Tamaulipas","Tabasco","Tlaxcala","Veracruz","Yucatan","Zacatecas","Baoruco","Barahona","Duarte","Espaillat","Pedernales","Peravia","Santiago","Canada","Notifier","iconOnly","getPayload","payloadData","isExpired","exp","expiresAt","eagleviewService","report_id","RECEIVE_PAGE","RESET_PAGES","FETCH_PAGE","START_IMPORT","FINISH_IMPORT","receivePage","fetchPage","resetPages","finishImport","SET_PAGE_IDS","RECEIVE_PAGE_ERROR","PUSH_ID","PREPEND_ID","REPLACE_ID","REMOVE_ID","CLEAR_PAGE","SET_BY_ATTR_PATH","SET_DIRTY_IDS","pageData","setPageIds","receivePageError","prependId","replaceId","replacedId","setByAttrPath","attrPath","setDirtyIds","recordList","moving","dirtyIds","sorted","sortedIds","checkPageEmpty","modelIds","recordQueryParams","EstimateOverviewRecord","defaultEstimateOverviewProps","RECEIVE_ROOM","EDIT_ROOM","RESET_ROOMS","UPDATE_FORM","SET_AUTHORIZING","SET_AUTHORIZED","SET_ERRORS","SET_CURRENT_JOB","SET_IMPORTING","SET_IMPORT_LOG","FETCH_HOVER_USER","RECEIVE_HOVER_USER","SET_HOVER_USERS_LOADED","FETCH_ORG_HOVER_USERS","RECEIVE_ORG_HOVER_USERS","RECEIVE_ORG_ERRORS","setAuthorizing","setImporting","setImportLog","hover_id","UPDATE_FORM_ERROR","UPDATE_FORM_ERRORS","INITIALIZE_FORM","updateError","updateErrors","ToolRecord","toFormData","FormData","file_queue","defaultToolProps","MAX_VALUE","util","MAX_NUM","MIN_NUM","arrayLimits","arrayMin","arrayMax","deg","hashKey","hashObject","isTransparent","limitValue","objectKey","rad","renderAttr","renderAllAttr","renderPos","renderSize","renderStyle","renderTemplate","sparseArrayLimits","sparseArrayMin","sparseArrayMax","sqr","valueOrDefault","romanToArabic","arabicToRoman","ucs2encode","ucs2decode","mergeSort","beforeRender","writeString","write","writeData","withIndent","indent","rt","a4","paperSize","getOption","renderFull","_offset","FONTS","IMAGES","GRAD_COL_FUNCTIONS","GRAD_OPC_FUNCTIONS","GRAD_COL","GRAD_OPC","setPages","addPage","Contents","Parent","MediaBox","_content","translate","rect","clip","Size","Info","Producer","Author","Subject","Keywords","Creator","CreationDate","mm","asStream","Type","Subtype","Width","Height","BitsPerComponent","ColorSpace","Filter","_resourceName","SMask","FunctionType","Domain","C0","C1","Functions","Bounds","Encode","hasAlpha","opacities","stops","ShadingType","Coords","Extend","userSpace","AIS","CA","ca","FormType","BBox","CS","Resources","ExtGState","a0","Shading","s0","shading","nt","eof","readByte","writeByte","readShort","writeShort","readLong","writeLong","readFixed","writeFixed","readShort_","writeShort_","readLong_","writeLong_","readFixed_","writeFixed_","readString","times","saveExcursion","writeBase64","ot","encode","tt","a1","a2","a3","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","executive","folio","legal","letter","tabloid","st","Helvetica","Courier","Symbol","ZapfDingbats","ht","ct","VBArray","TTFFont","ut","readAsArrayBuffer","getContext","drawImage","getImageData","crossOrigin","loadFonts","loadImages","getFont","getOpacityGS","_opacityGSCache","dict","compress","pako","deflate","Length","Pages","Kids","Count","BaseFont","encodeText","Encoding","_pdf","_font","_sub","makeSubset","head","psName","bbox","xMin","yMin","xMax","yMax","italicAngle","ascent","descent","lineGap","capHeight","os2","xHeight","stemV","familyClass","isSerif","isScript","flags","isFixedPitch","getTextWidth","cmap","codeMap","widthOfGlyph","Length1","FontName","FontBBox","Flags","StemV","ItalicAngle","Ascent","Descent","CapHeight","XHeight","FontFile2","ncid2ogid","firstChar","lastChar","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","FirstChar","LastChar","DW","CIDToGIDMap","_makeCidToGidMap","DescendantFonts","subset","ToUnicode","cidToGidMap","_rcount","_textMode","_fontResources","_gsResources","_xResources","_patResources","_shResources","_opacity","_matrix","_annotations","_fontSize","_contextStack","ProcSet","Font","XObject","Annots","_out","rotate","cos","sin","beginText","endText","_requireTextMode","_requireFont","setFont","setTextLeading","setTextRenderingMode","showText","showTextNL","addLink","_toPage","Rect","Border","URI","setStrokeColor","setOpacity","setFillOpacity","setStrokeOpacity","setFillColor","gradient","restore","setDashPattern","setLineWidth","setLineCap","setLineJoin","setMitterLimit","_context","moveTo","lineTo","bezier","bezier1","bezier2","ellipse","stroke","nop","clipStroke","closeStroke","fillStroke","comment","matrix","serif","monospace","zapfdingbats","Document","BinaryStream","defineFont","parseFontDef","italic","bold","getFontURL","getPaperOptions","TEXT_RENDERING_MODE","fillAndStroke","invisible","fillAndClip","strokeAndClip","fillStrokeClip","scalerType","tableCount","searchRange","entrySelector","rangeShift","tables","checksum","rawData","font","unicodes","ogid2ngid","ngid2ogid","nextGid","readTable","table","LN2","revision","checkSumAdjustment","magicNumber","unitsPerEm","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","offsets","offsetOf","lengthOf","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numOfLongHorMetrics","numGlyphs","maxPoints","maxContours","maxComponentPoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","hhea","metrics","advance","lsb","maxp","leftSideBearings","forGlyph","glyphIds","idOffsets","compound","glyphFor","loca","numberOfContours","platformID","platformSpecificID","languageID","nameID","strings","postscriptEntry","postscriptName","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","language","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","firstCharIndex","lastCharIndex","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","use","glyphsFor","glyf","hmtx","directory","_length","_map","put","_head","_tail","newer","older","_cache","baselineMarkerSize","baseline","_baselineMarker","cloneNode","offsetTop","TextMetrics","LRUCache","fonts","measureText","encodeBase64","encodeUTF8","mixins","ObserversMixin","observers","_observers","addObserver","removeObserver","_suspended","optionsChange","geometryChange","resume","_observerField","multiplyCopy","intersect","rawBBox","MultiPath","Path","paths","Circle","Arc","_pdfLink","Matrix","unit","getOrigin","addMargin","landscape","producer","author","keywords","creator","traverse","_pdfDebug","dashType","lineCap","lineJoin","Gradient","RadialGradient","radius","topLeft","controlIn","anchor","controlOut","curvePoints","_position","_pdfRect","parseColor","toRGB","dash","dashDot","dot","longDash","longDashDot","longDashDotDot","solid","butt","square","miter","bevel","exportPDF","Deferred","_ignoreMargin","toBlob","toStream","PDFMixin","saveAsPDF","_drawPDF","_drawPDFShadow","allPages","multiPage","done","fail","drawDOM","pageNumber","totalPages","before","RECEIVE_USER_PAGE","RESET_USER_PAGES","FETCH_USER_PAGE","receiveUserPage","fetchUserPage","resetUserPages","getUIState","appMessage","getViewMessageId","getShowMessageModal","getChannelInitialized","oneLookLocations","hasOneLookMetadata","oneLookMetadata","friendlyId","SET_CURRENT_IMAGE_ID","SET_SHOW_INFO","FETCH_IMAGE","RECEIVE_IMAGE","RESET_IMAGE","SET_IMAGE_LOADED","SET_IMAGE_LOADING","DESTROY_IMAGE","EDIT_IMAGE","EDIT_BOOLEAN","FETCH_IMAGES","RECEIVE_IMAGES","SET_IMAGES_LOADED","BATCH_EDIT_BOOLEAN","BATCH_EDIT_FOLDER_ID","BATCH_REMOVE_IDS","DUPLICATE_LINE_ITEM_IMAGES","resetImage","setImageLoading","editSortOrder","editTitle","editDescription","editImportType","importType","fetchImages","receiveImages","setImagesLoaded","batchEditFolderId","batchRemoveIds","duplicateLineItemImages","mergedOptions","setOptionsId","currentIds","imageRecords","jobWithImages","decreaseCount","updateOrCreateImage","processImage","fileCount","imageSuccesses","updatedImage","increaseCount","moveImages","imageRecord","getAuthService","SET_TOKENS","SET_TOKEN","SET_AUTHENTICATING","SET_ACCESS_UID","SET_REFRESH_TOKEN_EXPIRED","setToken","setAuthenticating","authing","refresh_token","dispatchAuthUpdate","reconnectAppMessageChannel","setRefreshToken","setCurrentUser","currentJobApplicantCount","jobResultingCustomForm","jobResultingFormId","jobResult","customFormChanged","lastSavedCustomFormRecord","lastSavedCustomForm","AccessStateRecord","immutableAccess","ar","setAccess","fetchCustomForm","receiveCustomForms","setModelLoaded","setApplicantCount","actionUrl","custom_forms","customFormData","FencingRecord","geo_j_s_o_n","fence_ids","defaultFencingProps","DynamicPresentationLinkRecord","defaultDynamicPresentationLinkProps","ruleResolvers","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_attachEvents","_isValidated","validateOnBlur","_submit","stopImmediatePropagation","_checkElement","validateInput","_checkValidity","_findMessageContainer","_extractMessage","parseHTML","_decorateMessageContainer","insertAfter","hideMessages","messageLocators","getElementsByTagName","locate","decorate","defaultLocationStateProps","LocationStateRecord","lastSavedDoors","lastSavedDoor","doorsChanged","financeOptionService","orgUrl","loadByOrg","finance_option","cleanProps","archive","PaymentTermRecord","memoizedCalculatePaymentTerms","calculatePaymentTerms","hashCode","runningValue","newPti","calculatePaymentTermItem","amountValue","calculateFinancingAmount","financedTotal","defaultPaymentTermProps","RECEIVE_ROOF_FACE","RoomEstimationRecord","pageRecord","currentPageRecord","pageControlData","getPaginationByModel","modelById","getAllPaginationByModel","isCurrentPageLoading","objects","parseFormats","normalize","isInRange","restrictValue","isEqualDatePart","_dateViewID","div","_calendar","_setOptions","makeUnselectable","_value","_current","focusOnNav","dates","depth","disableDates","_option","ctrlKey","altKey","_cell","_focus","DateView","_initialOptions","_wrapper","dateView","_change","_oldText","_updateARIA","_icon","_reset","_template","_old","_update","ARIATemplate","_editable","_dateIcon","_inputWrapper","removeClass","_toggleHover","_keydown","_blur","_form","_resetHandler","isEqualDate","_typing","firstChild","_ariaTemplate","OpeningEstimationRecord","defaultOpeningEstimationProps","allAccesses","orgsById","currentUserAccess","denormalizedReduxUser","userHydratedForSave","accessId","validateFunction","Dispatch","testMode","localStorageKey","lastExceptionAction","counters","setUserProperties","dispatchException","newrelic","noticeError","dispatchToRsf","isException","isObject","appModule","enqueueWithEventTime","chunk","dequeueAnalyticsChunk","enqueueAnalyticsData","eventTime","getAnalyticsQueue","setAnalyticsQueue","chunkSize","queueJSON","RECEIVE_EVENT_RESULT","RECEIVE_EVENT_RESULTS","receiveEventResults","err_msg","presentationTemplateService","loadAll","presentation_templates","_response","FETCH_PRESENTATION_TEMPLATES","FETCH_PRESENTATION_TEMPLATE","RECEIVE_PRESENTATION_TEMPLATES","RECEIVE_PRESENTATION_TEMPLATES_ERROR","RECEIVE_PRESENTATION_TEMPLATE","RECEIVE_PRESENTATION_TEMPLATE_ERROR","CREATE_PRESENTATION_TEMPLATE","SAVE_PRESENTATION_TEMPLATE","REMOVE_PRESENTATION_TEMPLATE","fetchPresentationTemplates","fetchPresentationTemplate","receivePresentationTemplates","createPresentationTemplate","receivePresentationTemplateError","receivePresentationTemplatesError","removePresentationTemplate","paymentProviders","defaultPaymentAuthProps","pay_simple","card_connect","occ_pay","ViewClone","defaultTransition","_id","_overlay","_layout","_scroller","_model","layout","getLayout","stretch","modelScope","scroller","initWidgets","$destroy","purge","triggerBeforeShow","triggerBeforeHide","showStart","inited","_invokeNgController","_padIfNativeScrolling","showEnd","hideEnd","beforeTransition","afterTransition","skin","paddingTop","contentElement","scrollerContent","scrollElement","wrapInner","prepend","_callController","_locate","currentView","sandbox","_hideViews","rootView","rootNeeded","layouts","viewContainer","ViewContainer","getLayoutProxy","_setupLayouts","viewOptions","loader","showView","remoteViewURLPrefix","_findViewElement","_createView","serverNavigation","_loadView","$1","_getLayout","_xhr","abort","absoluteURL","_xhrComplete","responseText","ViewEngine","discountService","FETCH_ORG_DISCOUNTS","FETCH_DISCOUNT","RECEIVE_ORG_DISCOUNTS","RECEIVE_DISCOUNT","REMOVE_ORG_DISCOUNT","REMOVE_DISCOUNT","RECEIVE_DISCOUNT_ERROR","fetchDiscount","receiveDiscountError","fetchDiscounts","receiveErrors","receiveDiscounts","removeOrgDiscount","archiveDiscount","noteParams","RECEIVE_NOTE","RECEIVE_NOTES","REMOVE_NOTE","RESET_NOTE","EDIT_NOTE","SET_UP_NEW_NOTE","receiveNotes","removeNote","updateOrCreate","getOrgDiscounts","discountIds","sendInviteOptions","presentationService","jobUrl","dynamic_presentation_links_attributes","slides_attributes","dynamic_slides","SET_CURRENT_PRESENTATION_ID","FETCH_ORG_PRESENTATIONS","RECEIVE_ORG_PRESENTATIONS","CREATE_ORG_PRESENTATION","CREATE_ORG_ERRORS","ADD_ORG_PRESENTATION","FETCH_JOB_PRESENTATIONS","RECEIVE_JOB_PRESENTATIONS","RECEIVE_JOB_ERRORS","CREATE_JOB_PRESENTATION","CREATE_JOB_ERRORS","ADD_JOB_PRESENTATION","REMOVE_JOB_PRESENTATION","FETCH_PRESENTATION","RECEIVE_PRESENTATION","RECEIVE_SLIDE","RECEIVE_PRESENTATION_ERROR","REMOVE_PRESENTATION","EDIT_COVER_IMAGE","EDIT_SORT_ORDER","EDIT_SELECTED","EDIT_NAME","EDIT_LINK","EDIT_PRESENTATION","RESET_PRESENTATION","FETCH_PRESENTATIONS","RECEIVE_PRESENTATIONS","SET_PRESENTATIONS_LOADED","BATCH_EDIT_SELECTED","receivePresentationError","editLink","editTarget","resetPresentation","fetchOrgPresentations","receiveOrgErrors","receiveOrgPresentations","createOrgPresentation","createOrgPresentationErrors","fetchJobPresentations","receiveJobErrors","receiveJobPresentations","createJobPresentation","createJobPresentationErrors","fetchPresentations","receivePresentations","setPresentationsLoaded","presentationRecord","batchCreatePresentation","presentationSuccess","processPresentation","createPresentation","createCoverImage","presentationRecords","destroyPresentation","batchUpdatePresentation","updatedPresentation","contextObj","action_payload","error_action","receiveTask","taskHandler","movePresentations","errorTaskHandler","errorMessage","replacer","derez","nu","$ref","px","rez","eval","colspan","cellContent","minorTicks","dataTextField","dataValueField","_index","_timeSlotCollections","_daySlotCollections","_isRtl","addTimeSlotCollection","_addCollection","addDaySlotCollection","timeSlotCollectionCount","daySlotCollectionCount","daySlotByPosition","_slotByPosition","timeSlotByPosition","offsetLeft","timeSlotRanges","_startSlot","inRange","_endSlot","collectionIndex","_continuousRange","daySlotRanges","tail","slotRanges","_startTime","_endTime","isMultiDay","isAllDay","ranges","_startCollection","startInRange","_endCollection","endInRange","_getCollections","continuousSlot","isDaySlot","firstSlot","lastSlot","upSlot","_verticalSlot","downSlot","leftSlot","_horizontalSlot","rightSlot","_collection","slotByStartDate","slotByEndDate","getSlotCollection","getTimeSlotCollection","getDaySlotCollection","addEvent","startSlot","endSlot","outerRect","_rect","innerRect","_slots","_groupIndex","_collectionIndex","addTimeSlot","addDaySlot","groupIndex","startOffset","endOffset","isHorizontal","offsetX","firstChildHeight","firstChildTop","SchedulerView","_normalizeOptions","_resizeHint","_moveHint","_cellId","_resourcesForGroups","_selectedSlots","workDayStart","workDayEnd","_isMobile","_isMobilePhoneView","_addResourceView","dateForTitle","selectedDateFormat","shortDateForTitle","selectedShortDateFormat","_changeGroup","_isGroupedByDate","_changeDate","_changeGroupContinuously","_changeViewPeriod","_horizontalSlots","_isVerticallyGrouped","_normalizeHorizontalSelection","_getNextHorizontalRange","_continuousSlot","_verticalSlots","_normalizeVerticalSelection","_getNextVerticalRange","constrainSelection","_updateDirection","backward","moveToEventInGroup","_continuousEvents","moveToEvent","_getAllEvents","_getUniqueEvents","_getSortedEvents","_getNextEventIndexBySlot","_getStartIdx","_getSelectedSlot","clearSelection","_selectEvents","_selectSlots","_resourceValue","valuePrimitive","_resourceBySlot","groupedResources","_createResizeHint","_removeResizeHint","_removeMoveHint","_shouldInverseResourceColor","isDark","_eventTmpl","storage","eventResources","createLayout","allDay","columnLevels","rowLevels","_topSection","_bottomSection","refreshLayout","datesHeader","timesHeader","avoidScrolling","movable","_touchScroller","_createDateLayout","_createColumnsLayout","_groupOrientation","_createRowsLayout","selectionByElement","calendarInfo","prevGroupSlot","nextGroupSlot","_eventOptionsForMove","_updateEventForResize","_updateEventForSelection","formats","resolveColor","normalizeByte","namedColors","percBrightness","aqua","azure","beige","black","blue","brown","coral","cyan","darkblue","darkcyan","darkgray","darkgreen","darkorange","darkred","dimgray","fuchsia","gold","goldenrod","gray","green","greenyellow","indigo","ivory","khaki","lightblue","lightgrey","lightgreen","lightpink","lightyellow","lime","limegreen","linen","magenta","maroon","mediumblue","navy","olive","orange","orangered","orchid","pink","plum","purple","red","royalblue","salmon","silver","skyblue","slateblue","slategray","snow","steelblue","teal","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","createColumns","createRows","rangeIndex","collidingEvents","groupEqFilter","build","cells","perRow","empty","wt","lt","ft","dt","gt","vt","_t","mt","decade","century","Dt","_templates","_header","_footer","_toDateObject","_view","_focusView","_cellID","_addClassProxy","_active","_cellByDate","_removeClassProxy","horizontal","divisor","vertical","_today","_title","_table","_bindTable","navigateToPast","_navigate","navigateToFuture","navigateUp","navigateDown","_oldTable","_changeView","_animate","future","_class","_nextNavigatable","_horizontal","unwrap","_vertical","insertBefore","_toggle","_todayClick","firstVisibleDay","cssClass","linkClass","setMonth","viewsEnum","logic","ignoreCase","neq","gte","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isempty","isnotempty","pageSize","dir","$orderby","$skip","take","$top","dataType","schemas","odata","transports","jsonp","parameterMap","$inlinecount","$format","$count","GeoJsonRecord","defaultGeoJsonProps","elevation_ids","MeasurementRecord","propertiesMapping","exteriorMeasurements","lineMeasurementUpdate","sunroomUpdate","sunroomKneeWallUpdate","calculateFormula","addtl","columnKeys","setupFencingMeasurements","setupForumulaParser","keysWithValues","returnKeys","getUoM","calculateArea","defaultMeasurementProps","defaultMeasurementHydrateProps","MeasurementHydratedRecord","SET_USER","SET_CURRENT_USER","RESET_USER","FETCH_USER","SET_USER_LOADED","RECEIVE_USERS","SET_CRM_USER_CHECK","FETCH_ALLOWED_ACL","RECEIVE_ALLOWED_ACL","ADD_ACCESSES","setUser","setUserLoaded","resetUser","receiveUsers","setCrmUserCheck","fetchAllowedAcl","receiveAllowedAcl","addAccesses","accessIds","force","sendInvitation","revokeAccess","loadAllowedAcl","loadAndSetAccessAcl","loadUserId","loadId","setAccessAcl","atan2","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","_reverse","scalex","scaley","scale3d","translatex","translatey","translate3d","skew","modifier","stopQueue","elem","cur","exclusive","ease","speeds","unique","setReverse","addRestoreProperties","restoreCallback","_additionalEffects","play","_duration","compositeRun","_complete","previousDivisor","slideIn","box","fillScale","transformOrigin","_container","_clipInHalf","_face","clipInHalf","temporary","staticPage","turningPage","transformStyle","_before","_after","_previous","_transitionClass","_both","_containerClass","completeProxy","isAbsolute","_tickProxy","_tick","_started","tick","timePassed","_easeProxy","moveAxis","easeOutExpo","easeOutBack","Animation","Transition","createEffect","fitScale","FETCH_AUTHORIZATION","SET_AUTHORIZATION","RESET","fetchAuthorization","setAuthorization","receivePayment","status_code","authorize","authorizationRecord","POST_JOB","RECEIVE_LEAD","receiveLead","startTimezone","endTimezone","kendoDropDownList","optionLabel","recurrence","isPlainObject","serialize","aggregates","_defaultId","idField","_time","_date","expand","recurrenceId","isOccurrence","isRecurring","recurrenceRule","isRecurrenceHead","toOccurrence","recurrenceException","shouldSerialize","modelBase","Query","cancelChanges","_removeExceptionDate","_createNewModel","_pushCreated","_addExceptionDate","pushCreate","_removeExceptions","toExceptionString","SchedulerDataReader","SchedulerEvent","canceledit","imageClass","iconClass","timezonePopUp","noTimezone","kendoMobileTimezoneEditor","kendoMobileRecurrenceEditor","multipleResources","desktop","timezoneEditorButton","kendoTimezoneEditor","kendoRecurrenceEditor","kendoMultiSelect","itemTemplate","tagTemplate","createButton","toggleDateValidationHandler","_toggleDateValidation","editor","allDayEvent","windows_zones","_initTimezoneEditor","repeat","recurrenceEditor","_buildEditTemplate","separateTimezones","_createEndTimezoneButton","_revertTimezones","_startTimezone","_endTimezone","Pane","_actionSheetButtonTemplate","_actionSheetPopupOptions","align","effect","animations","timezoneView","timezoneTitle","_createActionSheetButton","showDialog","kendoMobileActionSheet","command","editorTitle","kendoEditable","clearContainer","_views","kendoWindow","resizable","userTriggered","_timezonePopup","getKendoWindow","timezoneEditorTitle","_initModel","_toolbar","_dataSource","_resources","_resizeHandler","_resizable","_movable","_bindResize","_selectable","_ariaId","_createEditor","_unbindResize","_data","_groupsByResource","_selection","_selectedEvents","slots","_startDate","_endDate","_createSelection","button","_mouseMove","_selectFirstSlot","_ctrlKey","_shiftKey","removeAttribute","ariaEventLabel","ariaSlotLabel","occurrenceByUid","_moveTimer","_viewByIndex","removeEvent","_adjustSelectedDate","_updateSelection","_timeSlotInterval","snap","deleteWindowTitle","workWeek","agenda","timeline","timelineWeek","timelineWorkWeek","timelineMonth","recurrenceMessages","deleteWindowOccurrence","deleteWindowSeries","editWindowTitle","editWindowOccurrence","editWindowSeries","_refreshHandler","_progressHandler","_errorHandler","_editor","_moveDraggable","_resizeDraggable","setDataSource","Draggable","ignore","holdToDrag","autoScroll","_updateMoveHint","_updateEvent","cancelHold","dragstart","drag","_updateResizeHint","dragend","dragcancel","_preventRefresh","_convertDates","getByUid","_showRecurringDialog","editRecurring","occurrenceText","seriesText","_modelForContainer","_confirmation","_isEditorOpened","deleteRecurringConfirmation","deleteSeriesConfirmation","cancelEvent","_editEvent","saveEvent","_editRecurringDialog","_createPopupEditor","editRecurringMode","_createButton","_set","_deleteRecurringDialog","_removeEvent","occurrencesInRange","deleteRecurring","_unbindView","_bindView","_viewRemoveHandler","_viewAddHandler","eventInfo","_viewEditHandler","_viewNavigateHandler","isWorkDay","_workDayMode","_selectView","_viewActivateHandler","_selectedView","_renderView","_selectedViewName","_viewsCount","rebind","viewName","_initializeView","selectedDate","showWorkHours","_requestStart","_error","_progress","observable","formattedDate","formattedShortDate","viewsCount","nextDate","previousDate","_showCalendar","copyAnchorStyles","slotByPosition","resourcesBySlot","avoidLinks","zones_titles","_zonesQuery","_zoneTitleId","_zoneTitlePicker","_zonePicker","_zoneTitle","_zone","DropDownList","cascadeFrom","other_zone","_bindZones","_filter","_options","RecipientRecord","defaultRecipientProps","signature_guid","EstimateComparisonLinkRecord","defaultEstimateComparisonLinkProps","customAddressFromJSON","CustomAddressRecord","customAddressToJSON","customAddress","same_as_applicant","same_as_physical","defaultCustomAddressProps","applicantFromJSON","physical_address","mailing_address","ApplicantRecord","applicantToJSON","picture_id_expiration_date","picture_id_issue_date","employed_start_date","previous_employer_start_date","previous_employer_end_date","additional_income_from","defaultApplicantProps","middle_initial","marital_status","us_citizen","employer_name","gross_monthly_income","employer_phone","less_than_2_years","previous_employer","additional_income_source","additional_income_amount","customFormFromJSON","CustomFormRecord","customFormToJSON","permittedData","job_uuid","dabellaCustomFormToJSON","property_purchase_date","defaultCustomFormProps","product_roof","product_siding","product_gutters","product_windows","product_bath","proof_of_income","finance_information","special_plan","deposit","credit_select","county","estimated_payment","credit_score","plan","standard_apr","standard_term","deferred_term","purpose","property_payment_rent","property_balance_owed","property_market_value","property_home_type","property_primary_residence","property_owner","property_second_mortgage","property_second_mortgage_payment","property_second_mortgage_balance","RECEIVE_EVENTS","FETCH_EVENT","RECEIVE_EVENT","FETCH_BUSY","RECEIVE_BUSY","INITIALIZE_EVENT","RESET_EVENT","REMOVE_EVENT","GENERATE_COLORS","receiveEvents","fetchEvent","fetchMonthFreeBusy","receiveMonthFreeBusy","fetchBusyInfo","start_date","end_date","busy","toUTCString","cleanQueryOptions","inviteParams","eventRecord","FenceRecord","segment_ids","defaultFenceProps","emptyFenceRecord","IframeRecord","defaultIframeProps","iframe","LandingEstimateRecord","defaultLandingEstimateProps","CalculatedFinancingRecord","defaultCalculatedFinancingProps","defaultEstimateCommissionDetailsProps","greenline_percentage","EstimateCommissionDetailsRecord","defaultIEstimateCommissionVariablesProps","adj_to_commission","base_commission","calculated_commission","percent_of_greenline","percent_payable","sale_price","sale_price_less_adm_fee","total_cost","EstimateCommissionVariablesRecord","defaultIEstimateCommissionOutputObjectsProps","formatted","EstimateCommissionOutputObjectsRecord","variables","verbose_output","outputObject","EstimateCommissionOutputRecord","defaultIEstimateCommissionOutputProps","defaultIEstimateCommissionUserProps","commission_rate","EstimateCommissionUserRecord","EstimateCommissionRecord","defaultEstimateCommissionProps","estimate_last_updated","apl_id","generated_at","generated_by_user_id","generated_by_user_email","estimateOverviewsByJob","byKey","calculatedFinancingByFinancedAmount","calculatedCommission","estimateDocumentsByJobId","EstimateStateRecord","landingEstimateRecord","receiveEstimateGroup","calculations","receiveCalculations","receiveEstimateFinanceOption","totEstimate","tempDocumentId","overviews","receiveFinanceOption","newPaymentTerms","addNewPaymentTerms","currentPaymentTerms","updatedPaymentTerms","rptPaymentTerms","duplicateGroups","duplicateEstimateFinanceOptions","addFinanceOptionIds","foId","calculateFinanceOption","calculation","foid","estimateSignedDocuments","commissionData","FETCH_CRM_USER","RECEIVE_CRM_USER","SET_CRM_USER_LOADED","RECEIVE_CRM_USERS","fetchCrmUser","setCrmUserLoaded","receiveCrmUsers","queryUsers","userType","updateUser","tokenService","loadByKind","parentTokenLoad","parent_token_load","loadAuthorized","deleteByKind","estimateTemplateParams","urlSetup","FETCH_ESTIMATE_TEMPLATE","RECEIVE_ESTIMATE_TEMPLATE","RESET_ESTIMATE_TEMPLATE","SET_ESTIMATE_TEMPLATE_LOADED","DESTROY_ESTIMATE_TEMPLATE","EDIT_ESTIMATE_TEMPLATE","FETCH_ESTIMATE_TEMPLATES","RECEIVE_ESTIMATE_TEMPLATES","SET_ESTIMATE_TEMPLATES_LOADED","BATCH_EDIT_ESTIMATE_TEMPLATE","fetchEstimateTemplates","receiveEstimateTemplates","setEstimateTemplatesLoaded","batchEditSortOrder","createEstimateTemplate","updatedEstimateTemplate","moveEstimateTemplates","estimateTemplateRecord","OrgFinanceOptionsRecord","FinanceOptionStateRecord","lastSavedOrgsById","OrgStateRecord","immutableOrg","mergedOrg","orgIdReset","settingsConfig","prefConfig","orgIdAdd","file_name","filter_states","stateRootPath","currentJobName","currentJobOrgId","currentJobAddress","jobQueryChanged","lastSavedPresentation","jobDocumentCount","jobImageCount","jobResourceIds","jobStats","jobAssignedUserId","defaultJobQueryState","JobQueryStateRecord","jobStatesFromJSON","JobQueryRecord","getJobQueryChanges","defaultJobQuery","toSeq","calculateUpdatedSince","sub","calculateUpdatedBefore","since","endOfYear","updated_before","subMonths","FinanceOptionValidationRecord","defaultFinanceOptionValidationProps","min_amount","max_amount","min_payment","FinanceOptionRecord","hasRequiredApplicationData","filterByValidation","testBoolean","calculateRate","filterByStatus","localCalculations","FinanceOptionProviders","apply_now_url","org_uid","PrequalificationProviders","AsyncCalcFinanceOptionProviders","LocalCalcFinanceOptionProviders","defaultFinanceOptionProps","integrations_identifier","merchant_fee","promo_fee","archive_number","archived_at","toHex","padDigit","brightness","aliceblue","antiquewhite","aquamarine","bisque","blanchedalmond","blueviolet","burlywood","cadetblue","chartreuse","chocolate","cornflowerblue","cornsilk","crimson","darkgoldenrod","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorchid","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","gainsboro","ghostwhite","grey","honeydew","hotpink","indianred","lavender","lavenderblush","lawngreen","lemonchiffon","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","mediumaquamarine","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","oldlace","olivedrab","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","powderblue","rosybrown","saddlebrown","sandybrown","seagreen","seashell","sienna","slategrey","springgreen","thistle","toHSV","toBytes","toCss","toCssRgba","toDisplay","NaN","toHSL","fromBytes","fromRGB","fromHSV","fromHSL","defaultEstimateGroupProps","running_discountable","EstimateGroupRecord","EstimateGroupStateRecord","receiveEstimateLineItem","totEstimateGroup","updateBaseTotal","groupIds","gid","unsavedRoomEstimationId","duplicateEstimateLineItems","estimateGroupId","_verticalRowCountForLevel","_rowCountForLevel","_horizontalGroupCountForLevel","_columnCountForLevel","_getCalendarRowsLength","_createRows","_createRow","_adjustStartDate","_getContent","_getTimeSlotByPosition","_nextSlotStartDate","_createVerticalColumnsLayout","_verticalGroupCount","_horizontalGroupCount","_columnOffsetForResource","_positionEvent","_positionMobileEvent","_createEventElement","_addDaySlotCollections","_changePeriodGroupIndex","_appendResizeHint","_createMoveHint","eventHeight","_appendMoveHint","_groupCount","MonthGroupedView","MonthGroupedByDateView","MonthView","_groupedView","_getGroupedView","_renderLayout","_groups","eventTemplate","dayTemplate","groupHeaderTemplate","_firstDayOfMonth","_lastDayOfMonth","_touchEditable","_mouseEditable","_addUserEvents","_editUserEvents","_createCalendar","_slotIndices","_weekStartDates","showDelete","inverseColor","_isInDateSlot","_slotIndex","more","moreButtonHeight","_renderGroups","_renderEvents","filteredFinanceOptions","forceRefresh","safeFinanceOptions","getOrgFinanceOptions","rangeFinanceOptions","estimateFinanceOptionsList","sortedFilteredFinanceOptions","financeOptionEstimateIds","DocumentableTypeConversion","combineDocuments","directUpload","documentParams","fileBlob","FETCH_JOB_ESTIMATES","FETCH_ESTIMATE","RECEIVE_JOB_ESTIMATES","RECEIVE_ESTIMATE","SET_ESTIMATE_LOADED","SET_LAST_SAVED_ESTIMATE","REMOVE_JOB_ESTIMATE","RECEIVE_ESTIMATE_PDF","REMOVE_ESTIMATE_PDF","REMOVE_ESTIMATE","RECEIVE_ESTIMATE_ERROR","UPDATE_ESTIMATE_OVERVIEW","FETCH_LANDING_ESTIMATE","RECEIVE_LANDING_ESTIMATE","SET_LANDING_LOADED","ADD_PT_TEMPLATE","ADD_PT_ITEM","REMOVE_PT_ITEM","UPDATE_PT_ITEM","ADD_DISCOUNT","UPDATE_DISCOUNT","UPDATE_BASE_TOTAL","UPDATE_DISCOUNT_TOTAL","UPDATE_TAX_TOTAL","UPDATE_PAYMENT_TERM_TOTAL","DUPLICATE_ESTIMATE","ADD_FINANCE_OPTION_ID","SET_ESTIMATE_FINANCE_OPTIONS","FETCH_CALCULATIONS","RECEIVE_CALCULATIONS","SET_CALCULATIONS_ERROR","FETCH_ESTIMATE_COMMISSION","RECEIVE_ESTIMATE_COMMISSION","SET_ESTIMATE_SIGNED_DOCUMENTS","RESET_DISCOUNTS","RESET_PAYMENT_TERMS","UPDATE_METADATA","receiveEstimateError","setEstimateLoaded","setLastSavedEstimate","fetchEstimates","receiveEstimates","updateEstimateOverview","receiveEstimatePdf","fetchLandingEstimate","receiveLandingEstimate","setLandingLoaded","updateDiscountTotal","updatePaymentTermTotal","addFinanceOptionId","setEstimateFinanceOptions","fetchCalculations","fetchEstimateCommission","receiveEstimateCommission","setCalulationsError","setEstimateSignedDocuments","resetDiscounts","resetPaymentTerms","updateEstimateTotal","documentsArray","directUploadEstimateLineItemDocuments","loadByJob","shallowUpdateEstimate","shallowUpdate","estimateid","landingEstimate","tempFolder","fetchPdf","asyncFinanceOptionIds","localFinanceOptions","getEstimateCommission","integrationType","signContract","pollTask","dispatchContextAction","newTask","actionHandler","trackWsEvent","nr","addPageAction","_timeout","_connectCount","_socketUrl","_callbacks","_errorCallback","_timeoutCallback","onTimeout","defaultTimeoutHandler","sessionId","_channel","_socket","isConnected","onOpen","attempt","isReconnect","wasClean","refreshErrorClass","refreshErrorMessage","extra","bearer","topic","channel","processStateChange","topic2","_taskChannel","taskObj","taskRecord","handleTaskError","clear","debugCluster","leave","endSession","getAppMessageChannel","_appMessageChannel","joinAppMessageChannel","allowReconnect","appMessageTopic","res","timestamp","session_id","remoteStorageInstance","getRemoteStorage","AppMessageAPI","Movable","PaneDimensions","tapCapture","minScale","scaleWith","rescale","scaleTo","freeze","_moveTo","paneAxis","outOfBounds","_snapBack","dimension","velocityMultiplier","captureNext","friction","elastic","cancelCapture","_updateCoordinates","setCoordinates","setCallback","elementSize","scrollMovable","alwaysVisible","_native","fixedContainer","TapCapture","forcedEnabled","mousewheelScrolling","zoomSnapBack","animatedScroller","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","_wheelTimeout","makeVirtual","virtualSize","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","centerCoordinates","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","forceEnabled","_paneChange","_dragEnd","formatWebhookParams","webhookObject","eventsArray","filtered_event","RECEIVE_WEBHOOK","RECEIVE_WEBHOOK_EVENT","RECEIVE_WEBHOOKS","RECEIVE_WEBHOOK_EVENTS","REMOVE_WEBHOOK","RESET_WEBHOOK","FETCH_WEBHOOK","SET_UP_NEW_WEBHOOK","SET_WEBHOOK_LOADED","webhook_event","receiveWebhooks","receiveWebhookEvents","removeWebhook","fetchWebhook","setWebhookLoaded","resetWebhook","listWebhooks","listWebhookEvents","weebhookId","webhookID","updateOrCreateWebhook","destroyWebhook","byModel","PaginationStateRecord","defaultPagination","PaginationRecord","payloadFetch","pageFetch","queryParamsFetch","payloadReceive","pageReceive","queryParamsReceive","payloadError","pageError","queryParamsError","existingIds","replaceIds","removeIds","postBody","loadByEmail","loadByAltId","altName","altId","alt_name","alt_id","access_id","loadAclValues","access_uid","userData","cleaned","defaultStatsProps","StatsRecord","byPage","lastSavedJobQuery","swiped_job","uploading","sampleJobs","JobStateRecord","jbp","mergeIn","jobIds","startOfDay","endOfDay","emptyJobQuery","foundIndex","statsRecord","estimateService","shallowCleanProps","saveTemp","save_tmp","estimatedId","estimateData","cleanEstimatedDates","groupData","groupCleanProps","estimateFinanceOptionData","financeOptionCleanProps","lineItemData","optionData","openingEstimationData","openingEstimation","remote_file_url","documentData","roomEstimationData","_compileTemplates","_guid","_compileStacking","stacking","pinned","hideOnClick","allowHideAfter","autoHideAfter","_compiled","_defaultCompiled","_safeCompiled","_getCompiled","_popupOrigin","_popupPosition","_popupPaddings","_attachPopupEvents","_hidePopup","_showPopup","collision","_triggerHide","_togglePin","_attachStaticEvents","_hideStatic","_showStatic","typeIcon","getNotifications","webpackContext","req","webpackContextResolve","__webpack_require__","exports","cf","_dataBinding","dataBinding","_dataBound","_itemChange","itemChange","_ns","bindings","_parents","removedItems","addedItems","addedDataItems","Select","MultiSelect","textField","valueField","valueUpdate","ObservableObject","dependencies","_access","currentSource","_parseValue","_initChange","tBodies","selectedIndex","specified","_valueIsObservableObject","_valueIsObservableArray","_source","listView","bound","_preselect","gantt","multiselect","_isBound","toDestroy","binders","applyBinding","Binder","observableHierarchy","_initChildren","FETCH_DOCUMENT","RECEIVE_DOCUMENT","RESET_DOCUMENT","SET_DOCUMENT_LOADED","DESTROY_DOCUMENT","EDIT_DOCUMENT","UPDATE_SIGNED_DOCUMENT_STATUS","FETCH_DOCUMENTS","RECEIVE_DOCUMENTS","RECEIVE_DOCUMENTS_BY_ID","SET_DOCUMENTS_LOADED","CREATE_JOB_DOCUMENT","DUPLICATE_LINE_ITEM_DOCUMENTS","fetchDocument","resetDocument","setDocumentLoaded","updateSignedDocumentStatus","fetchDocuments","receiveDocuments","receiveDocumentsById","setDocumentsLoaded","createJobDocument","createJobDocumentErrors","duplicateLineItemDocuments","removeFromDocumentOrder","processDocument","pdfBlob","setPresignedOptions","presignedType","presignedId","updatedDocument","mergeOptions","pushDocumentId","moveDocuments","combine","taskResponse","FETCH_ORG_FINANCE_OPTIONS","FETCH_FINANCE_OPTION","RECEIVE_ORG_FINANCE_OPTIONS","RECEIVE_FINANCE_OPTION","REMOVE_ORG_FINANCE_OPTION","REMOVE_FINANCE_OPTION","RECEIVE_FINANCE_OPTION_ERROR","fetchFinanceOption","receiveFinanceOptionError","fetchFinanceOptions","receiveFinanceOptions","removeOrgFinanceOption","updateFinanceOption","batchUpdateFinanceOptions","archiveFinanceOption","calcFinancing","estimateFinanceOptionsById","estimateFinanceOptionsProcess","toEstimateFinanceOptionsJson","foData","EstimateFinanceOptionStateRecord","parseFloatSafe","roundToDecimals","exponent","elevationId","currentElevationsLoading","elevationsLoadingByMeasurement","currentElevations","elevationsById","elevationIdsByMeasurement","elevationSourceImageIds","renderedImageIds","SET_SCREEN_SHARE_STATUS","SET_SCREEN_SHARE_KIND","SET_ACTIVE_SCREEN_SHARE_JOB","FETCH_SCREEN_SHARE","RECEIVE_SCREEN_SHARE","RECEIVE_SCREEN_SHARE_TOKEN","RECEIVE_SCREEN_SHARE_ERROR","RECEIVE_ROOM_STATUS","setScreenShareKind","setActiveScreenShareJob","fetchScreenShare","receiveScreenShareError","receiveScreenShare","receiveToken","receiveRoomStatus","setRemoteActiveScreenShareJob","activeJobId","loadToken","PresentationTemplateRecord","defaultPresentationTemplateProps","loadSigned","getHistoryReport","signedDocumentParams","rec","owner","_draggable","addOverlay","removeOverlay","actions","_createWindow","_dimensions","pin","toFront","_buttonEnter","_buttonLeave","_windowActionHandler","_onDocumentResize","_marker","_animationOptions","resizing","toggleMaximization","ii","resizeHandle","dragging","_actions","scrollable","fade","_closable","isMaximized","_closing","_actionForIcon","_modals","_object","titlebar","Fade","fadeIn","_activate","_documentScrollTop","_documentScrollLeft","_removeOverlay","fadeOut","_deactivate","_actionable","_shouldFocus","restoreOptions","isMinimized","_sizingAction","maximize","minimize","unpin","contentFrame","_triggerRefresh","_ajaxRequest","_ajaxComplete","_loadingIconTimeout","_ajaxError","xhr","_ajaxSuccess","_showLoading","ajax","elementPadding","initialPosition","resizeDirection","initialSize","containerOffset","initialWindowPosition","initialPointerPosition","startPosition","minLeftPosition","minTopPosition","_finishDrag","captureEvents","_attachCapture","_loading","changeMessage","transitionDone","activatedPriceListService","loadCached","loadFile","standardStatus","FETCH_ACTIVATED_PRICE_LIST","RECEIVE_ACTIVATED_PRICE_LIST","SET_LOADED","fetchActivatedPriceList","receiveActivatedPriceList","setLoaded","responseApl","responseCachedPriceList","setSlideEstimateIds","paymentTermTemplateData","uuid1","uuid2","fromEstimate","paymentTermItemsSize","enabledSlides","firstEstimateId","orgDiscounts","receipt","PaymentRecord","defaultPaymentProps","is_debit","payment_date","pay_simple_customer_id","openingEstimationsById","openingEstimationsProcess","lastSavedOpeningEstimations","openingEstimationId","toOpeningEstimationsJson","openingData","RECEIVE_PRODUCT","SET_PAYMENT_OPTION_EDITOR_VISIBLE","SET_PRICING_DRAWER_VISIBLE","setPricingDrawerVisible","EstimateLineItemStateRecord","receiveEstimateLineItemOption","receiveOpeningEstimation","groupId","lineItemIds","lid","duplicateEstimateLineItemOptions","duplicateOpeningEstimations","RECEIVE_WALL_FACADE","EDIT_WALL_FACADE","fencesById","fenceSegmentIds","fenceSegments","fenceFencingId","lastSaved","dirtyTree","ancestors","childFolder","RECEIVE_ESTIMATE_GROUP","DUPLICATE_ESTIMATE_GROUPS","RECEIVE_ESTIMATE_LINE_ITEM_OPTION","DUPLICATE_ESTIMATE_LINE_ITEM_OPTIONS","estimateLineItemOption","optionIds","resolved","_promise","_resolve","_reject","poolId","measurementEditing","getMeasurementHydrated","mp","startAngle","endAngle","nthRoot","multiplyConstant","negate","multiply","isReal","real","translateWith","scaleCopy","transformCopy","distanceTo","minPoint","maxPoint","ZERO","setOrigin","bottomRight","topRight","bottomLeft","fromPoints","expandCopy","containsPoint","_isOnPath","setRadius","pointAt","_pointAt","radiusX","radiusY","anticlockwise","MAX_INTERVAL","_arcInterval","_intervalCurvePoints","cp1","cp2","p2","_derivativeAt","p1","invert","IDENTITY","_optionsChange","addConstant","curveIntersectionsCount","lineIntersectionsCount","Point","Transformation","toMatrix","isOutOfEndPoint","hasRootsInRange","_handler","_mouseenter","_mouseleave","_mousemove","_visual","_enableTracking","hideTooltip","exportVisual","_kendoNode","srcElement","showTooltip","suspendTracking","_suspendedTracking","resumeTracking","_elementOffset","_surfacePoint","observe","insertAt","removeSelf","invalidate","childrenChange","_wrap","_clear","_items","_tooltipOptions","_openPopupHandler","_openPopup","_bindEvents","showOn","autoHide","hideDelay","showAfter","_showHandler","_showEvent","_surfaceLeaveHandler","_surfaceLeave","_mouseleaveHandler","_mousemoveHandler","_hideClick","_tooltipShape","_updateContent","_show","_showTimeout","_autoHide","_measure","_closeButton","_popupRelatedTarget","DASH_ARRAYS","longdash","dashdot","longdashdot","longdashdotdot","BaseNode","OptionsStore","Surface","SurfaceFactory","SurfaceTooltip","currentTransform","_bboxCache","_matrixHash","_bbox","Paintable","Traversable","Measurable","clippedBBox","xt","parentTransform","_clippedBBox","_hasFill","_containsPoint","_hasStroke","_splice","_add","_remove","_clearObserver","_setObserver","_reparent","removeAt","_geometry","toPath","curveTo","bboxTo","_curveBoundingBox","_lineBoundingBox","_curveExtremesFor","_curveExtremes","_calculateCurveAt","_intersectionsTo","_isOnCurveTo","_isOnLineTo","_isOnPathTo","arc","_addArcSegments","arcTo","fromRect","fromArc","_createStops","_userSpace","addStop","removeStop","_radius","_fallbackFill","fallbackFill","_defaults","_fieldMap","alignContent","spacing","lineSpacing","_initMap","sizeField","groupsSizeField","groupAxis","groupsAxis","reflow","_initGroups","groupsSize","lineSize","bboxes","_newGroup","_addToGroup","ElementsArray","fit","GradientStop","Layout","LinearGradient","Segment","vAlign","vStack","vWrap","isRelative","previousCommand","PathParser","_zIndex","shapes","_quadNode","pointShapes","inBounds","ShapesQuadTree","ROOT_SIZE","initRoots","rootMap","rootElements","pointShape","assignZindex","bboxChange","_insertShape","_insert","getSectors","inRoot","QuadNode","_root","_rootElement","firstElementChild","getScreenCTM","attachTo","svg","definitions","clearDefinitions","createDefinitions","setElement","renderChildren","updateDefinition","allAttr","allCss","mapTransform","renderTransform","transformChange","mapStyle","renderOpacity","definitionChange","renderDefinitions","mapDefinitions","defs","definitionMap","addDefinitions","removeDefinitions","createDefinition","addDefinition","removeDefinition","renderData","mapFill","mapStroke","attributeMap","printPath","segmentType","printPoints","renderLinecap","renderDashType","renderStroke","renderFill","pos","setY","renderContent","mapPosition","mapSource","renderPosition","renderSource","renderOffset","loadStops","mapCoordinates","renderCoordinates","mapSpace","namespaceURI","adoptNode","implementation","hasFeature","exportSVG","ArcNode","CircleNode","ClipNode","DefinitionNode","GradientStopNode","GroupNode","ImageNode","LinearGradientNode","MultiPathNode","Node","PathNode","RadialGradientNode","RectNode","RootNode","TextNode","_exportGroup","_searchTree","cors","_invalidate","_mouseTrackHandler","_trackMouse","_currentShape","initClip","clearClip","setClip","beginPath","renderPoints","setTransform","loadElements","globalAlpha","renderTo","canvas","ctx","clearRect","setLineDash","setFill","setStroke","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","addColorStop","strokeStyle","lineWidth","mozDash","webkitLineDash","bezierCurveTo","closePath","fillText","strokeText","exportImage","namespaces","kvml","styleSheets","createStyleSheet","addRule","attachReference","setStyle","mapOpacityTo","observer","clipRect","clipBBox","_attachTo","createDocumentFragment","refreshTransform","refreshOpacity","currentOpacity","mapGradient","mapFillColor","mapLinearGradient","supportVML","mapRadialGradient","addColors","baseColor","createFillNode","createTransformNode","setCoordsize","setPathData","pathData","createDataNode","setString","setSrc","vml","ArcDataNode","CircleTransformNode","FillNode","ImageFillNode","ImagePathDataNode","MultiPathDataNode","PathDataNode","RectDataNode","StrokeNode","TextPathNode","TextPathDataNode","TransformNode","_clipbox","_stackingContext","_avoidLinks","nextSibling","pageNum","keepTogether","repeatHeaders","setStartBefore","setEndBefore","extractContents","pageClassName","selectNodeContents","setEnd","splitText","_destructive","beforePageBreak","forcePageBreak","cssRules","styleSheet","getPrototypeOf","setProperty","tl","tr","br","bl","angle","atan","backgroundPosition","getClientRects","textAlign","disc","exportDOMVisual","setStart","underline","overline","textOverflow","_dom_zIndex","getFontFaces","easing","_stopped","AnimationFactory","FETCH_JOB_ATTRIBUTES","FETCH_JOB_ATTRIBUTE","RECEIVE_JOB_ATTRIBUTES","RECEIVE_JOB_ATTRIBUTE","RECEIVE_ACTIVE_ORG_JOB_ATTRIBUTE","RECEIVE_AVAILABLE_ORG_JOB_ATTRIBUTE","REMOVE_AVAILABLE_ORG_JOB_ATTRIBUTE","REMOVE_ACTIVE_JOB_ATTRIBUTE","ADD_JOB_ATTRIBUTE","RESET_JOB_ATTRIBUTE","RECEIVE_JOB_ATTRIBUTE_ERROR","fetchJobAttributes","fetchJobAttribute","removeAvailableOrgJobAttribute","removeActiveJobAttribute","receiveJobAttributeErrors","resetJobAttribute","createJobAttribute","updateJobAttribute","jobAttr","jobAttrLink","displayFlash","jobAttributeLinkRecord","activateJobAttribute","removeJobAttribute","destroyJobAttribute","jobAttrId","LOCATION_CHANGE","locationChange","partial","routerActions","selectById","accessesById","userAccesses","dirtyUserAccesses","accessByOrgId","accessConfig","defaultDefaultsRecordProps","DefaultsRecord","defaultDefaultOptionProps","DefaultOptionRecord","getTimezoneString","defaultOptionFromJSON","EstimateRecord","getCreatedLineItemDocuments","rawEstimateData","duplicatedEstimate","duplicatedGroup","dGroup","duplicatedLineItem","dLineItem","rawDocuments","timezoneOffset","timezoneString","hours","markupMultiplier","updateDiscounts","defaultEstimateProps","customer_phone","CommissionMethod","productsById","cachedProductByUuid","cachedProductChildren","cachedRootProducts","priceListId","cachedProducts","cachedOpeningParentProducts","kinds","matchedCount","cachedProductLeaves","cachedAncestors","cachedAncestorDocuments","ancestralName","screenShareService","tokenUrl","participant_id","exists","SlideRecord","defaultSlideProps","PresentationRecord","defaultPresentationProps","FLASH_ADD_ALERT","FLASH_REMOVE_ALERT","FLASH_REMOVE_ALERT_EXTERNAL_ID","SET_JOB","OPEN_SEND_INVITE_MODAL","CLOSE_SEND_INVITE_MODAL","OPEN_WEB_CAM_MODAL","CLOSE_WEB_CAM_MODAL","NOTIFIER_ADD_MESSAGE","NOTIFIER_REMOVE_MESSAGE","OPEN_IMPORT_MODAL","CLOSE_IMPORT_MODAL","SET_NAV_DISPLAY","SET_SAVED_LOCATION_STATE","SET_PAGE_TITLE","removeFlashAlertByExternalId","_workDays","workWeekStart","workWeekEnd","calculateDateRange","_currentTime","_currentTimeMarkerUpdater","_updateCurrentTimeMarker","currentTimeMarker","useLocalTimezone","updateInterval","_currentTimeUpdateTimer","_columnCountInResourceView","_timeSlotGroups","_addTimeSlotGroup","_dates","_addDaySlotGroup","_daySlotGroups","minorTickCount","majorTick","majorTimeHeaderTemplate","minorTimeHeaderTemplate","slotTemplate","allDaySlotTemplate","allDayEventTemplate","dateHeaderTemplate","showFullDay","showWorkDay","_allDayUserEvents","_forTimeRange","_addCellsToContent","_isWorkDay","_allDayHeaderHeight","_timeSlotIndex","_dateSlotIndex","_positionAllDayEvent","_headerColumnCount","slotIndex","_arrangeColumns","middle","singleDay","_isInTimeSlot","_updateAllDayHeaderHeight","_height","_eventsByResource","MultiDayView","DayView","WeekView","WorkWeekView","ul","_timeViewID","_optionID","_popup","_heightHandler","dataBind","_html","_distinctSelection","_parse","_adjustListWidth","borderLeftWidth","borderRightWidth","previousSibling","lastChild","TimeView","timeView","_arrow","RECEIVE_ESTIMATE_LINE_ITEM","DUPLICATE_ESTIMATE_LINE_ITEMS","PUSH_DOCUMENT_ID","orgService","orgPostData","targetId","source_org_id","data_types","FETCH_FINANCE_APPLICATION","RECEIVE_FINANCE_APPLICATION","SET_OFFER_STATUS","RECEIVE_APPLY_URL","RECEIVE_FINANCE_APPLICATIONS","fetchFinanceApplication","setOfferStatus","receiveApplyUrl","receiveFinanceApplications","finance_application","callback_urls","failureUrl","successUrl","preQualSuccessUrl","preQualFailureUrl","transformPostData","finance_applications","recalculateFinanceOption","recalculate","selectOffer","financeApplicationId","salesforceJobMappingValues","salesforceToken","salesforceJobMappingRootValues","getCurrentOrgAuthorization","_notifyChange","aggregate","hasSubgroups","We","Ye","Je","_attachBubbleHandlers","_loaded","hasChildren","ue","qe","je","Le","Ge","Be","Ve","Qe","Ke","$e","Xe","wrapAll","reduceRight","iterator","_parent","_handlers","string","_initializers","localeCompare","asc","__position","doesnotstartwith","doesnotendwith","filterExpr","operators","and","or","isequalto","equalto","equal","notequals","isnotequalto","notequalto","notequal","islessthan","lessthan","less","islessthanorequalto","lessthanequal","isgreaterthan","greaterthan","greater","isgreaterthanorequalto","greaterthanequal","notsubstringof","normalizeFilter","compareFilters","orderBy","orderByDescending","_sortForGrouping","average","filterCallback","inmemory","_dataAccessFunction","_prefetch","_pristineData","_ranges","_pristineTotal","_pageSize","_page","_sort","_group","_aggregate","_total","_shouldDetachObservableParents","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","readers","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverGrouping","serverAggregates","batch","online","offlineData","_isServerGrouped","_push","_readData","_flatData","_storeData","_addRange","_process","_observeView","_wrapInEmptyGroup","autoSync","_updatePristineForModel","_removeItems","_eachItem","_removePristineForModel","_removeModelFromRanges","_updateRangesLength","destroyed","_sendSubmit","_send","_accept","_cancelModel","_markOfflineUpdatesAsDirty","__state__","hasChanges","models","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_params","_queueRequest","_dequeueRequest","_readAggregates","_aggregateResult","_skip","errorThrown","_requestInProgress","_pending","_shouldWrap","_changeHandler","_updateTotalForAction","_calculateAggregates","_take","_queryProcess","_mergeState","_currentRangeStart","_query","_emptyAggregates","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_timeStamp","_currentRequestTimeStamp","_rangeExists","prefetch","_mergeGroups","currentRangeStart","_prefetchSuccessHandler","_multiplePrefetch","optgroup","_childrenOptions","_updateChildrenField","loaded","_childrenLoaded","_find","_prefetching","_syncWithDataSource","setViewSize","viewSize","_recalculate","useRanges","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","syncDataSource","_expanding","_syncPending","_firstItemUid","batchSize","endreached","prefetching","prefetched","LocalTransport","RemoteTransport","Cache","DataReader","Buffer","BatchBuffer","RECEIVE_SEGMENT","SET_SEGMENT","RESET_SEGMENT","DELETE_SEGMENT","SET_GATE_COUNT","SET_GATE_LENGTH","updateTotals","measurementRelations","FETCH_MEASUREMENT","RECEIVE_MEASUREMENT","SET_MEASUREMENT_LOADED","UPDATE_ROOF_WASTE","UPDATE_SLOPED_ROOF_WASTE","UPDATE_LINE_MEASUREMENTS","UPDATE_SIDING_WASTE","UPDATE_SUNROOM","UPDATE_SUNROOM_WALL","UPDATE_SUNROOM_KNEE_WALL","UPDATE_RAPID_AREA","UPDATE_SATELLITE","UPDATE_POOLS","UPDATE_DECKS","UPDATE_WINDOWS","UPDATE_DOORS","UPDATE_ROOMS","UPDATE_ELEVATIONS","UPDATE_WALL_FACADES","RESET_MEASUREMENT","SET_EDITING","INIT_ADD_MEASUREMENT","UPDATE_ADD_MEASUREMENT","SAVE_ADD_MEASUREMENT","fetchMeasurement","setMeasurementLoaded","measurementData","relation","createDirect","imageParams","queryNumber","queryString","messageParams","toolService","toolForm","FETCH_ORG_TOOLS","FETCH_TOOL","RECEIVE_ORG_TOOLS","RECEIVE_TOOL","REMOVE_ORG_TOOL","REMOVE_TOOL","RECEIVE_TOOL_ERROR","fetchTool","receiveToolError","fetchTools","receiveTools","removeOrgTool","removeTool","addTool","updateTool","removeImage","archiveTool","View","Loader","collapsible","historyCallback","viewEngine","_historyNavigate","_historyReplace","closeActiveDialogs","after","viewShow","loadStart","loadComplete","sameViewRequested","viewTypeDetermined","_setPortraitWidth","_setupAppLinks","navigateToInitial","portraitWidth","bindToRouter","backButtonPressed","hideLoading","showLoading","changeLoadingMessage","_mouseup","_appLinkClick","_focusout","_arrows","_input","_text","_toggleText","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keypress","_paste","_adjust","_focusin","_spinning","release","_focusing","_format","_culture","accessKey","_key","_step","metaKey","_numericRegex","_separator","_floatRegExp","_placeholder","DateFormat","formatString","CurrencyFormat","fractionDigits","includeDollarSign","PercentageFormat","UppercaseWord","word","uuidRegex","SnakeToCamelKeys","newData","transformed","SnakeToCamel","CamelToSnake","underScoreNumbers","CamelToSnakeKeys","StylizedQuotesToSimpleQuotes","SnakeToPascal","toTitleCase","replaceAll","CommonTitles","commonTitles","SelectMobilePhoneNumber","phoneNumbers","formatPhoneNumber","SnakeToCapitalized","toUnderscore","RECEIVE_POOL","EDIT_POOL","_hideHeaders","_setColspan","_getRowCount","_getGroupsCount","_addContent","_addTimeSlotsCollections","_addTimeSlotToCollection","_getVerticalGroupCount","_getVerticalRowCount","maxRowCount","_renderEvent","occurrence","slotRange","rowIndex","addContinuousEvent","_arrangeRows","_verticalCountForLevel","_horizontalCountForLevel","_updateCurrentVerticalTimeMarker","_adjustLeftPosition","_prevGroupSlot","_nextGroupSlot","_verticalMethod","_isHorizontallyGrouped","_changeVerticalViewPeriod","_changeHorizontalViewPeriod","TimelineGroupedView","TimelineGroupedByDateView","eventMinWidth","defaultRowText","_calculateSlotRanges","_setContentWidth","_slotRanges","_setRowsHeight","_positionEvents","_getBottomRowOffset","_refreshSlots","_adjustEvent","rectLeft","rectRight","TimelineView","TimelineWeekView","TimelineWorkWeekView","TimelineMonthView","appCallbacks","setupChannelListeners","onNewMessage","onMessageUpdate","handleJoinResponse","onInitialMessages","records","app_messages","listMessages","page_size","dismissMessage","markAction","markRead","DocumentStateRecord","responseIds","deletedId","RECEIVE_TOKEN","FETCH_TOKEN","EDIT_TOKEN_DATA","RESET_TOKEN","RECEIVE_AUTHORIZED","FETCH_AUTHORIZED","SET_AUTHORIZED_LOADED","fetchToken","editTokenData","resetToken","receiveAuthorized","fetchAuthorized","setAuthorizedLoaded","_getState","updateCreateToken","throwError","deleteToken","_press","_release","attachEvent","scrollSize","virtual","_virtualMin","_virtualMax","getTotal","centerOffset","forcedMinScale","maxScale","dragMove","resistance","translateAxis","gesturestart","gesture","gesturechange","webkitTransformOrigin","_saveCoordinates","dropTarget","_over","_drop","dropped","destroyGroup","_activated","hold","_drag","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","currentTargetOffset","scopeFrom","_elementUnderCursor","_cursorElement","_scrollableParent","_lastEvent","_processMovement","_scrollCompenstation","_scrollVelocity","_scrollInterval","_withDropTarget","targetElement","_autoScroll","initialTarget","containerBoundaries","utils","autoScrollVelocity","scrollableViewPort","findScrollableParent","_hide","RECEIVE_DOOR","EDIT_DOOR","RESET_DOORS","SET_CURRENT_JOB_ID","SAVING_JOB","RECEIVE_JOB","FETCH_JOB","SWIPE_JOB","ADDING_PHOTO","ADDED_PHOTO","CANCEL_PHOTO","CANCEL_SAVING_JOB","SET_JOB_LOADED","ADD_JOB_TO_PAGE","JOB_RECEIVE_ESTIMATE","SET_SELECTED_ESTIMATE_ID","SET_JOB_QUERY","REVERT_JOB_QUERY","SET_LAST_SAVED_JOB_QUERY","RESET_LAST_CHANGES_JOB_QUERY","RESET_JOB_QUERY","SET_JOB_STATES","EDIT_RESOURCE_DISPLAY","SET_RESOURCE_DOCUMENTS","INCREASE_COUNT","DECREASE_COUNT","EDIT_JOB","RECEIVE_STATS","SET_SAMPLE_JOBS","setJobLoaded","swipeJob","addingPhoto","cancelPhoto","addedPhoto","savingJob","addJobTopage","cancelSavingJob","editResourceDisplay","setResourceDocuments","setSampleJobs","getJobs","indicator","updateJob","assignJob","processJobImportTask","loadSampleJobs","sample_jobs","createSampleJobs","userAssigned","sampleTypes","TaskPoller","poll","timedOut","FETCH_CHECKOUT_TOKEN","RECEIVE_CHECKOUT_TOKEN","RECEIVE_CHECKOUT_TOKEN_ERROR","RECEIVE_GENERAL_ERROR","fetchCheckoutToken","receiveCheckoutToken","receiveCheckoutTokenError","recordChanged","replaceRecordValues","objectName","RECEIVE_PRICE_LIST","xpathToMember","evaluate","parseDOM","parseXML","XmlDataReader","defaultMetaPaginationProps","MetaPaginationRecord","PageRecord","defaultPageProps","queryParamsFromJSON","QueryParamsRecord","defaultQueryParams","OPEN_QUICKMEASURE_MODAL","CLOSE_QUICKMEASURE_MODAL","OPEN_ROOF_SCOPE_MODAL","CLOSE_ROOF_SCOPE_MODAL","OPEN_PLNAR_MODAL","CLOSE_PLNAR_MODAL","RECEIVE_PRODUCT_OPTION","OpeningEstimationStateRecord","oeId","webpackAsyncContext","thumb","UrlRecord","large","FileRecord","getBase64","defaultFileProps","defaultUrlProps","estimateFinancedAmount","estimateUnsavedId","toEstimateOverview","estimateGroupsById","countLineItems","lineItemsEstimate","lineItemTotals","calculateLineItemSum","toEstimateJson","calculateEstimateCost","estimateOverview","jobEstimateSignedDocuments","slideEstimate","estimateMetadata","PreferenceRecord","defaultPreferenceProps","SettingsRecord","defaultSettingsProps","orgMetadataFromJSON","OrgMetadataRecord","defaultOrgMetadataProps","gaf_id","getEstimateName","getEstimatorName","getContractName","getFinanceName","getFinanceOptionsName","getPricePresentationName","getSubtotalName","getTotalName","getDescriptionName","getPrefConfig","getSettingsAcl","includeCheck","orgNameAddress","cityState","JobAttributeTypes","orgJobAttributeLinkKey","orgJobAttributeLinkIdName","defaultOrgProps","base36_id","job_count","org_count","user_count","emptyOrgValue","RECEIVE_PRODUCT_OPTION_GROUP","FETCH_REPORT","RECEIVE_REPORT","SET_REPORT_LOADED","RECEIVE_REPORTS","FETCH_PRICING_REPORT","SET_PRICING_REPORT_LOADED","RECEIVE_PRICING_REPORT","fetchReport","setReportLoaded","receiveReports","fetchPricingReport","setPricingReportLoaded","receivePricingReport","reportableId","reportableType","getPricing","fences_attributes","segments_attributes","FETCH_FENCING_BY_MEASUREMENT_ID","CREATE_FENCING_BY_MEASUREMENT_ID","RECEIVE_FENCING","RECEIVE_FENCING_ERRORS","SET_FENCING","DELETE_FENCING","UPDATE_TOTALS","RESET_FENCING","deleteFencing","fetchFencingByMeasurementId","receiveFencing","receiveFencingErrors","createFencingForMeasurementId","createOnNotFound","fencingFormData","lastSavedWindows","lastSavedWindow","windowsChanged","mergeDeepOverwriteArrays","isImmutable","mergeWith","removeDuplicates","intersectLists","SET_PAYMENT_ERROR","CLEAR_LAST_PAYMENT","SET_PROVIDER_LOADING","SET_PROVIDER_VALID","SET_PROVIDER_SUBMITTING","MAKE_PAYMENT","RECEIVE_PAYMENT","SET_SENDING_RECEIPT","setSendingReceipt","RECEIVE_TASK","new_task","disableFlashAlert","$templateCache","createAction","_getColumns","_getGroupsInDay","_getSumOfItemsForDate","_renderTaskGroupsCells","_renderDateCell","_dateTemplate","_renderDates","_getParents","_getGroupsByDate","_renderTaskGroups","_compareDateGroups","_groupTemplate","_groupsByDate","AgendaGroupedView","AgendaGroupedByDateView","AgendaView","_eventTemplate","eventDateTemplate","eventGroupTemplate","_timeTemplate","eventTimeTemplate","_tasks","rowSpan","_createGroupConfiguration","_eventsList","EstimateDiscountRecord","toDiscountData","discountData","freq","weekStart","tzid","exdates","until","monthDays","yearDays","weekDays","weeks","positions","_hasRuleValue","SU","MO","TU","WE","TH","FR","SA","_hour","_startPeriod","hourly","daily","weekly","monthly","yearly","_endPeriod","dayInYear","weekInYear","weekInMonth","numberOfWeeks","frequencies","firstWeekDay","_namespace","repeatEvery","repeatOn","of","mobileLabel","offsetPositions","third","fourth","weekdays","weekday","weekend","_initInterval","kendoNumericTextBox","_weekDayRule","_weekDay","_weekDayOffset","_weekDayView","_initWeekDay","_initWeekDays","_initMonthDay","_monthDay","NumericTextBox","_initCount","_count","_initUntil","_until","kendoDatePicker","_initFrequency","_initContainer","_frequency","_initView","frequency","weekDayCheckBoxes","_initMonth","_period","_month1","_month2","_toggleEnd","_buttonNever","_buttonCount","_buttonUntil","_toggleMonthDay","_toggleYear","_buttonMonthDay","_buttonWeekDay","_optionTemplate","_pane","_initRepeatButton","_initRepeatEnd","_defaultValue","endTitle","repeatTitle","headerTitle","repeatBy","dayOfMonth","_destroyView","_endFields","_repeatButton","_endButton","_endText","_initRepeatView","_initEndNavigation","_initEndView","endPattern","_monthSelect","deckId","RECEIVE_OPENING_ESTIMATION","DUPLICATE_OPENING_ESTIMATIONS","RECEIVE_ESTIMATE_FINANCE_OPTION","DUPLICATE_ESTIMATE_FINANCE_OPTIONS","ADD_FINANCE_OPTION","CALCULATE_FINANCE_OPTION","SET_ORG","RESET_ORG","SET_CURRENT_ORG_ID","FETCH_ORG","RECEIVE_ORGS","UPDATE_SETTINGS_CONFIG","UPDATE_PREF_CONFIG","UPDATE_DOCUMENT_ORDER","CLEAR_ORGS","ADD_TO_DOCUMENT_ORDER","ADD_SIGNATURE_RECIPIENTS_INFO","UPDATE_SIGNATURE_RECIPIENT_INFO","resetOrg","fetchOrg","receiveOrgError","receiveOrgs","updateSettingsConfig","updatePrefConfig","updateDocumentOrder","addToDocumentOrder","addSignatureRecipientsInfo","updateSignatureRecipientInfo","updateCurrentOrg","orgRecord","syncIntegration","testIntegration","tokenRecord","splits","docRecord","filteredList","duplicateOrg","selectedDataTypes","selectedOrgs","sourceOrdId","us_states_abbreviation","FenceSegmentRecord","defaultFenceSegmentProps","emptyFenceSegmentRecord","SHOW_MESSAGE_MODAL","HIDE_MESSAGE_MODAL","RECEIVE_APP_MESSAGES","RECEIVE_APP_MESSAGE","UPDATE_APP_MESSAGE","ADD_APP_MESSAGE","SET_CHANNEL_INIT","receiveAppMessages","updateAppMessage","addAppMessage","setChannelInitialized","dismissed_at","action_at","read_at","page_number","checkDate","PhoneNumberRecord","defaultPhoneNumberProps","EstimateLineItemOptionRecord","defaultEstimateLineItemOptionProps","AddressRecord","toOneLiner","oneLiner","toCityStateZip","csz","toMultiLiner","toLatLng","defaultAddressProps","isNullOrUndefined","hiddenExtend","dst","getOwnPropertyNames","getNextSortOrder","RECEIVE_ELEVATION","FETCH_ELEVATIONS","RECEIVE_ELEVATIONS","SET_ELEVATIONS_LOADED","fetchElevations","receiveElevations","setElevationsLoaded","viewport","autosize","arrow","flipped","initialOpen","_itemId","_navigatable","_pageable","_crudHandlers","navigatable","altTemplate","_item","_unbindDataSource","_destroyEditable","pageable","pagerId","pager","Pager","Selectable","aria","blur","_modelFromElement","_closeEditable","EstimateFinanceOptionRecord","toCalculatedFinancing","defaultEstimateFinanceOptionProps","presentationsSelectedIds","Fetcher","user_includes","recovered","retryStatus","authHeader","statusText","retry","fetcher","analyticsFetcher","rsfFetcher","currentMeasurementId","currentMeasurement","currentLastSavedMeasurement","measurementChanged","imagesById","imagesProcess","lastSavedImages","imagesBooleanIds","lastSavedImage","imagesBoolean","allImagesBoolean","toImagesJson","SET_ACCESS","RESET_ACCESS","SET_ACCESS_ACL","RECEIVE_ACCESSES","UPDATE_FORM_ACL","UPDATE_FORM_RECORD","resetAccess","receiveAccesses","updateFormAcl","updateFormRecord","updateAccess","EstimateLineItemOptionStateRecord","optId","_evalTemplate","evalTemplate","_fragments","_createElement","_eachFragment","fragments","containers","_createContainer","showIn","running","parseUpdateForm","defaultProps","auth0RefreshToken","_auth0Updater","setupAuth0Client","_oktaUserManager","issuer","clientId","redirectUri","postLogoutRedirectUri","scopes","pkce","services","autoRenew","autoRemove","tokenManager","expireEarlySeconds","currentOktaUserManager","_userManager","oktaUserManager","domain","useRefreshTokens","cacheLocation","authorizationParams","redirect_uri","audience","currentUserManager","tokenType","refreshObj","rsfAuth","rsfAuthObj","rsfAuthJson","idp","clearRsfAuth","clearRefreshToken","clearUser","signOut","_refreshTokenInner","warn","retryError","refreshInMs","bufferMs","loginState","getWithRedirect","rsfUser","parseFromUrl","accessToken","getUserInfo","newToken","oldToken","iss","revokeAccessToken","getOrRenewAccessToken","occToken","ignoreCache","measurementIdFencingId","measurementFencing","fencingFenceIds","fencingFences","fById","measurementIdFullFencing","segmentsById","sId","fencingLastSavedById","measurementFencingDirtyTree","RECEIVE_EVENT_RESULT_REASON","RECEIVE_EVENT_RESULT_REASONS","receiveEventResultReasons","getOrgPaymentTermTemplates","validationService","validationData","RECEIVE_VALIDATION","FETCH_ORG_VALIDATIONS","RECEIVE_ORG_VALIDATIONS","ORG_VALIDATIONS_LOADED","fetchValidations","receiveValidations","validationsLoaded","RECEIVE_FENCE","SET_FENCE","RESET_FENCE","DELETE_FENCE","collisions","downEvent","_hovered","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","adjustSize","_hideDirClass","_toggleResize","isFixed","_openAnimation","_showDirClass","_resizeTimeout","_scrollableParents","_fit","_flip","parentsUntil","_align","offsetParent","segmentFenceId","extendedErrorMsg","OneLookActions","receiveLocations","preOpenedWindow","project_amount","project_type","given_name","family_name","street","region","billing_street","billing_locality","billing_region","billing_postal_code","source_platform","source_platform_id","project_numbers","kiosk","roofFaceId","JobAssignmentRecord","defaultJobAssignmentProps","status_changed","timeFormat","_icons","_midnight","_calculateMidnight","dateButtonText","timeButtonText","_timeIcon","_timeSelected","defaultEstimateSignedDocumentRecord","EstimateSignedDocumentRecord","SET_CURRENT_ID","VALIDATE","INIT_RECIPIENT_INFO","INIT_RECIPIENTS","CREATE_SIGNED_DOCUMENT","CLEAR_SIGNED_DOCUMENT","createSignedDocument","clearSignedDocument","UPDATE_DOCUMENT","estimateOverviews","estimateDocuments","estimateSignedDocumentFromJSON","validateDocument","detailedError","orgContractName","paymentTermTemplateService","FETCH_ORG_PAYMENT_TERM_TEMPLATES","FETCH_PAYMENT_TERM_TEMPLATE","RECEIVE_ORG_PAYMENT_TERM_TEMPLATES","RECEIVE_PAYMENT_TERM_TEMPLATE","REMOVE_ORG_PAYMENT_TERM_TEMPLATE","REMOVE_PAYMENT_TERM_TEMPLATE","RECEIVE_PAYMENT_TERM_TEMPLATE_ERROR","fetchPaymentTermTemplate","receivePaymentTermTemplateError","fetchPaymentTermTemplates","receivePaymentTermTemplates","removeOrgPaymentTermTemplate","removePaymentTermTemplate","INIT_PAYMENT_REQUEST","FETCH_PAYMENT_REQUEST","RECEIVE_PAYMENT_REQUEST","RECEIVE_PAYMENT_REQUESTS","fetchPaymentRequest","receivePaymentRequests","payment_request","payment_requests","itemWrapper","sprite","wrapperCssClass","textAttributes","encoded","contentAttributes","contentUrl","_animations","_updateClasses","_tabPosition","_scrollable","contentUrls","_keyDownProxy","setActive","tabGroup","contentHolder","activateTab","_endItem","_focused","dataContentField","dataContentUrlField","dataImageUrlField","dataUrlField","dataSpriteCssClass","spriteCssClass","tabPosition","scrollWrap","_scrollableModeActive","_scrollPrevButton","_scrollNextButton","_toggleDisabled","ajaxRequest","_create","tabs","_updateContentElements","contentElements","contentAnimators","tabsHeight","_setContentElementsDimensions","_sizeScrollWrap","deactivateTab","_scrollableAllowed","_nowScrollingTabs","_scrollTabsByDelta","_toggleScrollButtons","_scrollTabsToItem","finish","inRequest","ajaxSettings","progressUpload","noProgress","lengthComputable","stopProgress","tabStrip","estimateLineItemOptionsById","estimateLineItemOptionsProcess","optionId","toEstimateLineItemOptionsJson","estimate_comparison_links_attributes","FETCH_ESTIMATE_COMPARISON","RECEIVE_ESTIMATE_COMPARISON","BUILD_ESTIMATE_COMPARISON","SHOW_DRAWER","HIDE_DRAWER","VIEW_ESTIMATE_COMPARISON","ADD_ESTIMATE_COMPARISON_LINK","REMOVE_ESTIMATE_COMPARISON_LINK","fetchEstimateComparison","ecls","tempUrl","AppMessageContentRecord","AppMessageRecipientRecord","app_message_id","appMessageRecipientFromJSON","appMessageContentFromJSON","isRead","baseCleanProps","listParams","DocumentRecord","setDisplay","isMeasurementFile","isPdfFile","defaultDocumentProps","file_size","wallFacadeId","unarchive","jobCsvData","loadSamples","createSample","user_assigned_id","sample_types","exportJobs","urlWithParams","estimateGroupsProcess","lineItemsEstimateGroup","toEstimateGroupsJson","currentEstimateGroups","skuRecord","skuId","FETCH_SKU","RECEIVE_SKU","CLEAR_SKU","UPDATE_VALUE","fetchSku","clearSku","updateValue","saveOrCreateOrDestroy","skuValue","documentsById","lastSavedDocument","jobResourceDocument","rd","documentsSelectedIds","booleanChecked","toDocumentsJson","estimateLineItemsById","estimateLineItemProcess","estimateLineItemImage","imgs","toEstimateLineItemsJson","defaultProductToOptionGroupLinkProps","required_option_group","ProductToOptionGroupLinkRecord","ProductRecord","ptogl","findProductBracket","perUI","bracketMatch","widthHeightBracketMatch","widthHeightMatch","defaultProductProps","parent_discountable","parent_markupable","folderParams","FETCH_FOLDER","FETCH_FOLDERS","RECEIVE_FOLDER","SET_FOLDER_LOADED","ARCHIVE_FOLDER","RESET_FOLDER","RECEIVE_FOLDERS","CREATE_FOLDER","fetchFolder","setFolderLoaded","receiveFolders","setOptionsFolderId","listFoldersByName","rootFolder","folderableCheck","byName","batchUpdateOrCreateFolder","updatedFolder","StoreRegistry","_kvStore","fun","asgn","JobRecord","fetchCustomerAddress","hasIntegration","JobsPageRecord","defaultJobProps","cover_image_uuid","document_count","image_count","currentSignedDocumentId","kRebind","_cleanUp","replaceChild","kNgDisabled","PanelBar","kNgReadonly","kNgModel","$angular_setLogicValue","$setDirty","$angular_getLogicValue","$render","$viewValue","$setViewValue","AutoComplete","$isEmpty","MutationObserver","classList","attributeName","ComboBox","kNgDelay","unresolved","$root","kOptions","kDataSource","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","ContextMenu","require","Editor","DatePicker","DateTimePicker","TimePicker","ColorPicker","MaskedTextBox","Validator","MobileButton","MobileBackButton","MobileDetailButton","ListView","MobileListView","ActionSheet","kScopeField","scopeField","$angular_scope","$angular_init","$$kendoScope","$new","selectedDataItems","$angular_makeEventHandler","kendoEvent","angularDataItem","terminal","_instance","TreeMap","MobileScrollView","Grid","outerHTML","dateFields","PaymentTermItemKindList","breakdownFromJSON","PaymentTermTemplateRecord","paymentTermItemFromJSON","forceUuid","PaymentTermItemRecord","PaymentTermBreakdownRecord","defaultPaymentTermBreakdownProps","defaultPaymentTermItemProps","defaultPaymentTermTemplateProps","EstimateLineItemRecord","isDiscountable","isMarkupable","defaultEstimateLineItemProps","_marquee","_lastActive","_tap","_isElement","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","useAllItems","_selectElement","_invalidateSelectables","resetTouchEvents","continuousItems","cell","_validateProxy","_validate","editors","_validationEventInProgress","validatable","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_prev","_word","_span","_mobile","_ignoreCase","_filterHeader","_aria","_enable","_oldIndex","_initialIndex","requireValueMapper","_initList","_cascade","_isSelect","_textAccessor","cascadeFromField","minLength","enforceMinLength","valueTemplate","optionLabelTemplate","groupTemplate","fixedGroupTemplate","_listOptions","_accessors","hasOptionLabel","_allowOpening","filterInput","_resizeFilterInput","_focusItem","_open","_filterSource","_focusElement","_optionLabelDataItem","_clearFilter","_accessor","_request","_valueSetter","_isFilterEnabled","isFiltered","_fetchData","_optionLabelText","_assignInstance","_buildOptions","unifyType","_customOption","_custom","_listBound","_presetValue","_renderFooter","_renderNoData","_toggleNoData","_resizePopup","_makeUnselectable","_fetch","_selectValue","_hideBusy","_listChange","_filterPaste","_search","_focusinHandler","_prevent","_focusoutHandler","_getElementDataItem","_typingTimeout","_wrapperMousedown","_wrapperClick","_firstItem","_lastItem","_matchText","_shuffleData","_selectNext","_popupOpen","dataItemByIndex","getElementIndex","_userTriggered","MSPointers","_searchByWord","_inputValue","_get","focusFirst","_resetOptionLabel","focusLast","_nextItem","focusNext","_prevItem","focusPrev","highlightFirst","scrollToIndex","_dataValue","_triggerCascade","accesskey","unselectable","_clearSelection","getFullName","accessFromJSON","AccessRecord","defaultAccessProps","defaultUserProps","time_zone","password_confirmation","emptyUserValue","emptyAccessValue","_listMousedown","_noData","_initValue","footerTemplate","headerTemplate","noDataTemplate","_activateItem","_deactivateItem","selectedItemChange","VirtualList","StaticList","_setListValue","_updateSelectionState","_hideClear","_showClear","_clearValue","_clearText","_cascading","setDSFilter","_angularElement","noData","suggest","typing","_offsetHeight","prevAll","autoWidth","_openHandler","_closeHandler","_calculateGroupPadding","_calculatePopupHeight","_cascadeTriggered","_triggerChange","_valueBeforeCascade","_requestStartHandler","_requestEndHandler","valueMapper","_initial","_parentWidget","_cascadeSelect","_accessorInput","_accessorSelect","_busy","_showBusy","_requestEnd","focusout","scrollWith","_cascadeHandlerProxy","_cascadeHandler","_selectedValue","_toggleCascadeOnFocus","_cascadeChange","_selectedIndices","_dataItems","_values","_getter","_onScroll","_scrollId","_renderHeader","_fixedHeader","_getValues","_valueGetter","focusIndex","skipUpdate","_skipUpdate","_deselectFiltered","_deselect","indices","_valueComparer","_valueDeferred","_valueIndices","_valueExpr","_valueType","_dataItemPosition","_normalizeIndices","_firstVisibleItem","isGrouped","_renderItem","newGroup","_selected","_lastDSFilter","skipUpdateOnBind","unchanged","_bound","hasIntegrations","eventHasCRM","eventColor","jobTabColor","SignedDocumentRecord","allSigned","defaultSignedDocumentProps","signed_document_id","quickMeasureProductCodes","imperial_uom","roof_face_area","wall_facade_area","window_width","window_height","window_ui","window_area","door_width","door_height","door_ui","room_area","room_perimeter","room_inside_corner","room_outside_corner","room_threshold","deck_area","deck_perimeter","deck_wall_length","deck_railing_length","deck_railing_area","pool_area","pool_perimeter","pool_average_depth","pool_volume","interior_door_area","interior_area","interior_perimeter","interior_inside_corner","interior_outside_corner","interior_threshold","interior_ceiling_area","interior_ceiling_area_less_structures","interior_ceiling_perimeter","interior_ceiling_perimeter_less_structures","interior_door_count","interior_door_total_width","interior_exposed_structure_perimeter","interior_floor_area_less_structures","interior_floor_opening_total_width","interior_floor_plan_area","interior_floor_plan_perimeter","interior_floor_plan_perimeter_less_structures","interior_floor_plan_perimeter_without_openings","interior_object_count","interior_opening_count","interior_opening_total_area","interior_opening_total_width","interior_structure_total_ceiling_area","interior_structure_total_ceiling_width","interior_structure_total_floor_area","interior_structure_total_floor_width","interior_structure_total_wall_area","interior_volume","interior_wall_count","interior_wall_total_area","interior_wall_total_area_without_openings","interior_window_count","interior_window_total_area","metric_uom","jobBuilderTypes","occ","salesforce","lead_perfection","marketsharp","sales_rabbit","rsf_leads_api_lead","_optionsMap","_customOptions","_tagList","_textContainer","_loader","_clearButton","_tagID","tagList","_tagTemplate","tagMode","autoClose","maxSelectedItems","clearButton","currentTag","_currentTag","_selectedItemChange","_initialValues","tagTextTemplate","_inputFocus","_inputFocusout","_removeTag","_tagListClick","_clearClick","_retrieveData","_normalizeValues","_setOption","_showBusyHandler","_buildSelectedItems","_selectedItemIndex","_angularTagItems","_maxTotal","maxTotal","currentTotal","_innerWrapper","ImageRecord","defaultImageProps","handleErrors","firstLevel","itemCssAttributes","imageCssAttributes","imageAttr","contentCssAttributes","contentAttr","textClass","arrowClass","groupAttributes","groupCssClass","_initData","nextItemZIndex","_focusProxy","_preventClose","_removeHoverItem","_checkActiveElement","openOnClick","clicked","_documentClickHandler","_documentClick","closeOnClick","hoverDelay","popupCollision","renderGroup","_triggerEvent","kendoPopup","_isRootItem","_closurePrevented","_hoverItem","_findRootParent","hasFocus","_oldHoverItem","delegateTarget","pointerType","handled","enterKey","_moveHover","_itemBelongsToVertival","_itemHasChildren","_itemDown","_itemUp","_itemEsc","_itemRight","nextAll","_itemLeft","subGroup","renderItems","_wire","alignToAnchor","_showProxy","_closeTimeoutProxy","_eventOrigin","_targetChild","_triggerProxy","AclByUserAccess","usersById","crmUserCheckByOrgId","allowedAclByUserAccess","UserStateRecord","immutableUser","mergedUser","userIdAccessUid","EstimateComparisonRecord","ec","defaultEstimateComparisonProps","ReportRecord","defaultReportProps","delivered_at","RECEIVE_WINDOW","EDIT_WINDOW","RESET_WINDOWS","preferencesConfig","currentOrgPrefConfig","jobResultingOrgPrefConfig","jobResultingOption","jobResultingOptionWithProcessedSchema","baseSchema","baseUiSchema","processedSchema","requiredFields","fieldName","processedUiSchema","currentOrgPrefAcl","currentOrgSettingsAcl","currentOrgSettingsConfig","stateAndParams","presentModePreferencesConfig","editMode","exactValues","precisionExactValues","discountGroupContaining","__webpack_module_cache__","leafPrototypes","getProto","inProgress","dataWebpackPrefix","moduleId","cachedModule","undefined","__webpack_modules__","amdD","amdO","chunkIds","notFulfilled","Infinity","fulfilled","__esModule","def","enumerable","chunkId","globalThis","needAttach","scripts","nc","onScriptComplete","doneFns","toStringTag","nmd","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}